Migration guide

How to migrate from SMS.to to Bird

A developer's guide to moving an SMS integration from SMS.to to Bird: channel trade-offs, request-format mapping, and a step-by-step migration checklist.

SMS.to is an omnichannel business messaging platform from Cyprus-based Intergo Telecom, built around SMS plus chat channels like Viber, RCS, WhatsApp and Telegram. Bird (formerly MessageBird) is a broader communications infrastructure platform from Amsterdam that unifies SMS, WhatsApp, voice and email behind one API. On the messaging.dev Score, SMS.to rates 49/100 and Bird 76/100 — this guide walks through what actually changes when you move an integration from one to the other.

What you gain and what you lose

Channels are the biggest structural change. Both platforms carry SMS and WhatsApp, so those integrations survive. Moving to Bird you gain voice and email as first-class channels. You lose three chat channels that SMS.to supports and Bird does not: RCS, Viber and Telegram. If your app sends on any of those, you will need to keep SMS.to (or another provider) for them or drop them. Neither platform supports MMS, Facebook Messenger or Apple Messages for Business, so nothing changes there.

Compliance moves in your favor: both are GDPR and ISO 27001 aligned, and Bird adds SOC 2 and HIPAA, which SMS.to does not list. Data residency is identical — both offer EU and US servers with a region choice — though Bird encodes the region into the API key and host rather than an account setting. Documentation quality goes from medium to high, and Bird adds a sandbox (SMS.to has none) for pre-production testing.

SDK coverage is a trade-off. SMS.to ships a single PHP SDK; Bird ships TypeScript, Python and Go — but no PHP. A PHP codebase will call Bird over raw HTTP or wrap it yourself. On pricing, SMS.to is prepaid pay-as-you-go from $0.023 per SMS; Bird is usage-based with no platform or seat fees, from $0.0073 per US message. Note the free credit differs in kind: SMS.to gives trial credits on sign-up, while Bird’s free tier is 1,000 emails/month — not free SMS.

How the request format differs

SMS.to quickstart:

curl -X POST https://api.sms.to/sms/send \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"message": "Hello from SMS.to", "to": "+35794000001", "sender_id": "SMSto"}'

Bird quickstart:

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"
  }'

Three things change. The endpoint moves from https://api.sms.to/sms/send to a region-prefixed host, https://us1.platform.bird.com/v1/sms/messages (use the eu1 host for the EU region). Authentication stays a Bearer token, but Bird’s key is region-prefixed (bk_us1_... / bk_eu1_...) and the prefix must match the host — SMS.to also accepted the key as an api_key query parameter on GET, which Bird does not. The payload fields map as: messagetext, sender_idfrom, and to stays to. Bird’s example also includes a category field (e.g. authentication) that SMS.to has no equivalent for.

Migration checklist

  1. Create a Bird account and generate a region-prefixed API key (bk_us1_ or bk_eu1_) matching the residency you want.
  2. Map the request fields: messagetext, sender_idfrom, keep to, and add category.
  3. Re-point your sending code to the region-prefixed endpoint and swap in the Bearer key. Drop any api_key query-parameter auth.
  4. Re-test in Bird’s sandbox before sending live traffic.
  5. Update your delivery/webhook callbacks to Bird’s payloads and confirm each maps to your existing status handling.
  6. Run both providers in parallel, comparing delivery on a subset of traffic.
  7. Cut over once delivery and callbacks match, keeping SMS.to only for channels Bird lacks.

Watch out for

  • Lost channels: RCS, Viber and Telegram are not available on Bird.
  • No PHP SDK: SMS.to’s only SDK language is unsupported on Bird; expect raw HTTP from PHP.
  • Free tier is email, not SMS: Bird’s free 1,000/month covers email only, so budget for SMS test costs.
  • SMPP vs SMTP: SMS.to offers an SMPP binding; Bird offers SMTP instead, so high-volume SMPP senders lose that path.
  • Region-locked keys: a bk_us1_ key will not work against the eu1 host.

For a full walkthrough of the target, see How to start with Bird, or the side-by-side Bird vs SMS.to comparison.