Mail merge
Send up to 100 personalized messages in one call, each rendered and queued for its own recipient.
A mail merge sends one message per recipient in one call. Use it for bulk or personalized mail; for a single message, use a send.
- Up to 100 entries per call.
- Each entry becomes its own outbox entry, addressed to its
toalone and rendered with its ownparams(see Templates). - Because every recipient gets their own message, tracking numbers are per recipient.
Send a merge
curl -X POST "https://api.workwae.com/v1/accounts/$ACCOUNT_ID/mail-merges" \
-H "Authorization: Bearer $WORKWAE_API_KEY" \
-H "content-type: application/json" \
-d '{
"template": "'"$TEMPLATE_ID"'",
"listId": "weekly-news",
"entries": [
{ "to": { "name": "Ada", "address": "ada@example.com" }, "params": { "firstName": "Ada" } },
{ "to": { "name": "Alan", "address": "alan@example.com" }, "params": { "firstName": "Alan" } }
]
}'Request body
- The body takes a send's fields except
to,cc,bccandrender. entries[].tois a single{ name?, address };entries[].paramsare its template values.- An entry may override
sendAtor set its own RFC 5322messageId. listIdnames a suppression list: suppressed addresses are skipped and each message gets its own unsubscribe link.
Results
An entry that cannot be queued fails alone. The call returns 200 with one result per entry, in request order.
for (const result of items) {
if (result.success) console.log(result.to.address, "queued as", result.outboxId);
else console.warn(result.to.address, result.reason, result.error);
}A failed entry's reason is one of the API's reasons (invalid_recipient, suppressed, template_render_failed, plan_limit_sends, ...) with the HTTP status a single send would have returned. Queued entries then follow the normal delivery events.