The main endpoints, in one index.
51 endpoints across 9 groups. Curated index today; auto-generated per-endpoint pages from our OpenAPI spec are Planned. For now, multi-language samples for the most-used endpoints live on /for-developers and in the quickstart.
The key knows its workspace.
Calls your application makes (/api/transactional/send, /api/conversions) take an API key as a bearer token. The key belongs to one workspace, so there is no X-Workspace-Id header to send. Dashboard routes such as campaigns use the signed-in session instead.
API tokens, OAuth flows, 2FA, password reset.
GET/api/auth/meCurrent user + workspacesPOST/api/auth/loginEmail + password authenticationPOST/api/auth/signupCreate user + first workspaceGET/api/tokensList API tokens for the active workspacePOST/api/tokensMint a new API token (plaintext returned once)POST/api/tokens/{id}/revokeRevoke an API tokenPOST/api/tokens/{id}/rotateRotate to a new token under the same name
Multi-workspace orgs with RBAC.
POST/api/workspacesCreate a new workspace (user becomes owner)PATCH/api/workspaces/{id}Rename a workspace / update its settingsGET/api/workspaces/{id}/membersList members + their rolesPOST/api/workspaces/{id}/membersInvite a member by emailDELETE/api/workspaces/{id}/members/{user_id}Remove a member
Add sending domains, manage CNAME delegation, advance DMARC.
GET/api/domainsList sending domainsPOST/api/domainsAdd a domain (returns DNS records to publish)POST/api/domains/{id}/verifyRe-run multi-resolver DNS verificationPOST/api/domains/{id}/rotate-dkimGenerate a fresh DKIM keypairPOST/api/domains/{id}/dmarc/advanceBump DMARC progression to the next stepPOST/api/checkPublic deliverability check (no auth, rate-limited)
The one endpoint your application calls. Bearer API key, no session.
POST/api/transactional/sendFire a journey for one recipient: trigger_key, to, variables, idempotency_keyGET/api/transactional/journeysList journeys and their trigger keysPOST/api/transactional/journeysCreate a journeyGET/api/transactional/messagesMessage stream: filter by status, mode or trigger_keyGET/api/transactional/messages/{id}One message with its final rendered HTML
Marketing broadcasts to a segment. Dashboard session, not an API key.
POST/api/campaignsCreate a campaign draftPOST/api/campaigns/sendCreate and send a campaign (needs a name and a draft_id)POST/api/campaigns/{id}/cancelCancel a scheduled or in-flight campaignGET/api/campaigns/{id}Campaign metadata + send progressGET/api/campaigns/{id}/reportReply rate, replies by meaning, attributed revenue
Connect Gmail / Outlook / IMAP for reply intelligence.
GET/api/mailboxesList connected mailboxesPOST/api/mailboxes/gmail/callbackComplete Gmail OAuth flowPOST/api/mailboxes/outlook/callbackComplete Microsoft Graph OAuth flowPOST/api/mailboxes/imap/connectConnect an IMAP mailbox by credentialsDELETE/api/mailboxes/{id}Disconnect a mailbox
Classified replies, contact upsert + segmentation.
GET/api/repliesList recent replies with filtersPOST/api/replies/ingestManually ingest a reply (for testing)POST/api/inbound/{workspace_id}/emailWebhook for external inbound parsersGET/api/contactsList contactsPOST/api/contactsCreate or upsert a contact
Subscriptions, deliveries, replay.
GET/api/webhooks/events/samplesEvery event type with a generated sample payloadGET/api/webhooksList webhook subscriptionsPOST/api/webhooksCreate a subscription (signing secret returned once)PATCH/api/webhooks/{id}Update URL / events / statusPOST/api/webhooks/{id}/rotate-secretGenerate a new signing secretPOST/api/webhooks/{id}/testFire a test.ping event at this endpointGET/api/webhooks/{id}/deliveriesRecent delivery attempts + statusPOST/api/webhooks/deliveries/{id}/replayRe-queue a failed delivery
Reply triggers and canvas automations.
GET/api/automationsList automationsPOST/api/automationsCreate automation with trigger + actionsPATCH/api/automations/{id}Update automationDELETE/api/automations/{id}Delete automationPOST/api/automation-flows/eventsFire an API-event trigger: enrols one recipient in the active transactional automation with that trigger_key (202; idempotent on idempotency_key)
Background reading.
- An API key leaked: spot it, contain it, replace itWhat to do in the first hour after an API key leaks, and how scoped keys keep the damage small.
- Retry a transactional email without sending it twiceChoose an idempotency key from the event, retry safely, and keep a teammate from renaming a live trigger key.
- Start an email automation from your app with one API callFire a flow from your code with one POST, then let marketing change the emails behind it without a deploy.
- Marketing vs transactional email: what the label changesThree questions that settle the label, and the headers, do-not-send rules and limits that follow from it.