letter_batch you can track together.
Batches use the same scopes as single letters: creating a batch needs
letters:send; reading one needs letters:read.Create a batch
POST /v1/letters/batches takes a templateId and a recipients array — one
entry per letter, up to 1,000. Each recipient is a postal to address plus
the optional templateData that fills the template’s
placeholders for that one letter. Every other option is set once and applies
to every letter in the batch.
Request fields
Track a batch
GET /v1/letters/batches/{id} returns the batch with a live rollup: its
member letters counted by status in statusCounts, and completed — the
number of letters in a terminal state (delivered, undeliverable,
canceled, or failed).
batchId filter —
each member is an ordinary letter you can fetch, track, and cancel one at a
time on Send a letter. Each member’s
letter.status_changed webhook events also carry the batchId, so a webhook
consumer can attribute every update to its batch.
cURL
From an MCP agent
Connect an MCP-compatible agent to the hosted server and batches are available as named tools, gated by the same scopes. Sending is state-changing, sosend_letters requires an explicit confirm: true.
MCP
Next steps
- API reference — full request and response schemas for batches.