Endpoints
The whole route table on one page. Every route requires X-API-Key except the two marked public. Field-level detail lives on the resource pages.
Sending and messages
| Method | Path | Notes |
|---|---|---|
POST | /v1/send | Send one message. Returns 202. |
GET | /v1/messages | Paged. Filters: status, search, date_from, date_to, api_key_id, channel_id, domain_id, broadcast_id. |
GET | /v1/messages/metrics | range=24h|7d|30d. |
GET | /v1/messages/{id} | One message, with its lifecycle events. |
GET | /v1/emails/{id} | An email's delivery state. |
Contacts
| Method | Path | Notes |
|---|---|---|
POST GET | /v1/contacts | Create / list. List is paged. |
GET PATCH DELETE | /v1/contacts/{id} | One contact. |
POST DELETE | /v1/contacts/{id}/unsubscribe | Suppress / lift. ?segment_id= scopes it to one segment. |
GET | /v1/unsubscribes | The suppression list. Paged. |
DELETE | /v1/unsubscribes/{id} | Lift one entry. |
POST GET | /v1/contact-imports | Bulk CSV import. List is paged. |
GET | /v1/contact-imports/{id} | Import status. |
POST GET | /v1/contact-properties | Property definitions. |
PATCH DELETE | /v1/contact-properties/{id} |
Segments
| Method | Path | Notes |
|---|---|---|
POST GET | /v1/segments | Create / list. |
GET PATCH DELETE | /v1/segments/{id} | One segment. |
GET | /v1/segments/{id}/contacts | Live membership. Paged. |
POST | /v1/segments/{id}/members | Add contacts by hand. |
DELETE | /v1/segments/{id}/members/{contactId} | Remove a hand-added member. |
Broadcasts
| Method | Path | Notes |
|---|---|---|
POST GET | /v1/broadcasts | Create / list. |
GET PATCH DELETE | /v1/broadcasts/{id} | Edit and delete are draft-only. |
POST | /v1/broadcasts/{id}/send | Queue the fan-out. |
Templates
| Method | Path | Notes |
|---|---|---|
POST GET | /v1/templates | Create / list. List takes status. |
GET PATCH DELETE | /v1/templates/{id} | One template. |
POST | /v1/templates/{id}/move | Body: folder_id, or null for the root. |
POST GET | /v1/template-folders | Folders. |
PATCH DELETE | /v1/template-folders/{id} |
Forms
| Method | Path | Notes |
|---|---|---|
POST GET | /v1/forms | Create / list. |
GET PATCH DELETE | /v1/forms/{id} | One form. |
GET | /v1/forms/{id}/submissions | Paged. |
POST | /v1/forms/{id}/submissions | Public. No API key — rate-limited instead. Form encodings only; 303 to the form's redirect_url when the caller accepts text/html. |
Automations
| Method | Path | Notes |
|---|---|---|
POST GET | /v1/automations | Create / list. |
GET | /v1/automations/metrics | Across all automations. range=24h|7d|30d. |
GET PATCH DELETE | /v1/automations/{id} | One automation. |
GET | /v1/automations/{id}/runs | Per-node run detail. Paged. |
GET | /v1/automations/{id}/metrics | One automation's counts. |
Domains, channels, webhooks
| Method | Path | Notes |
|---|---|---|
POST GET | /v1/domains | Sending domains. |
POST | /v1/domains/{id}/verify | Re-resolve the DNS and update the status. |
DELETE | /v1/domains/{id} | |
POST GET | /v1/channels | Discord / Telegram / ntfy. Credentials stored encrypted. |
DELETE | /v1/channels/{id} | No update — delete and recreate. |
POST | /v1/channels/{id}/messages | Push to a channel. |
POST GET | /v1/webhooks | Signed event callbacks. |
DELETE | /v1/webhooks/{id} | No update. |
Account
| Method | Path | Notes |
|---|---|---|
GET | /v1/usage | Plan, limits and current usage. |
GET | /health | Public. Service health. |
Verbs that do not exist
Worth knowing before you go looking:
- No
PATCHon webhooks or channels — delete and recreate. - No
GET /v1/channels/{id}or/v1/contact-properties/{id}— read them from the list, which is not paged. - No delete for a broadcast that has left
draft, and no way back to it. - No account, organization, member or API-key management here. Those live in the control-panel API behind the dashboard, not in the public API.