Batch sending

Send up to 100 distinct messages — schedule and cancel as a unit.

POST to /api/v1/emails/batch to send many distinct messages in one request. Each entry is its own message with its own recipient, subject, and data. This is not one message to many people — for that, use a campaign.

The body is a JSON array of message objects, or an object { emails: [...], scheduled_at: "<ISO>" } to schedule the batch. Validation is all-or-nothing: if any item is invalid, nothing is queued.

Group, inspect, cancel

Read a live rollup with GET /api/v1/emails/batches/{id}, and stop every still-scheduled message with POST /api/v1/emails/batches/{id}/cancel. In the dashboard, batches appear under Emails → Batches.

cURL
# Schedule the whole batch
curl https://www.unitpost.com/api/v1/emails/batch \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scheduled_at": "2026-07-01T15:00:00Z",
    "emails": [
      { "from": "you@yourdomain.com", "to": "a@example.com", "subject": "Hi", "html": "<p>…</p>" },
      { "from": "you@yourdomain.com", "to": "b@example.com", "subject": "Hi", "html": "<p>…</p>" }
    ]
  }'

# Cancel the whole batch before it sends
curl -X POST https://www.unitpost.com/api/v1/emails/batches/$BATCH_ID/cancel \
  -H "Authorization: Bearer $API_KEY"

Batch limitations

Per-item scheduled_at and attachments are not supported in batch — schedule the batch as a unit, or send individually if you need per-message attachments.