Brivio API reference
Emails

Send a transactional or notification email as the organisation (scope: emails:send)

Accepted with 202 once the message is durably recorded; delivery is asynchronous. Honours `Idempotency-Key` (same key → same `id`). Rate limit 600/h per organisation. Suppressed recipients (bounces, complaints, org opt-outs) are reported per recipient and never handed to the MTA; if every `to` is suppressed the message is recorded with `status: suppressed`. `category: marketing` → 422 (use campaigns). `from` on an unverified domain → 422. A `from` on a verified domain that no sending identity may send as → 422 `sender_identity_missing` (nothing recorded). Sendable: the sending address of the domain (`<from_local_part>@<domain>`; re-run `/email-domains/{id}/verify` if its identity is missing), or a hosted mailbox of the organisation or one of its aliases with API sending enabled (Mail settings). Attachments over 2 MB decoded → 413. Webhooks: `email.sent`, `email.delivered`, `email.bounced`, `email.complained`, `email.suppressed`.

POST
/emails/send

Accepted with 202 once the message is durably recorded; delivery is asynchronous. Honours Idempotency-Key (same key → same id). Rate limit 600/h per organisation. Suppressed recipients (bounces, complaints, org opt-outs) are reported per recipient and never handed to the MTA; if every to is suppressed the message is recorded with status: suppressed. category: marketing → 422 (use campaigns). from on an unverified domain → 422. A from on a verified domain that no sending identity may send as → 422 sender_identity_missing (nothing recorded). Sendable: the sending address of the domain (<from_local_part>@<domain>; re-run /email-domains/{id}/verify if its identity is missing), or a hosted mailbox of the organisation or one of its aliases with API sending enabled (Mail settings). Attachments over 2 MB decoded → 413. Webhooks: email.sent, email.delivered, email.bounced, email.complained, email.suppressed.

Authorization

bearerAuth
headerAuthorizationBearer <token>

API key as Bearer token

Header Parameters

Idempotency-Key?string
Lengthlength <= 255

Request Body

application/json
  1. body

Transactional or notification email sent as the organisation. from must be on a VERIFIED sending domain (see /email-domains); omit it to use the default sender. category: marketing is refused (422) — use campaigns.

to*array<>
Items1 <= items <= 50
cc?array<>
Itemsitems <= 50
bcc?array<>
Itemsitems <= 50
subject*string
Lengthlength <= 998
html?string

At least one of html / text is required.

text?string
from?
reply_to?
headers?

Allow-listed: X-Entity-Ref-ID, List-Unsubscribe.

category*string
Value in"transactional""notification"
tags?array<>
Itemsitems <= 10
attachments?array<>
Itemsitems <= 20

Response Body

OK

application/json
  1. response
data*
error*null
curl -X POST "https://example.com/emails/send" \  -H "Content-Type: application/json" \  -d '{    "to": [      {        "email": "ana@client.ro",        "name": "Ana Popescu"      }    ],    "subject": "Factura 2026-0042",    "html": "<p>Bună ziua, atașat găsiți factura.</p>",    "category": "transactional",    "tags": [      "invoice"    ],    "headers": {      "X-Entity-Ref-ID": "inv_2026_0042"    }  }'
{  "data": {    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",    "status": "queued",    "category": "transactional",    "from": "string",    "subject": "string",    "recipients": [      {        "email": "user@example.com",        "name": "string",        "kind": "to",        "status": "accepted"      }    ],    "suppressed_recipients": [      "string"    ],    "tags": [      "string"    ],    "message_id": "string",    "provider_message_id": "string",    "idempotency_key": "string",    "last_error": "string",    "created_at": "2019-08-24T14:15:22Z",    "sent_at": "2019-08-24T14:15:22Z",    "delivered_at": "2019-08-24T14:15:22Z",    "bounced_at": "2019-08-24T14:15:22Z",    "complained_at": "2019-08-24T14:15:22Z",    "events": [      {        "type": "email.queued",        "at": "2019-08-24T14:15:22Z"      }    ]  },  "error": null}