Migration guide

How to migrate from Bird to Twilio

A developer's guide to moving SMS and messaging traffic from Bird to Twilio, covering channel differences, request-format changes, and a step-by-step migration checklist.

Bird is a communications infrastructure platform (formerly MessageBird) offering unified APIs for SMS, WhatsApp, voice, and email. Twilio is a customer engagement platform with communications APIs for SMS, voice, email, and more. On the messaging.dev Score, Bird rates 76/100 and Twilio 88/100 — this guide walks through what actually changes at the API level when you move from one to the other.

What changes at a glance

Channels. Both providers carry SMS, WhatsApp, voice, and email, so your existing channels move across unchanged. Twilio adds two channels Bird’s dataset does not list: MMS and RCS. Neither provider lists Viber, Facebook Messenger, Telegram, or Apple Messages for Business, so you lose no channel by switching.

Compliance and residency. Identical on paper: both are GDPR, ISO 27001, SOC 2, and HIPAA aligned, and both offer US and EU servers with a data-residency choice. Twilio additionally lists Australia as a region.

SDKs and tooling. Bird ships SDKs for TypeScript, Python, and Go. Twilio ships Node.js, Python, PHP, Java, C#, Ruby, and Go — broader language coverage. Both expose REST plus SMTP, both provide a sandbox, and both are rated high on docs quality.

Pricing and credit. Bird uses usage-based transactional pricing with no platform or seat fees (US SMS from $0.0073). Twilio is pay-as-you-go per message/minute with volume and committed-use discounts (US SMS from $0.0079 per segment). Free credit differs in kind: Bird offers a recurring free email tier (1,000/month), while Twilio gives a one-time $15 trial credit.

How the request format differs

Bird’s quickstart send:

curl -X POST "https://us1.platform.bird.com/v1/sms/messages" \
  -H "Authorization: Bearer bk_us1_..." \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+14155550100",
    "from": "Bird",
    "text": "Your Bird verification code is 481920. It expires in 10 minutes.",
    "category": "authentication"
  }'

Twilio’s quickstart send:

curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json' \
  --data-urlencode 'To=+15551234567' \
  --data-urlencode 'From=+15005550006' \
  --data-urlencode 'Body=Hello from Twilio' \
  -u ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token

Three things change:

  • Endpoint / base URL. Bird posts to a region-prefixed host, https://us1.platform.bird.com/v1/sms/messages, where the host encodes the region. Twilio posts to https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.json, embedding your Account SID directly in the path.
  • Authentication. Bird uses a Bearer token — a region-prefixed API key (bk_us1_... / bk_eu1_...) in the Authorization header, and the prefix routes to the right regional host. Twilio uses HTTP Basic auth: Account SID as username, Auth Token as password (the -u flag).
  • Payload. Bird sends a JSON body (Content-Type: application/json); Twilio sends URL-encoded form fields (--data-urlencode). The fields map directly but the names and casing change: toTo, fromFrom, textBody. Bird’s category field (e.g. "authentication") has no direct equivalent in Twilio’s basic Messages call.

Migration checklist

  1. Create a Twilio account and generate credentials (Account SID + Auth Token). The how to start with Twilio guide covers signup and key retrieval.
  2. Map the request fields: toTo, fromFrom, textBody, and switch the JSON body to URL-encoded form data.
  3. Swap endpoint and auth: point requests at the Messages.json URL with your Account SID, and replace the Authorization: Bearer header with Basic auth.
  4. Re-point your sending code — replace the Bird SDK with a Twilio SDK (Node.js is a good starting point).
  5. Re-test in Twilio’s sandbox (Twilio provides one) before sending live traffic.
  6. Update webhooks and delivery callbacks to Twilio’s status-callback format.
  7. Run both providers in parallel and compare delivery before committing.
  8. Cut over once delivery and callbacks match.

Watch out for

  • Free credit is one-time. Bird’s recurring free email tier (1,000/month) becomes Twilio’s single $15 trial credit.
  • US SMS list price is marginally higher ($0.0079 vs $0.0073 per segment).
  • Payload encoding changes from JSON to URL-encoded form data — a common source of 400 errors after cutover.
  • The category parameter has no direct equivalent in Twilio’s basic Messages call.

No certification, data-residency option, sandbox, or channel is lost moving in this direction — the risks here are integration-level, not capability-level. For a full side-by-side, see the Bird vs Twilio comparison.