Skip to main content

API Limits

This page lists the per-request limits enforced by the Zyphr API. For per-account usage limits (monthly emails, MAU, daily caps), see your plan details and rate limiting.

Request Body Size

LimitValue
Maximum JSON request body25 MB
Maximum form-encoded body25 MB

This matches the body-size cap used by major email-platform competitors (SendGrid, Mailgun) so integrations port cleanly without redesign.

The cap applies to the entire JSON envelope — including the html field, all metadata, tags, and any inlined content — not just the body of one field. If you exceed it, the API returns:

{
"error": {
"code": "payload_too_large",
"message": "Request body exceeds the maximum allowed size. See https://zyphr.dev/resources/api-limits for current limits.",
"details": {
"limit_bytes": 26214400,
"received_bytes": 30000000
}
},
"meta": {
"request_id": "req_xyz789"
}
}

HTTP status: 413 Payload Too Large.

Handling Oversize Payloads

If your HTML body approaches the limit (e.g. large reports, newsletters with inlined assets), consider:

  • Templates — store the HTML as a template and pass template_id + template_data instead of inlining the full HTML in every request. Templates do not count against the request body limit at send time.
  • External assets — host images on a CDN and reference them by URL rather than base64-inlining them.
  • Splitting — for reports that genuinely need multi-MB of unique HTML, split into multiple sends.

Field-Level Limits

FieldLimit
subject998 characters (RFC 5322)
tags10 tags max, each ≤ 100 characters
to (batch)100 recipients per request
from.name / to.name255 characters
Attachment total size10 MB
Template design_json1 MB

Headers

HeaderLimit
idempotency-key255 characters
x-request-idAuto-generated UUIDv4 if not supplied