Send a batch of emails with
Accept 1–100 independent emails with whole-batch validation and HTTP 202 on acceptance.
Send a batch of emails with
curl -X POST "https://innomail-stable.cm253.com/innomail/v2/messages/batchsend" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"to": [
{
"email": "alice@example.net"
}
],
"from": {
"name": "Example",
"email": "notify@example.com"
},
"html": "<p>Your order has been confirmed.</p>",
"subject": "Order confirmation",
"messageType": "TRANSACTIONAL"
},
{
"to": [
{
"email": "bob@example.net"
}
],
"from": {
"name": "Example",
"email": "notify@example.com"
},
"text": "Your package is on its way.",
"subject": "Shipping update",
"messageType": "TRANSACTIONAL"
}
]
}'Batch accepted for asynchronous per-message processing.
{
"code": "000000",
"data": {
"status": "ACCEPTED",
"batchId": "BATCH-EXAMPLE-002",
"messages": [
{
"index": 0,
"status": "ACCEPTED",
"messageId": "SINGLE-EXAMPLE-003"
}
],
"requestId": "REQ-EXAMPLE-002",
"acceptedAt": "2026-11-11T03:00:00Z",
"acceptedCount": 1
},
"message": "success",
"traceId": "REQ-EXAMPLE-002",
"timestamp": "2026-11-11T03:00:00.123Z"
}Documented response example from the spec, not a real request result.
Accept 1-100 independent email objects. Any invalid item rejects the whole batch before acceptance; accepted messages are processed independently. Returns HTTP 202 and code 000000 on acceptance.
Use the InnoPaaS AppKey as a Bearer token. Create or manage keys in Console. API key guide
Authorization
Authorizationstring<bearer>requiredHeader Parameters
X-Idempotency-KeystringrequiredUnique business-task key retained across retries, up to 128 characters.
1Max length128X-Custom-TraceIdstringoptionalOptional customer trace ID, up to 256 characters after trimming.
256Body
application/jsonmessagesarray<object>requiredIndependent email objects, 1-100 items; any invalid item rejects the whole batch.
Show child attributes
ccarray<object>optionalCarbon-copy recipients, up to 50 entries and empty for marketing.
Show child attributes
namestringoptionalOptional display name.
emailstringoptionalBare carbon-copy email address.
toarray<object>requiredRecipients, 1-50 entries; marketing requires exactly one.
Show child attributes
namestringoptionalOptional recipient display name.
emailstringoptionalBare recipient email address.
bccarray<object>optionalBlind-carbon-copy recipients, up to 50 entries and empty for marketing.
Show child attributes
namestringoptionalOptional display name.
emailstringoptionalBare blind-carbon-copy email address.
fromobjectoptionalAuthorized sender identity.
Show child attributes
namestringoptionalOptional sender display name.
emailstringoptionalBare sender email address.
htmlstringoptionalHTML body
524288tagsarray<object>optionalUp to 20 business tags.
Show child attributes
namestringoptionalTag name
32valuestringoptionalTag value
64textstringoptionalPlain-text body; direct content requires text or HTML
524288headersjsonoptionalUp to 25 custom mail headers; managed headers cannot be overridden.
replyTostringoptionalSingle reply address overriding the mailbox default
320subjectstringrequiredMessage subject required for direct and template content
998metadatajsonoptionalBusiness metadata not rendered or guaranteed in events
templateobjectoptionalApproved and enabled template reference.
Show child attributes
languagestringoptionalReserved field that does not select a language
32variablesjsonoptionalTemplate-specific values overriding top-level variables
templateIdstringrequiredTemplate ID available to the account
128variablesjsonoptionalCommon template variables; direct bodies are not rendered
attachmentsjsonoptionalReserved references only; omit because attachment content delivery is unavailable.
messageTypestringoptionalMARKETING or TRANSACTIONAL; non-template default is MARKETING
Response
application/jsonBatch accepted for asynchronous per-message processing.
codestringoptionalBusiness code
datajsonoptionalBatch data containing requestId
messagestringoptionalHuman-readable result message.
traceIdstringoptionalValidated trace ID for this HTTP request.
timestampstringoptionalResponse generation timestamp.
{
"code": "000000",
"data": {
"status": "ACCEPTED",
"batchId": "BATCH-EXAMPLE-002",
"messages": [
{
"index": 0,
"status": "ACCEPTED",
"messageId": "SINGLE-EXAMPLE-003"
}
],
"requestId": "REQ-EXAMPLE-002",
"acceptedAt": "2026-11-11T03:00:00Z",
"acceptedCount": 1
},
"message": "success",
"traceId": "REQ-EXAMPLE-002",
"timestamp": "2026-11-11T03:00:00.123Z"
}Documented response example from the spec, not a real request result.