Compatibility

Compare Twilio, VoiceTel, and RestComm before you migrate voice workloads.

Every REST resource and voice markup surface on the VoiceML compatibility matrix is scored side-by-side with Twilio (reference) and RestComm (open-source CPaaS). Use it to see what moves with a hostname swap, what needs markup changes, and what stays out of scope — before you cut traffic over.

Validate VoiceML Migration guide

Why VoiceTel built its own implementation from scratch

Most Twilio-compatible CPaaS platforms in market are not original implementations — they are RestComm and their derivatives. The community open-source RestComm stack ships the compatibility layer that voice and messaging providers then rebrand. VoiceTel authored VoiceML from scratch to make a truly conformant implementation that provides frictionless migration.

Compatibility matrix

Legend: Yes — supported, Partial — partial or documented limitation, No — unsupported (404 or 501), N/A — out of scope on this surface.

One table per Twilio product. VoiceTel's compatibility surface is grouped the same way Twilio's docs are, so you can pick the product you're migrating and skip to its block.

Programmable Voice

The 2010-04-01 voice REST surface — Calls, Conferences, Queues, Recordings, Applications, account-level resources, and hosted SIP domains. The bulk of the migration-from-Twilio compatibility work lives here. Twilio docs →

Resource Endpoints Twilio VoiceTel RestComm Notes
Account GET /Accounts/{Sid}, POST /Accounts/{Sid} Yes Yes Partial VoiceTel: self-account fetch/update; FriendlyName / Status mutable on the authenticated account.
Account / Balance GET /Balance Yes Yes No VoiceTel: account balance + currency. Polling-friendly endpoint mirrors Twilio's shape.
Account / Exports GET /Exports, GET /Exports/{Date} Yes Yes No VoiceTel: daily CDR/messaging export catalog and per-date fetch.
Account / Notifications GET /Notifications Yes Partial No VoiceTel stub: 200 + empty list. Account-wide events go to StatusCallback.
GET /Notifications/{Sid} Yes Partial No VoiceTel single-resource fetch on stub — always 404.
Account / Transcriptions (top-level) GET /Transcriptions, GET /Transcriptions/{Sid}, DELETE /Transcriptions/{Sid} Yes Yes No VoiceTel: tenant-wide transcription index across Calls and Recordings; idempotent delete.
Applications POST /Applications, GET /Applications[/{Sid}], POST /Applications/{Sid}, DELETE /Applications/{Sid} Yes Yes Partial VoiceTel: voice-only fields (no SMS). RestComm uses RcmlUrl instead of VoiceUrl — not a drop-in field swap.
Calls POST /Calls Yes Yes Partial VoiceTel normalises To/From against per-tenant phone regions; MachineDetection truly optional; Twiml/ApplicationSid accepted; per-call SIP/auth params wired through to the originate. RestComm uses RCML URL fields and the 2012-04-24 path prefix.
GET /Calls/{Sid} Yes Yes Partial
GET /Calls (filters: To, From, Status, ParentCallSid, StartTime≥/≤, EndTime≥/≤, Page, PageSize≤1000) Yes Yes Partial VoiceTel: full Twilio query surface; EndTime auto-restricts to terminal-status rows.
POST /Calls/{Sid} (Status / Twiml / Url / FallbackUrl / StatusCallback*) Yes Yes Partial VoiceTel: full Call resource on success; Twiml wins over Url.
DELETE /Calls/{Sid} Yes Yes Partial
Calls / Recordings GET /Calls/{Sid}/Recordings Yes Yes Partial
GET /Calls/{Sid}/Recordings/{Sid} Yes Yes Partial
POST /Calls/{Sid}/Recordings (start mid-call) Yes Yes Partial VoiceTel honours RecordingMaxDuration / PlayBeep / RecordingStatusCallback*.
POST /Calls/{Sid}/Recordings/{Sid} (Status=stopped/paused/in-progress) Yes Yes Partial VoiceTel: stop, pause, resume; idempotent against already-completed.
DELETE /Calls/{Sid}/Recordings/{Sid} Yes Yes Partial VoiceTel unlinks WAV and drops row.
Calls / Streams GET /Calls/{Sid}/Streams[/{Sid}] Yes Yes No Twilio Media Streams WebSocket protocol. VoiceTel mirrors <Connect><Stream> / <Start><Stream>. RestComm has no equivalent live media fork REST surface.
POST /Calls/{Sid}/Streams (start) Yes Yes No VoiceTel returns MZ-prefixed SID.
POST /Calls/{Sid}/Streams/{Sid} (Status=stopped) Yes Yes No
Calls / Siprec GET /Calls/{Sid}/Siprec[/{Sid}] Yes Yes No SIPREC session recording fork. VoiceTel mirrors <Start><Siprec>; returns SR-prefixed SID.
POST /Calls/{Sid}/Siprec (start) Yes Yes No
POST /Calls/{Sid}/Siprec/{Sid} (Status=stopped) Yes Yes No
Calls / Transcriptions GET /Calls/{Sid}/Transcriptions[/{Sid}] Yes Yes Partial VoiceTel mirrors <Start><Transcription>; returns RT-prefixed SID. RestComm transcription depends on deployment plugins.
POST /Calls/{Sid}/Transcriptions (start) Yes Yes Partial
POST /Calls/{Sid}/Transcriptions/{Sid} (Status=stopped) Yes Yes Partial
Calls / Payments POST /Calls/{Sid}/Payments[/{Sid}] Yes Yes No VoiceTel: card capture enabled per account — contact support to turn on.
Calls / Events GET /Calls/{Sid}/Events Yes Partial No VoiceTel compatibility stub: 200 + empty list. Per-call events are delivered to your StatusCallback URL.
Calls / Notifications GET /Calls/{Sid}/Notifications Yes Partial No VoiceTel stub: 200 + empty list.
GET /Calls/{Sid}/Notifications/{Sid} Yes Partial No VoiceTel single-resource fetch on the same stub — always 404.
Calls / UserDefinedMessages POST /Calls/{Sid}/UserDefinedMessages Yes No No VoiceTel returns 501 + Twilio error code 20501. Out of scope on the VoiceML compatibility surface.
Conferences GET /Conferences Yes Yes Partial VoiceTel: live conference query, multi-tenant namespaced.
GET /Conferences/{Sid} Yes Yes Partial
POST /Conferences/{Sid} (Status=completed to end) Yes Yes Partial
Conferences / Participants POST /Conferences/{Sid}/Participants (dial-in) Yes Yes Partial VoiceTel places outbound leg that joins on answer; returns status=queued while ringing.
GET /Conferences/{Sid}/Participants[/{Sid}] Yes Yes Partial
POST /Conferences/{Sid}/Participants/{Sid} (Muted, Hold) Yes Yes Partial VoiceTel: mute/unmute and hold/unhold wired.
DELETE /Conferences/{Sid}/Participants/{Sid} (kick) Yes Yes Partial
Conferences / Recordings GET /Conferences/{Sid}/Recordings Yes Yes Partial VoiceTel: metadata persisted at conference start.
GET /Conferences/{Sid}/Recordings/{Sid} Yes Yes Partial
POST /Conferences/{Sid}/Recordings/{Sid} (Status=stopped/paused/in-progress) Yes Yes Partial Same semantics as call recordings; enforces conference scope from URL path.
DELETE /Conferences/{Sid}/Recordings/{Sid} Yes Yes Partial
Connect / ConversationRelay <Connect><ConversationRelay url="wss://..."/></Connect> Yes Yes No Voice markup verb (no REST mirror). VoiceTel bridges to a customer-hosted WebSocket for LLM-driven voice agents with Twilio-shaped wire messages. RestComm has no ConversationRelay equivalent.
Connect / other sub-nouns <VirtualAgent>, <Conversation>, <Room>, <Autopilot> Yes No No Twilio-hosted AI / Programmable Video / Studio surfaces. VoiceTel: use <ConversationRelay> for voice-agent integration.
OutgoingCallerIds POST /OutgoingCallerIds, GET /OutgoingCallerIds[/{Sid}], POST /OutgoingCallerIds/{Sid}, DELETE /OutgoingCallerIds/{Sid} Yes Yes Partial VoiceTel: PN-prefixed verified caller-ID resource. Full CRUD; verification flow is provider-side.
Queues POST /Queues, GET /Queues[/{Sid}], POST /Queues/{Sid}, DELETE /Queues/{Sid} Yes Yes Partial VoiceTel: full CRUD; in-process state.
Queues / Members GET /Queues/{Sid}/Members[/{Sid}|Front], POST /Queues/{Sid}/Members/{Sid|Front} Yes Yes Partial VoiceTel extension — REST dequeue alongside <Dial><Queue> markup.
Recordings (top-level) GET /Recordings[/{Sid}] Yes Yes Partial
DELETE /Recordings/{Sid} Yes Yes Partial VoiceTel: row + local WAV + S3 object (best-effort).
GET /Recordings/{Sid}.wav Yes Yes Partial VoiceTel: binary audio/wav — 200 (local), 302 to presigned S3 (archived), or 410 Gone.
Recordings / Transcriptions GET /Recordings/{Sid}/Transcriptions, GET /Recordings/{Sid}/Transcriptions/{Sid}, DELETE /Recordings/{Sid}/Transcriptions/{Sid} Yes Yes No VoiceTel: per-recording transcription sub-resource. STT vendor selected per tenant.
SIP / Domains POST /SIP/Domains, GET /SIP/Domains[/{Sid}], POST /SIP/Domains/{Sid}, DELETE /SIP/Domains/{Sid} Yes Yes Partial VoiceTel: SD-prefixed SIP-ingress resource — full CRUD. See SIP trunking for inventory provisioning.
SIP / Domains / CredentialListMappings POST, GET /SIP/Domains/{Sid}/CredentialListMappings[/{Sid}], DELETE … Yes Yes No Twilio nested SIP mapping resources. RestComm SIP REST parity is deployment-dependent.
SIP / Domains / IpAccessControlListMappings POST, GET /SIP/Domains/{Sid}/IpAccessControlListMappings[/{Sid}], DELETE … Yes Yes No
SIP / Domains / Auth / Calls / CredentialListMappings POST, GET, DELETE /SIP/Domains/{Sid}/Auth/Calls/CredentialListMappings[/{Sid}] Yes Yes No Call-specific override mapping for inbound voice INVITEs.
SIP / Domains / Auth / Calls / IpAccessControlListMappings POST, GET, DELETE /SIP/Domains/{Sid}/Auth/Calls/IpAccessControlListMappings[/{Sid}] Yes Yes No
SIP / Domains / Auth / Registrations / CredentialListMappings POST, GET, DELETE /SIP/Domains/{Sid}/Auth/Registrations/CredentialListMappings[/{Sid}] Yes Yes No REGISTER-specific override mapping.
SIP / Domains / InboundProcessingRegion GET /v2/SipDomains/{Name}, POST /v2/SipDomains/{Name} Yes Yes No Twilio Routes v2 surface. VoiceTel keyed by domain name; account from HTTP Basic auth.
SIP / CredentialLists POST /SIP/CredentialLists, GET /SIP/CredentialLists[/{Sid}], POST /SIP/CredentialLists/{Sid}, DELETE /SIP/CredentialLists/{Sid} Yes Yes Partial VoiceTel: CL-prefixed credential bucket attachable to a SIP Domain.
SIP / CredentialLists / Credentials POST /SIP/CredentialLists/{Sid}/Credentials, GET …, POST / DELETE … Yes Yes Partial VoiceTel: Password is write-only on fetch.
SIP / IpAccessControlLists POST /SIP/IpAccessControlLists, GET …, POST / DELETE … Yes Yes Partial VoiceTel: AL-prefixed IP-allowlist bucket.
SIP / IpAccessControlLists / IpAddresses POST /SIP/IpAccessControlLists/{Sid}/IpAddresses, GET …, POST / DELETE … Yes Yes Partial VoiceTel: individual IP entries with optional CIDR mask.

