SendboundSendbound

Send Email

Send a transactional email via the REST API.

Send a single transactional email. Use Batch to send up to 100 different emails in one API call.

POST/v1/send
Bearer
curl -X POST 'https://api.sendbound.com/v1/send' \
  -H 'Authorization: Bearer <your-token>' \
  -H 'Content-Type: application/json' \
  -d '{
"to": "jane@example.com",
"from": "hello@yourdomain.com",
"subject": "Welcome to Acme",
"body": "<h1>Welcome, {{name}}!</h1><p>Thanks for signing up.</p>",
"data": { "name": "Jane" }
}'

Request body

FieldTypeRequiredDescription
tostring | object | arrayYesRecipient(s). A single email string, a {name, email} object, or an array of either.
fromstring | objectYesSender — must be a verified domain. A plain email string or a {name, email} object.
subjectstringYes*Email subject line. Required unless template is set.
bodystringYes*HTML email body. Supports {{variable}} placeholders. Required unless template is set.
templatestringNoID of a saved template to use instead of subject/body.
dataobjectNoVariables merged into {{placeholder}} slots in body or the template.
replystringNoReply-to email address.
headersobjectNoCustom email headers as key/value pairs.
attachmentsarrayNoFiles to attach — see below.
subscribedbooleanNoSet true to subscribe the contact, false to mark them unsubscribed. Default: preserves existing state (new contacts default to unsubscribed).

Attachment object

FieldTypeDescription
filenamestringFile name shown in the email client
contentstringBase64-encoded file content
contentTypestringMIME type, e.g. application/pdf

Response

{
  "success": true,
  "data": {
    "emails": [
      {
        "contact": { "id": "con_01HV3K...", "email": "jane@example.com" },
        "email": "3f2a91b0-..."
      }
    ],
    "timestamp": "2026-01-15T10:30:00.000Z"
  }
}

The email field in each result is the email record ID. Pass it to GET /emails/:id to retrieve delivery status.

Send to multiple recipients

Pass to as an array to send the same email to multiple addresses in one call. Each recipient gets their own email record:

{
  "to": [
    "alice@example.com",
    { "name": "Bob Smith", "email": "bob@example.com" }
  ],
  "from": "hello@yourdomain.com",
  "subject": "Team update",
  "body": "<p>Hi {{name}}, here is your update.</p>",
  "data": { "update": "Q3 results are in" }
}

Use a template

{
  "to": "jane@example.com",
  "from": "hello@yourdomain.com",
  "template": "tmpl_01HV3K...",
  "data": { "name": "Jane", "plan": "Pro" }
}

Error codes

CodeDescription
VALIDATION_ERRORMissing required field or malformed body
DOMAIN_NOT_VERIFIEDfrom domain has not been verified
NOT_FOUNDTemplate ID not found or not owned by your project
RATE_LIMIT_EXCEEDEDToo many requests — back off and retry