Messaging

SMS vs MMS Explained for Developers: Limits, Cost and One API

SMS vs MMS compared for developers: character limits, media types, cost, when to send each and how to send both with one Telnyx API.

SMS and MMS messages on a phone

Takeaways

SMS vs MMS comes down to what the message carries: SMS (Short Message Service) is text only, 160 characters per segment in GSM-7, the standard 7-bit mobile alphabet, sent over the cellular signaling channel. MMS (Multimedia Messaging Service) adds media (images, video, audio, GIFs) and about 1,600 characters, uploads over mobile data and typically bills at 2 to 3 times an SMS. With Telnyx you send both from one API that splits long text and picks the encoding for you, so you choose the type per message and never hand-split a string or resize an image.

  • A URL typed into the message body is still SMS. Only an attached file turns a message into MMS.
  • Your phone picks the type from the content, not from a setting. On an iPhone, a green bubble is SMS, MMS or RCS (Rich Communication Services), and a blue one is iMessage.
  • MMS commonly costs 2 to 3 times an SMS. Telnyx SMS starts at $0.004 per message, and the same API call sends an MMS on the same number.

What are SMS and MMS?

The SMS vs MMS choice decides what your app has to do before the carrier takes the message, and it starts with what each type carries and which path it takes to the phone.

SMS carries text only, MMS adds photos and video

What is SMS?

The 160-character limit on an SMS holds only while every character is in the GSM-7 alphabet. One emoji, one curly quote or one accented letter switches the whole message to UCS-2, a 16-bit Unicode encoding, and the limit drops to 70. Past the limit, your text is split into segments of 153 characters (67 in UCS-2), because part of each segment carries the header the handset uses to stitch them back together, and each segment is billed as its own message. The signaling channel it rides is the same path the network uses to set up a call, which is why an SMS reaches a phone that has mobile data switched off. When you send through the Telnyx Messaging API, it chooses the most compact encoding your characters allow and concatenates a long message for you, so you pass one string and the splitting happens before the carrier sees it. The same behaviour applies whether you call the API directly or route through an SMS gateway.

What is MMS?

MMS is Multimedia Messaging Service, an extension of SMS that carries about 1,600 characters of text plus attached files. An MMS attachment is one of these file types on most US carriers:

  • JPG or JPEG and PNG images
  • GIF, including animated GIFs
  • MP3 audio
  • MP4 video
  • vCard contact cards

A URL in the body is text and does not make the message MMS. The link is just characters, and the recipient's phone turns it into a preview on its own. Many carriers cap attached media around 5 MB, and the exact limit varies by carrier and by file type. The media does not ride the signaling channel: your file is uploaded to a carrier media server over mobile data, and the recipient's handset downloads it from that server over data, which is why a picture message stalls when data is off and why an image can arrive recompressed. Telnyx runs MMS transcoding on outbound media so a file that exceeds the destination carrier's limits is converted before handoff instead of being dropped.

SMS vs MMS: the core differences

MMS is a superset of SMS on a different delivery path at a higher price, and the nine rows below are the ones that change what your app has to do.

SMS vs MMS at a glance

AttributeSMSMMS
What it carriesText onlyText plus images, video, audio, GIFs, vCards
Character limit160 GSM-7 or 70 UCS-2 per segmentAbout 1,600
Network pathCellular signaling channelCarrier media server over mobile data
Sends with data offYesNo
File size capNone, no filesAround 5 MB, carrier dependent
Read receiptsNoNo
Encryption in transitNoneNone
Reaches every phoneYesMost, plan and country dependent
Relative costBase rate2 to 3 times SMS

Why MMS costs more than SMS

An MMS moves your file onto a carrier media server and off it again over mobile data, and the carrier prices that extra transit into the message, which is why MMS commonly lists at 2 to 3 times the SMS rate at the same provider. The text portion is also larger, about 1,600 characters against 160, but the media path is what sets the price. The base you compare against on Telnyx is published: SMS starts at $0.004 per message, with automatic volume discounts, and customers typically save 30% compared with other CPaaS (communications platform as a service) providers.

