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.
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.
Request-wide authorization and capacity gates run before the per-item loop. After that boundary clears, each entry reports its own delivery result.
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.
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.
Templates, simulator rules, sender readiness, suppressions, and provider delivery can produce an item-level result without hiding the rest.
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.
Each object accepts the normal transactional fields, including templates, variables, custom headers, and tracking overrides.
curlcurl -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>"
}
]'TypeScriptimport 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>",
},
]);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.
JSON{
"ok": true,
"data": [
{ "id": "em_01", "messageId": "provider_01" },
{
"error": "Suppressed recipient(s): [email protected]",
"code": "recipient_suppressed"
}
]
}“Partial success” starts after the batch clears its shared project, key, quota, warm-up, and health checks.
Payload schema, API-key capability, project and domain grants, monthly quota, daily warm-up capacity, and deliverability autopilot.
Template resolution, simulator classification, sender readiness, recipient suppressions, provider acceptance, and stored email records.
The request body is a JSON array with at least one and at most one hundred entries.
Each entry can address up to ten recipients total across to, cc, and bcc.
Batch entries do not accept attachments. Use the single-send endpoint when files are required.
sendAt is not accepted on batch entries. Scheduled work belongs on the single-send endpoint.
One batch belongs to one project, including batches that use more than one sender domain.
Simulator recipients work per item, but one item cannot mix simulator and real recipient addresses.
Use delivered, bounced, complained, and suppressed simulator recipients to exercise your index-matching and retry logic before production traffic.