API v1Private beta. The API is stable; send limits are low while the shared domain warms up.

Reference

REST API

Endpoints, authentication and the OpenAPI 3.1 spec.

  • Base URL: https://api.send0.dev
  • Auth: Authorization: Bearer s0_live_…
  • Format: JSON in, JSON out, snake_case fields, ISO 8601 timestamps
  • Spec: OpenAPI 3.1, checked against the live API in our test suite. Use it to generate clients in any language.

Endpoints

MethodPathScope
POST/v1/inboxessend
GET/v1/inboxes · /v1/inboxes/{inbox_id}read
PATCH/v1/inboxes/{inbox_id}send
DELETE/v1/inboxes/{inbox_id}admin
GET/v1/inboxes/{inbox_id}/messagesread
GET/v1/inboxes/{inbox_id}/messages/waitread
POST/v1/inboxes/{inbox_id}/messagessend
GET/v1/messages: every inbox the key can see, filter by inbox_id, status, direction, qread
GET/v1/messages/{message_id} · /raw · /attachments/{attachment_id}read
POST/v1/messages/{message_id}/reply · /forwardsend
GET/v1/inboxes/{inbox_id}/threads · /threads/{thread_id}read
GET/v1/drafts (every inbox; status=pending is the approval queue) · /v1/inboxes/{inbox_id}/drafts · /v1/drafts/{draft_id}read
PATCH/v1/drafts/{draft_id}: edit a pending draft's subject, text or htmlsend
POST/v1/drafts/{draft_id}/send · /rejectadmin (or a person in the dashboard)
POST GET PATCH DELETE/v1/webhooks[/{webhook_id}]admin
POST/v1/webhooks/{webhook_id}/rotate-secret · /testadmin
GET/v1/webhooks/{webhook_id}/deliveriesadmin
POST/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retryadmin
GET/v1/events/streamread
GET/v1/usage: plan, inboxes used, sends today against the daily limit, paused stateread
GET/v1/stats?days=14: mail per UTC day (received, sent, delivered, bounced, failed), up to 90 daysread
POST/mcp: the remote MCP server (Streamable HTTP)as the key
POST GET/v1/api-keys · DELETE /v1/api-keys/{api_key_id}admin

Conventions: errors, idempotency and pagination.

Rate limits

Requests are counted per minute:

Applies toLimitCounted per
Every request with an API key (and the dashboard)600 / minAPI key (or person)
Requests that send mail: send, reply, forward, POST /v1/drafts/{draft_id}/send60 / minAPI key (or person)
Requests with a missing or invalid API key, and signed download links60 / minClient IP

Over a limit, the API answers 429 with the code rate_limited and a Retry-After header giving the seconds to wait. The SDKs wait that long and retry on their own. /health and /openapi.json aren't limited.

Don't poll for new mail. One GET /v1/inboxes/{inbox_id}/messages/wait counts as one request however long it waits, and it returns as soon as a matching message arrives. For everything else, use webhooks or the event stream, which push new mail and events to you as they happen.

On this page