Programmable Messaging

SMS and MMS send/fetch with per-message media. VoiceTel routes messages through the per-tenant SMS provider configured for your account. Twilio docs →

Resource Endpoints Twilio VoiceTel RestComm Notes
Messages POST /Messages Yes Yes Partial VoiceTel sends via per-tenant SMS provider; see VoiceTel Messaging.
GET /Messages[/{Sid}] Yes Yes Partial
POST /Messages/{Sid} Yes Partial Partial VoiceTel: Body redaction supported; Status=canceled rejected with 409.
DELETE /Messages/{Sid} Yes Yes Partial VoiceTel: idempotent 204.
Messages / Media GET /Messages/{Sid}/Media, GET /Messages/{Sid}/Media/{Sid}, DELETE /Messages/{Sid}/Media/{Sid} Yes Yes Partial VoiceTel: per-message media list/fetch/delete. Returns MIME type + content-URL.
MMS POST /Messages + MediaUrl Yes N/A Partial VoiceTel MMS via native VoiceTel Messaging, not the VoiceML compatibility REST surface.

Phone Numbers

DID inventory and routing. VoiceTel: IncomingPhoneNumbers for assigned DIDs; provisioning happens through the VoiceTel Numbers workflow rather than search-and-buy on this REST surface. Twilio docs →

