Errors and limits

Every error has the same shape and a stable code you can branch on. Messages are for humans and may change.

JSON
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed",
    "details": [{ "field": "from", "issue": "must be a valid email address" }],
    "requestId": "req_7c26…"
  }
}

Quote the requestId (also in the x-request-id header) when contacting support.

Codes

HTTPCodeMeaning
400VALIDATION_ERRORThe request is malformed; see details.
401UNAUTHENTICATEDMissing, invalid or revoked API key.
403FORBIDDENThe key lacks permission (e.g. a sending-only key reading emails).
403DOMAIN_NOT_VERIFIEDLive email from a domain that is not verified in this workspace.
403WORKSPACE_SUSPENDEDSending is blocked for this workspace; contact support.
404NOT_FOUNDThe resource does not exist in this workspace.
409CONFLICTFor example, an Idempotency-Key reused with a different body.
413PAYLOAD_TOO_LARGEBody over the limit (15 MB for /v1/emails, 3 MB elsewhere).
429RATE_LIMITEDToo many requests; wait for Retry-After seconds.
429QUOTA_EXCEEDEDMonthly or daily email limit of your plan reached.
5xxINTERNAL_ERROROur fault. Safe to retry with the same Idempotency-Key.

Limits

LimitValue
API requestsPer API key, per second, by plan (2 on Free up to 100 on Enterprise). Shared by every server using the key.
EmailsPer calendar month (UTC) by plan; Free also has 100 per day. Each recipient counts once; test emails do not count.
Recipients per email50 across to, cc and bcc.
Batch size100 emails.
Attachments10 files, 10 MB in total.
SchedulingUp to 30 days ahead.