Sender type is the second factor in both price and throughput. A 10DLC (10-digit long code) local number, a toll-free number and a short code are all SMS-capable phone numbers that carry their own per-message rate, carrier fees and messages-per-second limit, for SMS and for MMS alike, and the right one depends on your volume and whether you need two-way replies. The SMS number traffic types article walks through which sender fits which use case.

Telnyx US prices per message part: MMS costs more than SMS on local 10DLC, toll-free and short code numbers
See current SMS and MMS rates on the Telnyx pricing page, where the MMS line sits on the same price list as the SMS line you already pay.

Are text messages SMS or MMS?

Both. "Text message" is the umbrella word for SMS and MMS, so the question is which one a given message turned into. The same holds for the Telnyx Messaging API: the fields you pass decide which network path the message takes.

How your phone decides which one to send

You write a message, and your phone checks two things before it sends.

  • Media attached or group chat: your phone packages text and files into one MMS and uploads it over data. Your group texts are MMS even with no picture, and group MMS messaging explains how that differs from a broadcast.
  • Plain text over 160 characters: your phone splits it into 153-character segments, and you pay for each one.
  • Plain text within 160 characters: one SMS on the signaling channel, the cheapest form and the one every handset receives.

What is the difference between SMS and MMS on Android?

On Android, Google Messages shows the type in the compose field and on the send button before you tap it. If the recipient is another Android with RCS turned on at both ends, the message goes as an RCS chat over data. Otherwise plain text goes as SMS, and anything with a photo, a video or more than one recipient goes as MMS. Group texts without RCS are group MMS, so they fail on a phone with data switched off while a one-to-one text to the same person arrives.

Green bubble, blue bubble, and 'Sent as SMS'

Green covers three different carrier paths, so the colour alone does not tell you whether a message went as SMS, MMS or RCS. The empty compose field does, before you type:

  • 'iMessage': Apple to Apple over data, with no SMS or MMS involved.
  • 'Text Message · RCS': carrier RCS, which only appears when both ends support it.
  • 'Text Message · SMS': plain carrier SMS, or MMS once you attach a file.

'Sent as SMS' under a message means the recipient is not on iMessage or has no data connection, and the phone fell back to carrier SMS or MMS. iPhones now support RCS, Apple says, so some green chats carry typing indicators and larger media. Your API message always lands as SMS, MMS or RCS, never as iMessage, so a green bubble is the expected result.

When to use SMS vs MMS

Your choice for a given message follows from the table above: send SMS when your text has to reach every handset at the lowest rate, send MMS when the picture is the point, and treat long text as a cost calculation rather than a reason to switch.

SMS or MMS for this message?

  • A six-digit login code: send SMS. Six digits fit one 160-character GSM-7 segment and arrive even when the phone has mobile data off.
  • A 220-character delivery update: send SMS via the Telnyx Messaging API. It bills as two 153-character segments and the API splits them. One emoji would make it four.
  • A coupon with an image: send MMS on your Telnyx number. The coupon image shows inline, worth the 2 to 3 times SMS price when the visual drives redemption.
  • A customer sends a photo of a damaged order: accept MMS on the same Telnyx number. Their photo arrives as an attachment over mobile data, so your app needs to fetch and store media.

When to Use SMS

SMS is the right type when delivery matters more than presentation:

  • Your one-time passcodes and two-factor authentication (2FA) codes, where seconds count and every one of your customers' phones must receive them.
  • Your appointment and payment reminders with a reply keyword, the pattern conversational SMS is built on.
  • Your order and delivery updates, with a tracking link in the text.
  • Your outage and schedule alerts that must reach customers with mobile data off.
  • Health-related reminders where you send only minimal content, such as a time and a location with no diagnosis or result, because SMS is unencrypted in transit. The healthcare messaging page covers what a compliant setup needs.

When to Use MMS

MMS earns its higher rate when the image does work that text cannot:

  • Coupons and promo images, where a barcode or a product shot drives the redemption.
  • Product or menu photos that answer "what does it look like" in one message.
  • Abandoned cart with the item's image, so the customer sees what they left behind without opening the app. The retail and ecommerce messaging page shows that flow end to end, and short codes for retail covers the sender type for high volume.
  • Barcode and QR tickets that get scanned at a door or a gate.
  • Two-way support, where the customer sends a photo of a damaged item or an error screen and you reply with an image or a PDF. The Python example below handles exactly that inbound case.

