Skip to content

API Reference

The Comma Compliance API provides programmatic access to archived messages, compliance policies, and integration management. Use it to build custom workflows, export data to external systems, or integrate Comma into your existing compliance infrastructure.

https://app.commacompliance.com/api/v1

All API requests require a Bearer token in the Authorization header:

Authorization: Bearer <your-api-token>

Generate API tokens from the Development → API page in your Comma dashboard (open the team menu in the top-right, then Development → API). Tokens inherit the permissions of the user who created them.

The full, machine-readable OpenAPI 3.1 specification is published at:

https://app.commacompliance.com/api/v1/openapi.yaml

The same URL (with a copy button) is shown on the Development → API page. Load it into Swagger UI, Redoc, Postman, or an MCP-capable client (such as ChatGPT) to generate code or explore the live endpoints.

  • Standard plans - 100 requests per minute
  • Enterprise plans - 1,000 requests per minute

Rate limit headers are included in every response:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 97
X-RateLimit-Reset: 1714003200

The list below is the archive-reading surface most integrations need. The live /api/v1/openapi.yaml is the source of truth and includes the write and admin endpoints as well.

MethodEndpointDescription
GET/teams and /teams/{id}Your team(s)
GET/teams/{team_id}/platform_accounts and /platform_accounts/{id}Connected accounts (the channels being archived)
GET/platform_accounts/{id}/message_threadsList threads for an account
GET/message_threads/{id}Get a thread
GET/message_threads/{id}/messagesList messages in a thread
GET/messages/{id}Get a message
GET/messages/{id}/message_revisionsEdits and deletions of a message
GET/message_threads/{id}/thread_eventsJoins, leaves, renames, and similar events
GET/message_threads/{id}/message_thread_participantsParticipants in a thread
GET/platform_accounts/{id}/callsCalls for an account
GET/platform_accounts/{id}/voicemailsVoicemails for an account
GET/worm_records/{id}The original: the sealed record for an item, with its SHA-256
MethodEndpointDescription
GET, POST/teams/{team_id}/policiesList or create compliance policies
GET, PUT/policies/{id}Get or update a policy
GET/policies/{id}/policy_matchesMatches a policy produced
GET, POST/teams/{team_id}/team_casesList or create cases
GET/teams/{team_id}/audit_logsAudit trail
GET/teams/{team_id}/notificationsNotifications
MethodEndpointDescription
GET/teams/{team_id}/membershipsTeam members
GET/teams/{team_id}/team_contactsExternal contacts
GET/users and /users/{id}Users

Originals versus representations. The message, thread, revision, call, and voicemail endpoints return Comma’s working representation of each item - the shape the dashboard shows. /worm_records/{id} returns the original: the sealed record as it was captured, with its SHA-256. If you are migrating, auditing, or producing records, pull the sealed record for each item; use the representation endpoints to find them. To walk the whole archive, list platform accounts, then threads per account, then messages per thread (plus calls and voicemails per account), and fetch each item’s sealed record. Everything is paginated.

All responses return JSON with a consistent envelope:

{
"data": { },
"meta": {
"page": 1,
"per_page": 50,
"total": 234
}
}

Error responses include a machine-readable code and human-readable message:

{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Try again in 60 seconds."
}
}

Official SDKs are coming soon. In the meantime, the REST API works with any HTTP client.

Contact support@commacompliance.com for API access questions or to request higher rate limits.