Migration from Vonage to Orbit
This guide walks you through migrating your SMS, voice, and webhook integration from Vonage (formerly Nexmo) to Orbit. The migration moves fastest if you translate your Vonage-shaped concepts into Orbit concepts first — most have a direct equivalent. Follow the Migrate from Twilio guide’s sibling structure if you run multiple vendor comparisons.Concept Mapping
Prefer not to do it by hand?
Honest answer up front: the assisted import wizard (dashboard: Settings → Import; CLI:devotel migrate <source>) currently ships connectors for Twilio, Klaviyo, MessageBird, and Telnyx — Vonage is not on the list yet, so this guide is a manual-level path with no one-click wizard. Every step below is copy-paste-ready and the two long-horizon pieces (porting numbers and retooling webhook handlers) are the only parts that touch your account before cut-over; the rest is code on your side.
If you have a large estate and want the sequence scripted end-to-end, the same import pipeline carries an external_id label per entity even for manual flows, so your backfill reports stay vendor-consistent. See Platform migration jobs for the job runner.
Step 1: Create Your Orbit Account
- Sign up at orbit.devotel.io/signup
- Generate an API key at Settings > API Keys
- Note your key prefix:
dv_live_sk_xxxx
X-API-Key header. There is no keypair, no private.key file, and no JWT expiry to babysit.
Step 2: Port Your Numbers
Port existing Vonage numbers to Orbit following the Porting numbers end-to-end flow. Expect 7–14 business days; Vonage’s Letter of Authorization (LoA) flow needs the Customer Service Record (CSR) from your Vonage account page, not guessed values — rejections likeADDRESS_MISMATCH and NAME_MISMATCH almost always trace back to a copied-instead-of-guessed field.
Vonage quirks to note on the CSR pull:
- If your Vonage account holds numbers across sub-accounts, pull the CSR for the master account; the legal entity name must match the one Vonage bills.
- SMS-enabled numbers: declare it on the LoA so the carrier ports voice and messaging together; a response of
splittable: trueon the portability check warns you the carrier may move voice only.
LOA_URL_INVALID_ORIGIN:
Step 3: Rewrite SMS Sends
Vonage (before)
Orbit (after)
Key Differences
Vonage’s Messages API accepted channel alternatives (
sms, mms, whatsapp, …) in message_type; Orbit makes the channel an explicit channel field, which reads the same way in code.
Step 4: Rewrite Inbound and Status Webhook Handlers
Webhook Header Changes
Verify against
X-Orbit-Signature — it is the canonical header Orbit sends on every delivery. X-Devotel-Signature is still emitted for backward compatibility only; treat it as legacy and do not build new verifiers against it. The webhook consumer guide has the full receiver recipe (raw-body capture, timestamp window, rotation grace header X-Orbit-Signature-Next).
Payload Format Changes
Vonage sends webhook payloads as JSON at application level, but inbound SMS (from the legacy SMS API) arrives as query/form-encoded pairs. Orbit delivers one canonical JSON envelope for every event: Vonage SMS API inbound (form-encoded):Event-Name Mapping
Map each Vonage webhook subscription to its Orbit event type. Subscribe your endpoint to the Orbit names in the table; the full catalog is at Webhook events.Signature Verification (Vonage JWT trickle → Orbit HMAC)
whsec_ secret you copy once when you register the endpoint. Most teams remove a JWT library from the receiver’s dependency list at this step.
Step 5: Migrate Voice (if applicable)
NCCO to Orbit IVR
Vonage steers a call with NCCO — a JSON array of actions (talk, input, connect, stream, …) returned from your answer_url. In Orbit, the equivalent is an IVR flow: a { nodes, edges } graph (the same shape the visual IVR builder saves), created with POST /api/v1/voice/ivr-flows and published so inbound callers see it.
Vonage NCCO (from your answer_url):
ivrStart), at least one terminal node (transfer, hangup, voicemail, ringGroup, …), no unreachable nodes, and no loops without an exit. DTMF menuOptions[].key values must be 0–9, *, or #. Transfer targets must be phone numbers or on-net extensions — raw sip: URIs are rejected at save (outbound voice exits only via the Devotel softswitch).
Upgrade to AI Agents
Instead of static IVR trees, consider deploying an AI voice agent:Step 6: Migrate Verify (OTP)
Vonage (before)
Orbit (after)
Migration Checklist
- Create Orbit account and generate API keys
- Pull the Vonage CSR (master account, exact entity name)
- Port numbers or purchase new ones
- Install Orbit SDK (
npm install @devotel-orbit/node) - Rewrite SMS send calls (Messages + SMS API callers)
- Rewrite inbound webhook handlers
- Rewrite delivery-receipt (dlr) handlers
- Swap JWT signature checks for HMAC verification
- Migrate NCCO → IVR flows (if applicable)
- Migrate Verify/OTP (if applicable)
- Update monitoring and alerting
- Run parallel testing (send via both Vonage and Orbit)
- Decommission Vonage integration
- Cancel Vonage account
Parallel Running Strategy
We recommend running Vonage and Orbit in parallel during migration:- Phase 1 (Week 1–2): Send 10% of traffic through Orbit, 90% through Vonage
- Phase 2 (Week 3–4): Split 50/50 and compare delivery rates
- Phase 3 (Week 5): Route 100% through Orbit, keep Vonage as fallback
- Phase 4 (Week 6+): Decommission Vonage