Skip to Content

Send bulk

Send a single template to up to 500 recipients across 50 destinations, each with their own variable map. Equivalent to AWS SendBulkTemplatedEmail.

POST /api/v1/partner/email/send-bulk

Request body

{ "from": "hello@yourcompany.com", "template_name": "newsletter-june", "default_template_data": { "campaign": "june-2026" }, "destinations": [ { "to": ["alex@example.com"], "replacement_data": { "first_name": "Alex" } }, { "to": ["brett@example.com"], "replacement_data": { "first_name": "Brett" } } ], "configuration_set_name": "marketing" }
FieldTypeRequiredNotes
fromstringyesVerified identity
template_namestringyes
default_template_dataobjectnoVariables that apply to every recipient unless overridden
destinations[]arrayyesUp to 50 destinations per request
destinations[].tostring[]yesUp to 50 recipients per destination
destinations[].ccstring[]no
destinations[].bccstring[]no
destinations[].replacement_dataobjectnoPer-destination variable overrides — merged onto default_template_data
reply_tostringno
configuration_set_namestringno
customer_idstringno
categorystringnotransactional (default) or marketing
tagsobjectno

Limits

  • 50 destinations per request
  • 50 recipients per destination
  • 500 recipients total per request

For larger lists, paginate into multiple /send-bulk calls.

Response

{ "success": true, "results": [ { "destination": 0, "recipient": "alex@example.com", "message_id": "550e8400-...", "status": "queued" }, { "destination": 1, "recipient": "brett@example.com", "message_id": "660e8400-...", "status": "queued" } ] }

results[].destination is the zero-based index into your destinations[] array — so you can correlate per-recipient outcomes back to the destination you submitted.

Variable resolution

For each destination:

  1. Start with default_template_data
  2. Merge destinations[i].replacement_data on top (per-destination overrides win)
  3. Substitute {{key}} tokens in subject + html_body + text_body

Per-destination 4xx behaviour

If one destination fails (e.g. recipient on suppression list):

  • That destination gets status: rejected + reason
  • Other destinations continue processing

If a 5xx fires (template-load failure, etc.):

  • The entire bulk aborts
  • failed_at in the response indicates where we stopped
  • Already-processed destinations stay queued

cURL

curl https://apis.splashifypro.com/api/v1/partner/email/send-bulk \ -H "Authorization: Bearer $SPLASHIFY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "from": "hello@yourcompany.com", "template_name": "newsletter", "destinations": [ {"to": ["a@example.com"], "replacement_data": {"name": "A"}}, {"to": ["b@example.com"], "replacement_data": {"name": "B"}} ] }'