How to migrate from SMS.to to Twilio
A developer-focused guide to migrating from SMS.to to Twilio, covering channel and compliance differences, request-format mapping, and a step-by-step cutover checklist.
SMS.to is an omnichannel business messaging platform and API from Cyprus-based Intergo Telecom for sending SMS, Viber, WhatsApp, RCS and Telegram. Twilio is a customer engagement platform with communications APIs for SMS, voice, email and more. On the messaging.dev Score, SMS.to rates 49/100 and Twilio 88/100; this guide covers what actually changes at the API level when you move between them.
What you gain and what you lose
Channels. Both providers send SMS, RCS and WhatsApp. Moving to Twilio adds MMS, voice and email. You lose Viber and Telegram, which SMS.to supports but Twilio does not. Neither offers Facebook Messenger or Apple Messages for Business.
Compliance and residency. Both are GDPR and ISO 27001 aligned, and both offer EU and US data residency with a region choice, so nothing is lost here. Twilio additionally holds SOC 2 and HIPAA and offers an Australia region.
Tooling. SMS.to ships one SDK (PHP), rates “med” on docs quality and has no sandbox. Twilio ships seven SDKs (Node.js, Python, PHP, Java, C#, Ruby, Go), rates “high” on docs and provides a sandbox test environment. Both expose a REST API; beyond that, SMS.to also offers SMPP while Twilio also offers SMTP.
Pricing and credit. Both are pay-as-you-go with a free developer credit — trial credits on sign-up at SMS.to, a $15 trial credit at Twilio. SMS.to advertises from $0.023 per SMS; Twilio advertises from $0.0079 per US SMS segment (plus carrier fees), with volume and committed-use discounts. See the full breakdown in the head-to-head comparison.
How the request format differs
SMS.to:
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"}'
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
Three things change:
- Endpoint. SMS.to posts to a single path,
https://api.sms.to/sms/send. Twilio posts tohttps://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.json, where your Account SID is part of the URL. - Authentication. SMS.to uses an API key as a Bearer token in the
Authorizationheader (also accepted as anapi_keyquery parameter on GET requests). Twilio uses HTTP Basic auth with the Account SID as the username and the Auth Token as the password — that is the-uflag. - Payload. SMS.to sends a JSON body (
Content-Type: application/json); Twilio sends form-urlencoded fields. The fields map asmessage→Body,to→To, andsender_id→From. Note that the SMS.to example uses an alphanumericsender_id(SMSto), whereas the TwilioFromis a phone number.
Migration checklist
- Create a Twilio account and generate your Account SID and Auth Token from the dashboard.
- Provision a sender — a Twilio phone number or Messaging Service — because Twilio’s
Fromis a number, not a free-text sender ID. - Map the request fields (
message→Body,to→To,sender_id→From) and switch the request body from JSON to form-urlencoded. - Swap the auth from a Bearer header to HTTP Basic (
SID:token). - Re-point your sending code to the new endpoint; optionally adopt an official SDK. The how-to-start-with-Twilio guide walks through a first send.
- Re-test using Twilio’s sandbox before sending live traffic (SMS.to had none, so this is a new step available to you).
- Update your delivery webhooks and status callbacks to Twilio’s format.
- Run both providers in parallel, verify delivery, then cut over.
Watch out for
- Viber and Telegram disappear. Twilio has no equivalent, so move those flows to another channel or keep SMS.to running for them.
- Sender identity. You cannot reuse an SMS.to alphanumeric
sender_idas-is; Twilio requires a provisioned number or Messaging Service. - Encoding switch. Moving from a JSON body to form-urlencoded fields is easy to overlook and will produce 4xx errors if missed.
- SMPP. If you rely on SMS.to’s SMPP binds, note that Twilio’s non-REST option is SMTP (for email), not SMPP.