Long text: segmented SMS or one MMS?

The break-even is arithmetic. First count your segments: a GSM-7 message bills in segments of 153 characters past the first 160, and a UCS-2 message bills in segments of 67 past the first 70. Each segment is one billed SMS. An MMS is one billed message at the higher MMS rate. So a 450-character GSM-7 text is 3 segments, and the comparison is 3 times your SMS rate against 1 times your MMS rate at your provider.

The missing piece in most comparisons is that splitting is not a delivery problem. With Telnyx, concatenation is automatic: you pass the full string, the API separates it into correctly ordered segments, and the recipient's phone reassembles them into one message. Your customer sees one text either way, so "it would split" is not by itself a reason to pay MMS rates. The only reason to switch is price, and only when the segment count times your SMS rate exceeds your MMS rate.

Worked example: add one emoji to that same 450-character text and it switches to UCS-2, which bills as 7 segments (450 divided by 67, rounded up) instead of 3. The MMS now has to cost less than 7 of your SMS rate to win, not 3, so check the encoding before you compare.

The fallback rule runs the other way. When the destination cannot take MMS, which covers landlines (a number lookup shows the line type before you send), some prepaid plans and most destinations outside the US and Canada, put a link to the media in an SMS instead. The customer gets the image through the link, the message arrives on the signaling channel, and you pay the SMS rate.

Send SMS and MMS with One API

The Telnyx Messaging API sends and receives SMS and MMS globally through one endpoint, over 10DLC, toll-free, short code and alphanumeric sender ID, with SMS-capable phone numbers in 130+ countries and 1.3B+ messages sent and received monthly. You call it through REST or SDKs in 5 languages, and the documented request is a POST to /v2/messages with from, to and text. If you are moving off another provider and want to keep the number your customers already know, Hosted SMS lets you send and receive SMS and MMS from that existing number without changing providers. Registration for a US local number follows the carriers' 10DLC A2P (application-to-person) messaging rules, and it covers SMS and MMS on the same campaign. The send and receive MMS doc shows the media fields the API accepts and returns.

Message path from app to handset

Encoding, splitting and MMS transcoding happen at Telnyx before the carrier sees the message, so your code sends one call.

Receive an MMS photo and act on it in Python

The example below is the inbound half of the two-way support case: a customer texts a photo of inventory items to your number, the message.received webhook arrives at your Flask route, the Telnyx Python SDK verifies the webhook signature, and the media URLs on the payload are passed to a model that returns the items as JSON. The full example, with its imports and configuration, lives in the telnyx-code-examples repository. The reply to the customer is a plain SMS sent with from, to and text, which is the same call you use for any text-only message.

Python
@app.route("/webhooks/messaging", methods=["POST"])def handle_mms(): # Verify the Telnyx Ed25519 signature before trusting the event. try: client.webhooks.unwrap(request.get_data(as_text=True), headers=dict(request.headers)) except Exception: return jsonify({"error": "invalid signature"}), 401 payload = request.get_json() data = payload.get("data", {}) p = data.get("payload", {}) if data.get("event_type") != "message.received" or p.get("direction") != "inbound": return jsonify({"status": "ignored"}), 200 phone = p.get("from", {}).get("phone_number", "") text = p.get("text", "").strip() media = p.get("media", []) if media: media_urls = [m.get("url", "") for m in media if m.get("url")] if media_urls: try: analysis = call_inference([{"role": "system", "content": "An inventory photo was received via MMS. The user may describe what's in it. Based on description and context, extract inventory items. Return JSON: items (list of {name, quantity_estimate, condition, category, notes})."}, {"role": "user", "content": f"Photo received. User note: '{text or 'no description'}'. Photo URLs: {media_urls}"}]) items = json.loads(analysis).get("items", []) for item in items: item["added_by"] = phone item["timestamp"] = time.strftime("%Y-%m-%dT%H:%M:%SZ") item["media_url"] = media_urls[0] inventory.append(item) send_sms(phone, f"Added {len(items)} item(s) to inventory. Text LIST to see all.") except Exception: send_sms(phone, "Got the photo! Could you also describe what's in it?") return jsonify({"status": "cataloged"}), 200

The media list on the inbound payload is what makes this your MMS handler. A text-only message arrives at your route with the same event and an empty list, so one route serves both types and the branch on media is the only code you write differently.