Resource Endpoints Twilio VoiceTel RestComm Notes
IncomingPhoneNumbers GET /IncomingPhoneNumbers Yes Yes Partial VoiceTel: tenant-scoped list of DIDs assigned to the authenticated account.
POST /IncomingPhoneNumbers Yes Yes Partial VoiceTel: self-serve DID assignment by E.164; inventory provisioned via VoiceTel Numbers.
GET /IncomingPhoneNumbers/Local, GET /IncomingPhoneNumbers/Mobile, GET /IncomingPhoneNumbers/TollFree Yes Partial Partial VoiceTel type-specific list aliases; Mobile returns empty (no carrier-mobile classification on BYO DIDs).
GET /IncomingPhoneNumbers/{Sid} Yes Yes Partial VoiceTel: cross-tenant fetches 404 — no enumeration leak.
POST /IncomingPhoneNumbers/{Sid} Yes Yes Partial VoiceTel: only-set-fields-touched update semantics for voice routing.
DELETE /IncomingPhoneNumbers/{Sid} Yes Yes Partial VoiceTel: idempotent release — 204 on success or already gone.
AvailablePhoneNumbers GET /AvailablePhoneNumbers/{Country}/Local etc. Yes No Partial Twilio number search/buy API. VoiceTel: use VoiceTel Numbers workflow. RestComm inventory varies by deployment.
ShortCodes full sub-resource Yes No Partial Twilio short-code provisioning API.
Numbers / InboundProcessingRegion GET /v2/PhoneNumbers/{E.164}, POST /v2/PhoneNumbers/{E.164} Yes Yes No Twilio Routes v2 surface. VoiceTel: per-DID Inbound Processing Region override keyed by E.164.

