How to migrate from GMS to Bird
A developer's guide to moving SMS and messaging traffic from GMS to Bird: channel changes, request-format mapping, and a step-by-step migration checklist.
GMS is an enterprise CPaaS and A2P messaging provider offering SMS, WhatsApp, Viber, RCS and email through a single API. Bird (formerly MessageBird) is a communications infrastructure platform with unified APIs for email, SMS, WhatsApp and voice. On the messaging.dev Score, GMS rates 36/100 and Bird 76/100 — this guide covers what actually changes at the integration level when you move between them.
What changes when you move
Channels. Both providers support SMS, WhatsApp and email, and neither supports MMS, Facebook Messenger, Telegram or Apple Messages for Business. The differences: you gain Voice (Bird supports it, GMS does not), and you lose RCS and Viber (GMS supports both, Bird does not). If any live traffic runs on RCS or Viber, you will need a separate route for those channels.
Compliance. Both hold GDPR and ISO 27001. Bird additionally carries SOC 2 and HIPAA, so you gain those certifications and lose none.
Data residency. GMS runs EU servers only, with no region choice. Bird offers both EU and US servers and lets you choose the residency region, encoded in the API key.
Pricing and onboarding. GMS uses custom enterprise pricing negotiated with sales, with no public price list and no self-onboarding. Bird is self-service with usage-based, published rates (from $0.0073 per US SMS) and a free email tier of 1,000 messages/month. Note the free credit is email-only — SMS is billed from the first message.
SDKs, sandbox and docs. GMS ships mobile SDKs (iOS/Swift, Android/Kotlin); Bird ships server-side SDKs (TypeScript, Python, Go) and adds an SMTP interface alongside REST. Bird provides a sandbox (GMS does not) and its docs rate “high” versus GMS’s “med”. See how to start with Bird for the full onboarding walkthrough, or the Bird vs GMS comparison for a side-by-side.
How the request format differs
GMS:
curl -X POST 'https://api-v2.hyber.im/{client_id}' \
-u 'CLIENT_ID:API_PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"phone": "380631010100",
"channels": ["sms"],
"sms": {
"sender": "MyBrand",
"text": "Hello from GMS",
"ttl": 300
}
}'
Bird:
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"
}'
Endpoint. GMS posts to a single client-scoped URL (api-v2.hyber.im/{client_id}) and selects the channel inside the body via a channels array. Bird posts to a channel- and region-specific path (us1.platform.bird.com/v1/sms/messages), so the SMS channel lives in the URL, not the payload.
Authentication. GMS uses HTTP Basic auth — client_id:password base64-encoded, passed via -u. Bird uses a region-prefixed API key (bk_us1_... / bk_eu1_...) sent as a Bearer token; the prefix pins both the host and the data region.
Payload mapping. phone → to, sms.sender → from, sms.text → text. GMS nests the sender and body inside an sms object and includes ttl; Bird uses a flat payload, drops the channels array, and adds a category field.
Migration checklist
- Create a Bird account (self-service) and generate a region-prefixed API key — pick
us1oreu1to match your residency requirement. - Map the request fields:
phone→to(E.164 with leading+),sms.sender→from,sms.text→text; remove thechannelsarray andttl; addcategory. - Swap authentication: replace Basic auth (
-u CLIENT_ID:API_PASSWORD) withAuthorization: Bearer bk_.... - Re-point sending code to
https://<region>.platform.bird.com/v1/sms/messages, or adopt a Bird SDK (TypeScript, Python or Go). - Re-test in Bird’s sandbox before sending live traffic.
- Update webhooks and delivery callbacks to Bird’s delivery-report format.
- Run GMS and Bird in parallel and compare delivery on a slice of traffic.
- Cut over once delivery and reporting match.
Watch out for
- RCS and Viber are gone. Bird does not support either channel; keep GMS or another provider for that traffic.
- SDK platform shift. GMS’s SDKs are mobile (iOS/Android); Bird’s are server-side only. There is no Bird mobile SDK to drop in.
- Free credit is email-only. The 1,000/month free tier does not cover SMS — SMS bills from message one.
- Recipient format. Bird’s example uses E.164 with a leading
+; GMS’s used a bare number. Normalize numbers before sending. - Region key coupling. The key prefix locks you to a host and data region — a
us1key will not reacheu1.