Bundle the request.
Keep every result separate.

Send up to 100 transactional emails in one POST. Each entry keeps its own content, recipients, email record, and index-aligned result.

Batch entries send immediately. For attachments, scheduling, or safer retries, use the single-send path.

POST/api/v1/email/batch3 items
[0][email protected]Acceptedem_01
[1][email protected]Recipient suppressederror
[2][email protected]Acceptedem_03
The response preserves the request order.
100items per POST
10recipients per item
1project per batch
Indexaligned results
Request to result

One batch at the edge. One outcome per item.

Request-wide authorization and capacity gates run before the per-item loop. After that boundary clears, each entry reports its own delivery result.

01Parse

Validate the complete array

The body must contain 1–100 valid entries. A schema error returns 422 before any item is processed and includes the item index when available.

02Authorize

Resolve one project boundary

The key, project, and sender-domain grants are checked for the request. Every production sender in the batch must resolve to the same allowed project.

03Send

Process each entry on its own

Templates, simulator rules, sender readiness, suppressions, and provider delivery can produce an item-level result without hiding the rest.

04Return

Keep the request index

data[0] describes request item 0. Every accepted item returns an email id and message id; every failed item returns an error and stable code.

Same payload, two clients

Send a compact array—not a custom job protocol.

Each object accepts the normal transactional fields, including templates, variables, custom headers, and tracking overrides.

REST requestcurl
curl -X POST https://www.noticeapi.com/api/v1/email/batch \
  -H "Authorization: Bearer $NOTICEAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "from": "Acme <[email protected]>",
      "to": "[email protected]",
      "subject": "Receipt #1042",
      "html": "<p>Your receipt is ready.</p>"
    },
    {
      "from": "Acme <[email protected]>",
      "to": "[email protected]",
      "subject": "Receipt #1043",
      "html": "<p>Your receipt is ready.</p>"
    }
  ]'
Node SDKTypeScript
import NoticeAPI from "noticeapi";

const notice = new NoticeAPI(process.env.NOTICEAPI_API_KEY);

const result = await notice.emails.batch([
  {
    from: "Acme <[email protected]>",
    to: "[email protected]",
    subject: "Receipt #1042",
    html: "<p>Your receipt is ready.</p>",
  },
  {
    from: "Acme <[email protected]>",
    to: "[email protected]",
    subject: "Receipt #1043",
    html: "<p>Your receipt is ready.</p>",
  },
]);
Partial success, explicit retry

Read the array before deciding what runs again.

A successful HTTP response can contain accepted items and item-level errors together. Match each response entry to the request at the same index and queue only the errors you intend to retry.

A repeated request can create a duplicate batch.Batch requests do not support Idempotency-Key yet. Do not resubmit successful entries. When retries must be safe, use the single-send endpoint.
Read the per-item contract
200 responseJSON
{
  "ok": true,
  "data": [
    { "id": "em_01", "messageId": "provider_01" },
    {
      "error": "Suppressed recipient(s): [email protected]",
      "code": "recipient_suppressed"
    }
  ]
}
Know what is request-wide

Independent items still share one safety boundary.

“Partial success” starts after the batch clears its shared project, key, quota, warm-up, and health checks.

Before any send

Request-wide gates

Payload schema, API-key capability, project and domain grants, monthly quota, daily warm-up capacity, and deliverability autopilot.

Inside the loop

Item-level outcomes

Template resolution, simulator classification, sender readiness, recipient suppressions, provider acceptance, and stored email records.

Published contract

The limits to encode before production.

1–100

Items per request

The request body is a JSON array with at least one and at most one hundred entries.

10

Recipients per item

Each entry can address up to ten recipients total across to, cc, and bcc.

No

Attachments

Batch entries do not accept attachments. Use the single-send endpoint when files are required.

Now

Immediate delivery

sendAt is not accepted on batch entries. Scheduled work belongs on the single-send endpoint.

One

Project boundary

One batch belongs to one project, including batches that use more than one sender domain.

Yes

Simulator items

Simulator recipients work per item, but one item cannot mix simulator and real recipient addresses.

One request, inspectable outcomes

Send the first batch through the simulator.

Use delivered, bounced, complained, and suppressed simulator recipients to exercise your index-matching and retry logic before production traffic.