Skip to main content

MMS

Send multimedia messages (JPEG, PNG, GIF, and WebP images, plus a set of carrier-accepted audio and video formats) to NANP (US/Canada) destinations. Each attachment is capped at 5 MB. Orbit exposes two MMS surfaces:
  1. Single MMSPOST /api/v1/messages/sms with media_url / media_urls. The SMS endpoint auto-upgrades the send to MMS as soon as one or more attachments are present.
  2. Group MMSPOST /api/v1/messages/group fans a single payload (body + media) out to up to 20 recipients in one call.
Coverage: MMS is delivered to NANP (US/Canada, E.164 +1) numbers only. Non-NANP recipients are rejected per-message with MMS_NANP_ONLY. For non-NANP destinations send picture content as a WhatsApp or RCS message instead.

Single MMS

There is no dedicated single-MMS endpoint — send through the SMS endpoint and attach media. When media_url or a non-empty media_urls array is present, the message is automatically upgraded from SMS to MMS by the Telnyx MMS provider.

Media fields

  • Body is optional when at least one attachment is present — an MMS may be media-only.
  • Each URL must be HTTPS and resolve through the send-time SSRF allowlist (e.g. storage.googleapis.com). URLs that fail the allowlist or DNS-rebind check are rejected before dispatch.
  • Up to 10 attachments per message are forwarded to the provider.

Supported media types and size limit

Each attachment is content-type-checked and size-checked at send time (Orbit issues an HTTPS HEAD request against the URL). Attachments outside this allowlist, or larger than 5 MB, are rejected before the message is dispatched — the carrier MMSC and the underlying provider reject them, so the send fails fast with a 422 rather than silently dropping the media.
  • Maximum size: 5 MB per attachment (hard limit). For the most reliable delivery across carriers, keep each attachment under 1 MB — larger images are frequently down-rendered or dropped by individual carrier gateways even under the 5 MB ceiling.
  • Not supported: documents (PDF), contact cards (vCard), and other content types outside the table above. To deliver those, link to an HTTPS-hosted file in the message body, or send the content over WhatsApp or RCS instead.

Response

Group MMS

POST /api/v1/messages/group delivers a single MMS payload to up to 20 recipients in one operation (Twilio Notify / Bandwidth group-MMS parity). Each recipient is pre-inserted as a pending row before the per-recipient send pipeline runs, so a pre-send rejection (NANP gate, validation, fraud, quota, sender-validation, media SSRF, compliance) flips that recipient’s row to failed rather than dropping it silently.

Request body

Cap: 20 recipients per call. The per-leg idempotency key is group-mms:{group_id}:{to}. For larger sends use the batch endpoint or the campaigns module.

Response — 207 Multi-Status

The group endpoint always returns a per-recipient messages array and a summary. The HTTP status is:
  • 200 OK — every recipient succeeded.
  • 207 Multi-Status — any recipient failed (partial or total failure). Inspect the body for per-recipient status / error_code.
  • 402 Payment Required — the org balance cannot cover the group floor (pre-flight check).
  • 500 — bulk pre-insert failure (no recipients dispatched).

Message Status Flow

queuedsendingsentdelivered (or failed / undelivered) Subscribe to status updates via webhooks using the message.sent, message.delivered, and message.failed events. For group MMS, one event fires per recipient, each carrying its own message id.

Rate Limits

Outbound provider

Outbound MMS is delivered via Telnyx, the named exception to Orbit’s outbound-termination policy: voice and SMS exit only via the Devotel softswitch, but MMS (alongside fax/T.38) outbound may use Telnyx because the softswitch does not support MT MMS. Orbit routes all MMS — single and group — through the standard messaging router; there is no provider bypass.

Pricing

MMS is billed per message (not per attachment) and varies by destination. Check the pricing page or query the GET /api/v1/pricing/messaging?country=<ISO> endpoint for real-time rates (the returned channels array includes mms).