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:- Single MMS —
POST /api/v1/messages/smswithmedia_url/media_urls. The SMS endpoint auto-upgrades the send to MMS as soon as one or more attachments are present. - Group MMS —
POST /api/v1/messages/groupfans a single payload (body + media) out to up to 20 recipients in one call.
Single MMS
There is no dedicated single-MMS endpoint — send through the SMS endpoint and attach media. Whenmedia_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 HTTPSHEAD 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-recipientmessages 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
queued → sending → sent → delivered (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 theGET /api/v1/pricing/messaging?country=<ISO> endpoint for real-time rates (the returned channels array includes mms).