What Telnyx handles so you do not have to

Five things happen to your message between your API call and the carrier, and none of them is your code:

  • Intelligent message encoding: the API chooses the most compact encoding your characters allow, so a message that fits GSM-7 is never sent as UCS-2.
  • Message concatenation: a text too long for its destination is separated into segments and reassembled on the handset, with no splitting in your code.
  • Automatic opt-outs: a reply containing a stop word such as STOP unsubscribes that number from future sends.
  • MMS transcoding: outbound media is converted to fit the destination carrier's size and format limits before handoff.
  • Detailed delivery reports: each message reports its delivery status, with a debugging tool for the ones that fail.

You decide per message whether it is SMS or MMS, pass text or text plus media to one call on one number, and the encoding, the splitting and the media conversion are done before the carrier sees it, at SMS rates from $0.004 per message.

SMS vs MMS FAQ

Are SMS and MMS the same thing?
No, although both arrive in the same inbox from the same number, which is why phones call them both "text messages". What separates them is the payload: attach a file and the message becomes MMS, with the higher rate and the dependence on mobile data that come with it. Your code tells them apart the same way on the receiving side, because an inbound MMS reaches your webhook as the same event as an SMS, only with a populated media list instead of an empty one.
Can I send SMS and MMS from the same number and the same vendor instead of two separate tools?
Yes. The Telnyx Messaging API sends and receives both types on the same number through the same POST to /v2/messages, over 10DLC, toll-free and short code senders. If the number already lives with another provider, Hosted SMS lets you send and receive SMS and MMS from it without changing providers, so one price list and one inbound webhook cover both.
Can I send health-related reminders over SMS and still meet HIPAA requirements?
You can, as long as the message carries minimal content. SMS is not encrypted in transit, so keep protected health information out of the body: send the appointment time and location, never a diagnosis, a result or a medication name, and collect the patient's consent to be texted first. Anything beyond a reminder belongs behind a link to an authenticated portal. The Telnyx healthcare messaging page describes the setup your compliance team will ask about.
How do I know if I'm sending an SMS, RCS, or iMessage?
Read the empty compose field before you type. On an iPhone it says 'iMessage', 'Text Message · RCS' or 'Text Message · SMS'. On Android, Google Messages labels the compose field and the send button with the type. From an API you never send iMessage: a message from your app lands as SMS, MMS or RCS, and the recipient sees a green bubble on an iPhone.
Why won't my picture message send without mobile data?
Because the picture does not travel on the signaling channel that carries SMS. An MMS uploads the file to a carrier media server over mobile data, and the recipient's phone downloads it from that server over data. With data off on either end, the upload or the download has nowhere to go, while a plain SMS to the same phone still arrives. Wi-Fi alone does not help on most carriers, since the media server is reached over the mobile network.
Is an iMessage or WhatsApp message considered SMS?
No. iMessage and WhatsApp are internet messaging apps that run over data between accounts, with no carrier SMS or MMS involved and no per-message carrier charge. RCS is the carrier-side answer to them: it adds typing indicators, read receipts and larger media to the native messaging app over data, and it falls back to SMS or MMS when the other end does not support it. The article on what RCS is covers how it fits next to SMS.
Does it cost more to send an MMS?
Yes. Carriers price the media server transit into the message, and an MMS commonly lists at 2 to 3 times the SMS rate at the same provider. Telnyx SMS starts at $0.004 per message, and the MMS rate for each country sits on the same pricing page. Before you switch a long text to MMS, count its segments and multiply by the SMS rate: a 3-segment text is often still cheaper than one MMS, and Telnyx concatenates it automatically.

Send SMS and MMS from one API call

Decide SMS or MMS per message and let the Telnyx Messaging API pick the encoding, split long text and transcode media before the carrier sees it, on the number you already own, at SMS rates from $0.004 per message.

Explore the Messaging API
Share on Social
Serhii
Serhii Omelchenko
Global AEO/SEO Manager

Serhii is Global AEO/SEO Manager at Telnyx, based in Amsterdam, he is focused on making communications infrastructure findable and credible across both traditional search and AI-driven discovery. He previously led SEO and GEO strategy for some of the world’s most recognized consu