Twilio migration

Bring a supported Twilio voice workload to Signals.

Signals mirrors the Twilio 2010-04-01 Calls API and OneML is derived from TwiML. Migration starts by checking your application against the public compatibility matrix.

Not full parity. Not a zero-code promise.

Same request shape, Signals hostname

curl -X POST "https://api.helios.pressone.co/2010-04-01/Accounts/ACCOUNT_SID/Calls.json" \
  -u ACCOUNT_SID:AUTH_TOKEN \
  -d "To=+2341800000001" \
  -d "From=+2341700000000" \
  -d "Url=https://example.com/voice"

Placeholder credentials and numbers.

2010-04-01 Calls resourceOneML derived from TwiMLX-Twilio-Signature retainedPublic compatibility matrix

Migration process

Inventory, compare, test, then move traffic.

  1. 01Inventory the Calls API operations, TwiML verbs and attributes, callbacks and helper-library assumptions your application depends on.
  2. 02Compare every dependency with the public compatibility matrix.
  3. 03Update the base URL and credentials, and change behaviour that is not supported.
  4. 04Validate webhook signature verification and callback handling against Signals.
  5. 05Test a controlled Nigerian workload end to end.
  6. 06Expand traffic only after behaviour matches expectations.

What is familiar

Most of the request surface will look like your existing code.

The 2010-04-01 Calls resource

Call creation and inspection use the same resource shape your application already targets.

Form-encoded create-call requests

Requests use PascalCase fields such as To, From, Url and StatusCallback.

TwiML-shaped documents

OneML uses the same structure as TwiML for the verbs that are supported.

X-Twilio-Signature

The signature header name is retained for verification compatibility with existing middleware.

Standard webhook fields

CallSid, AccountSid, From, To, CallStatus, Direction and ApiVersion arrive as your handlers expect.

Helper libraries need checking

Some helper-library behaviour does not carry over unchanged. Verify each call path rather than assuming an SDK works end to end.

What requires review

Check these before you move any traffic.

Unsupported verbs and child targets

Some TwiML verbs, attributes and child elements are not implemented. The matrix lists what is skipped or rejected.

Dial to SIP is tenant-only

<Dial><Sip> is limited to registered extensions in the caller’s own tenant domain, rather than arbitrary SIP URIs.

Live call update encoding

Updating a call in progress requires JSON with snake_case fields, an exception to the form-encoded PascalCase pattern.

Non-uniform error responses

Some non-create operations return plain text or otherwise non-uniform errors, so error parsing needs review.

Recordings list is not paginated

Code that walks paginated recording lists needs adjusting.

Inbound calls emit no status callbacks

Status callbacks apply only to calls created through the REST API. Inbound calls use the configured voice URL.

Say behaviour and voices

Say behaviour and available voices are provider-specific, so prompts should be reviewed by ear.

Only Stream under Connect, Start and Stop

Within the supported Connect, Start and Stop patterns, Stream is the implemented child. Other nested products are not available.

Code path

Point an existing request at the Signals hostname.

Create a call on Signals

curl -X POST "https://api.helios.pressone.co/2010-04-01/Accounts/ACCOUNT_SID/Calls.json" \
  -u ACCOUNT_SID:AUTH_TOKEN \
  -d "To=+2341800000001" \
  -d "From=+2341700000000" \
  -d "Url=https://example.com/voice"

The base hostname is api.helios.pressone.co and the resource path is the familiar 2010-04-01 Calls resource. Credentials are your Signals account SID and auth token.

The endpoint and credentials are the first change, not always the only one. Documents, callbacks and error handling still need to be checked against the matrix.

When not to migrate

Cases where staying put is the right decision.

Your application depends on Twilio-specific products or verbs that Signals does not implement.
A global single-vendor strategy matters more to you than Nigerian local infrastructure.
The cost of redesigning around unsupported behaviour exceeds the benefit of moving.
Your current Twilio numbers and operating model already fit the workload.

A fuller side-by-side view of the trade-offs, including numbers, billing and support, is set out in the comparison.

Trademark notice

Twilio and TwiML are trademarks of Twilio Inc. or its affiliates. Signals is not affiliated with or endorsed by Twilio Inc.

Next step

Test one Nigerian workload before moving more.