Email Messages

Create a batch of email messages

Changed on

Creates up to 1,000 email messages in a single request. Request-wide admission checks run first and can reject the whole batch before message creation. After those checks pass, each message is validated and sent independently; item-level failures do not affect other messages, and the processed batch returns 207 Multi-Status. Per-message failures include validation errors; when a template has strict_variables enabled, a missing required variable produces a per-item unprocessable_entity error naming that variable while the other messages continue.

post/email_messages/batch

Request

  • Base URL: https://api.telnyx.com/v2
  • URL: https://api.telnyx.com/v2/email_messages/batch
  • Auth: HTTP bearer

Headers

Idempotency-Keystring

Optional opaque, unquoted key for safely retrying the same logical request. Keys must contain 1 to 255 letters, numbers, hyphens, or underscores. Generate a unique UUID v4 for each operation and reuse it only when retrying that operation with the same request. Invalid headers—including duplicate, empty, malformed, or overlong values—return 400 with error code 10015. A request already in progress with the same key returns 409; reusing the key with a different request returns 422. Only successful responses are replayed, for up to 24 hours. Do not include sensitive data in the key.

Request body

sandbox_modeboolean

Applies sandbox mode to all messages in the batch and overrides any per-message sandbox_mode value — each message's effective sandbox_mode is exactly this envelope value. Reserved recipients at test.telnyx.com produce the deterministic event chains documented on CreateEmailRequest.sandbox_mode; no batch item is injected into the MTA or outbound Kafka path. Sandbox batch items are non-billable, consume no daily-send-limit quota, and feed no delivery-reputation signals.

Response

Multi-Status — returned after request-wide admission checks pass and item processing runs. Each message is validated and sent independently; per-message failures do not affect other messages in the batch. An invalid or non-future scheduled_at/send_at is reported as a per-item unprocessable_entity error while the remaining items continue. When all messages succeed, errors is empty and every item is in data; otherwise data contains successes and errors contains failures. Request-wide gates can instead return 4xx or 5xx.

Example response

{
  "data": [
    {
      "recipient_statuses": {
        "delivered": 998,
        "bounced": 2
      }
    }
  ]
}

Changes

    • warning

      added the new expired enum value to the //// response property for the response status

    • warning

      added the new gw_reject enum value to the //// response property for the response status

    • warning

      added the new injection_timeout enum value to the //// response property for the response status

    • warning

      added the new quarantine_expired enum value to the //// response property for the response status

    • warning

      added the new quarantine_rejected enum value to the //// response property for the response status

    • warning

      added the new quarantine_release_dispatched enum value to the //// response property for the response status

    • warning

      added the new quarantine_released enum value to the //// response property for the response status

    • warning

      added the new quarantined enum value to the //// response property for the response status

    • warning

      added the new scan_deferred enum value to the //// response property for the response status

    • warning

      added the new suppressed enum value to the //// response property for the response status

    • info

      added the required property // to the response with the status

    • info

      added the required property // to the response with the status

    • breaking

      added to the response body oneOf list for the response status

    • breaking

      the response's body type changed from object to no type for status

    • warning

      removed the optional property from the response with the status

    • warning

      added the new 10011 enum value to the // response property for the response status

    • warning

      added the new 10011 enum value to the // response property for the response status

    • warning

      added the new 10011 enum value to the // response property for the response status

    • warning

      added the new 10011 enum value to the // response property for the response status

    • warning

      added the new 10011 enum value to the // response property for the response status

    • warning

      added the new 10011 enum value to the // response property for the response status

    • warning

      added the new domain_graduation_limit_exceeded enum value to the // response property for the response status

    • warning

      added the new domain_graduation_limit_exceeded enum value to the // response property for the response status

    • warning

      added the new domain_graduation_limit_exceeded enum value to the // response property for the response status

    • warning

      added the new domain_graduation_limit_exceeded enum value to the // response property for the response status

    • warning

      added the new domain_graduation_limit_exceeded enum value to the // response property for the response status

    • warning

      added the new domain_graduation_limit_exceeded enum value to the // response property for the response status