Send email
Send one transactional email to up to 50 recipients.
Works with sending-access and full-access keys. The email is queued and sent within seconds; the response returns as soon as it is accepted.
Body parameters
Sender address, as hello@acme.com or Acme <hello@acme.com>. It must be an active sender on a verified domain in your account. Without a display name, the sender's display name is used. Optional when the template has a default sender.
Recipient addresses. Up to 50 recipients in total across to, cc and bcc.
Single line, up to 998 characters. Optional when the template has a default subject.
HTML body. Provide html, text or a template.
Plain-text body. If omitted, Cresca generates it from html. Send an empty string to leave the text part out.
Carbon-copy recipients.
Blind carbon-copy recipients. They never appear in the message headers.
Reply-To addresses. Defaults to the sender's Reply-To, if it has one.
Send a published template instead of html/text: { "id": "password-reset", "variables": { "NAME": "Ana" } }. id is the template id or alias. See Templates and variables.
ISO 8601 date-time to send at, up to 30 days ahead, for example 2026-10-21T09:00:00Z. A time in the past sends immediately.
Up to 10 { "name", "value" } pairs to label the email, for example { "name": "category", "value": "password_reset" }. Names and values use ASCII letters, numbers, underscores and dashes, up to 256 characters.
Custom headers, such as List-Unsubscribe or X-Entity-Ref-ID. Up to 50. Headers that Cresca controls (From, To, Cc, Bcc, Subject, Reply-To, Return-Path, Message-ID and similar) are rejected; use the request fields instead.
Up to 20 files, 7 MB in total. Each item has filename, base64 content, and optionally content_type and content_id (to show an inline image with <img src="cid:logo">). Executable types such as .exe and .js are refused. Attaching by path (URL) is not supported yet.
Headers
Makes the request safe to retry. See Idempotency.
Example
curl -X POST 'https://api.cresca.xyz/api/v1/emails' \
-H 'Authorization: Bearer cr_live_xxxxxxxxx' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: invoice/inv-2026-0042' \
-d '{
"from": "Acme Billing <billing@acme.com>",
"to": [
"user@example.com"
],
"reply_to": "support@acme.com",
"subject": "Your invoice INV-2026-0042",
"html": "<p>Thanks for your payment. Your invoice is attached.</p>",
"tags": [
{
"name": "category",
"value": "invoice"
}
],
"attachments": [
{
"filename": "invoice.pdf",
"content": "JVBERi0xLjQKJ..."
}
]
}'{
"id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c"
}Recipients on your suppression list are skipped, but the request still succeeds. See Suppression. Unknown fields in the body are ignored.