Migration

Your Twilio code already works here

compat 2010-04-01

Tayapro answers the Twilio request shape on the same paths, so a switch is a base URL and a key — not a rewrite. Traffic then runs through Tayapro routing and your own carrier accounts.

# Existing Twilio call, repointed at Tayapro
curl -X POST \
  https://api.your-domain.com/api/public/2010-04-01/Accounts/AC_ignored/Messages.json \
  -u "AC_ignored:tk_live_your_key" \
  --data-urlencode "To=+12025550123" \
  --data-urlencode "From=+12025550111" \
  --data-urlencode "Body=Your appointment is confirmed."
# The native Tayapro API
curl -X POST https://api.your-domain.com/api/public/v1/messages \
  -H "Authorization: Bearer tk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"to":"+12025550123","body":"Your appointment is confirmed."}'

Reference

Endpoint mapping

twilio → tayapro
TwilioTayaproNotes
POST /2010-04-01/Accounts/{Sid}/Messages.jsonPOST /v1/messagesBoth live. Form params To/From/Body, or JSON to/from/body.
GET /2010-04-01/Accounts/{Sid}/Messages.jsonGET /v1/messagesReturns { messages: [...] } in compatibility mode.
POST /2010-04-01/Accounts/{Sid}/Calls.jsonPOST /v1/callsUrl becomes your answer URL; TwiML is replaced by call-flow steps.
GET /2010-04-01/Accounts/{Sid}/Calls.jsonGET /v1/callsReturns { calls: [...] } in compatibility mode.
IncomingPhoneNumbers.jsonGET/POST /v1/numbersSearch with ?available=true, then buy and wire webhooks in one call.
Verify v2 Services / VerificationsPOST /v1/verify, POST /v1/verify/checkHashed codes, expiry, velocity and fraud checks built in.
X-Twilio-Signaturex-tayapro-signature: t=…,v1=…HMAC-SHA256 over `t.body`, with replay protection.
Message status callbacksSigned webhook events (message.sent, call.completed)Configure endpoints in the console; retries and replay included.

Fields

What each Twilio field becomes

1:1
AccountSidIgnored in compat mode — the API key identifies you
AuthTokenYour Tayapro API key (tk_live_…) in the password slot
MessageSid (SMxxx)SM… in compat mode, msg_… on /v1
CallSid (CAxxx)CA… in compat mode, call_… on /v1
TwiMLProvider-neutral call-flow steps (say, gather, dial, record)

Guide

Five steps to switch

no downtime
  1. 01

    Create a Tayapro API key

    In the console, open Team & API keys and create a live key with messages:send, calls:write, numbers:write and logs:read.

  2. 02

    Bring your numbers across

    Open Move from Twilio, paste your Twilio Account SID and auth token, review what would move, then import. Your Twilio account is left untouched.

  3. 03

    Repoint your code

    Change the base URL to https://api.your-domain.com/api/public and use your Tayapro key where the Twilio auth token used to go. Everything else stays as it is.

  4. 04

    Switch webhook verification

    Replace X-Twilio-Signature checks with x-tayapro-signature (HMAC-SHA256 of `${timestamp}.${rawBody}` using your endpoint secret).

  5. 05

    Move to the native API when ready

    The /v1 endpoints give you routing metadata, idempotency keys and one shape across text, voice, WhatsApp, RCS and email.

// Node: keep your Twilio-shaped requests, change host + credentials
const base = "https://api.your-domain.com/api/public";
const auth = Buffer.from("AC_ignored:tk_live_your_key").toString("base64");

await fetch(base + "/2010-04-01/Accounts/AC_ignored/Messages.json", {
  method: "POST",
  headers: {
    Authorization: "Basic " + auth,
    "Content-Type": "application/x-www-form-urlencoded",
  },
  body: new URLSearchParams({
    To: "+12025550123",
    From: "+12025550111",
    Body: "Your appointment is confirmed.",
  }),
});

Ready to move your numbers? Open Move from Twilio or read the native API reference.