Skip to content
Draft. Customer sending is not open yet; details on this page may change before launch.

API reference

Base URL: shown on your project’s API page. Authenticate every request with Authorization: Bearer <API key>.

Method Path Purpose
POST /v1/emails Submit a message. Requires Idempotency-Key.
GET /v1/emails/{id} Read a message’s status and history. Needs a key with read scope.
POST /v1/emails/{id}/cancel Cancel a message that hasn’t been sent yet.
GET /v1/usage Read your usage and remaining allowance.

Keys are either send-only or send, read and usage. A send-only key can’t look up status; use the dashboard instead.

Field Required Notes
stream_id yes UUID from the project’s API page
from yes { email, name? }; must match your approved sender
to yes Exactly one { email, name? }
subject yes Up to 998 characters
text / html at least one Body
reply_to no Exactly one { email, name? }
expires_at no ISO 8601 time; not sent afterwards
tags no Up to 10 keys (1–64 characters), values up to 256 characters
Code Meaning
202 Stored and queued (or recorded as suppressed). Not yet delivered.
400 Malformed request.
401 Missing, wrong or expired key.
403 The key isn’t allowed to do this, for example the wrong sender or scope.
404 Message or stream not found for this key.
409 Conflict, for example an idempotency key reused with different content.
413 Message too large.
422 Valid JSON that can’t be accepted, for example an unapproved sender.
429 Rate limit or allowance reached.
503 Temporarily unavailable or result uncertain. Retry with the same key and body.