Migration guide

How to migrate from SMSAPI to Twilio

A developer's guide to moving from SMSAPI to Twilio: channel and compliance differences, request-format changes, a step-by-step migration checklist, and data-backed gotchas.

SMSAPI is a Polish business-messaging platform (a brand of LINK Mobility Poland) that sends SMS, MMS, RCS, WhatsApp Business and VMS voice over a REST API. Twilio is a San Francisco-based customer-engagement platform with communications APIs for SMS, voice, email and more. On the messaging.dev Score, SMSAPI rates 44/100 and Twilio 88/100 — this guide covers what actually changes at the code and account level when you move between them.

What changes when you move

Channels. You keep every channel you had: both providers support SMS, MMS, RCS, WhatsApp and voice. You gain email, which SMSAPI does not offer. Neither provider supports Viber, Facebook Messenger, Telegram or Apple Messages for Business, so nothing is lost there.

Compliance. Both are GDPR-aligned and ISO 27001 certified. Twilio adds SOC 2 and HIPAA, neither of which SMSAPI lists — relevant if you handle US healthcare data or need a SOC 2 report for vendor review.

Data residency. SMSAPI stores all data within the EEA (two redundant data centers in Poland) and offers no US option or region choice. Twilio runs both US and EU servers, adds an Australia region, and lets you choose data residency. You gain flexibility, but the default is no longer EU-only (see Watch out for).

Pricing and credit. SMSAPI uses prepaid credit (minimum top-up ~€30) from ~€0.04 per SMS. Twilio is pay-as-you-go per message/minute with volume and committed-use discounts, starting at $0.0079 per US SMS segment plus carrier fees. Free credit shifts from “free test SMS on signup” to a $15 trial.

SDKs, sandbox, docs. Both ship official SDKs, run a sandbox and rate high on docs quality. Twilio’s SDKs are Node.js, Python, PHP, Java, C#, Ruby and Go; SMSAPI covers PHP, Python, JavaScript, Java, C#, Go and Bash. If you relied on the SMSAPI Bash SDK, Twilio has no direct equivalent; Ruby is new on the Twilio side.

How the request format differs

SMSAPI:

curl -X POST -H "Authorization: Bearer YOUR_API_TOKEN" "https://api.smsapi.com/sms.do?to=48500000000&from=SenderName&message=Hello+world&format=json"

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. SMSAPI posts to a single URL, https://api.smsapi.com/sms.do. Twilio’s endpoint is account-scoped — https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.json — so your Account SID becomes part of the path.
  • Auth. SMSAPI uses an OAuth 2.0 API token in the Authorization: Bearer <token> header. Twilio uses HTTP Basic auth, with your Account SID as the username and Auth Token as the password (the -u flag). Drop the Bearer header entirely.
  • Payload. SMSAPI passes parameters in the query string; Twilio sends form-encoded body fields. Field names change: toTo, fromFrom, messageBody. Recipients move to E.164 with a leading + (48500000000+15551234567), and SMSAPI’s format=json param has no Twilio equivalent — Twilio returns JSON from the .json endpoint.

Migration checklist

  1. Create a Twilio account, provision a sender (phone number), and copy your Account SID and Auth Token from the dashboard.
  2. Map the request fields: toTo, fromFrom, messageBody; reformat numbers to E.164.
  3. Swap auth: replace the Bearer header with HTTP Basic (-u AccountSid:AuthToken).
  4. Re-point your sending code at the account-scoped Messages.json endpoint (or adopt a Twilio SDK).
  5. Re-test in Twilio’s sandbox before sending live traffic — Twilio provides one.
  6. Update delivery/status webhooks to consume Twilio’s callback format instead of SMSAPI’s.
  7. Run both providers in parallel, compare delivery, then cut over once Twilio matches your baseline.

For a from-scratch walkthrough, see how to start with Twilio; for a field-by-field comparison, see SMSAPI vs Twilio.

Watch out for

  • No losses in this direction. Twilio is a superset of SMSAPI on channels and certifications, so the gotchas are operational rather than missing features.
  • Sender identity. The Twilio quickstart uses a phone number as From (+15005550006), not an alphanumeric SenderName. Provision and register a sender before cutover.
  • Carrier fees. The advertised $0.0079 rate is “plus carrier fees,” so the effective per-message cost is higher than the headline — and you are moving to USD pricing.
  • Residency default. SMSAPI kept everything in the EEA. Twilio can too, but only if you actively use its data-residency choice; the default is not EU-only.
  • Free credit shape. You get a fixed $15 trial rather than open-ended free test SMS.