WhatsApp API & Developers

Twilio WhatsApp API: Fees, Sandbox and Templates Explained

If your app already sends SMS through Twilio, adding WhatsApp looks like a one-line change: prefix the numbers with whatsapp: and call the same Messages endpoint. Mostly, it is. The Twilio WhatsApp API reuses your credentials, your status callbacks and your existing code paths, which is exactly why teams already on Twilio pick it.

What the one-line change hides is the rest: a fee layer on top of Meta's rates, a sandbox with tight rules, a separate template system called the Content API, and a sender registration flow that ties your number to a WhatsApp Business account under your own Meta portfolio. These notes cover each part, with figures as Twilio published them on October 29, 2026.

How Twilio's fee sits on top of Meta's

You pay Meta's per-message charge, which Twilio passes through, plus Twilio's own $0.005 on every message in either direction. That second part is the one to model, because Meta never charges for messages customers send you and Twilio does.

Line itemSet byWhen it applies
Meta message feeMetaDelivered business messages, by category and recipient country
Twilio handling fee, $0.005TwilioEvery message, inbound or outbound
Failed message processing, $0.001TwilioMessages that end in a Failed status
Messaging Engagement Suite (optional), $0.015 per message, first 1,000 free monthlyTwilioLink shortening, click tracking and scheduling

Take a support desk that receives 3,000 messages and sends 3,000 replies in a month. Twilio's handling fees come to $30. Meta's side depends on the mix: as of October 2026, each business number gets 1,000 free service messages a month and pays per message after that (Meta pricing).

One caution. Twilio's pricing page says in its summary that Meta charges for utility templates sent during a customer service window, while its FAQ still says those carry no Meta fee. Meta's own page is the tie-breaker: utility templates inside the window are charged from October 1, 2026.

The sandbox: fine for a demo, not for a pilot

The sandbox is a shared Twilio number for testing. It can't message anyone who hasn't joined, and every join expires. Per Twilio's sandbox docs:

  • Each tester joins by sending your sandbox's join code to the shared number, or by scanning a QR code that pre-fills it.
  • Only joined users receive your messages; anyone else fails with error 63015.
  • A session expires three days after joining, so testers must rejoin.
  • Business-initiated messages are limited to three pre-approved test templates: appointment reminders, order notifications and verification codes.
  • The number sends one message every three seconds, which supports functional testing but not load testing.
  • Some countries may be temporarily restricted, and messages are billed at standard rates.

That's enough to prove your webhook handling and reply flow. It isn't enough to show stakeholders a real customer journey, because your own templates and brand name don't exist there yet.

Going live with WhatsApp Self Sign-up

Production needs your own WhatsApp sender, registered through Twilio's Self Sign-up, which opens a Meta flow and creates or links a WhatsApp Business account in your business portfolio. The points that trip teams up:

  1. Account and access. You need an upgraded Twilio account and admin access to your Meta business portfolio. A portfolio created during sign-up needs Meta business verification before you move into production.
  2. The number. It can be a Twilio number or your own, but it must not already be registered on WhatsApp, and it must be able to receive an SMS or voice code. Numbers behind an IVR can't receive the code.
  3. One account per Twilio account. Twilio keeps all senders in a Twilio account inside the same WhatsApp Business account, and its docs warn against selecting one created outside Twilio.
  4. Display name. Meta reviews it after registration. If Meta rejects it, Twilio says the number is limited to 250 business-initiated messages per 24 hours and may be disconnected.
  5. Software vendors. If you're building a product that onboards other businesses, Twilio requires you to join Meta's Tech Provider program instead.

Templates with the Content API

On Twilio, WhatsApp templates are Content API templates. You build them once in the Content Template Builder or through the API, submit them for WhatsApp approval, and send them by ContentSid rather than by Meta template name.

Twilio's content types for WhatsApp include twilio/text, twilio/media, twilio/quick-reply, twilio/call-to-action, twilio/list-picker, twilio/card, twilio/carousel, twilio/catalog, twilio/flows, whatsapp/card and whatsapp/authentication. Inside the 24-hour window you can reply with text, media, quick replies and list pickers without approval; carousels, flows and authentication templates need approval even as replies. Statuses run Unsubmitted, Received, Pending, Approved, Rejected, Paused and Disabled, and Twilio says WhatsApp review can take up to 24 hours.

Sending an approved template, with variables as a JSON string (Twilio allows up to 100 pairs per request):