BYOC Voice Trunking

Bring-Your-Own-Carrier voice trunking — connection policies, IP records, source-IP mappings, and account-wide dialing permissions. Used to attach a customer SBC or upstream carrier to outbound voice. Twilio docs →

Resource Endpoints Twilio VoiceTel RestComm Notes
Voice trunking / ByocTrunks POST /v1/ByocTrunks, GET /v1/ByocTrunks[/{Sid}], POST /v1/ByocTrunks/{Sid}, DELETE /v1/ByocTrunks/{Sid} Yes Yes No Twilio Bring-Your-Own-Carrier voice trunk surface. VoiceTel: TR-prefixed trunk attaching a customer SBC to inbound voice routing.
Voice trunking / ConnectionPolicies POST /v1/ConnectionPolicies, GET /v1/ConnectionPolicies[/{Sid}], POST /v1/ConnectionPolicies/{Sid}, DELETE /v1/ConnectionPolicies/{Sid} Yes Yes No VoiceTel: NY-prefixed connection-policy resource grouping target SIP URIs by priority/weight.
POST /v1/ConnectionPolicies/{Sid}/Targets, GET /v1/ConnectionPolicies/{Sid}/Targets[/{Sid}], POST /v1/ConnectionPolicies/{Sid}/Targets/{Sid}, DELETE /v1/ConnectionPolicies/{Sid}/Targets/{Sid} Yes Yes No Connection-policy target URIs: SIP destinations with priority/weight/enabled flags.
Voice trunking / IpRecords POST /v1/IpRecords, GET /v1/IpRecords[/{Sid}], POST /v1/IpRecords/{Sid}, DELETE /v1/IpRecords/{Sid} Yes Yes No Twilio IP-record CRUD. VoiceTel: IL-prefixed IP-record entries with optional CIDR mask, attachable to inbound mappings.
Voice trunking / SourceIpMappings POST /v1/SourceIpMappings, GET /v1/SourceIpMappings[/{Sid}], POST /v1/SourceIpMappings/{Sid}, DELETE /v1/SourceIpMappings/{Sid} Yes Yes No VoiceTel: source IP record → SIP domain binding for inbound trunk routing.
Voice trunking / DialingPermissions GET /v1/Settings, POST /v1/Settings Yes Yes No Twilio outbound voice dialing-permissions surface. VoiceTel: account-wide outbound voice settings.

