Send transactional mail from a sibling application, RFC 5322 address strings (scope: emails:send)
Same pipeline as `/emails/send` (verified sender domain, fail-closed suppression, Safe Mode, outbox retry, `email.*` webhooks) with a flatter wire shape: addresses are strings (`"Ana <ana@x.ro>"`), `tags` is a key→value map, custom headers are allowed except envelope/MIME/authentication ones (From, To, Cc, Bcc, Subject, Reply-To, Message-ID, Date, Content-Type, DKIM-Signature, ARC-*, …; no CR/LF). `category` defaults to `transactional`; `auth` and `alert` are aliases for `transactional` and `notification`; `marketing` → 422. `from` on an unverified domain → 422 `from_domain_not_verified`; omit it for the org default sender. A `from` that no sending identity may send as → 422 `sender_identity_missing` (nothing recorded): use the sending address of the domain, or a hosted mailbox / alias with API sending enabled. 202 whenever the message is recorded — `status` is `sent`, `queued` (including a transport failure parked for retry) or `suppressed` (non-error). A transport refusal that could not be queued → 502 `send_failed`. `id`, `status` and `suppressed` are mirrored at the top level of the 202 body for clients that read them there. Honours `Idempotency-Key`. Shares the 600/h per-organisation limit with `/emails/send`.
Same pipeline as /emails/send (verified sender domain, fail-closed suppression, Safe Mode, outbox retry, email.* webhooks) with a flatter wire shape: addresses are strings ("Ana <ana@x.ro>"), tags is a key→value map, custom headers are allowed except envelope/MIME/authentication ones (From, To, Cc, Bcc, Subject, Reply-To, Message-ID, Date, Content-Type, DKIM-Signature, ARC-*, …; no CR/LF). category defaults to transactional; auth and alert are aliases for transactional and notification; marketing → 422. from on an unverified domain → 422 from_domain_not_verified; omit it for the org default sender. A from that no sending identity may send as → 422 sender_identity_missing (nothing recorded): use the sending address of the domain, or a hosted mailbox / alias with API sending enabled. 202 whenever the message is recorded — status is sent, queued (including a transport failure parked for retry) or suppressed (non-error). A transport refusal that could not be queued → 502 send_failed. id, status and suppressed are mirrored at the top level of the 202 body for clients that read them there. Honours Idempotency-Key. Shares the 600/h per-organisation limit with /emails/send.
bearerAuthAuthorizationBearer <token>API key as Bearer token
Idempotency-Key?stringlength <= 255application/json- body
Sibling-application mail (POST /email/send). Addresses are RFC 5322 strings. At least one of html / text is required.
from?stringMust be on a VERIFIED sending domain; omit for the org default.
length <= 420to*array<>1 <= items <= 50cc?array<>items <= 50bcc?array<>items <= 50reply_to?stringlength <= 420subject*string1 <= length <= 998html?stringtext?stringheaders?Custom headers. Envelope, MIME and authentication headers are rejected (422); no CR/LF.
tags?Key→value labels; stored as key:value tags (first 10).
category?stringauth → transactional, alert → notification; marketing is refused (use campaigns).
"transactional""transactional""notification""marketing""auth""alert"OK
application/json- response
data*error?nullid*stringMirror of data.id.
uuidstatus*stringMirror of data.status.
"queued""sent""suppressed"suppressed?array<string>Mirror of data.suppressed_recipients.
curl -X POST "https://example.com/email/send" \ -H "Content-Type: application/json" \ -d '{ "from": "codai <no-reply@mail.codai.ro>", "to": [ "ana@client.ro" ], "subject": "Your sign-in code", "text": "Code: 481 220", "category": "transactional", "tags": { "kind": "auth_email" }, "headers": { "X-Entity-Ref-ID": "auth-8f2c" } }'{ "data": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "message_id": "string", "status": "queued", "suppressed_recipients": [ "string" ] }, "error": null, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "status": "queued", "suppressed": [ "string" ]}Get a message sent through /email/send, with its delivery timeline (scope: emails:send) GET
Org-scoped. Accepts a key holding `emails:read` or `emails:send`, so a sending application can poll what it sent.
Register a sending domain and get the DNS records to publish (scope: email_domains:write) POST
Returns the ownership TXT (`_brivio.<domain>`), SPF, DKIM selector record(s), DMARC and — when hosted — MX. Publish them, then call `/email-domains/{id}/verify`. 409 when the domain is already registered or claimed by another account; 503 when provisioning is not configured.