# Retrieve an Activity Source: https://docs.moonbase.ai/api-reference/activities/get GET /activities/{id} Retrieves the details of an existing activity. # List Activities Source: https://docs.moonbase.ai/api-reference/activities/list GET /activities Returns a list of activities. # Authentication Source: https://docs.moonbase.ai/api-reference/authentication Use API keys to authenticate API requests. The Moonbase API uses API keys to authenticate all requests. An API key is required for all requests. ## How authentication works API requests require valid API keys. The API returns specific errors based on authentication issues: * **Invalid request error**: Missing or invalid API key * **Authentication error**: Deleted or expired API key For more details about handling authentication errors, see the Moonbase [error handling guide](/api-reference/error-handling). ## Manage API keys Manage API keys in [organization settings](https://app.moonbase.ai/settings/api_keys). Keep API keys secret. Avoid client-side exposure. ## Using API key ### SDK authentication SDKs check for an API key in the `MOONBASE_API_KEY` environment variable. Override this default when creating a client. ```typescript TypeScript theme={null} import Moonbase from '@moonbaseai/sdk'; const client = new Moonbase({ apiKey: process.env['MOONBASE_API_KEY'], // This is the default and can be omitted }); ``` ```go Go theme={null} package main import ( "context" "fmt" "os" "github.com/moonbaseai/moonbase-sdk-go" "github.com/moonbaseai/moonbase-sdk-go/option" ) func main() { client := moonbase.NewClient( option.WithApiKey(os.LookupEnv("MOONBASE_API_KEY"), // This is the default and can be omitted ) } ``` ```ruby Ruby theme={null} require "bundler/setup" require "moonbase" moonbase = Moonbase::Client.new( api_key: ENV["MOONBASE_API_KEY"] # This is the default and can be omitted ) ``` ```python Python theme={null} import os from moonbase import Moonbase client = Moonbase( api_key=os.environ.get("MOONBASE_API_KEY"), # This is the default and can be omitted ) ``` ### Direct API calls When calling the API directly, use HTTP Bearer authentication: ```sh theme={null} curl --request GET \ --url https://api.moonbase.ai/v0/collections/people \ --header 'Authorization: Bearer MOONBASE_API_KEY' ``` ## Best practices * Never hardcode API keys * Use different API keys for different environments (development, staging, production) * Regenerate suspected compromised API keys * Never log API keys in errors or debug output # Create a Call Source: https://docs.moonbase.ai/api-reference/calls/create POST /calls Logs a phone call. # Retrieve a Call Source: https://docs.moonbase.ai/api-reference/calls/get GET /calls/{id} Retrieves the details of an existing call. # List Calls Source: https://docs.moonbase.ai/api-reference/calls/list GET /calls Returns a list of calls. # Create or Update a Call Source: https://docs.moonbase.ai/api-reference/calls/upsert POST /calls/upsert Find and update an existing phone call, or create a new one. # Create a Collection Source: https://docs.moonbase.ai/api-reference/collections/create POST /collections Creates a new collection with default fields (name, created_at, updated_at) and a default view. # Create a Field Source: https://docs.moonbase.ai/api-reference/collections/create-field POST /collections/{collection_id}/fields Creates a new field in a collection. # Delete a Collection Source: https://docs.moonbase.ai/api-reference/collections/delete DELETE /collections/{id} Permanently deletes a collection. # Delete a Field Source: https://docs.moonbase.ai/api-reference/collections/delete-field DELETE /collections/{collection_id}/fields/{id} Permanently deletes a field from a collection. # Retrieve a Collection Source: https://docs.moonbase.ai/api-reference/collections/get GET /collections/{id} Retrieves the details of an existing collection. # Retrieve a Field Source: https://docs.moonbase.ai/api-reference/collections/get-field GET /collections/{collection_id}/fields/{id} Retrieves the details of a field in a collection. # List Collections Source: https://docs.moonbase.ai/api-reference/collections/list GET /collections Returns a list of your collections. # Update a Collection Source: https://docs.moonbase.ai/api-reference/collections/update PATCH /collections/{id} Updates an existing collection. # Update a Field Source: https://docs.moonbase.ai/api-reference/collections/update-field PATCH /collections/{collection_id}/fields/{id} Updates an existing field in a collection. # Errors Source: https://docs.moonbase.ai/api-reference/error-handling Learn about the errors that can be returned by the API and how to handle them effectively. The Moonbase API returns structured error responses with standard HTTP status codes. ## Error response format All error responses follow a consistent JSON structure: ```json theme={null} { "errors": [ { "status": "400", "title": "Bad Request", "detail": "The 'email' field is required but was not provided." } ] } ``` Each error object contains: * `status`: The HTTP status code as a string * `title`: A brief, human-readable summary of the error * `detail`: A more detailed explanation of what went wrong (when available) ### Status Codes Responses include standard HTTP status codes to indicate success or failure: | Status Code | Title | Description | | ----------- | --------------------- | ------------------------------------------------------------ | | `400` | Bad Request | The request is malformed or contains invalid parameters. | | `401` | Unauthorized | Authentication failed or was not provided. | | `403` | Forbidden | Request understood; API key lacks resource access. | | `404` | Not Found | The requested resource doesn't exist. | | `409` | Conflict | Request conflicts with current state. | | `422` | Unprocessable Entity | The request was well-formed but contains semantic errors. | | `429` | Too Many Requests | Too many requests in a given amount of time (rate-limiting). | | `500` | Internal Server Error | Server-side issues for Moonbase | | `503` | Service Unavailable | The server is temporarily unavailable. | ## Response headers All responses from the API include an `x-request-id` header. This is a unique identifier for the request. When contacting support, include this ID. ## Common error scenarios ### Authentication errors (401) **Cause:** Missing, invalid, or expired API key **Solution:** * Verify API key is present in Authorization header * Check the API key is valid in [organization settings](https://app.moonbase.ai/settings/api_keys) * Regenerate if the key may have been compromised ### Rate limiting errors (429) **Cause:** Too many requests sent in a short time period **Solution:** * Implement exponential backoff retry logic * Space out requests to stay within rate limits * See the [rate limiting guide](/api-reference/rate-limiting) for detailed information ### Validation errors (422) **Cause:** Request data fails validation rules **Solution:** * Check the `detail` field in the error response for specific validation messages * Verify required fields are included * Ensure field values meet format and length requirements ### Server errors (500, 503) **Cause:** Temporary server-side issues for Moonbase **Solution:** * Retry the request after a brief delay * If the problem persists, contact support with the `x-request-id` from the API response * Implement error handling ## Best practices * **Log error details**: Capture both the status code and error message for debugging * **Include request IDs**: Log the `x-request-id` header for support requests * **Validate locally first**: Check required fields and formats before making API calls * **Implement error handling**: Handle all response scenarios # Upload a File Source: https://docs.moonbase.ai/api-reference/files/create POST /files Uploads a file to your library. The file must be 5 MB or smaller. # Delete a File Source: https://docs.moonbase.ai/api-reference/files/delete DELETE /files/{id} Permanently deletes a file. # Retrieve a File Source: https://docs.moonbase.ai/api-reference/files/get GET /files/{id} Retrieves the details of an existing file. # List Files Source: https://docs.moonbase.ai/api-reference/files/list GET /files Returns a list of files that you have uploaded. # Create a Form Source: https://docs.moonbase.ai/api-reference/forms/create POST /forms Creates a new form with an auto-generated collection and default fields. # Delete a Form Source: https://docs.moonbase.ai/api-reference/forms/delete DELETE /forms/{id} Permanently deletes a form. The backing collection is preserved. # Retrieve a Form Source: https://docs.moonbase.ai/api-reference/forms/get GET /forms/{id} Retrieves the details of an existing form. # List Forms Source: https://docs.moonbase.ai/api-reference/forms/list GET /forms Returns a list of your forms. # Update a Form Source: https://docs.moonbase.ai/api-reference/forms/update PATCH /forms/{id} Updates an existing form. # Create a Funnel Source: https://docs.moonbase.ai/api-reference/funnels/create POST /funnels Creates a new funnel. # Delete a Funnel Source: https://docs.moonbase.ai/api-reference/funnels/delete DELETE /funnels/{id} Permanently deletes a funnel. # Retrieve a Funnel Source: https://docs.moonbase.ai/api-reference/funnels/get GET /funnels/{id} Retrieves the details of an existing funnel. # List Funnels Source: https://docs.moonbase.ai/api-reference/funnels/list GET /funnels Returns a list of funnels. # Update a Funnel Source: https://docs.moonbase.ai/api-reference/funnels/update PATCH /funnels/{id} Updates a funnel. # Retrieve a Conversation Source: https://docs.moonbase.ai/api-reference/inbox-conversations/get GET /inbox_conversations/{id} Retrieves the details of an existing conversation. # List Conversations Source: https://docs.moonbase.ai/api-reference/inbox-conversations/list GET /inbox_conversations Returns a list of your conversations. # Add an attachment Source: https://docs.moonbase.ai/api-reference/inbox-messages/add-attachment POST /inbox_messages/{inbox_message_id}/attachments Add an attachment to a draft message. You can send either a multipart/form-data request with the raw file content, or a JSON request with a file ID. # Create a Draft Source: https://docs.moonbase.ai/api-reference/inbox-messages/create POST /inbox_messages Creates a new message draft. # Delete a Draft Source: https://docs.moonbase.ai/api-reference/inbox-messages/delete DELETE /inbox_messages/{id} Permanently deletes a message draft. # Retrieve a Message Source: https://docs.moonbase.ai/api-reference/inbox-messages/get GET /inbox_messages/{id} Retrieves the details of an existing message. # List Messages Source: https://docs.moonbase.ai/api-reference/inbox-messages/list GET /inbox_messages Returns a list of messages. # Remove an attachment Source: https://docs.moonbase.ai/api-reference/inbox-messages/remove-attachment DELETE /inbox_messages/{inbox_message_id}/attachments/{id} Removes an attachment from a draft message. # Update a Draft Source: https://docs.moonbase.ai/api-reference/inbox-messages/update PATCH /inbox_messages/{id} Updates an existing message draft. # Retrieve an Inbox Source: https://docs.moonbase.ai/api-reference/inboxes/get GET /inboxes/{id} Retrieves the details of an existing inbox. # List Inboxes Source: https://docs.moonbase.ai/api-reference/inboxes/list GET /inboxes Returns a list of shared inboxes. # Overview Source: https://docs.moonbase.ai/api-reference/introduction A quick tour of the Moonbase API. Moonbase's REST API enables programmatic access to your core Moonbase data, including people, organizations, deals, tasks, and more. ## Quick Start Let's make your first API request to list items from your Moonbase collections. You'll need an API key from your [organization settings](https://app.moonbase.ai/settings/api_keys) in Moonbase. Once you have it, set it as an environment variable: ```bash theme={null} export MOONBASE_API_KEY=your_api_key_here ``` Fetch and display all organizations from your collection. The SDK automatically handles pagination to retrieve all details of the organizations collection. ```typescript theme={null} import Moonbase from "@moonbaseai/sdk"; // Initialize the Moonbase client const moonbase = new Moonbase({ apiKey: process.env.MOONBASE_API_KEY, // default, can be omitted }); // This returns an AsyncIterator const organizations = moonbase.collections.items.list("organizations"); // Loop through the items and print the "name" value for await (const org of organizations) { console.log(org.values.name.data); } ``` Example output: ``` OrbGrid TechStart Inc Global Systems Innovate Labs ... ``` You'll need an API key from your [organization settings](https://app.moonbase.ai/settings/api_keys) in Moonbase. Once you have it, set it as an environment variable: ```bash theme={null} export MOONBASE_API_KEY=your_api_key_here ``` Fetch and display all organizations from your collection. The SDK automatically handles pagination to retrieve all details of the organizations collection. ```python theme={null} import os from moonbase import Moonbase moonbase = Moonbase( api_key=os.environ.get("MOONBASE_API_KEY"), # default, can be omitted ) # Auto-paginated: fetches all items across multiple pages organizations = moonbase.collections.items.list(collection_id="organizations") # Loop through items and access fields by their ref for org in organizations: print(org.values['name'].data) ``` Example output: ``` OrbGrid TechStart Inc Global Systems Innovate Labs ... ``` You'll need an API key from your [organization settings](https://app.moonbase.ai/settings/api_keys) in Moonbase. Once you have it, set it as an environment variable: ```bash theme={null} export MOONBASE_API_KEY=your_api_key_here ``` Fetch and display all organizations from your collection. The SDK automatically handles pagination to retrieve all details of the organizations collection. ```go theme={null} package main import ( "context" "fmt" "log" "os" "github.com/moonbaseai/moonbase-sdk-go" "github.com/moonbaseai/moonbase-sdk-go/option" ) func main() { client := moonbase.NewClient( option.WithAPIKey(os.Getenv("MOONBASE_API_KEY")), // default, can be omitted ) // Auto-paginated: fetches all items across multiple pages organizations := client.Collections.Items.ListAutoPaging( context.TODO(), "organizations", moonbase.ItemListParams{}, ) for organizations.Next() { org := organizations.Current() if nameField, exists := org.Values["name"]; exists { fmt.Println(nameField.Data.OfString) } } if err := organizations.Err(); err != nil { log.Fatalf("Error fetching organizations: %v", err) } } ``` Example output: ``` OrbGrid TechStart Inc Global Systems Innovate Labs ... ``` You'll need an API key from your [organization settings](https://app.moonbase.ai/settings/api_keys) in Moonbase. Once you have it, set it as an environment variable: ```bash theme={null} export MOONBASE_API_KEY=your_api_key_here ``` Fetch and display all organizations from your collection. The SDK automatically handles pagination to retrieve all details of the organizations collection. ```ruby theme={null} require "moonbase" moonbase = Moonbase::Client.new( api_key: ENV["MOONBASE_API_KEY"], # default, can be omitted ) organizations = moonbase.collections.items.list("organizations") organizations.auto_paging_each do |org| puts org.values[:name].data end ``` Example output: ``` OrbGrid TechStart Inc Global Systems Innovate Labs ... ``` You'll need an API key from your [organization settings](https://app.moonbase.ai/settings/api_keys) in Moonbase. Once you have it, set it as an environment variable: ```bash theme={null} export MOONBASE_API_KEY=your_api_key_here ``` Make a GET request to retrieve items from a collection: ```bash theme={null} curl https://api.moonbase.ai/v0/collections/organizations/items \ -H "Authorization: Bearer $MOONBASE_API_KEY" ``` Note: This returns the first page of results. To fetch additional pages, use the cursor from the response. A successful response returns a JSON object with your items: ```json theme={null} { "type": "list", "data": [ { "id": "1CLJt2ub4MavjpDF6NV14F", "type": "item", "values": { "name": {"type": "value/text/single_line", "data": "OrbGrid"}, "updated_at": {"type": "value/datetime", "data": "2025-02-17T16:00:00.000Z"} } }, { "id": "1CLJt2ub4MavjpDF6NV14G", "type": "item", "values": { "name": {"type": "value/text/single_line", "data": "TechStart Inc"}, "updated_at": {"type": "value/datetime", "data": "2025-02-17T16:00:00.000Z"} } }, { "id": "1CLJt2ub4MavjpDF6NV14H", "type": "item", "values": { "name": {"type": "value/text/single_line", "data": "Global Systems"}, "updated_at": {"type": "value/datetime", "data": "2025-02-17T16:00:00.000Z"} } } ... ], "meta": { "cursors": { "next": "eyJwYWdlIjoyfQ" } } } ``` To fetch the next page, include the cursor as a query parameter: ```bash theme={null} curl "https://api.moonbase.ai/v0/collections/organizations/items?after=eyJwYWdlIjoyfQ" \ -H "Authorization: Bearer $MOONBASE_API_KEY" ``` ## Core Concepts Continue exploring the Moonbase API with these resources: * [**SDKs**](/api-reference/libraries): Official Moonbase clients for TypeScript, Python, Go, and Ruby * [**Pagination**](/api-reference/pagination): Navigate large datasets efficiently with cursor-based pagination * [**Rate Limiting**](/api-reference/rate-limiting): Understand throughput limits and implement proper backoff strategies * [**Error Handling**](/api-reference/error-handling): Learn about error shapes and build resilient retry logic * [**Webhooks**](/webhook-reference/overview): Subscribe to real-time events for changes in your Moonbase data # Create an Item Source: https://docs.moonbase.ai/api-reference/items/create POST /collections/{collection_id}/items Creates a new item in a collection. # Delete an Item Source: https://docs.moonbase.ai/api-reference/items/delete DELETE /collections/{collection_id}/items/{id} Permanently deletes an item. # Retrieve an Item Source: https://docs.moonbase.ai/api-reference/items/get GET /collections/{collection_id}/items/{id} Retrieves the details of an existing item. # List Items Source: https://docs.moonbase.ai/api-reference/items/list GET /collections/{collection_id}/items Returns a paginated list of item pointers in a collection. Use the retrieve endpoint to get full item details including field values. # Merge Collection Items Source: https://docs.moonbase.ai/api-reference/items/merge POST /collections/{collection_id}/items/merge Merges two items into a single item. # Search Collection Items Source: https://docs.moonbase.ai/api-reference/items/search POST /collections/{collection_id}/items/search Returns a list of items in the collection that match the given filters. # Update an Item Source: https://docs.moonbase.ai/api-reference/items/update PATCH /collections/{collection_id}/items/{id} Updates an item. # Create or Update an Item Source: https://docs.moonbase.ai/api-reference/items/upsert POST /collections/{collection_id}/items/upsert Find and update an existing item, or create a new one. # SDKs Source: https://docs.moonbase.ai/api-reference/libraries Use the Moonbase API with an SDK in your preferred language. Moonbase provides SDKs for [TypeScript/JavaScript](https://github.com/moonbaseai/moonbase-sdk-typescript), [Python](https://github.com/moonbaseai/moonbase-sdk-python), [Go](https://github.com/moonbaseai/moonbase-sdk-go), and [Ruby](https://github.com/moonbaseai/moonbase-sdk-ruby). SDKs handle authentication, request formatting, and response parsing. Built-in retries handle rate limits and transient errors. ## Prerequisites * API key from [organization settings](https://app.moonbase.ai/settings/api_keys). * Review the [authentication guide](./authentication). Keep API keys secret. Avoid client-side exposure. ## Installation and usage Install the TypeScript SDK using npm: ```sh npm theme={null} npm install @moonbaseai/sdk ``` ```sh Yarn theme={null} yarn add @moonbaseai/sdk ``` ```sh pnpm theme={null} pnpm add @moonbaseai/sdk ``` ```sh Bun theme={null} bun add @moonbaseai/sdk ``` Usage: ```typescript theme={null} import Moonbase from '@moonbaseai/sdk'; const moonbase = new Moonbase({ apiKey: process.env.MOONBASE_API_KEY, // This is the default and can be omitted }); const collection = await moonbase.collections.retrieve('organizations'); console.log(collection.id); ``` View documentation, examples, and source code for the TypeScript SDK. Install the Python SDK using pip: ```sh theme={null} pip install --pre moonbase-sdk ``` Usage: ```python theme={null} import os from moonbase import Moonbase moonbase = Moonbase( api_key=os.environ.get("MOONBASE_API_KEY"), # This is the default and can be omitted ) collection = moonbase.collections.retrieve( id="organizations", ) print(collection.id) ``` View documentation, examples, and source code for the Python SDK. Install the Go SDK: ```sh theme={null} go get github.com/moonbaseai/moonbase-sdk-go@v0.1.0-alpha.2 ``` Usage: ```go theme={null} package main import ( "context" "fmt" "github.com/moonbaseai/moonbase-sdk-go" "github.com/moonbaseai/moonbase-sdk-go/option" ) func main() { client := moonbase.NewClient( option.WithAPIKey(os.Getenv("MOONBASE_API_KEY")), // This is the default and can be omitted ) collection, err := client.Collections.Get( context.TODO(), "organizations", moonbase.CollectionGetParams{}, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", collection.ID) } ``` View documentation, examples, and source code for the Go SDK. Install the Ruby SDK: ```ruby theme={null} gem "moonbase-sdk", "~> 0.1.0.pre.alpha.2" ``` Then run: ```sh theme={null} bundle install ``` Usage: ```ruby theme={null} require "bundler/setup" require "moonbase" moonbase = Moonbase::Client.new( api_key: ENV["MOONBASE_API_KEY"] # This is the default and can be omitted ) collection = moonbase.collections.retrieve("organizations") puts(collection.id) ``` View documentation, examples, and source code for the Ruby SDK. # Retrieve a Meeting Source: https://docs.moonbase.ai/api-reference/meetings/get GET /meetings/{id} Retrieves the details of an existing meeting. # List Meetings Source: https://docs.moonbase.ai/api-reference/meetings/list GET /meetings Returns a list of meetings. # Update a Meeting Source: https://docs.moonbase.ai/api-reference/meetings/update PATCH /meetings/{id} Adds a transcript, recording, or tags to an existing meeting. # Create a Note Source: https://docs.moonbase.ai/api-reference/notes/create POST /notes Create a new note. # Delete a Note Source: https://docs.moonbase.ai/api-reference/notes/delete DELETE /notes/{id} Permanently deletes a note. # Retrieve a Note Source: https://docs.moonbase.ai/api-reference/notes/get GET /notes/{id} Retrieves the details of an existing note. # List Notes Source: https://docs.moonbase.ai/api-reference/notes/list GET /notes Returns a list of your notes. # Update a Note Source: https://docs.moonbase.ai/api-reference/notes/update PATCH /notes/{id} Update an existing note. # Pagination Source: https://docs.moonbase.ai/api-reference/pagination Learn how to work with paginated responses. The Moonbase API uses cursor-based pagination for list endpoints that return multiple items. These endpoints return one page of results per API call. Each page contains up to 20 results by default. ## Response structure The API returns items in the `data` property of the response. Refer to the individual endpoints for the ordering of items since they vary based on the endpoint. **Example: First page (with more results)** ```json theme={null} { "type": "list", "data": [ { "id": "1CLJt2ub4MavjpDF6NV14F", "type": "item", "values": { "name": {"type": "value/text/single_line", "data": "OrbGrid"}, "updated_at": {"type": "value/datetime", "data": "2025-02-17T16:00:00.000Z"} } }, { "id": "1CLJt2ub4MavjpDF6NV14G", "type": "item", "values": { "name": {"type": "value/text/single_line", "data": "TechStart Inc"}, "updated_at": {"type": "value/datetime", "data": "2025-02-17T16:00:00.000Z"} } }, { "id": "1CLJt2ub4MavjpDF6NV14H", "type": "item", "values": { "name": {"type": "value/text/single_line", "data": "Global Systems"}, "updated_at": {"type": "value/datetime", "data": "2025-02-17T16:00:00.000Z"} } } ... ], "meta": { "cursors": { "next": "eyJpZCI6IjFDUDY0dkc2SkhuSkhLUEpLTDVpblcifQ" } } } ``` **Example: Middle page (both prev and next)** ```json theme={null} { "type": "list", "data": [ /* items omitted for brevity */ ] "meta": { "cursors": { "prev": "eyJpZCI6IjFDUzY4Ykp0Z3k5ZGFzOGFzYTg3bmV3OTJuMHE4a2w4MWpBIn0", "next": "eyJpZCI6IjFDUDY0dkc2SkhuSkhLUEpLTDVpblcifQ" } } } ``` The `next` cursor will not be present if there are no more pages to fetch. `prev` cursor appears when previous pages exist. Enables bidirectional navigation. Do not pass both before and after in the same request. Cursors are opaque strings—do not parse or modify them—and should be URL-encoded when used in query parameters. ## Pagination parameters Control pagination using these query parameters: * `limit`: *(Integer)* — Maximum number of items to return per page. Must be between 1 and 100. Defaults to 20 if not specified. * `after`: *(String)* — Returns results starting immediately after the item identified by this cursor. Use the `next` cursor from a previous response to fetch the next page. * `before`: *(String)* — Returns results starting immediately before the item identified by this cursor. Use the `prev` cursor from a previous response to fetch the previous page. Cursors do not expire and remain valid indefinitely. Using an invalid cursor will return a 400 Bad Request error. ## Navigating pages ### Auto-pagination (recommended) Moonbase SDKs provide methods to automatically iterate through all items across all pages: ```typescript TypeScript theme={null} async function fetchAllItems(params) { const allItems = []; // Automatically fetches more pages as needed. for await (const item of moonbase.collections.items.list('people', { limit: 5 })) { allItems.push(item); } return allItems; } ``` ```go Go theme={null} iter := client.Collections.Items.ListAutoPaging( context.TODO(), "people", moonbase.CollectionItemListParams{ Limit: moonbase.Int(5), }, ) // Automatically fetches more pages as needed. for iter.Next() { item := iter.Current() fmt.Printf("%+v\n", item) } if err := iter.Err(); err != nil { panic(err.Error()) } ``` ```ruby Ruby theme={null} page = moonbase.collections.items.list("people", limit: 5) # Fetch single item from page. item = page.data[0] puts(item.id) # Automatically fetches more pages as needed. page.auto_paging_each do |item| puts(item.id) end ``` ```python Python theme={null} from moonbase import Moonbase moonbase = Moonbase() all_items = [] # Automatically fetches more pages as needed. for item in moonbase.collections.items.list( collection_id="people", limit=5, ): # Do something with item here all_items.append(item) print(all_items) # Or, asynchronously: import asyncio from moonbase import AsyncMoonbase moonbase = AsyncMoonbase() async def main() -> None: all_items = [] # Iterate through items across all pages, issuing requests as needed. async for item in moonbase.collections.items.list( collection_id="people", limit=5, ): all_items.append(item) print(all_items) asyncio.run(main()) ``` ### Single page requests Request one page at a time: ```typescript TypeScript theme={null} let page = await moonbase.collections.items.list('people', { limit: 5 }); for (const item of page.data) { console.log(item); } // Convenience methods are provided for manually paginating: while (page.hasNextPage()) { page = await page.getNextPage(); // ... } ``` ```go Go theme={null} people, err := client.Collections.Items.List( context.TODO(), "people", moonbase.CollectionItemListParams{ Limit: moonbase.Int(5), }, ) for page != nil { for _, item := range page.Data { fmt.Printf("%+v\n", item) } page, err = page.GetNextPage() } if err != nil { panic(err.Error()) } ``` ```ruby Ruby theme={null} page = moonbase.collections.items.list("people", limit: 5) if page.next_page? new_page = page.next_page puts(new_page.data[0].id) end ``` ```python Python theme={null} first_page = await moonbase.collections.items.list( collection_id="people", limit=5, ) if first_page.has_next_page(): print(f"will fetch next page using these details: {first_page.next_page_info()}") next_page = await first_page.get_next_page() print(f"number of items we just fetched: {len(next_page.data)}") # Remove `await` for non-async usage. ``` ### Manual pagination with cURL ```sh theme={null} curl https://api.moonbase.ai/v0/collections/organizations/items \ --header 'Authorization: Bearer ' ``` For authentication details, see the Moonbase [authentication guide](/api-reference/authentication). * If `meta.cursors.next` is missing, all items have been retrieved * If the `next` cursor is present, use it with the `after` parameter to fetch the next page * If the `prev` cursor is present, use it with the `before` parameter to fetch the previous page **Fetch next page:** ```sh theme={null} curl https://api.moonbase.ai/v0/collections/organizations/items?after=eyJpZCI6IjFDUDY0dkc2SkhuSkhLUEpLTDVpblcifQ \ --header 'Authorization: Bearer ' ``` **Fetch previous page:** ```sh theme={null} curl https://api.moonbase.ai/v0/collections/organizations/items?before=eyJpZCI6IjFDUDY0dkc2SkhuSkhLUEpLTDVpblcifQ \ --header 'Authorization: Bearer ' ``` Continue using the cursors from each response to navigate forward or backward through results. # Send a Message Source: https://docs.moonbase.ai/api-reference/program-messages/create POST /program_messages Sends a message using a program template. # Retrieve a Program Template Source: https://docs.moonbase.ai/api-reference/program-templates/get GET /program_templates/{id} Retrieves the details of an existing program template. # List Program Templates Source: https://docs.moonbase.ai/api-reference/program-templates/list GET /program_templates Returns a list of your program templates. # Retrieve a Program Source: https://docs.moonbase.ai/api-reference/programs/get GET /programs/{id} Retrieves the details of an existing program. # List Programs Source: https://docs.moonbase.ai/api-reference/programs/list GET /programs Returns a list of your marketing programs. # Rate Limits Source: https://docs.moonbase.ai/api-reference/rate-limiting Learn about API rate limits and how to work with them. The Moonbase API uses safeguards against bursts of incoming traffic. Rapid requests trigger 429 responses. For detailed information about handling 429 errors, see the Moonbase [error handling guide](/api-reference/error-handling). ## Limits Rate limits per organization: * **Read requests:** 100 requests per second * **Write requests:** 25 requests per second These limits apply per organization and are shared across all API keys within each organization. Request classification: * Moonbase classifies endpoints as read or write. * In general, GET endpoints are read. Write endpoints typically use POST, PUT, PATCH, or DELETE. ## Response Exceeding limits returns a HTTP 429: ```http theme={null} HTTP/1.1 429 Too Many Requests Content-Type: application/json { "errors": [ { "status": "429", "title": "Too Many Requests" } ] } ``` Rate-limited requests are not processed and can be safely retried once the limit resets. The API does not include rate-limit headers (such as Retry-After) in responses. ## Handling rate limits ### Using SDKs Moonbase SDKs automatically handle rate limit responses by implementing exponential backoff retry logic. When a 429 response is received, the SDK will automatically wait and retry the request. No manual implementation required. ### Manual implementation Direct API calls require retry logic. 429 responses require exponential backoff. Wait at least one second before retrying, as rate limits reset every second. Include randomness in backoff timing to avoid a [thundering herd effect](https://en.wikipedia.org/wiki/Thundering_herd_problem). # Search Items Source: https://docs.moonbase.ai/api-reference/search POST /search Returns items and files that match the search query. # Create a Tagset Source: https://docs.moonbase.ai/api-reference/tagsets/create POST /tagsets Create a new tagset. # Delete a Tagset Source: https://docs.moonbase.ai/api-reference/tagsets/delete DELETE /tagsets/{id} Permanently deletes a tagset. # Retrieve a Tagset Source: https://docs.moonbase.ai/api-reference/tagsets/get GET /tagsets/{id} Retrieves the details of an existing tagset. # List Tagsets Source: https://docs.moonbase.ai/api-reference/tagsets/list GET /tagsets Returns a list of your tagsets. # Update a Tagset Source: https://docs.moonbase.ai/api-reference/tagsets/update PATCH /tagsets/{id} Updates an existing tagset. # Create an Unsubscribe Source: https://docs.moonbase.ai/api-reference/unsubscribes/create POST /unsubscribes Create a new unsubscribe. # Delete an Unsubscribe Source: https://docs.moonbase.ai/api-reference/unsubscribes/delete DELETE /unsubscribes/{email} Permanently deletes an unsubscribe by email address. # List Unsubscribes Source: https://docs.moonbase.ai/api-reference/unsubscribes/list GET /unsubscribes Returns a list of unsubscribes. # Create a View Source: https://docs.moonbase.ai/api-reference/views/create POST /views Creates a new view in a collection. # Delete a View Source: https://docs.moonbase.ai/api-reference/views/delete DELETE /views/{id} Permanently deletes a view. The default view of a collection cannot be deleted. # Retrieve a View Source: https://docs.moonbase.ai/api-reference/views/get GET /views/{id} Retrieves the details of an existing view. # List Views Source: https://docs.moonbase.ai/api-reference/views/list GET /views Returns a list of views. # List Items Source: https://docs.moonbase.ai/api-reference/views/list-items GET /views/{id}/items Returns a list of items that are part of the specified view. # Update a View Source: https://docs.moonbase.ai/api-reference/views/update PATCH /views/{id} Updates a view. The change applies to the shared view that everyone in the workspace sees. # Create an Endpoint Source: https://docs.moonbase.ai/api-reference/webhook-endpoints/create POST /webhook_endpoints Create a new endpoint. # Delete an Endpoint Source: https://docs.moonbase.ai/api-reference/webhook-endpoints/delete DELETE /webhook_endpoints/{id} Permanently deletes an endpoint. # Retrieve an Endpoint Source: https://docs.moonbase.ai/api-reference/webhook-endpoints/get GET /webhook_endpoints/{id} Retrieves the details of an existing endpoint. # List Endpoints Source: https://docs.moonbase.ai/api-reference/webhook-endpoints/list GET /webhook_endpoints Returns a list of endpoints. # Update an Endpoint Source: https://docs.moonbase.ai/api-reference/webhook-endpoints/update PATCH /webhook_endpoints/{id} Updates an endpoint. # Acceptable Use Policy Source: https://docs.moonbase.ai/aup **Last Updated: Feb 5, 2025** This Acceptable Use Policy (“**Policy**”) governs your use of the services offered by Moonbase Inc. and its affiliates (collectively, the “**Services**”). By using the Services, you agree to this Policy. If you breach it, we may suspend or terminate your access. *** ## **1. Prohibited Activities** You (and any third party you allow to use the Services) must not: 1. **Break the Law**: Violate or facilitate violation of any applicable law, court order, or regulation (e.g., child exploitation, terrorism, hacking, fraud). 2. **Infringe IP or Rights**: Infringe or misappropriate intellectual property or other legal rights. 3. **Mislead or Defraud**: Engage in phishing, impersonation, or distribution of malware. 4. **Spam**: Generate, distribute, publish, send or facilitate unsolicited mass email or other messages, promotions, advertising, or solicitations. 5. **Disrupt Services**: Interfere with or degrade the Services, networks, or systems (e.g., DDoS attacks, unauthorized access). 6. **Reverse Engineer**: Copy, translate, disassemble, decompile, make derivative works of, or reverse engineer the\ Services (or attempt any of the foregoing). 7. **Export Violations**: Use the Services in embargoed countries or violate export control or sanctions laws. *** ## **2. Investigation and Enforcement** We may investigate suspected violations of this Policy and remove or block content. We may also temporarily or permanently suspend or terminate access if we determine a violation has occurred. You agree to cooperate with any investigations and to remedy violations promptly. *** ## **3. Modifications** We may change this Policy at any time by posting an updated version. Continued use of the Services after changes are posted constitutes acceptance of the revised Policy. *** ## **4. Reporting Violations** To report a suspected violation of this Acceptable Use Policy, please email [**legal@moonbase.ai**](mailto:legal@moonbase.ai) with relevant details. # Moonbase Source: https://docs.moonbase.ai/home Moonbase is the AI first unified customer platform. Sales, marketing, and support all-in-one. We are currently in private beta, get in touch for access. [Privacy](https://moonbase.ai/privacy) | [Terms](https://moonbase.ai/terms) # Privacy Policy Source: https://docs.moonbase.ai/privacy **Last Updated: February 8, 2025** At **Moonbase Inc.** (“**Moonbase**,” “**we**,” “**us**,” or “**our**”), we respect your privacy and are committed to protecting your personal data. This Privacy Policy explains how we collect, use, disclose, and otherwise process your personal data when you use our unified customer platform (collectively, the “**Services**”), visit our websites (the “**Sites**”), or otherwise interact with us. *** ## **1. Introduction** ### **1.1 Purpose of this Privacy Policy** This Policy describes the types of personal data we collect, how we use and process it, with whom we share it, and your rights and choices. It applies to personal data we collect when you: * Visit, access, or use our Sites that link to or reference this Privacy Policy * Use or interact with our Services * Communicate with us (e.g., via email, phone, or events) * Provide information in connection with a prospective or existing business relationship * Otherwise engage with us in person or online ### **1.2 Controller vs. Processor** * **Controller**: For personal data covered by this Privacy Policy, Moonbase Inc. is the “controller,” meaning we decide how and why the personal data is processed for our own business purposes. * **Processor**: In some situations, we process personal data strictly on behalf of our customers, who act as “controllers.” If you are an end user of one of our customers, please consult their privacy policies. **Data Processing Agreements (DPAs)**\ When we act as a processor on behalf of our customers, our **Data Processing Agreement (DPA)** governs our handling of personal data. To review or enter into our DPA, please contact [**legal@moonbase.ai**](mailto:legal@moonbase.ai). *** ## **2. Definitions / Key Terms** * **Personal Data / Personal Information**: Any information relating to an identified or identifiable individual. * **Sensitive Personal Data**: Certain categories of personal data given heightened legal protection (e.g., health or biometric data). * **Processing**: Any operation on personal data, including collection, use, storage, disclosure, or disposal. * **Services**: Moonbase’s CRM, email marketing automation, and customer support platform, including related software/tools. * **Sites**: Moonbase’s public-facing websites and landing pages. * **User / You / Your**: Any individual who visits our Sites, registers for or uses our Services, or otherwise interacts with us. *** ## **3. Who We Are and How to Contact Us** For personal data processed under this Privacy Policy, **Moonbase Inc.** is the responsible entity. If you have questions or concerns, please contact us: **Moonbase Inc.**\ 548 Market St\ PMB 58465\ San Francisco, California 94104 USA\ Email: [**legal@moonbase.ai**](mailto:legal@moonbase.ai) If you have a specific data protection inquiry, mention “Data Protection Inquiry” in the subject line. Our Data Protection Officer (if required) can also be reached via this email. *** ## **4. Scope** This Privacy Policy applies only to Moonbase’s collection and processing of personal data for our own business purposes. It does not apply to data handling by third parties we do not control. If you integrate our Services with third-party apps or services, their privacy practices are governed by their own policies. *** ## **5. Information We Collect** We collect various categories of personal data, either directly from you, automatically (e.g., via cookies), or from third parties. ### **5.1 Personal Data You Provide Directly** * **Account Registration Data**: Name, email address, phone number, password, employer, job title, etc. * **Billing & Payment Data**: Credit card details, billing address, transaction history (processed via secure third-party payment processors). * **Marketing & Communications Data**: Preferences for marketing communications, form submissions, event registrations. * **Support & Inquiry Data**: Records of support tickets, user feedback, surveys, etc. * **Content You Upload**: Data included in CRM entries, marketing assets, or customer support tickets. * **Sensitive Data:** We do not intentionally collect or process sensitive personal data. If you choose to upload such data, you must ensure it is lawfully collected and shared. ### **5.2 Personal Data Collected Automatically** * **Device Data**: IP address, browser type, operating system, mobile device IDs, hardware settings. * **Usage Data**: Pages viewed, time spent, links clicked, access dates/times, diagnostic data. * **Location Data**: Approximate geolocation inferred from IP address (or more precise location if you enable it). ### **5.3 Personal Data from Third Parties** * **Third-Party Integrations**: If you connect external services (e.g., email platforms), we may receive relevant data. * **Marketing & Analytics Providers**: We may receive contact info, demographics, or interest data. * **Public Sources**: Publicly available information like social media profiles or open databases. *** ## **6. Legal Bases for Processing (GDPR & Similar)** Where GDPR or similar laws apply, we rely on one or more of the following legal bases: 1. **Performance of a Contract**: Providing the Services as agreed in our Terms. 2. **Legitimate Interests**: Enhancing or securing our Services, unless overridden by your interests or rights. 3. **Consent**: In specific scenarios (e.g., sending direct marketing where required by law). You may withdraw consent at any time. 4. **Legal Obligations**: Complying with laws, regulations, or legal processes. *** ## **7. How We Use Your Personal Data** We use personal data for: 1. **Provision of Services**: Account setup, CRM functions, marketing automation, customer support, and transaction processing. 2. **Customer Support**: Responding to inquiries, troubleshooting, providing updates. 3. **Marketing & Promotions**: Sending newsletters, offers, or event invitations, in accordance with preferences and laws (e.g., CAN-SPAM). 4. **Analytics & Service Improvement**: Aggregating usage data to improve performance and user experience. 5. **Security & Fraud Prevention**: Detecting or investigating unauthorized or suspicious activities. 6. **Compliance**: Meeting legal obligations, responding to lawful requests, enforcing our Terms. 7. **Business Operations**: Audits, mergers, acquisitions, or other corporate transactions. *** ## **8. Cookies and Similar Technologies** We and our partners use cookies, web beacons, and similar technologies to collect information about your activities on our Sites and within the Services. * **Strictly Necessary Cookies**: Essential for operation (e.g., session cookies). * **Functional Cookies**: Store user preferences or enhance site performance. * **Analytics Cookies**: Collect usage data (e.g., via Google Analytics). * **Advertising/Targeting Cookies**: Track browsing habits to serve relevant ads. You can usually manage or disable cookies in your browser or device settings, though some features may be limited. **Do Not Track / Global Privacy Control**\ At this time, our Sites may not respond to DNT or GPC signals in a uniform way. We continue to evaluate industry standards and legal requirements. *** ## **9. Third-Party Links and Services** Our Sites and Services may contain links to or integrate with third-party websites and apps. **We are not responsible for the privacy practices of these third parties**, and this Policy does not apply to them. Review their policies before providing personal data. *** ## **10. How We Share and Disclose Personal Data** We **do not sell** your personal data. We may disclose it in the following cases: 1. **Service Providers**: Vendors who assist with hosting, payments, analytics, or support, under contractual obligations. 2. **Business Partners**: When you opt into integrations or explicitly request sharing. 3. **Corporate Transactions**: In case of mergers, acquisitions, financing, or sale of assets. 4. **Legal Compliance & Protection**: If required by law or necessary to protect rights, property, or safety. 5. **Consent**: In other ways if we have your explicit consent. *** ## **11. International Data Transfers** Moonbase is headquartered in the United States. Your personal data may be transferred to countries other than your own (including the U.S.). We implement safeguards like Standard Contractual Clauses (SCCs) to protect data in accordance with this Policy and applicable law. *** ## **12. Data Retention** We retain personal data only as long as needed for the purposes in this Policy, or as required by law. For example: * **Account Data**: Kept for the duration of your account plus a reasonable period afterward. * **Billing & Payment Data**: Retained per financial and tax regulations. When no longer needed, we securely delete or anonymize the data. *** ## **13. Additional Disclosures for Specific Jurisdictions** ### **13.1 California Residents (CCPA/CPRA)** If you are a California resident, you may have certain rights under the CCPA/CPRA, including: * **Right to Know**: Request that we disclose the specific personal data we collect, use, disclose, and share about you (we do **not** sell your personal data). * **Right to Delete**: Request deletion of your personal data, subject to legal exceptions. * **Right to Correct**: Request correction of any inaccurate personal data we hold about you. * **Right to Opt Out of Sale or Sharing**: Opt out of any “sale” or “sharing” of your personal data (again, we do **not** sell personal data). * **Right Not to Be Discriminated Against**: We will not discriminate against you for exercising any CCPA/CPRA rights. To exercise these rights, please contact us. We will verify your request by asking for information sufficient to confirm your identity. You may also designate an authorized agent to exercise these rights on your behalf. ### **13.2 Residents of Other U.S. States** Residents of states such as Virginia, Colorado, Connecticut, and Utah may have similar rights. We will honor valid requests in accordance with the applicable state law. If you have questions or wish to exercise your rights, please contact us. ### **13.3 EEA/UK Residents (GDPR)** If you reside in the European Economic Area (EEA) or the United Kingdom (UK), you have the following rights under the GDPR or equivalent UK laws: * **Right of Access**: Request a copy of your personal data that we hold. * **Right to Rectification**: Correct inaccuracies or incomplete personal data. * **Right to Erasure**: Request deletion of your personal data, subject to certain conditions. * **Right to Restrict Processing**: Ask us to restrict the processing of your data in specific circumstances. * **Right to Data Portability**: Obtain a machine-readable copy of your personal data to transfer to another provider. * **Right to Object**: Object to processing of your data, especially for direct marketing purposes. * **Right to Withdraw Consent**: If processing is based on your consent, you may withdraw it at any time. You also have the right to lodge a complaint with your local data protection authority if you believe we have not complied with our obligations. To exercise your rights, please contact us. *** ## **14. Your Rights and Choices** All users may: * **Opt Out of Marketing**: Unsubscribe from marketing emails by clicking the “unsubscribe” link or contacting us. * **Access/Correct/Delete Data**: Request access, correction, or deletion of personal data where legally permissible. * **Object or Restrict**: Ask us to stop or limit certain processing. Where we act as a processor on behalf of our customers, direct these requests to the relevant controller (our customer). *** ## **15. Children’s Privacy** Our Sites and Services are **not intended for individuals under 18**, and we do not knowingly collect personal data from them. If we learn we have unintentionally collected data from someone under the relevant age, we will delete it promptly. If you believe we have collected data from a minor, contact us. *** ## **16. Data Security and Breach Notification** We take measures (e.g., encryption, access controls, audits) to protect personal data. However, no security measures are completely foolproof. If we become aware of a data breach affecting your personal data, we will notify you (and any regulatory authority) as required by law. *** ## **17. Internal Policies on Data Handling** * **Limited Access**: We grant employee access on a need-to-know basis. * **Training**: Employees receive training on security, privacy, and data handling. * **Audits**: We conduct periodic reviews to ensure compliance and identify improvements. * **Vendor Management**: Service providers must adhere to data protection standards. *** ## **18. Google Integrations** ### **18.1 Overview** We offers optional integrations with certain Google products, including Gmail and Google Calendar (“Google Integrations”), to enhance your experience with our Service. By choosing to enable these integrations, you will grant us access to specific data from your Google account. ### **18.2 Data We Access and How We Use It** When you connect your Google account (e.g., Gmail or Google Calendar), we access and process the following categories of data (“Google User Data”) in order to provide or improve user-facing features within our Services: * **Gmail Data**: This may include your email messages, subject lines, recipients, timestamps, attachments, and other metadata required for our shared inbox features. Specifically: * **Reading and Sending Emails**: With your permission, we will be able to read, modify, create, and send emails from your connected Gmail account to provide a unified inbox experience. * **Storage and Display**: We may store copies of your email content (including subject lines, message bodies, attachments, and metadata) on our servers in order to display them within the Services, log conversations, and enable notifications for you and any authorized team members. * **Email Content**: Your email messages may contain sensitive or confidential information. By integrating Gmail, you acknowledge that such data may be visible to other authorized users in your Moonbase workspace (e.g., team members sharing the same inbox). * **Google Calendar Data**: When you connect your Google Calendar, we may access: * **Calendar Events and Metadata**: This includes event titles, start/end times, attendees, and other relevant details in order to show upcoming meetings and automatically log activities. * **Modifying and Creating Events**: If you allow it, Moonbase can create or modify events on your calendar. We use Google User Data **solely** for purposes that are clearly communicated to you within our user interface, such as displaying relevant emails, sending emails, logging conversations, logging calendar events, and improving your workflow within our Services. **We do not use Google User Data to develop, train, or improve any generalized AI or machine learning models.** ### **18.3 Compliance with Google API Policies** Moonbase’s use and transfer of information received from Google APIs (including Gmail and Google Calendar data) will adhere to the [**Google API Services User Data Policy**](https://developers.google.com/terms/api-services-user-data-policy), including the **Limited Use** requirements. In particular: * **No Unauthorized Use**: We will not use Google User Data for advertising, marketing, or any purposes outside the scope of the user-facing features you explicitly enable. * **No Unauthorized Sharing**: We will not sell or transfer Google User Data to third parties, except: 1. **Service Providers** assisting in providing or improving our Services (under binding confidentiality and data protection terms); 2. **Security Purposes** (e.g., investigating abuse, or where needed to protect rights, property, or safety); 3. **Legal Compliance** (e.g., responding to valid legal process or law enforcement requests); or 4. **Corporate Transactions** (e.g., mergers, acquisitions, or sales of assets) after obtaining explicit prior consent from you if required. * **No Human Reading**: Moonbase personnel will not read your Google User Data unless: 1. We obtain your separate affirmative consent to do so (e.g., you explicitly request support that requires review of specific messages or calendar entries); 2. It is necessary for security purposes (e.g., investigating a bug or abuse); 3. It is necessary to comply with applicable law or legal processes; or 4. The data (including derivations) is aggregated and anonymized and used for our internal operations in compliance with all applicable privacy laws. ### **18.4 Your Choices and Revocation of Access** Enabling a Google Integration is entirely optional. If you choose not to connect your Gmail or Google Calendar, you can still use most features of our Services (though some functionalities will be limited). You can revoke Moonbase’s access to your Google account at any time by: * Adjusting your integration settings within Moonbase; or * Going to your [**Google Account Security Settings**](https://myaccount.google.com/permissions) and removing Moonbase’s access. Once revoked, Moonbase will no longer have the ability to read or write data to your Gmail or Google Calendar, though previously synchronized data may remain in our systems in accordance with our data retention practices and as required for record-keeping or legal compliance. ### **18.5 No Endorsement or Control Over Google** Moonbase is not affiliated with Google and does not control Google’s privacy or security practices. Your use of the Google Integrations is subject to Google’s own terms and privacy policies, in addition to this Privacy Policy. *** ## **19. Updates to This Privacy Policy** We may update this Privacy Policy periodically. The “Last Updated” date reflects the most recent changes. For significant changes, we may provide additional notice (e.g., by email or a site banner). We encourage you to review this Policy regularly. *** ## **20. Contact Us** For any questions or comments about this Privacy Policy, or to exercise your rights, contact us: **Moonbase Inc.**\ 548 Market St\ PMB 58465\ San Francisco, California 94104 USA\ Email: [**legal@moonbase.ai**](mailto:legal@moonbase.ai) Include “Privacy Inquiry” or “Data Subject Request” in the subject line, as appropriate. We will respond as soon as reasonably practicable and as required by law. # Terms of Service Source: https://docs.moonbase.ai/terms **Last Updated: February 5, 2025** These Terms of Service (“**Terms**”) are a legally binding contract between you (“**you**” or “**your**”) and **Moonbase Inc.** (“**Moonbase**,” “**we**,” “**us**,” or “**our**”). By accessing or using our unified customer platform (collectively, the “**Services**”), you acknowledge that you have read, understand, and agree to be bound by these Terms. If you do not agree, please do not access or use the Services. *** ## **1. Overview and Definitions** 1. **Parties.** “You” means the individual or entity entering into these Terms. “Moonbase” is Moonbase Inc., including its Affiliates. 2. **Order Form.** Any ordering document (online or otherwise) indicating your subscription plan, fees, duration, and other details. The Order Form and these Terms form the entire agreement between you and Moonbase regarding the Services. 3. **Customer Data.** Any data, content, or information you (or your Users) upload or generate via the Services. 4. **Subscription Term.** The period specified in the Order Form (or online plan) during which you have the right to use the Services. 5. **Users.** Individuals you authorize to access or use the Services under your account (e.g., employees, contractors). 6. **Acceptable Use Policy (“AUP”).** Our policy regarding appropriate and prohibited uses of the Services. You can find it at [**https://moonbase.ai/aup**](https://moonbase.ai/aup). 7. **Privacy Policy and Data Processing Addendum (“DPA”).** Our policies regarding the collection, use, and processing of personal data, available at [**https://moonbase.ai/privacy**](https://moonbase.ai/privacy) (Privacy Policy) and by request (DPA). *** ## **2. Eligibility and Account Responsibilities** 1. **Eligibility.** By using the Services, you represent and warrant that you are at least 18 (or the age of majority in your jurisdiction) and have the authority to enter into these Terms on behalf of yourself or an entity. 2. **Account Registration.** You must provide accurate information when creating an account and keep it updated. You are responsible for maintaining the confidentiality of your credentials and for any activity that occurs under your account. 3. **Administrators.** If you designate an Admin user, that Admin may add or remove Users, manage billing, and make decisions on behalf of the account. *** ## **3. License Grant and Acceptable Use** 1. **License.** Subject to your compliance with these Terms and any Order Form, Moonbase grants you a non-exclusive, non-transferable, revocable right to access and use the Services during the Subscription Term for your internal business operations. 2. **Resell or Sublicense.** You agree not to resell, sublicense, or otherwise redistribute the Services without our prior written permission. 3. **Acceptable Use.** You agree to comply with our [**Acceptable Use Policy**](https://app.moonbase.ai/aup). Among other things, you must not: * Use the Services to violate any law or regulation, including anti-spam and privacy laws. * Infringe or misappropriate any third-party rights. * Disrupt the integrity or performance of the Services. 4. **Compliance with Spam/Email Laws.** You (not Moonbase) are the sender under applicable email laws (e.g., CAN-SPAM, CASL, GDPR). You must obtain necessary consents before sending communications and must not engage in deceptive or unlawful practices. 5. **High-Risk Use.** The Services are not designed or intended for high-risk environments (e.g., life support or nuclear facilities). Moonbase disclaims all liability arising from any such unauthorized high-risk use. 6. **AI Features.** Certain features may use AI or machine learning. You acknowledge these features can be probabilistic and may produce inaccurate or incomplete results. You remain responsible for verifying any AI-generated outputs. *** ## **4. Fees, Payment, and Renewals** 1. **Fees and Payment.** You agree to pay the fees specified in the Order Form (or online checkout). Fees are generally billed in advance, are non-refundable, and exclude taxes. 2. **Billing Cycle and Auto-Renewal.** Subscriptions typically auto-renew for successive terms unless you cancel at least 30 days prior to the end of the current term. We may adjust fees upon renewal by providing notice before the renewal date. 3. **Late Payments.** Unpaid amounts may incur interest at 1.5% per month (or the maximum rate allowed by law). We may suspend or terminate your access if your payments are overdue. *** ## **5. Data and Privacy** 1. **Customer Data.** You retain all rights to your Customer Data. You grant Moonbase a limited license to process your Customer Data solely to provide and improve the Services, in accordance with our [**Privacy Policy**](https://app.moonbase.ai/privacy) and DPA. 2. **Your Representations.** You represent that you have all necessary rights and consents to provide Customer Data to Moonbase, including any personal data. You will not upload or share data in violation of third-party rights or any law. 3. **Sub-Processors.** Moonbase may use third-party service providers (“Sub-Processors”) to host or process data in connection with the Services. A current list of Sub-Processors is available upon request. We ensure each Sub-Processor is bound by obligations of confidentiality and data protection no less restrictive than these Terms. 4. **Aggregated/Anonymized Data.** We may collect and use data about the use of our Services in aggregated or anonymized form, which does not identify you or any individual. We use such data to analyze and improve the Services. *** ## **6. Confidentiality** 1. **Definition.** “Confidential Information” means nonpublic information disclosed by one party to the other, which is marked or identified as confidential—or which should reasonably be understood as confidential given its nature. 2. **Obligations.** Each party will protect the other’s Confidential Information with the same degree of care it uses to protect its own confidential information (but no less than reasonable care). Confidential Information does not include information that is or becomes public without breach, was independently developed, or was rightfully obtained without confidentiality obligations. *** ## **7. Intellectual Property** 1. **Moonbase IP.** We (and our licensors) own all right, title, and interest in and to the Services, including any related software, documentation, and trademarks. No implied rights are granted except as expressly stated in these Terms. 2. **Customer IP.** You retain ownership of your Customer Data. Moonbase does not claim any ownership over Customer Data. 3. **Feedback.** If you choose to provide feedback or suggestions, you grant Moonbase a perpetual, worldwide, irrevocable, royalty-free license to use and incorporate such feedback. *** ## **8. Warranties and Disclaimers** 1. **Limited Warranty.** Moonbase warrants that it will provide the Services in a professional and workmanlike manner. If the Services fail to meet the specifications in our documentation in a material way, your sole remedy is for us to either remedy the deficiency or, if we cannot, terminate the relevant subscription and issue a pro rata refund. 2. **No Legal Advice.** Moonbase does not provide legal advice. You are responsible for understanding and complying with all applicable laws and regulations relating to your use of the Services. 3. **Disclaimer.** EXCEPT AS EXPRESSLY PROVIDED IN THESE TERMS, THE SERVICES ARE PROVIDED “AS IS” AND “AS AVAILABLE,” WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS, IMPLIED, OR STATUTORY. MOONBASE DISCLAIMS ALL IMPLIED WARRANTIES, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. *** ## **9. Indemnification** 1. **Moonbase’s Indemnity.** We will defend and indemnify you from any third-party claim alleging the Services infringe a valid intellectual property right, provided you promptly notify us in writing, allow us control of the defense and settlement, and cooperate with our efforts. If we believe the Services may infringe, we may (a) modify them, (b) procure rights for your continued use, or (c) terminate the affected Services with a prorated refund. 2. **Your Indemnity.** You will defend and indemnify Moonbase from any third-party claim arising out of (a) your misuse of the Services, (b) your Customer Data (including claims that it infringes third-party rights), or (c) your violation of these Terms, the AUP, or applicable law. *** ## **10. Limitation of Liability** 1. **Exclusion of Certain Damages.** TO THE MAXIMUM EXTENT PERMITTED BY LAW, NEITHER PARTY WILL BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, OR ANY LOSS OF PROFITS, REVENUES, OR GOODWILL. 2. **Liability Cap.** EXCEPT FOR EITHER PARTY’S INDEMNIFICATION OBLIGATIONS OR A BREACH OF CONFIDENTIALITY, EACH PARTY’S AGGREGATE LIABILITY UNDER THESE TERMS WILL NOT EXCEED THE TOTAL AMOUNT PAID (OR PAYABLE) BY YOU TO MOONBASE IN THE TWELVE (12) MONTHS PRECEDING THE EVENT GIVING RISE TO LIABILITY. *** ## **11. Term and Termination** 1. **Term.** These Terms are effective as long as you have an active Subscription Term or until otherwise terminated in accordance with this Section. 2. **Termination for Cause.** Either party may terminate upon written notice if the other party (a) materially breaches these Terms and fails to cure within 30 days, or (b) becomes insolvent or enters bankruptcy. 3. **Suspension or Termination by Moonbase.** We may suspend or terminate your account (in whole or in part) if you violate the AUP or fail to pay fees. We will make reasonable efforts to provide notice unless immediate suspension is required for legal or security reasons. 4. **Effects of Termination.** Upon termination, your right to use the Services ceases. We will handle your Customer Data in accordance with our data-retention policies and applicable law. Sections relating to confidentiality, limitations of liability, and indemnification will survive termination. *** ## **12. Modifications to These Terms** Moonbase may update these Terms from time to time. Material changes will be communicated (e.g., via email or by posting a notice in the Services). Continued use of the Services after the effective date of any revised Terms constitutes your acceptance. If you object, your sole remedy is to stop using the Services. *** ## **13. Governing Law and Dispute Resolution** 1. **Governing Law.** These Terms are governed by the laws of the **State of Delaware**, USA, without regard to conflict-of-laws principles. 2. **Venue.** Any disputes will be resolved in the state or federal courts located in **New Castle County, Delaware**, and both parties consent to personal jurisdiction in those courts. 3. **Waiver of Jury Trial.** EACH PARTY WAIVES ANY RIGHT TO A JURY TRIAL FOR DISPUTES ARISING FROM THESE TERMS. *** ## **14. Export Compliance** 1. **Export Laws.** You will comply with all applicable export control and trade sanction laws, including U.S. export regulations. You represent that you are not located in or acting on behalf of a prohibited country or restricted party. 2. **Prohibited End Users and Destinations.** You will not access or use the Services if you are (a) located in a U.S.-embargoed country or region, or (b) on any U.S. restricted party list. *** ## **15. General Provisions** 1. **Entire Agreement.** These Terms (including any Order Form, AUP, Privacy Policy, and DPA) constitute the entire agreement and supersede all prior or contemporaneous understandings. 2. **Assignment.** Neither party may assign these Terms without the other’s prior written consent, except to an Affiliate or in connection with a merger or acquisition. 3. **No Waiver.** No failure or delay by either party in exercising any right, power, or remedy under these Terms shall operate as a waiver thereof, nor shall any single or partial exercise of any such right, power, or remedy preclude any other or further exercise thereof or the exercise of any other right, power, or remedy. 4. **Severability.** If any part of these Terms is held invalid or unenforceable, the remaining parts remain in full effect. 5. **Independent Contractors.** The parties are independent contractors. Nothing in these Terms creates a partnership or joint venture. 6. **Notices.** Notices must be in writing and addressed to the parties’ designated email or mailing address. Notices are deemed given upon receipt. 7. **Publicity.** You grant us the right to use your name and logo for marketing and promotional purposes. You may opt out by notifying us at [**legal@moonbase.ai**](mailto:legal@moonbase.ai). 8. **Force Majeure.** Neither party is liable for delays or failures caused by events beyond its reasonable control (e.g., natural disasters, internet failures). 9. **DMCA / Copyright Complaints.** If you believe content on our platform infringes your copyright, please send a notice to [**legal@moonbase.ai**](mailto:legal@moonbase.ai) with all information required by the DMCA. We may remove or disable access to allegedly infringing content in accordance with applicable law. 10. **Safe Harbor.** Moonbase may be protected by laws such as Section 230 of the Communications Act and the DMCA’s safe harbor provisions for hosting user-generated content. Nothing in these Terms waives or limits those protections. 11. **Third-Party Beneficiaries.** These Terms are intended solely for the benefit of the parties hereto and their respective permitted successors and assigns. Nothing in these Terms, whether express or implied, shall confer any rights or remedies upon any person or entity that is not a party hereto or a permitted successor or assign. 12. **Explicit Survival Clause.** Notwithstanding any other provision of these Terms, the provisions relating to Confidentiality, Intellectual Property, Warranties and Disclaimers, Indemnification, Limitation of Liability, Termination, and any other provisions that by their nature should survive termination, shall survive the termination or expiration of these Terms. 13. **No Third-Party Agency.** Nothing contained in these Terms shall be construed as creating any agency, partnership, joint venture, or employment relationship between the parties. Neither party shall have any authority to bind or otherwise obligate the other in any respect. *** ## **16. Contact Us** If you have any questions or concerns about these Terms, please contact us: **Moonbase Inc.**\ 548 Market St\ PMB 58465\ San Francisco, California 94104 USA\ Email: [**legal@moonbase.ai**](mailto:legal@moonbase.ai) By creating an account, clicking “I agree,” or otherwise using the Services, you confirm that you have read and agree to these Terms of Service. # Call Occurred Source: https://docs.moonbase.ai/webhook-reference/activities/call-occurred webhook activity/call_occurred Triggered when a phone call is logged. # File Created Source: https://docs.moonbase.ai/webhook-reference/activities/file-created webhook activity/file_created Triggered when a file is created. # Form Submitted Source: https://docs.moonbase.ai/webhook-reference/activities/form-submitted webhook activity/form_submitted Triggered when a form is submitted. # Inbox Message Sent Source: https://docs.moonbase.ai/webhook-reference/activities/inbox-message-sent webhook activity/inbox_message_sent Triggered when a message is sent from an inbox. # Item Created Source: https://docs.moonbase.ai/webhook-reference/activities/item-created webhook activity/item_created Triggered when an item is created. # Item Mentioned Source: https://docs.moonbase.ai/webhook-reference/activities/item-mentioned webhook activity/item_mentioned Triggered when an item is mentioned in a note. # Item Merged Source: https://docs.moonbase.ai/webhook-reference/activities/item-merged webhook activity/item_merged Triggered when an item is merged with another item. # Meeting Held Source: https://docs.moonbase.ai/webhook-reference/activities/meeting-held webhook activity/meeting_held Triggered when a meeting has concluded. # Meeting Scheduled Source: https://docs.moonbase.ai/webhook-reference/activities/meeting-scheduled webhook activity/meeting_scheduled Triggered when a meeting is scheduled. # Note Created Source: https://docs.moonbase.ai/webhook-reference/activities/note-created webhook activity/note_created Triggered when a note is created. # Program Message Bounced Source: https://docs.moonbase.ai/webhook-reference/activities/program-message-bounced webhook activity/program_message_bounced Triggered when a program message bounces. # Program Message Clicked Source: https://docs.moonbase.ai/webhook-reference/activities/program-message-clicked webhook activity/program_message_clicked Triggered when a recipient clicks a tracked link in a program message. # Program Message Complained Source: https://docs.moonbase.ai/webhook-reference/activities/program-message-complained webhook activity/program_message_complained Triggered when a recipient marks a program message as spam. # Program Message Failed Source: https://docs.moonbase.ai/webhook-reference/activities/program-message-failed webhook activity/program_message_failed Triggered when a program message fails to be delivered for a technical reason. # Program Message Opened Source: https://docs.moonbase.ai/webhook-reference/activities/program-message-opened webhook activity/program_message_opened Triggered when a recipient opens a program message. # Program Message Sent Source: https://docs.moonbase.ai/webhook-reference/activities/program-message-sent webhook activity/program_message_sent Triggered when a program message is successfully sent. # Program Message Shielded Source: https://docs.moonbase.ai/webhook-reference/activities/program-message-shielded webhook activity/program_message_shielded Triggered when a program message is prevented from being sent by a delivery protection rule. # Program Message Unsubscribed Source: https://docs.moonbase.ai/webhook-reference/activities/program-message-unsubscribed webhook activity/program_message_unsubscribed Triggered when a recipient unsubscribes after receiving a program message. # Webhooks Source: https://docs.moonbase.ai/webhook-reference/getting-started Learn how to use webhooks to receive real-time updates from Moonbase. Moonbase webhooks enable real-time notifications about events in Moonbase, such as when an item is created, when a program message is opened, or a meeting is held. Webhooks are delivered to a configured HTTP endpoint. ## Quick Start Creating your first webhook with Moonbase. ### 1. Create an endpoint Use the [Webhooks API](../api-reference/webhook-endpoints/create) to register the webhook endpoint: ```bash theme={null} curl -X POST https://api.moonbase.ai/v0/webhook_endpoints \ -H "Authorization: Bearer MOONBASE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-app.com/webhooks/moonbase", "subscriptions": [ {"event_type": "activity/item_created"}, {"event_type": "activity/meeting_held"} ] }' ``` The response will include the endpoint's unique `secret` (prefixed with `whsec_`). **Store this secret securely**—required to verify incoming webhooks. This is the only time the secret will be shown. ### 2. Expose an HTTPS route Webhook endpoints must: * Be publicly accessible via HTTPS * Accept POST requests with `application/json` content * Respond within 30 seconds to avoid timeouts ### 3. Verify the signature Always verify the webhook signature before processing any data. This ensures: * The request genuinely comes from Moonbase * The payload hasn't been tampered with * Protection against replay attacks Key requirements: * Use the **raw request body** (before JSON parsing) * Verify the signature **before** any other processing * Reject requests with invalid signatures immediately See the [signature verification section](#verifying-webhook-signatures) for implementation details. ### 4. Process the payload After successful verification, parse and process the JSON payload. ### 5. Respond promptly Return a `2XX` status code (typically `200` or `204`) to acknowledge receipt: * Respond as quickly as possible (within 30 seconds) * Process time-consuming operations asynchronously If Moonbase doesn't receive a `2XX` response, it will retry delivery according to the [retry schedule](#delivery-and-retry-logic). ## Configuration Additional configurations for webhooks. ### Payload Format Each payload includes: * `id`: Unique event identifier * `occurred_at`: ISO 8601 timestamp indicating when the event occurred. * `type`: Event type (e.g., `activity/item_created`) * Related objects (item, collection, etc.) ```json Example Payload lines theme={null} { "id": "1CLJt2v2bnDhMVZzehdb6A", "occurred_at": "2025-02-17T15:59:55.000Z", "type": "activity/item_created", "item": { "id": "1CLJt2uzNLR8B4AnQ3vJ3B", "type": "item", "collection": { "id": "1CLJt2uzcick5mf96Lzt9x", "type": "collection", "ref": "people" } } } ``` ## Verifying webhook signatures Never process webhook data without first verifying its authenticity. Verification ensures that the request came from Moonbase and hasn't been tampered with. ### How signatures work Moonbase uses the [Standard Webhooks](https://github.com/standard-webhooks/standard-webhooks) specification for signing webhooks: 1. Each endpoint has a unique signing secret (format: `whsec_0{version}{44-char-base58}`) 2. Every webhook request includes an HMAC-SHA256 signature in the `webhook-signature` header 3. The signature covers the event ID, timestamp, and raw request body The signature algorithm: ``` signature = HMAC-SHA256(secret, `${webhook_id}.${webhook_timestamp}.${raw_payload}`) ``` ### Security best practices 1. **Store secrets securely**: Use environment variables or a secrets management service—never commit secrets to version control 2. **Use raw request bodies**: The signature is computed on the exact bytes sent—any modification (even whitespace) will cause verification to fail 3. **Verify timing**: Check that the timestamp is recent (within 5 minutes) to prevent replay attacks 4. **Reject failures**: If verification fails for any reason, reject the request with a `400` or `401` status 5. **Log failures**: Monitor verification failures as they may indicate security issues ### HTTP Headers Webhook requests include the following Standard Webhooks headers: * `webhook-id`: Event ID (used for idempotency and doesn't change between retries) * `webhook-timestamp`: Unix timestamp when the request was sent * `webhook-signature`: HMAC-SHA256 signature for verification * `content-type`: `application/json` ## Delivery and Retry Logic Moonbase ensures reliable webhook delivery with automatic retries and intelligent backoff strategies. ### Response handling The endpoint's HTTP response determines how Moonbase handles the delivery: | Status Code | Behavior | Notes | | ----------------------- | ----------------- | ------------------------------------------- | | `2XX` | Success | Delivery marked complete, no retries | | `410 Gone` | Permanent failure | Endpoint automatically disabled, no retries | | `429 Too Many Requests` | Rate limited | Honors `Retry-After` header if present | | All other non-`2XX` | Temporary failure | Automatic retry with exponential backoff | ### Retry schedule Failed deliveries are retried for up to 24 hours using exponential backoff with 10% jitter to prevent thundering herd issues: | Attempt | Delay | Cumulative Time | Notes | | ------- | ------------ | --------------- | -------------------------------------- | | 1 | Immediate | 0 seconds | Initial delivery | | 2 | \~30 seconds | \~30 seconds | 30s + random jitter (0-3s) | | 3 | \~1 minute | \~1.5 minutes | 60s + random jitter (0-6s) | | 4 | \~2 minutes | \~3.5 minutes | 120s + random jitter (0-12s) | | 5 | \~4 minutes | \~7.5 minutes | 240s + random jitter (0-24s) | | 6 | \~8 minutes | \~15.5 minutes | 480s + random jitter (0-48s) | | 7 | \~16 minutes | \~31.5 minutes | 960s + random jitter (0-96s) | | 8 | \~32 minutes | \~1 hour | 1920s + random jitter (0-192s) | | 9+ | \~1 hour | Varies | 3600s + random jitter (0-360s), capped | **Key points:** * Maximum individual retry delay: 1 hour * Total retry window: 24 hours * Jitter: 10% of base delay to distribute load * Guaranteed: At least one delivery attempt per hour during the retry window ### Handling failures To minimize failed deliveries: 1. **Respond quickly**: Return a `2XX` status within 30 seconds 2. **Implement idempotency**: Use the `webhook-id` header to handle duplicate deliveries 3. **Monitor endpoint**: Track success rates and response times 4. **Use proper status codes**: Return `410` if the endpoint is permanently decommissioned 5. **Handle rate limits**: Return `429` with `Retry-After` header if you need to throttle ## Idempotency Webhooks guarantee at-least-once message delivery. Moonbase includes a `webhook-id` header containing a unique identifier for each event. This ID remains the same across all retry attempts for a failed webhook, enabling applications to handle duplicate deliveries by tracking processed event IDs. ## Data Retention Event payloads and delivery response data are retained for 30 days before being automatically purged from Moonbase systems. This retention period allows for webhook replay and troubleshooting while maintaining data privacy compliance. # Zoom Guide Source: https://docs.moonbase.ai/zoom How to set up and get the most out of Moonbase + Zoom. ## Moonbase + Zoom Native Call‑Recording Guide Connect Zoom to Moonbase and every customer call you record is connected with a matching Meeting in Moonbase will be sync'd and reviewable in Moonbase. ### How to get support Please email [support@moonbase.ai](mailto:support@moonbase.ai) for support. ### What you need beforehand * **A Zoom plan that supports Cloud Recording**\ *Pro, Business, Enterprise*. The free plan does not support Cloud Recordings. * **Cloud Recording switched on**\ *Zoom Admin → Account Management → Account Settings → Recording → Cloud Recording.* * **Calendar events that contain the Zoom meeting link**\ Moonbase reads the URL (including Personal Meeting Room links) inside the invite to match the finished recording. > **Heads‑up:** If Cloud Recording is off or the host forgets to start it, nothing reaches Moonbase. ### One‑time connection steps 1. In Moonbase, open **Settings → Conference Solutions →  New Conference Solution**. 2. Click **Zoom** and then **Create**. 3. Sign in with a Zoom host/admin account and approve the requested scopes. 4. You’ll land back in Moonbase with the message **“Zoom connected successfully.”** That’s it—future meetings that meet the prerequisites will flow in automatically. ###  How matching works * **Scheduled meeting with a unique Zoom link** → Moonbase looks for that exact URL. * **Personal Meeting Room (PMI)** → Moonbase pairs the PMI link *and* the meeting’s start/end time window. * If two recordings could match, the one whose **start time** is closest to the calendar event wins. ### What you’ll see in Moonbase * ▶ **Embedded video player** – watch without leaving Moonbase. * 📝 **Interactive transcript** – click any sentence to jump the video. * 🤖 **AI‑generated summary** – key points & next steps in seconds. * 📊 **Talk‑time analytics** – who spoke (and for how long) by participant *and* organization. ###  Best‑practice checklist * Turn on **“Automatically record meetings to the cloud”** in Zoom. * Always paste the Zoom link into the calendar invite body. * Give each rep a unique meeting ID or leave buffer time between PMI sessions. * Re‑authorize Zoom in Moonbase → Settings if you ever change Zoom permissions. ### How to remove and disconnect Zoom from Moonbase 1. In Moonbase, open **Settings → Conference Solutions** 2. Click on the Zoom connection you wish to remove and disconnect 3. Click **Delete Conference Solution** 4. Confirm deletion when request in the dialog This will disconnect Zoom from Moonbase and no new meetings will be synchronized. ### Troubleshooting **Recording never appears**\ Cloud Recording was disabled or the host recorded locally. Enable Cloud Recording and record again. **Recording stuck in “Processing”**\ Zoom is still rendering. Large or long meetings simply need more time. **Duplicate recordings**\ The same Zoom link was reused back‑to‑back. Use unique IDs or add calendar buffers. **Transcript missing / low quality**\ Overlapping speakers or background noise. Encourage muting and headsets. ### Next steps 1. 🔄 **Connect Zoom now** in *Moonbase → Settings → Conference Solutions*. 2. 🎥 Host a short test meeting, with at least 2 people, add the Zoom link to the calendar event, record to the cloud, and watch it arrive in Moonbase.