Send a batch of emails
Sends up to 500 messages in one request, each shaped exactly like a single send.
Messages are processed in order and independently: one that fails (unknown template, unverified sender, suppressed recipient) is reported in its own result entry and the others still go out. A structurally invalid payload is rejected as a whole with 400 before anything is sent.
Requires the sending:write scope.
ApiKeyAuthorization<token>Api-Key mc_... — a workspace API key.
application/json- body
messages*array<>1 <= items <= 500application/json- response
total*numbersucceeded*numberfailed*numberresults*array<>curl -X POST 'https://api.mailcrate.io/public/sending/mail/batch' \ -H 'Authorization: Api-Key <api_key>' \ -H 'Content-Type: application/json' \ -d '{ "messages": [ { "contactEmail": "ada@example.com", "templateId": "receipt", "lane": "transactional", "data": { "orderId": "1042" }, "idempotencyKey": "receipt-1042" }, { "contactEmail": "grace@example.com", "templateId": "receipt", "lane": "transactional", "data": { "orderId": "1043" }, "idempotencyKey": "receipt-1043" } ]}'{ "total": 0, "succeeded": 0, "failed": 0, "results": [ { "index": 0, "success": true, "data": { "id": "string", "status": "string", "lane": "string", "suppressionReason": "string", "approvalUrl": "string" }, "error": { "statusCode": 0, "message": "string" } } ]}List sender identities GET
Requires the `sender-identity:read` scope.
Send an email POST
Sends one email to one contact. The contact is found by `contactId`, or found or created by `contactEmail`. Content comes from exactly one source: a transactional message (`transactionalMessageId`), a template (`templateId`, filled with `data`), or inline `html` with `subject` and `fromAddress`. Sends by template or inline HTML default to the `marketing` lane, which honours unsubscribes and the frequency cap. Set `"lane": "transactional"` for mail the recipient asked for. Pass `idempotencyKey` to make a retry safe. Requires the `sending:write` scope.