Compatibility
Know exactly which call features are supported before migration.
Every verb, attribute, REST resource, and caveat is published with a clear support status — supported, partial, roadmap, or unsupported — so you can see exactly what migrates cleanly before you cut traffic over.
View matrix Validate VoiceML Migration guide
Voice markup compatibility matrix
Legend: ✓ Supported ◐ Partial ✗ Unsupported N/A Out of scope
| Resource | Endpoints | VoiceTel | Notes |
|---|---|---|---|
| Calls | POST /Calls |
✓ | Normalises To/From against per-tenant phone regions; MachineDetection truly optional (matches Twilio — omit it and no AMD runs); Twiml/ApplicationSid accepted; per-call SIP/auth params (SendDigits, SipAuthUsername/SipAuthPassword, Timeout, CallReason) wired through to the originate. |
GET /Calls/{Sid} |
✓ | ||
GET /Calls (filters: To, From, Status, ParentCallSid, StartTime≥/≤, EndTime≥/≤, Page, PageSize≤1000) |
✓ | Full Twilio query surface; EndTime auto-restricts to terminal-status rows. |
|
POST /Calls/{Sid} (Status / Twiml / Url / FallbackUrl / StatusCallback*) |
✓ | Full Call resource on success; Twiml wins over Url; StatusCallback* swaps the live lifecycle-webhook wiring. |
|
DELETE /Calls/{Sid} |
✓ | ||
| Calls / Recordings | GET /Calls/{Sid}/Recordings |
✓ | |
GET /Calls/{Sid}/Recordings/{Sid} |
✓ | ||
POST /Calls/{Sid}/Recordings (start mid-call) |
✓ | Honours RecordingMaxDuration / PlayBeep / RecordingStatusCallback*. |
|
POST /Calls/{Sid}/Recordings/{Sid} (Status=stopped/paused/in-progress) |
✓ | Stop, pause, resume; idempotent against already-completed. | |
DELETE /Calls/{Sid}/Recordings/{Sid} |
✓ | Unlinks WAV and drops row. | |
| Calls / Streams | GET /Calls/{Sid}/Streams[/{Sid}] |
✓ | Live tracker; list returns 0 or 1 (one fork per call). |
POST /Calls/{Sid}/Streams (start) |
✓ | Mirrors <Connect><Stream> / <Start><Stream>; returns MZ-prefixed SID. |
|
POST /Calls/{Sid}/Streams/{Sid} (Status=stopped) |
✓ | ||
| Calls / Siprec | GET /Calls/{Sid}/Siprec[/{Sid}] |
✓ | Live tracker. |
POST /Calls/{Sid}/Siprec (start) |
✓ | Mirrors <Start><Siprec>; returns SR-prefixed SID. |
|
POST /Calls/{Sid}/Siprec/{Sid} (Status=stopped) |
◐ | Clears tracking; underlying SIPREC module has no stop verb (recording continues until call hangup). | |
| Calls / Transcriptions | GET /Calls/{Sid}/Transcriptions[/{Sid}] |
✓ | Live tracker. |
POST /Calls/{Sid}/Transcriptions (start) |
✓ | Mirrors <Start><Transcription>; returns RT-prefixed SID. |
|
POST /Calls/{Sid}/Transcriptions/{Sid} (Status=stopped) |
✓ | ||
| Calls / Payments | POST /Calls/{Sid}/Payments[/{Sid}] |
✗ | <Pay> not implemented (PCI-DSS scope); path returns 404 — half-implementing PCI is more dangerous than a clean 404. |
| Calls / Events | GET /Calls/{Sid}/Events |
◐ | Compatibility stub: 200 + empty list. Equivalent data delivered via the customer's StatusCallback URL — empty-list shape keeps SDK iterators clean. |
| Calls / Notifications | GET /Calls/{Sid}/Notifications |
◐ | Compatibility stub: 200 + empty list. Operator-side events flow through Prometheus and structured logs. |
| Calls / UserDefinedMessages | POST /Calls/{Sid}/UserDefinedMessages |
✗ | Returns 501 + Twilio error code 20501 (chat-style live-call messaging needs websocket message-passing infrastructure that's out of scope). |
| Conferences | GET /Conferences |
✓ | Live conference query, multi-tenant namespaced. |
GET /Conferences/{Sid} |
✓ | ||
POST /Conferences/{Sid} (Status=completed to end) |
✓ | ||
| Conferences / Participants | GET /Conferences/{Sid}/Participants[/{Sid}] |
✓ | |
POST /Conferences/{Sid}/Participants/{Sid} (Muted, Hold) |
✓ | Mute/unmute and hold/unhold both wired. | |
DELETE /Conferences/{Sid}/Participants/{Sid} (kick) |
✓ | ||
| Conferences / Recordings | GET /Conferences/{Sid}/Recordings |
✓ | Metadata persisted at conference start; pagination envelope same as /Recordings. |
| Queues | POST /Queues, GET /Queues[/{Sid}], POST /Queues/{Sid}, DELETE /Queues/{Sid} |
✓ | Full CRUD; in-process state. |
| Queues / Members | GET /Queues/{Sid}/Members[/{Sid}|Front], POST /Queues/{Sid}/Members/{Sid|Front} |
✓ | VoiceTel extension — REST dequeue alongside <Dial><Queue> markup. |
| Applications | POST /Applications, GET /Applications[/{Sid}], POST /Applications/{Sid}, DELETE /Applications/{Sid} |
✓ | Voice-only fields (no SMS). |
| Recordings (top-level) | GET /Recordings[/{Sid}] |
✓ | |
DELETE /Recordings/{Sid} |
✓ | Row + local WAV + S3 object (best-effort). | |
GET /Recordings/{Sid}.wav |
✓ | Binary audio/wav with three-state delivery: 200 (local), 302 to presigned S3 URL (archived), 410 Gone (cleaned up). All HTTP clients follow the 302 transparently. |
|
| IncomingPhoneNumbers | GET /IncomingPhoneNumbers |
✓ | Tenant-scoped list of DIDs assigned to the authenticated account. |
POST /IncomingPhoneNumbers |
✓ | Self-serve DID assignment by E.164. Idempotent on the same tenant; 409 if the number is claimed by another account. Inventory itself is provisioned via the VoiceTel Numbers workflow. | |
GET /IncomingPhoneNumbers/{Sid} |
✓ | Cross-tenant fetches 404 with the same shape as a nonexistent number — no enumeration leak. | |
POST /IncomingPhoneNumbers/{Sid} |
✓ | Only-set-fields-touched update semantics for voice routing on an assigned DID. | |
DELETE /IncomingPhoneNumbers/{Sid} |
✓ | Idempotent release: 204 on success or if the number was already gone. | |
| AvailablePhoneNumbers | GET /AvailablePhoneNumbers/{Country}/Local etc. |
✗ | |
| OutgoingCallerIds | full sub-resource | ✗ | |
| ShortCodes | full sub-resource | ✗ | |
| Sip / Domains CredentialLists IpAccessControlLists |
full sub-resource | ✗ | SIP-domain provisioning handled by the SIP trunking workflow. |
| Messages MMS |
POST /Messages etc. |
N/A | Compatibility surface is voice-only. See VoiceTel Messaging for the native messaging product. |
| Pricing API | full | N/A | VoiceTel publishes rates directly; no Twilio-shaped pricing API. |
| Insights | full | N/A | Twilio-hosted analytics product. |
| Verify Lookup Studio TaskRouter Conversations Chat Video Proxy Functions/Assets Wireless Trunking Authy |
full | N/A | Distinct Twilio products, out of scope for the compatibility surface. |