Activity Messenger Help Center
API introduction
Use the Activity Messenger API from your server to connect organization data or publish website content. Start here for connection details and shared conventions, then choose a resource reference below.
Authentication and base URL
Send all requests to https://activitymessenger.com/api/v1/organization/{organization}. Replace {organization} with the numeric organization ID. A website’s custom domain is not the API host.
Obtain your organization API key from Organization settings → Web & integrations → API keys / MCP tokens. Send it in the X-Activity-Messenger-Api-Key HTTP header. Keep it in server-side secret storage; do not embed it in browser JavaScript, URLs, or public repositories. Send Accept: application/json; for JSON request bodies, also send Content-Type: application/json. File uploads use multipart form data instead.
New API keys apply to the issuing organization by default. Partner-network access is optional; see below. The Website API requires a direct key for the organization in the URL, with websites enabled; it never inherits partner access. A newly issued API key can access all websites owned by that organization and is not read-only. Migrated Stripe App credentials do not authorize Website publishing.
Create and manage API keys
Only account owners and organization owners can issue, view or revoke API keys and manage MCP tokens. Other permission levels, including HR and Admin, cannot manage them.
- Open Organization settings → Web & integrations → API keys / MCP tokens.
- Click Add a key / token to open the creation modal. Choose API key as the Credential type.
- Enter a descriptive Name, such as “Registration integration”, and a Validity in days from 1 to 90. The default is 30 days.
- Leave Allow access to partner organizations unchecked unless the integration needs the partner network. This option requires an organization that belongs to a partner network.
- Click Add a key / token, then copy the key into the integration’s protected server-side storage.
Use a separate named key for each integration. API keys permit reads and changes supported by their endpoints; they have no read-only option. They are organization credentials, so removing the issuing user does not revoke them.
To view an existing, unrevoked key again, click Show API key in its row. A modal lets an owner view and copy the encrypted stored key. Showing an expired key does not reactivate it. MCP tokens cannot be shown again after their creation modal closes.
Search by name and use Status to find active, expired or revoked credentials. The list also shows the issuer, creation date, expiry and last use. To replace a key, create a new one, update the integration, verify it works, then click Revoke on the old key and confirm. Revocation immediately blocks subsequent authentication and cannot be undone. Create a replacement before a key expires.
Optional partner access
Allow access to partner organizations grants organization API access to all organizations in the same partner network. It is a setting on the key, not a query parameter sent with each request. Continue putting the target organization’s ID in the request URL.
An owner can change an existing key’s scope from its Organization scope button in the list: This organization or Partner network. Confirm the scope change. Disabling partner access stops integrations using that key for other organizations. Changes to network membership affect which organizations the key can access. Website publishing always stays restricted to the issuing organization.
Existing keys
Existing organization API keys appear in the same list without a change to their value or an added expiry. They retain their previous partner-network access. You can show them, limit their scope or revoke them using the same controls as new keys. Revoking a migrated shared key also stops partner access through that key.
Existing Stripe App credentials are also listed and can be revoked for the selected organization. Before revoking any shared credential, update the integrations that still use it.
API keys and MCP Bearer tokens
Use API key for the organization and Website APIs, and MCP token for a manual MCP connection. These are different credentials. “Bearer” describes how an MCP token is sent: Authorization: Bearer <mcp-token>. An API key sent in X-Activity-Messenger-Api-Key cannot authenticate MCP.
See Connect an AI assistant with MCP for manual tokens and OAuth connections. The IFRAME settings page contains embedding settings and a link to key management; it no longer displays the API key.
Make a first request
Read organization information with GET /api/v1/organization/{organization} and the headers above. Resource references show HTTP methods and paths; replace placeholders with the IDs returned by the API. IDs, external page keys, slugs, and membership numbers are distinct identifiers: use the identifier documented for each endpoint.
Pagination
Pagination depends on the endpoint; do not assume every collection has the same response shape.
- Optional pagination: users, members, forms, form tags, classes, and class tags return an array of at most 50 items when neither
pagenorper_pageis supplied. Supply either parameter to receive a paginator withdata,current_page,next_page_url, and totals. The default is 50 items; the maximum is 250. - Published messages and templates: always paginated, with 10 items per page by default. Set
per_pageandpageas needed. - Form respondents: always simple pagination; default 50, maximum 250. There is no
total,last_page, orlast_page_url. - Website lists: websites, pages, and assets always use simple pagination at a fixed 50 items per page. Use
page;per_pagedoes not change the page size. There are no totals. - Other collections: products, product tags, and booking packages return arrays. Calendar events use date-range filters. See the resource reference before adding pagination parameters.
For paginated responses, process data and stop when next_page_url is null. Retain the original filters and page size on subsequent requests; returned links may not repeat every query parameter. Send authentication on every request. Avoid logging the key or sensitive response data.
Rate limits and retries
The application API is configured for 240 requests per minute. Website routes also apply a 60-request-per-minute throttle. These are shared limits, not independent allowances per endpoint or organization key. Ordinary API-key requests are throttled by the caller’s IP address; integrations behind the same outbound address can share capacity.
Inspect X-RateLimit-Limit and X-RateLimit-Remaining when present. On HTTP 429, wait at least the number of seconds in Retry-After before retrying. Reduce concurrency and use bounded retries with backoff for temporary failures. Do not repeatedly retry authentication or validation errors.
Do not blindly retry writes after a timeout: the operation may already have succeeded. Website revision staging and publication have documented idempotency guarantees; other mutations do not share that guarantee. Read the resulting state before deciding whether to repeat a write.
Responses and errors
Successful calls return endpoint-specific JSON: an object, array, or paginator. Check the HTTP status before processing the body. Do not assume every error uses the same envelope; older organization endpoints can return a JSON string or null.
401: missing or invalid API credentials. Check the key, expiry, revocation, partner scope and target organization.404: resource unavailable or inaccessible. Check IDs and ownership; Website access also requires the feature to be enabled.409: a Website revision or redirect baseline is stale. Read the current state, reconcile the change, and review a new request.413: the request is too large. Website document requests have a 2 MB limit; image upload limits are documented separately.422: invalid input or an unsupported operation. Validation responses may includemessageand field-levelerrors; correct the request before retrying.429: rate limit reached. HonorRetry-After.
Dates, filters, and updates
Use the formats documented for each parameter. A timestamp ending in Z is UTC; a business-date filter such as YYYY-MM-DD is not a UTC instant. Follow the endpoint’s organization-timezone and date-boundary rules. Array filters use brackets such as tags[]=swimming. Preserve the distinction between omitted fields, null, and empty arrays, especially when replacing content or attendance.
Organization API references
- Organization and network
- Staff and permissions
- Members and check-ins
- Forms and respondent exports
- Classes and calendars
- Attendance
- Booking packages
- Products
- Published messages and templates
Website API references
- Publish pages: discovery, full documents, revision review, publication, and deletion.
- Assets, shared sections, and redirects: image manifests, reusable navigation, and redirect replacement.
Endpoint index
Every endpoint documented in these references. Organization API paths are relative to https://activitymessenger.com; Website API paths are relative to /api/v1/organization/{organization}/websites/{website} unless shown in full.
| Method | Path | Reference |
|---|---|---|
| GET | /api/v1/organization/{organization} |
Organization and network |
| GET | /api/v1/organization/{organization}/network |
Organization and network |
| GET | /api/v1/organization/{organization}/users |
Staff and permissions |
| GET | /api/v1/organization/{organization}/users/{user} |
Staff and permissions |
| POST | /api/v1/organization/{organization}/users |
Staff and permissions |
| PUT | /api/v1/organization/{organization}/users/{user} |
Staff and permissions |
| DELETE | /api/v1/organization/{organization}/users/{user} |
Staff and permissions |
| GET | /api/v1/organization/{organization}/members |
Members and check-ins |
| GET | /api/v1/organization/{organization}/members/{member} |
Members and check-ins |
| POST | /api/v1/organization/{organization}/members/{member}/checkin |
Members and check-ins |
| GET | /api/v1/organization/{organization}/forms |
Forms and respondent exports |
| GET | /api/v1/organization/{organization}/form_tags |
Forms and respondent exports |
| GET | /api/v1/organization/{organization}/forms/{form} |
Forms and respondent exports |
| POST | /api/v1/organization/{organization}/forms/{form}/submit |
Forms and respondent exports |
| GET | /api/v1/organization/{organization}/forms/{form}/respondents |
Forms and respondent exports |
| GET | /api/v1/organization/{organization}/forms/{form}/respondents/parameters |
Forms and respondent exports |
| GET | /api/v1/organization/{organization}/classes |
Classes and calendars |
| GET | /api/v1/organization/{organization}/classes/{class} |
Classes and calendars |
| POST | /api/v1/organization/{organization}/classes |
Classes and calendars |
| PUT | /api/v1/organization/{organization}/classes/{class} |
Classes and calendars |
| DELETE | /api/v1/organization/{organization}/classes/{class} |
Classes and calendars |
| GET | /api/v1/organization/{organization}/class_tags |
Classes and calendars |
| GET | /api/v1/organization/{organization}/class_categories |
Classes and calendars |
| GET | /api/v1/organization/{organization}/class_events |
Classes and calendars |
| GET | /api/v1/organization/{organization}/classes/{class}/attendance |
Attendance |
| PUT | /api/v1/organization/{organization}/classes/{class}/attendance |
Attendance |
| PATCH | /api/v1/organization/{organization}/classes/{class}/attendance |
Attendance |
| GET | /api/v1/organization/{organization}/package_categories |
Booking packages |
| GET | /api/v1/organization/{organization}/packages |
Booking packages |
| GET | /api/v1/organization/{organization}/package_categories/{package_category}/packages |
Booking packages |
| GET | /api/v1/organization/{organization}/products |
Products |
| GET | /api/v1/organization/{organization}/product_tags |
Products |
| GET | /api/v1/organization/{organization}/published_messages |
Published messages and templates |
| GET | /api/v1/organization/{organization}/published_templates |
Published messages and templates |
| GET | /api/v1/organization/{organization}/websites |
Publish pages |
| GET | / |
Publish pages |
| GET | /component-schema |
Publish pages |
| GET | /pages |
Publish pages |
| POST | /pages |
Publish pages |
| GET | /pages/{page} |
Publish pages |
| PUT | /pages/{page}/document |
Publish pages |
| DELETE | /pages/{page} |
Publish pages |
| GET | /page-keys |
Publish pages |
| GET | /page-keys/{key} |
Publish pages |
| POST | /revisions |
Publish pages |
| GET | /revisions/{revision} |
Publish pages |
| POST | /revisions/{revision}/publish |
Publish pages |
| GET | /assets |
Assets, shared sections, and redirects |
| POST | /assets |
Assets, shared sections, and redirects |
| GET | /shared-section-keys/{key} |
Assets, shared sections, and redirects |
| POST | /shared-sections/revisions |
Assets, shared sections, and redirects |
| GET | /redirects |
Assets, shared sections, and redirects |
| PUT | /redirects |
Assets, shared sections, and redirects |