Conversations

Multi-channel chat sessions — SMS, MMS, WhatsApp, and in-app chat — under one v1 REST surface, with participants, messages, webhooks, and per-tenant Services. See /conversations/. Twilio docs →

Resource Endpoints Twilio VoiceTel RestComm Notes
Conversations POST /v1/Conversations, GET /v1/Conversations[/{Sid}], POST /v1/Conversations/{Sid}, DELETE /v1/Conversations/{Sid} Yes Yes No Twilio Conversations API. VoiceTel: CH-prefixed conversation resource; full CRUD.
POST /v1/ConversationWithParticipants Yes Yes No Single-call conversation creation with participants and (optional) initial messages.
Conversations / Messages POST /v1/Conversations/{Sid}/Messages, GET /v1/Conversations/{Sid}/Messages[/{Sid}], POST /v1/Conversations/{Sid}/Messages/{Sid}, DELETE /v1/Conversations/{Sid}/Messages/{Sid} Yes Yes No VoiceTel: IM-prefixed message resource; supports media attachments and edits.
GET /v1/Conversations/{Sid}/Messages/{Sid}/Receipts[/{Sid}] Yes Yes No Per-recipient delivery + read receipts for each message.
Conversations / Participants POST /v1/Conversations/{Sid}/Participants, GET /v1/Conversations/{Sid}/Participants[/{Sid}], POST /v1/Conversations/{Sid}/Participants/{Sid}, DELETE /v1/Conversations/{Sid}/Participants/{Sid} Yes Yes No VoiceTel: MB-prefixed participant resource; supports SMS/MMS/chat bindings.
GET /v1/ParticipantConversations Yes Yes No Reverse index: list every conversation a given participant address belongs to.
Conversations / Webhooks POST /v1/Conversations/{Sid}/Webhooks, GET /v1/Conversations/{Sid}/Webhooks[/{Sid}], POST /v1/Conversations/{Sid}/Webhooks/{Sid}, DELETE /v1/Conversations/{Sid}/Webhooks/{Sid} Yes Yes No Per-conversation webhook subscriptions. VoiceTel: signed HMAC-SHA256 delivery, same scheme as voice callbacks.
Conversations / Roles POST /v1/Roles, GET /v1/Roles[/{Sid}], POST /v1/Roles/{Sid}, DELETE /v1/Roles/{Sid} Yes Yes No VoiceTel: RL-prefixed role resource for conversation-level permissions.
Conversations / Users POST /v1/Users, GET /v1/Users[/{Sid}], POST /v1/Users/{Sid}, DELETE /v1/Users/{Sid} Yes Yes No VoiceTel: US-prefixed user resource. Tracks identity across conversations.
GET /v1/Users/{Sid}/Conversations[/{Sid}], POST /v1/Users/{Sid}/Conversations/{Sid}, DELETE /v1/Users/{Sid}/Conversations/{Sid} Yes Yes No Per-user conversation membership and notification-level settings.
Conversations / Credentials POST /v1/Credentials, GET /v1/Credentials[/{Sid}], POST /v1/Credentials/{Sid}, DELETE /v1/Credentials/{Sid} Yes Yes No Push-notification credentials (APNS / FCM) for Conversations endpoints.
Conversations / Configuration GET /v1/Configuration, POST /v1/Configuration Yes Yes No Account-default Conversations configuration: default service, role assignments.
POST /v1/Configuration/Addresses, GET /v1/Configuration/Addresses[/{Sid}], POST /v1/Configuration/Addresses/{Sid}, DELETE /v1/Configuration/Addresses/{Sid} Yes Yes No Address-configuration: inbound auto-routing rules per phone-number / SIP address.
GET /v1/Configuration/Webhooks, POST /v1/Configuration/Webhooks Yes Yes No Account-wide Conversations event webhook configuration.
Conversations / Services POST /v1/Services, GET /v1/Services[/{Sid}], DELETE /v1/Services/{Sid} Yes Yes No VoiceTel: IS-prefixed service resource — isolates conversations into a sandbox with its own users/roles/configuration.
Service-scoped Conversations: POST /v1/Services/{Sid}/Conversations, GET …, POST …, DELETE … Yes Yes No Mirrors the unscoped Conversations CRUD inside a chat service.
Service-scoped Conversation sub-resources: Messages, Messages/{Sid}/Receipts, Participants, Webhooks Yes Yes No Full Conversations sub-resource surface scoped to the parent service.
Service-scoped Users + ParticipantConversations + Roles + Bindings Yes Yes No Per-service identity, role, and binding resources; cross-conversation participant index.
Service-scoped Configuration: GET/POST /v1/Services/{Sid}/Configuration, /Configuration/Notifications, /Configuration/Webhooks Yes Yes No Per-service defaults, notification settings, and event webhooks.
POST /v1/Services/{Sid}/ConversationWithParticipants Yes Yes No Single-call service-scoped conversation creation with participants.