curl -X POST "https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Messages.json" \
  --data-urlencode "From=whatsapp:+15551234567" \
  --data-urlencode "To=whatsapp:+919811122233" \
  --data-urlencode "ContentSid=$APPOINTMENT_TEMPLATE_SID" \
  --data-urlencode 'ContentVariables={"1":"Priya","2":"5 pm"}' \
  -u "$TWILIO_API_KEY:$TWILIO_API_SECRET"

Leave out Body and MediaUrl when you send a ContentSid; the template replaces both. Inside an open window, a plain reply uses Body:

curl -X POST "https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Messages.json" \
  --data-urlencode "From=whatsapp:+15551234567" \
  --data-urlencode "To=whatsapp:+919811122233" \
  --data-urlencode "Body=Thanks Priya, your order ships today." \
  -u "$TWILIO_API_KEY:$TWILIO_API_SECRET"

Meta still approves, categorizes and can pause every template, whichever tool submitted it. Our guide to WhatsApp message templates covers what gets them rejected.

When Twilio is the right layer, and when it isn't

Twilio earns its fee when WhatsApp is one channel in a multi-channel system:

  • You already send SMS or voice through Twilio and want one API, one bill and one set of status callbacks.
  • You want RCS or SMS alongside WhatsApp in the same code, or Twilio Verify, which lists WhatsApp as a channel for one-time passcodes.
  • Your compliance team already approved Twilio as a processor.

It's a weaker fit when:

  • Your traffic is mostly inbound support. At $0.005 per inbound message, a busy help desk pays Twilio for every customer message Meta delivers free.
  • You want an agent inbox out of the box. Twilio sells building blocks; you build or buy the inbox.
  • You're cost-sensitive at volume. Compare per-number and per-message models in our best WhatsApp API providers roundup, and read Cloud API vs BSP if you're weighing a direct integration instead.

If you're already on Twilio and want out, Meta's 2026 account model changes the process; see how to switch WhatsApp API provider.

Where Tenashi fits

Twilio is a strong choice when WhatsApp is one more channel in your code. When the work is people answering WhatsApp, it leaves the inbox to you. Tenashi is that inbox for your existing WhatsApp or WhatsApp Business number, linked by QR scan: DMs and groups in one place, a CRM under every chat, assignments and notes, flat from $18/mo with no per-message fees. Its REST API sends text and media with an Idempotency-Key, and signed webhooks report every message, including ones typed on the phone.

It doesn't replace Twilio for everything. Tenashi has no templates, buttons or verified badge, isn't Meta's official platform, and paces sends deliberately, so OTPs and bulk notifications should stay on Twilio or the Cloud API. Pacing cuts ban risk on your number without eliminating it.

Read the API docs · Get started

FAQ

How much does Twilio charge for WhatsApp messages?

Twilio's pricing page, marked current as of September 2026, lists a $0.005 fee per message, inbound or outbound, plus Meta's per-message fees passed through by category and country. Messages that end in a Failed status carry a $0.001 processing fee. Optional engagement features such as link shortening are priced separately.

Can I use the Twilio WhatsApp sandbox in production?

No. Twilio says the sandbox is for testing and discovery only. Only people who send your join code can receive messages, each join expires after three days, business-initiated messages are limited to three test templates, and the number sends one message every three seconds. Production needs your own registered sender.

Do I need a Meta business portfolio to use WhatsApp on Twilio?

Yes, for production. Twilio's Self Sign-up opens a Meta flow where you log in, pick or create a business portfolio, and create a WhatsApp Business account for your sender. You need admin access to that portfolio, and a newly created one needs Meta business verification before going live.

Are Twilio Content API templates the same as Meta templates?

They're Twilio's wrapper around them. You build the template in the Content Template Builder or Content API, submit it for WhatsApp approval, then send it with a ContentSid and ContentVariables. Meta still approves, categorizes and can pause it, and Twilio shows statuses such as Pending, Approved, Paused and Disabled.

Does Twilio charge for messages customers send me?

Yes. Twilio's published $0.005 fee applies to inbound and outbound WhatsApp messages alike, even though Meta itself never charges for messages users send to a business. For inbound-heavy support traffic, that line can outweigh Meta's charges, so model your real inbound volume before choosing Twilio.


Twilio is worth its fee when it saves you a second integration. Get the Meta side right first with the complete guide to the WhatsApp API, and if your team's real need is answering chats together, see what Tenashi does.