# description
Send one personalized message per recipient in a single call. Shared fields (subject/html/text/templateId/templateData/headers/…) form the base message; each recipients[] entry produces an independent message to exactly one address, with its own templateData and headers merged over the shared ones (per-recipient wins). Each message passes the same gates as a single send() and gets its own id — recipients never see each other.

# properties.from.description
An address on a verified domain. Shared by every message in the batch.

# properties.recipients.description
One entry per message. Order is preserved in the response's results[].

# properties.recipients.items.properties.to.description
Exactly one recipient address (bare or `Name <addr>`). This message is sent to this address only.

# properties.recipients.items.properties.templateData.description
Per-recipient merge values, merged over the shared templateData (this wins on conflicts). Fills {{merge_tags}} in the subject/html/text for this recipient's message.

# properties.recipients.items.properties.headers.description
Per-recipient extra raw MIME headers, merged over the shared headers (this wins on conflicts).

# properties.subject.description
Required unless supplied by a template. May contain {{merge_tags}}, filled per recipient.

# properties.html.description
May contain {{merge_tags}}, filled per recipient.

# properties.text.description
May contain {{merge_tags}}, filled per recipient.

# properties.templateId.description
Send using a saved template — a user template (tpl_…) or a base template (base_…). Its subject/html/text seed every message; explicit subject/html/text here override them.

# properties.templateData.description
Shared default merge values for every recipient; a recipient's own templateData overrides these key-by-key. HTML values are auto-escaped.

# properties.headers.description
Shared extra raw MIME headers for every message, applied after threading headers (caller wins); a recipient's own headers override these key-by-key.

# properties.inReplyTo.description
Thread every message under this Message-ID.

# properties.attachments.description
Attached to every message in the batch. Same shape as send()'s attachments.

# properties.attachments.items.properties.url.description
Fetch the file from this URL at send time and attach it. Any URL works; an uploadAttachment() URL is the secure, recommended choice. Prefer this over `content` for large files.

# properties.attachments.items.properties.content.description
Inline file bytes as base64. Simple for tiny files, but re-uploaded on every send — use `url` (see uploadAttachment) for anything large.

# properties.attachments.items.properties.contentType.description
MIME type; defaults to application/octet-stream.

# properties.scheduledAt.description
Send later: ISO 8601, simple relative natural language ("in 2 hours"), or a ms-epoch. A future time parks every message with the scheduler (each gets its own ssnd_… id, individually cancelable); omitted or past sends now.

# properties.trackOpens.description
Open-tracking override for every message in the batch (HTML only). Omitted → the from-domain's default applies.

# properties.trackClicks.description
Click-tracking override for every message in the batch (HTML only): http(s) links are rewritten to a signed redirect that records the click, then 302s to the destination. Omitted → the from-domain's default applies.