AI Assistants

Voice and chat AI agents — assistants, tool calls, retrieval-augmented knowledge bases, sessions, and feedback. Externally promoted as VoiceTel AI Agents. Twilio docs →

Resource Endpoints Twilio VoiceTel RestComm Notes
AI Assistants POST /v1/Assistants, GET /v1/Assistants[/{id}], PUT /v1/Assistants/{id}, DELETE /v1/Assistants/{id} Yes Yes No Twilio AI Assistants. VoiceTel: assistant CRUD; LLM provider + model configurable per assistant.
POST /v1/Assistants/{id}/Messages Yes Yes No Send a chat message to an assistant; returns the assistant's reply (and any tool calls invoked).
AI Assistants / Tools POST /v1/Tools, GET /v1/Tools[/{id}], PUT /v1/Tools/{id}, DELETE /v1/Tools/{id} Yes Yes No Tool definitions (function-call schemas) that any assistant can reference.
GET /v1/Assistants/{id}/Tools, POST /v1/Assistants/{id}/Tools/{toolId}, DELETE /v1/Assistants/{id}/Tools/{toolId} Yes Yes No Per-assistant tool attachments — bind a tool from the global catalog to an assistant.
AI Assistants / Knowledge POST /v1/Knowledge, GET /v1/Knowledge[/{id}], PUT /v1/Knowledge/{id}, DELETE /v1/Knowledge/{id} Yes Yes No Knowledge-base resources (RAG sources): web, file, or text.
GET /v1/Knowledge/{id}/Chunks, GET /v1/Knowledge/{id}/Status Yes Yes No Inspect ingested chunks and indexing status for a knowledge base.
GET /v1/Assistants/{id}/Knowledge, POST /v1/Assistants/{id}/Knowledge/{kid}, DELETE /v1/Assistants/{id}/Knowledge/{kid} Yes Yes No Per-assistant knowledge attachments.
AI Assistants / Sessions GET /v1/Sessions[/{id}], GET /v1/Sessions/{id}/Messages Yes Yes No Conversation-session history for an assistant — read-only; messages are the per-turn log.
AI Assistants / Feedback GET /v1/Assistants/{id}/Feedbacks, POST /v1/Assistants/{id}/Feedbacks Yes Yes No Submit and list per-assistant feedback events for quality scoring.
AI Assistants / Policies GET /v1/Policies Yes Yes No Read-only catalog of guardrail policies available to assistants.

Out of scope

Distinct Twilio products that fall outside the VoiceML compatibility surface. Use the linked VoiceTel equivalent where one exists.

Resource Endpoints Twilio VoiceTel RestComm Notes
Insights full Yes N/A No Twilio-hosted analytics product.
Pricing API full Yes N/A No VoiceTel publishes rates directly; no Twilio-shaped pricing API.
Verify
Lookup
Studio
TaskRouter
Video
Proxy
Functions/Assets
Wireless
Trunking
Authy
full Yes N/A No Distinct Twilio platform products — out of scope for VoiceML and RestComm voice REST parity.