Migration guide

How to migrate from Twilio to Vonage

A developer guide to moving SMS and messaging traffic from Twilio to Vonage: channel gains and losses, request-format and auth changes, and a step-by-step migration checklist.

Twilio and Vonage are both publicly traded communications-API platforms that expose messaging, voice, and related channels over a REST API. On the messaging.dev Score the two sit one point apart — Twilio at 88/100 and Vonage at 89/100 — so this is a lateral move between comparable platforms rather than a clear upgrade or downgrade. This guide covers which channels you gain and lose, how the send request changes, and a checklist to cut over safely.

What changes when you move

Channels. Moving to Vonage you gain Viber and Facebook Messenger, neither of which Twilio offers in this dataset. You keep SMS, MMS, RCS, WhatsApp, and Voice — all present on both. You lose Email: Twilio offers it (and exposes an SMTP API type for it), while Vonage is REST-only and has no email channel. Neither provider offers Telegram or Apple Messages for Business.

Compliance and data residency are effectively identical, so this is a low-risk dimension: both carry GDPR, ISO 27001, SOC 2, and HIPAA alignment; both run US and EU servers; and both let you choose a data-residency region. Vonage additionally lists APAC alongside Australia as other regions, where Twilio lists Australia.

Pricing is pay-as-you-go per message/minute on both. Twilio’s model adds committed-use discounts on top of volume discounts; Vonage offers volume discounts. Headline US SMS is roughly $0.0072 per segment on Vonage versus $0.0079 on Twilio (plus carrier fees on both). Free developer credit drops from Twilio’s $15 trial credit to Vonage’s €2.

SDKs, sandbox, and docs. Both ship seven official SDKs and share Node.js, Python, PHP, Java, C#, and Ruby; you lose the Go SDK and gain a Kotlin one. Both provide a sandbox test environment and both rate “high” on documentation quality. For a full walkthrough of the target platform, see how to start with Vonage.

How the request format differs

Twilio (source):

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

Vonage (target):

curl -X POST 'https://rest.nexmo.com/sms/json' \
  -d 'api_key=YOUR_API_KEY' \
  -d 'api_secret=YOUR_API_SECRET' \
  -d 'from=Vonage' \
  -d 'to=15551234567' \
  -d 'text=Hello from Vonage'

Three things change:

  • Endpoint / base URL. Twilio posts to https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.json, with your Account SID embedded in the path. Vonage posts to https://rest.nexmo.com/sms/json (legacy SMS API) or https://api.nexmo.com/v1/messages (Messages API) — the account identifier is no longer part of the URL.
  • Authentication. Twilio uses HTTP Basic auth, passing the Account SID as username and Auth Token as password (the -u flag). Vonage’s SMS API instead takes an API Key + API Secret as ordinary body parameters (api_key, api_secret); the newer Messages API uses JWT auth. There is no -u header on the Vonage call.
  • Payload fields. The three core fields are renamed and lowercased: recipient Toto, sender Fromfrom, and body Bodytext. Note that Vonage’s from accepts an alphanumeric sender ID (Vonage), not only an E.164 number.

Migration checklist

  1. Create the target account and keys. Sign up at Vonage (self-onboarding), then copy your API Key and API Secret from the dashboard; if you plan to use the Messages API, set up JWT credentials as well.
  2. Map the request fields. Translate Toto, Fromfrom, Bodytext, and move credentials out of the -u header into api_key/api_secret body params (or a JWT).
  3. Re-point your sending code. Swap the base URL and, if you use an SDK, replace the Go client (Vonage ships no Go SDK) with a supported language such as Node.js, Python, or Kotlin.
  4. Re-test in the sandbox. Vonage provides a sandbox test environment — validate your integration there before sending live traffic.
  5. Update webhooks and delivery callbacks. Re-register your delivery-receipt and inbound-message callback URLs on Vonage and confirm the payload shapes in your handlers.
  6. Run both in parallel. Send a slice of production traffic through Vonage while Twilio still carries the rest, and compare delivery rates.
  7. Cut over. Once parity holds, shift remaining traffic and decommission the Twilio path.

Watch out for

  • No email channel. Twilio’s email (and its SMTP API type) has no equivalent on Vonage — any email sending must move to a separate provider.
  • No Go SDK. If your stack depends on Twilio’s Go SDK, you’ll need to switch languages or call the REST API directly.
  • Less free credit. The trial drops from $15 to €2, so budget for paid testing sooner.
  • Two APIs, two auth schemes. Vonage splits into the legacy SMS API (key/secret) and the Messages API (JWT); decide which you’re targeting up front to avoid mixing auth models.

For a side-by-side of every dimension, see the Twilio vs Vonage comparison.