Base URL
Authentication
Create an API key in Settings › API (Owner or Admin only). The key is shown once, at creation — store it in your secret manager. Send it on every request:
Revoking a key (Settings › API) is immediate and permanent.
Brands
A key belongs to the account, and every request operates on the brand bound to that key — the caller cannot select a brand per request, by design (a partner system never chooses where it writes). To integrate with a second brand, create a separate key under that brand in Settings › API.Error format
Errors return a stable machine-readable code — program againstcode, never against the human-readable message:
API_KEY_INVALID (401), API_KEY_REVOKED (401), API_KEY_SCOPE_INSUFICIENTE (403), RATE_LIMITED (429, includes a Retry-After header in seconds), EMAIL_INVALID (400), CONTACT_SUPPRESSED (409), DATE_RANGE_TOO_WIDE (400), METHOD_NOT_ALLOWED (405). Server-side failures use 5xx codes such as REPORT_READ_FAILED (503) — retry with backoff.
Rate limits
- 600 successful calls per key per minute — beyond that,
RATE_LIMITEDwithRetry-After. - 10 failed authentication attempts per IP per 10 minutes — beyond that,
API_KEY_RATE_LIMITED.
Honest-by-design responses
Two conventions worth knowing before you integrate:- Metrics that don’t exist come as
null, never0. WhatsApp has no open tracking, soopensisnullfor WhatsApp campaigns —0would be a lie. clickscounts human clicks only (bots, scanners and prefetchers removed). The raw number is available separately asclicks_including_bots.
What the API does not have (yet)
We list this rather than let you find out by trying:- Campaigns — creating, sending, retrieving or cancelling. Campaigns are built and sent in the app; through the API you read the outcome, at
GET /v1/reports/campaigns. - Lists — creating or deleting them, and adding or removing a contact from one. Lists are managed in the app; through the API you read them.
- Deleting a contact, and unsubscribing one.
opt_in: falseis “I am not declaring consent”, not “unsubscribe this person” — it grants nothing and revokes nothing (criar-contato.js). Someone unsubscribes through the unsubscribe link in the message, or an operator does it in the app; a partner system cannot unsubscribe on their behalf through the API. - Segments, templates, WhatsApp.
- Outbound webhooks and official SDKs — integrations poll the reports endpoint.