Migration guide

How to migrate from GatewayAPI to Sinch

A developer-focused guide to migrating from GatewayAPI to Sinch, covering channel and compliance differences, request-format changes, a migration checklist, and data-backed gotchas.

GatewayAPI is a Danish SMS gateway and messaging platform by ONLINECITY.IO, offering SMS, RCS and email APIs on EU-hosted infrastructure. Sinch is a larger cloud communications platform spanning messaging, voice and email across many channels. On the messaging.dev Score, GatewayAPI rates 54/100 and Sinch 92/100 — this guide covers what moving between them actually involves, presented as data rather than endorsement.

What changes when you move

Channels you gain: MMS, WhatsApp, Viber, Facebook Messenger, Telegram, Apple Messages for Business and Voice. SMS, RCS and email exist on both providers, so you lose no channel by switching.

Compliance: both are GDPR-aligned. Sinch additionally lists ISO 27001, SOC 2 and HIPAA, none of which GatewayAPI carries in the dataset.

Data residency: both offer EU servers and a data-residency choice. Sinch also runs US servers and lists APAC, Australia and Brazil regions.

Tooling and docs: GatewayAPI ships no official SDKs and has no sandbox, and its docs quality is rated medium. Sinch ships SDKs for Java, Python, C#, Node.js and PHP, provides a sandbox, and its docs quality is rated high. Both support REST and SMPP; GatewayAPI adds Email-to-SMS, Sinch adds SMTP.

Pricing and credit: both are pay-as-you-go per message and both offer free developer/test credit (GatewayAPI on request; Sinch a trial credit). Sinch adds volume and committed-use pricing; GatewayAPI uses prepaid credit with no monthly fees.

How the request format differs

GatewayAPI:

curl https://gatewayapi.com/rest/mtsms \
  -H "Authorization: Token YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sender": "ExampleSMS", "message": "Hello World", "recipients": [{"msisdn": 4512345678}]}'

Sinch:

curl -X POST 'https://us.sms.api.sinch.com/xms/v1/YOUR_SERVICE_PLAN_ID/batches' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"from":"+15005550006","to":["+15551234567"],"body":"Hello from Sinch"}'

Endpoint: you move from a single fixed URL (https://gatewayapi.com/rest/mtsms) to a region-specific host with your service plan in the path (https://us.sms.api.sinch.com/xms/v1/{service_plan_id}/batches), so you must now supply a service_plan_id.

Auth: both send an Authorization header, but the scheme keyword changes from Token to Bearer.

Payload mapping: senderfrom, messagebody, and recipients: [{"msisdn": 4512345678}]to: ["+15551234567"]. GatewayAPI takes recipients as objects with a bare numeric msisdn; Sinch takes a flat array of E.164 strings (with a leading +). GatewayAPI’s example uses an alphanumeric sender (ExampleSMS), while Sinch’s uses a numeric +E.164 from-number.

Migration checklist

  1. Create a Sinch account, then copy your API token and service plan ID from the dashboard.
  2. Map the request fields: senderfrom, messagebody, and recipients[].msisdnto[] as +E.164 strings.
  3. Swap the endpoint to your region host and insert your service_plan_id in the path; change the auth scheme from Token to Bearer.
  4. Re-point your sending code, optionally adopting one of the official SDKs.
  5. Re-test in Sinch’s sandbox before sending live traffic.
  6. Update delivery/status webhooks and callbacks to Sinch’s format.
  7. Run both providers in parallel and reconcile delivery reports.
  8. Cut over once volumes and delivery match.

Watch out for

  • Country coverage: the dataset lists Sinch at 150 countries versus GatewayAPI’s 200 — confirm your destinations are supported before cutting over.
  • Default region is US: the quickstart host is us.sms.api.sinch.com. If you need EU data residency, select the matching EU region/host — Sinch offers a residency choice, but the sample endpoint does not use it.
  • Service plan in the path: every Sinch request needs a service_plan_id in the URL, a step GatewayAPI’s single endpoint doesn’t have.
  • Sender format: Sinch’s example uses a numeric from-number, so verify alphanumeric sender-ID support and any registration requirements for your destinations.

For a step-by-step setup, see how to start with Sinch, or review the full GatewayAPI vs Sinch comparison.