Migration guide

How to migrate from GMS to Twilio

A developer's guide to migrating SMS and messaging traffic from GMS to Twilio, covering channel differences, compliance, and request-format changes.

GMS is an enterprise CPaaS and A2P messaging provider that offers SMS, WhatsApp, Viber, RCS and email through a single API. Twilio is a customer-engagement platform with communications APIs for SMS, MMS, voice, email and more. On the messaging.dev Score, GMS rates 36/100 and Twilio 88/100 — this guide covers, as data, what actually changes at the account and API level when you move between them.

What changes when you move

Channels. Moving to Twilio you keep SMS, RCS, WhatsApp and email. You gain MMS and voice. You lose Viber, which GMS supports and Twilio does not — if any of your traffic runs on Viber, plan an alternate channel. Neither provider supports Facebook Messenger, Telegram or Apple Messages for Business.

Compliance and residency. Both hold GDPR and ISO 27001. Twilio additionally holds SOC 2 and HIPAA, so you lose no certification by migrating. GMS runs EU servers only with no region choice; Twilio offers EU and US servers (plus Australia) and lets you choose data residency.

Onboarding and pricing. GMS uses custom enterprise pricing negotiated with sales, requires account activation, and offers no free developer credit. Twilio is self-service pay-as-you-go ($0.0079 per US SMS segment plus carrier fees) and includes $15 trial credit.

Tooling. GMS ships mobile SDKs (iOS/Swift, Android/Kotlin), rates medium docs quality, and has no sandbox. Twilio ships server-side SDKs (Node.js, Python, PHP, Java, C#, Ruby, Go), rates high docs quality, and provides a test sandbox. Both expose REST; Twilio also offers SMTP.

How the request format differs

Source (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
    }
  }'

Target (Twilio):

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

Endpoint. GMS posts to https://api-v2.hyber.im/{client_id}, carrying the client ID in the path. Twilio posts to https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.json, carrying the Account SID in the path.

Authentication. Both use HTTP Basic, so the mechanism is unchanged — you only swap the credential pair. GMS uses client_id:password issued during onboarding; Twilio uses the Account SID as username and the Auth Token as password.

Payload. This is the largest change. GMS sends a JSON body (Content-Type: application/json); Twilio takes form-encoded parameters (--data-urlencode). The fields map as follows: recipient phoneTo, sender sms.senderFrom, message body sms.textBody. GMS nests channel-specific fields under an sms object and names channels explicitly in a channels array; Twilio flattens these and infers the channel from the endpoint and number. GMS’s ttl has no direct equivalent in the basic Twilio send. Note number formats too: Twilio requires E.164 (+15551234567) for both To and From, and From is a Twilio phone number rather than the alphanumeric sender ID (MyBrand) GMS accepts.

Migration checklist

  1. Create a Twilio account and copy your Account SID and Auth Token; claim a sending number. See how to start with Twilio for the full walkthrough.
  2. Map each request field: phoneTo, sms.senderFrom, sms.textBody; convert all numbers to E.164.
  3. Re-point your sending code to the Messages.json endpoint and switch the body from JSON to form-encoded parameters.
  4. Swap credentials — keep HTTP Basic, but authenticate with SID:AuthToken.
  5. Re-test in Twilio’s sandbox before sending live traffic (GMS had none, so this step is new).
  6. Update delivery/status webhooks to consume Twilio’s callback format.
  7. Run both providers in parallel and compare delivery and cost.
  8. Cut over once results look right.

Watch out for

  • Losing Viber. Twilio has no Viber channel; migrate that traffic elsewhere or keep GMS for it.
  • Sender identity. GMS’s alphanumeric sender IDs become Twilio numbers or registered sender IDs depending on destination country — verify per market.
  • Message TTL. GMS’s ttl isn’t in the basic Twilio send; use validity/Messaging Services settings if you rely on it.
  • Pricing visibility. You move from negotiated enterprise rates to public pay-as-you-go, so model your volume up front.

For a full side-by-side, see the GMS vs Twilio comparison.