ZeroSettle vs Twilio: iMessage vs SMS for business texting
Written by ZeroSettle. We make one of the products compared.
Twilio sends SMS, MMS and RCS through carriers, so on an iPhone its messages show as green bubbles; ZeroSettle sends real iMessages from a phone number, shown as blue bubbles with your name and photo. Choose Twilio to reach every phone, Android included, for high-volume codes and alerts, international reach or a contractual API uptime SLA. Choose ZeroSettle for one-to-one conversations with iPhone customers at a flat $49 a month, with no carrier-registration step in signup. Twilio facts are as of October 8, 2026, per Twilio's public pages; ZeroSettle facts as of October 12, 2026.
Key takeaways
- What each is: Twilio Programmable Messaging is a pay-as-you-go API for carrier SMS, MMS and RCS. ZeroSettle is an iMessage API: a real phone number on real iMessage, running on Apple hardware we operate for you, that your code texts customers from and hears back on through a bearer token and signed webhooks.
- On an iPhone: Twilio messages are green, including RCS, whose senders add a display name and logo. ZeroSettle messages are blue, with your brand name and photo, typing indicators and tapbacks.
- Reach: Twilio's SMS reaches Android and iPhone alike. ZeroSettle reaches only people on iMessage, with no SMS fallback.
- Price (October 2026): Twilio charges $0.0083 per SMS segment plus per-carrier fees, $1.15 a month per long-code number, and 10DLC registration fees. ZeroSettle Pro is $49 a month with unlimited (counted) messages, including unlimited messages with people who message you first; Growth is from $599/mo.
- Limits and SLA: a ZeroSettle Pro number can start conversations with 5 new contacts a day, and people who text first are never limited; ZeroSettle publishes no SLA. Twilio's daily 10DLC caps depend on brand type, and Twilio publishes a 99.95% API availability SLA.
How we compared ZeroSettle and Twilio
We compared ZeroSettle with Twilio Programmable Messaging, Twilio's API for SMS, MMS and RCS, on eight criteria a US business texting its customers would weigh. ZeroSettle wrote this page, so every Twilio fact comes from Twilio's or Apple's own pages, checked on October 8, 2026, linked where the fact appears and listed under Sources.
- Reach, and what an iPhone shows: bubble color, name and photo, typing indicators, tapbacks.
- Cost model, and registration before the first message.
- Volume (daily caps and send speed), and the SLA.
- Compliance tooling, and conversational fit: one-way alerts or two-way threads.
Twilio's WhatsApp, email and one-time-code products are out of scope. More head-to-heads are on the comparisons hub.
ZeroSettle vs Twilio at a glance
Twilio is ahead on reach, volume to people who never texted you, and a written SLA. ZeroSettle is ahead on what an iPhone customer sees, a flat price, and a signup with no carrier registration.
| Criterion | ZeroSettle | Twilio |
|---|---|---|
| Channel | iMessage only, from a number dedicated to your account | SMS, MMS and RCS through carriers |
| On an iPhone | Blue, with brand name and photo, typing indicators and tapbacks | Green: "sent using RCS or MMS/SMS instead of iMessage" (Apple); RCS senders add a display name and logo |
| Android phones | Not reached; SMS fallback is on the roadmap | Reached by SMS; US rates cover AT&T, T-Mobile, Verizon, US Cellular and all other carriers |
| Price | Pro $49/month flat; Growth from $599/mo | $0.0083 per SMS segment, in or out, plus carrier fees |
| The number | Included; remains ZeroSettle's property | $1.15/month long code; $0.50/month to bring your own |
| Before the first message | Four signup steps, no carrier registration | A2P 10DLC brand and campaign registration |
| Daily volume | New contacts per number: Pro 5 a day, Growth 50 a day (3 per 15 minutes); people who text first are never limited | Set by brand type, e.g. 1,000 segments a day to T-Mobile for a Sole Proprietor |
| Opt-outs | STOP enforced across every number on the account | Opt-out management tools |
| Uptime | "99.9% uptime" homepage figure; no SLA | 99.95% API availability SLA (99.99% with Enterprise Edition) |
ZeroSettle cells: ZeroSettle API docs, homepage and iMessage API Terms, checked October 12, 2026. Twilio's pricing page says "Pricing current as of October 2026".
Does Twilio support iMessage?
No. Twilio offers no iMessage phone numbers: it sends SMS, MMS and RCS, and Apple's support page says a green bubble means the message "was sent using RCS or MMS/SMS instead of iMessage".
Twilio's RCS senders carry a display name and logo, per Twilio's RCS onboarding guide, but the bubble is still green. Twilio's Apple Messages for Business private beta, opened May 7, 2026, is a separate channel reached from entry points such as Apple Maps, Safari and Siri, not a number your code texts from. See Apple Messages for Business vs an iMessage number.
ZeroSettle is not Apple Messages for Business and is not affiliated with Apple. ZeroSettle sends ordinary iMessages from a phone number, so customers on iPhone see blue bubbles, your brand name and photo, typing indicators, and tapbacks, because every message goes through Apple's own iMessage network. Blue vs green bubbles for business texting explains what decides the color.
How do costs compare?
Twilio meters every message: a base rate per 160-character segment plus per-carrier fees, with number and registration fees on top. ZeroSettle Pro is a flat $49 a month with unlimited (counted) outbound and inbound messages; Pro limits new contacts, not messages.
| Item | Twilio price |
|---|---|
| SMS segment, outbound or inbound (base rate) | $0.0083 |
| Carrier fee, outbound SMS to Verizon | $0.005 |
| Carrier fee, outbound SMS to T-Mobile | $0.0045 |
| Outbound MMS (base rate) | $0.022 |
| Message that ends in "Failed" status | $0.001 |
| Long-code number, per month | $1.15 |
| A2P 10DLC brand registration, once | $4.50 |
| Standard brand vetting, once | $41.50 |
Sources: Twilio US SMS pricing and Twilio A2P 10DLC brand registration (updated September 25, 2026).
One outbound segment to a Verizon customer costs $0.0133 on Twilio ($0.0083 + $0.005). At that rate, $49 covers about 3,684 outbound segments: our arithmetic from Twilio's published rates, before the number, inbound messages and registration fees.
- At low volume, Twilio costs less: 1,000 outbound segments to Verizon cost $13.30, plus the number and the one-time registration fees.
- Past about 3,700 outbound segments a month, ZeroSettle costs less for recipients on iMessage, if new conversations fit its limits: 5 new contacts a day per number on Pro, 50 on Growth.
- Long threads favor the flat price, because Twilio bills every segment and every inbound reply.
ZeroSettle Pro has no setup fee, unlimited messages with people who message you first, a 30-day money-back guarantee and 1,000 AI credits a month; see ZeroSettle plans.
What do you need before the first message?
Twilio requires carrier registration before US application-to-person texting from a 10DLC number; ZeroSettle's signup has four steps and no carrier-registration step. Consent law applies to both.
Twilio: register first
- A2P 10DLC: Twilio's A2P 10DLC overview says "Anyone sending SMS/MMS messages over a 10DLC number from an application to the US must register for A2P 10DLC", which "includes individuals and hobbyists". A message from a 10DLC number with no approved campaign is blocked with error 30034.
- Conversations count: Twilio's messaging policy prohibits person-to-person (P2P) messages and treats all traffic as application-to-person.
- RCS: Twilio's RCS onboarding guide says to "allow four to six weeks or longer if you plan to launch in multiple regions", and carriers must approve the sender.
ZeroSettle: four signup steps
- Press Get started and sign in with your phone number (a one-time SMS code). A number is set aside while you finish.
- Answer one question: what the number is for (sign in with iMessage, branded messages, or an AI agent). That claims the number.
- Set your brand name and photo and text yourself a test message (both skippable).
- Subscribe. A number not paid for within 30 minutes is released.
Numbers can sell out, and then there is a waitlist. Skipping registration does not skip consent. ZeroSettle's docs note that under the TCPA, texting a consumer without prior express consent can carry statutory damages of $500 to $1,500 per message, and Twilio's policy draws a similar line, with "prior express consent" for informational texts and "prior express written consent" for promotional ones. Rules vary by country and message type. This isn't legal advice; have counsel review your program.
Reliability and SLA
Twilio publishes a contractual SLA for API availability; ZeroSettle publishes an uptime figure but no SLA.
- Twilio's APIs SLA (updated April 9, 2026) sets 99.95% monthly API availability, or 99.99% with Enterprise Edition. Outages under five continuous minutes and "telecommunications provider-related problems" don't count, and service credits are "not available in the form of refunds".
- ZeroSettle reports "99.9% uptime" and "10,000+ messages/week" on its homepage. The figure is not an SLA, and ZeroSettle's terms say "delivery of any particular message or feature is not guaranteed". If Apple flags a number, ZeroSettle replaces it at no extra charge, and your token, webhook and code stay the same; customers then see a new number.
| Signal | ZeroSettle | Twilio |
|---|---|---|
| Accepted | 200 message_sent once the line hands the message to Apple, normally in 2–5 seconds, then a message.sent webhook | Status queued, then sent |
| Delivery receipt | Not reported | delivered or undelivered, from the carrier's delivery receipt for most SMS |
| Read | Not reported | RCS and WhatsApp only |
| Failed | message.failed webhook; stored with status failed | failed status, with a $0.001 fee |
When ZeroSettle is not a fit: choose Twilio
Choose Twilio when the job needs every phone, high volume to people who never texted you, or a written SLA; ZeroSettle offers none of these today.
- Android recipients. ZeroSettle's docs say "The address must be on someone's iMessage; there is no SMS or email fallback."
- Codes and alerts at volume. A ZeroSettle Pro number can start 5 new conversations a day, every plan stops at 2 unanswered messages per contact until they reply, and a line sends one message at a time, normally 2–5 seconds each: by our arithmetic, 12 to 30 sends a minute. A Twilio Sole Proprietor brand gets 1,000 segments a day to T-Mobile.
- Local senders abroad. Twilio's SMS page says it can "Reach 180+ countries reliably with localized senders"; ZeroSettle's docs list no choice of country or area code for the number.
- A contractual SLA with service credits, or per-message delivery receipts.
- Consented marketing at scale. ZeroSettle's terms prohibit high-volume marketing and unsolicited messaging.
- Low monthly volume. Under about 3,700 outbound segments a month to Verizon customers, Twilio's metered price is below $49, by the arithmetic above.
When ZeroSettle is the better choice
Choose ZeroSettle when most of the people you text use iPhone and the texting is a two-way conversation rather than one-way alerts.
- The iPhone experience: your brand name and photo share automatically with the first message of every conversation, typing indicators work both ways, tapbacks work on any message, and once a contact has replied, voice messages up to 6 MB arrive as Messages' native audio bubble.
- Flat cost for long threads: inbound is never limited, and a reply costs nothing extra.
- A hosted AI agent: on a line group set to "Managed by AI Agent" (Beta), "our hosted agent answers every inbound text on the group's lines, from your business context", using one AI credit per text it sends.
- Sign-in without SMS codes: with Sign in with iMessage, the user taps a button, Messages opens with
SIGNIN <code>prefilled, they tap Send, and they're in: "No password, no SMS gateway, no OTP fee, and nothing to type." Sign in with iMessage verifies possession of an iMessage handle, "the same guarantee as SMS OTP", and because the user texts first, no new-contact limit applies. More in phone verification without outbound SMS.
- Mon 9:41 AM
- Customer: SIGNIN 4F7K2Q👍
- Thu 6:12 PM
- Customer: Can I switch my plan to annual billing?
- Business: Yes. Open Settings, then Billing, and choose Annual. Your current month is credited.❤️
- Customer is typing
Using both: Twilio for Android and codes, ZeroSettle for iPhone conversations
A business can keep Twilio for one-time codes, alerts and every recipient without iMessage, and move conversations with iPhone customers to a ZeroSettle number.
- Keep the Twilio number and its 10DLC campaign.
- Invite customers to text your ZeroSettle number first with an
sms:link. On Android that link opens the SMS app, so show Android visitors another channel. - When ZeroSettle's signed webhook delivers
message.received, mark that handle as on iMessage and route its texts through ZeroSettle.
# router.py: run with uvicorn router:app --port 8100
import hashlib, hmac, json, os, time
import requests
from fastapi import FastAPI, Request, Response
BASE = "https://portal.zerosettle.io"
ZS_TOKEN, ZS_SECRET = os.environ["ZEROSETTLE_TOKEN"], os.environ["ZEROSETTLE_WEBHOOK_SECRET"]
TW_SID, TW_FROM = os.environ["TWILIO_ACCOUNT_SID"], os.environ["TWILIO_FROM"]
TW_AUTH = (os.environ["TWILIO_API_KEY"], os.environ["TWILIO_API_SECRET"])
on_imessage: set[str] = set() # use your database in production
app = FastAPI()
def verify(header: str, raw: bytes) -> bool:
try:
parts = dict(p.split("=", 1) for p in header.split(","))
t, v1 = int(parts["t"]), parts["v1"]
except Exception:
return False
if abs(time.time() - t) > 300:
return False
expected = hmac.new(ZS_SECRET.encode(), f"{t}.".encode() + raw, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, v1)
@app.post("/zerosettle/webhook")
async def zerosettle_webhook(request: Request):
raw = await request.body()
if not verify(request.headers.get("X-ZeroSettle-Signature", ""), raw):
return Response(status_code=401)
event = json.loads(raw)
if event["event"] == "message.received": # they reached you over iMessage
on_imessage.add(event["message"]["handle"])
return Response(status_code=200)
def send_text(to: str, text: str) -> requests.Response: # to: E.164, e.g. +18055559876
if to in on_imessage:
return requests.post(f"{BASE}/api/imessage/send", json={"to": to, "text": text},
headers={"Authorization": f"Bearer {ZS_TOKEN}"}, timeout=90)
return requests.post(f"https://api.twilio.com/2010-04-01/Accounts/{TW_SID}/Messages.json",
data={"To": to, "From": TW_FROM, "Body": text}, auth=TW_AUTH, timeout=30)
Register the receiver with PUT /api/imessage/webhook and store the signing secret, which is shown once. If ZeroSettle answers 403 recipient_opted_out, that person opted out of your ZeroSettle numbers (a text with the word STOP, or a clear request like “take me off your list”): record the opt-out and don't resend the message through Twilio. The ZeroSettle webhook guide covers retries and deduplication; the Twilio call follows Twilio's Message resource. For the full sequence, see moving business texting from SMS to iMessage; for other channels, iMessage vs SMS vs RCS vs WhatsApp.
How we checked
We read Twilio's public pricing, documentation and legal pages and Apple's support page on green bubbles on October 8, 2026, and ZeroSettle's API docs, homepage and terms on October 12, 2026; each page is listed under Sources. We sent no test traffic through Twilio. We re-check every Twilio cell each quarter and log changes below. For a wider field, see 14 iMessage API options compared.
To try the iMessage side of the router above, get a ZeroSettle number.
Frequently asked questions
Can I move my Twilio number to ZeroSettle?
No. ZeroSettle offers no number porting and does not take a number you bring; numbers assigned to your lines remain ZeroSettle's property. Keep the Twilio number for SMS and point iPhone customers to the new number, for example with an sms: link.
Can ZeroSettle send one-time login codes the way Twilio does?
ZeroSettle can text a code, but each first message to a new person counts against the new-contact limit of 5 a day per number on Pro, so outbound codes don't scale. Sign in with iMessage reverses the direction: the user texts a code to your number, inbound texts are never limited, and Android users keep your SMS sign-in.
Can ZeroSettle text customers outside the US?
Yes, if they use iMessage: include the country code (a leading + or 00/011) and ZeroSettle honors it; without one, the US is assumed. Local consent rules generally apply, such as CASL in Canada and PECR and GDPR in the UK and EU. This isn't legal advice.
How fast does a customer's reply reach my server on ZeroSettle?
About 1–2 seconds from the line receiving a text to your webhook. If your server doesn't answer with a 2xx within 10 seconds, ZeroSettle retries after 1, 5 and 20 seconds.
Sources
- SMS pricing in United States, Twilio ("Pricing current as of October 2026"). Checked October 8, 2026.
- A2P 10DLC brand registration, Twilio Docs (modified September 25, 2026). Checked October 8, 2026.
- A2P 10DLC overview, Twilio Docs (modified July 7, 2026). Checked October 8, 2026.
- 30034: US A2P 10DLC - Message from an Unregistered Number, Twilio Docs. Checked October 8, 2026.
- RCS onboarding, Twilio Docs. Checked October 8, 2026.
- Track the message status of outbound messages, Twilio Docs (modified March 9, 2026). Checked October 8, 2026.
- Message resource, Twilio Docs. Checked October 8, 2026.
- Messaging Policy, Twilio (last updated April 13, 2026). Checked October 8, 2026.
- Service Level Agreement: Twilio APIs, Twilio (updated April 9, 2026). Checked October 8, 2026.
- Send SMS at scale with Twilio APIs (SMS product page), Twilio. Checked October 8, 2026.
- Apple Messages for Business Private Beta with Twilio, Twilio changelog (May 7, 2026). Checked October 8, 2026.
- Why are my iPhone messages green?, Apple Support. Checked October 8, 2026.
- ZeroSettle iMessage API docs: “Your iMessage number”, “Send a message”, “Sign in with iMessage”, “AI agent”, “Webhooks, step by step” and “Errors, limits, and compliance”. Checked October 12, 2026.
- ZeroSettle homepage: plans, stats and FAQ. Checked October 12, 2026.
- ZeroSettle iMessage API Terms of Service, sections 2, 5, 6 and 13 (last modified September 28, 2026). Checked October 12, 2026.
Changelog
- First published.
- Pro now opens 5 new contacts a day (was 20), with unlimited messages with people who message you first; the 2-unanswered cap applies to every plan; widened opt-out wording; hedged consent notes.