Developers

API reference

Scoped keys, one request at a time. No SDK required — everything below is plain REST over HTTPS.

Authentication

Every request carries Authorization: Bearer <key>. Create a key under Integrations → API keys in the dashboard — an owner-only action, and the full key is shown exactly once, at creation. Each key is granted specific scopes; calling an endpoint without the scope it needs returns 403.

Revoking a key takes effect immediately — the very next request with it fails, with no propagation delay.

Rate limits

60 requests per minute, per key. Exceeding it returns 429 with a Retry-After-equivalent wait time in the error message.

Versioning

The current (and only) version is v1, namespaced in the URL — /api/v1/…. A breaking change would ship as /api/v2alongside it, not as a silent change to v1's behaviour.

leads

get/api/v1/leadsleads:read

List leads

Cursor-paginated, newest first. Use `nextBefore` from the response to page further back.

limitqueryMax rows to return (1-100, default 25).
beforequeryISO timestamp cursor — returns leads captured before this instant.
post/api/v1/leadsleads:write

Create a lead

Records a lead against a channel account you own. This is a data record, not a conversation event — it does not trigger notifications, Sheets sync, CRM push, or automations, which are reserved for leads a customer produced by actually messaging you.

Required body fields: channelAccountIdnamephone

get/api/v1/leads/{id}leads:read

Get a lead

Returns 404 for an id that does not exist or belongs to a different workspace — the two are indistinguishable on purpose.

id *pathLead id.

contacts

get/api/v1/contactscontacts:read

List contacts

Offset-paginated. `query` searches name, phone and email.

limitqueryMax rows to return (1-100, default 25).
offsetqueryRows to skip.
queryqueryFree-text search over name, phone and email.
get/api/v1/contacts/{id}contacts:read

Get a contact

Returns 404 for an id outside your workspace.

id *pathContact id.

broadcasts

get/api/v1/broadcastsbroadcasts:read

List broadcasts

Every broadcast in the workspace, newest first — draft, scheduled, sent and cancelled alike.

get/api/v1/broadcasts/{id}broadcasts:read

Get a broadcast

Returns 404 for an id outside your workspace.

id *pathBroadcast id.

messages

get/api/v1/messagesmessages:read

Get a contact's message transcript

Returns the full thread with a contact across whichever channel they last messaged on. Read-only — sending a message via the API is not yet available; see the description on this operation in the hosted docs for why.

contactId *queryContact id (from GET /contacts).
limitqueryMax messages to return (1-500, default 200).
Raw OpenAPI 3.1 spec (JSON) →