ElevenLabs
Put an ElevenLabs Conversational AI agent on a Zernio number: SIP forwarding or full number import via SIP trunk
ElevenLabs
There are two ways to connect a Zernio number to an ElevenLabs Conversational AI agent. Both keep the number, its countries and KYC, SMS, and WhatsApp with Zernio — what changes is who handles the calls.
| Forwarding | SIP trunk | |
|---|---|---|
| Inbound calls reach the agent | Yes, bridged through Zernio | Yes, delivered directly to ElevenLabs |
| Agent-initiated outbound calls | No | Yes, with your number as caller ID |
| Zernio voice features (IVR, voicemail, recording) | Available | Paused while the number is on the trunk |
| Works with WhatsApp Business Calling | Yes | Not yet |
Forward inbound calls
Set the number's forward destination to your agent's ElevenLabs SIP address. Zernio answers the carrier leg and bridges the audio to ElevenLabs over TLS with SRTP media — their recommended production configuration, applied automatically.
Import the number in ElevenLabs
In your ElevenLabs workspace, add the phone number via SIP trunking with the number in E.164 format with the leading + (for example +34911234567). The identifier you import must match the one in the SIP URI below byte-for-byte — a missing + on either side makes ElevenLabs silently fail to route the call.
Point the number at your agent
Use the number's E.164 as the identifier in the URI:
await zernio.voice.enableVoiceOnNumber({
path: { id: 'PHONE_NUMBER_ID' },
body: { forwardTo: 'sip:+34911234567@sip.rtc.elevenlabs.io:5061;transport=tls' }
});client.voice.enable_voice_on_number(
id='PHONE_NUMBER_ID',
forward_to='sip:+34911234567@sip.rtc.elevenlabs.io:5061;transport=tls',
)curl -X POST "https://zernio.com/api/v1/phone-numbers/PHONE_NUMBER_ID/voice" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"forwardTo": "sip:+34911234567@sip.rtc.elevenlabs.io:5061;transport=tls"}'The dashboard's forward picker has an ElevenLabs Conversational AI preset that builds this URI for you.
Forwarding also works on a WhatsApp Business Calling number: WhatsApp voice calls route to the ElevenLabs agent while WhatsApp messaging stays exactly where it is. This is the "voice-only" integration ElevenLabs documents for numbers whose messaging lives with another provider.
SIP trunk
A SIP trunk takes Zernio out of the call path: ElevenLabs receives the number's inbound calls directly, and the agent can place outbound calls through Zernio presenting the number as caller ID. Calls are billed per minute at the route's carrier rate, like any voice usage.
Everything below is also available in the dashboard under Numbers → SIP: create the trunk (the credentials are shown there once), then attach or detach numbers.
While a number is attached to a trunk, Zernio-side voice features (call forwarding, IVR, voicemail, recording, the softphone) and WhatsApp calling are paused for that number; SMS and WhatsApp messaging are unaffected. Turn off Calls and WhatsApp calling on the number before attaching it.
Create the trunk
Attach as many numbers as you like. You can also create several trunks to the same host — each has its own credentials and spend cap, which keeps separate ElevenLabs workspaces (an agency's clients, prod vs staging) isolated.
curl -X POST "https://zernio.com/api/v1/phone-numbers/sip-trunks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"label": "ElevenLabs", "sipHost": "sip.rtc.elevenlabs.io"}'The response contains the trunk's termination.uri (sip.telnyx.com), the digest username, and — only in this response — the digestPassword. Store it now; you can mint a new one later with POST /v1/phone-numbers/sip-trunks/{id}/rotate-credentials, which invalidates the old password immediately.
Configure ElevenLabs
In ElevenLabs, import the number via SIP trunking with outbound pointed at the trunk's termination URI and the digest credentials from step 1. Use the number in E.164 with the leading + — the trunk enforces +E.164 in both directions, so the formats always match.
Attach the number
curl -X POST "https://zernio.com/api/v1/phone-numbers/PHONE_NUMBER_ID/sip-trunk" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"trunkId": "TRUNK_ID"}'From this moment the number's inbound calls are delivered to sip.rtc.elevenlabs.io and ElevenLabs can originate outbound calls through the trunk. Detach any time with DELETE /v1/phone-numbers/PHONE_NUMBER_ID/sip-trunk — Zernio routing and voice features come back immediately.
Technical FAQ
Answers to what ElevenLabs' integration checklist asks about.
Codecs. The SIP leg is a carrier trunk: G.711 (PCMU/PCMA) is native, and any transcoding happens in the carrier core — never on your side. No SBC is required to import a number.
Transport security. TLS is the default signaling transport (the ElevenLabs preset pins :5061;transport=tls), with TLS 1.2+ on the carrier's SIP edge. Certificate handling for follow-up requests (BYE, REFER) happens at the carrier edge too; nothing runs on your infrastructure.
Media encryption. SRTP is paired with TLS automatically, so calls to ElevenLabs run their recommended "TLS + Required media encryption" configuration out of the box.
Number matching. Zernio dials forward URIs verbatim (the + is preserved), and trunk connections pin +E.164 number formats in both directions — the number-format mismatch ElevenLabs warns about can't occur.
Authentication. Trunks use SIP digest credentials, generated by Zernio, shown once, and rotatable. Each trunk has its own credentials, and no IP allowlisting is required on either side.
Caller ID. Outbound calls can only present numbers hosted on the account, or verified onto it through the caller-ID verification flow (a one-time code to the number being claimed). Arbitrary From numbers are rejected at the carrier, so calls through a trunk can't spoof numbers the workspace doesn't own.
Limits. Each trunk carries protective caps (10 concurrent calls, a daily spend ceiling, a per-minute destination-rate cap, and a destination country whitelist matching where Zernio sells numbers). Caps can be raised — contact support.
Call context. On forwarded calls Zernio can carry identifiers to the agent in SIP headers, which ElevenLabs exposes to the agent as dynamic variables — useful to resolve the caller before the agent's first line.
Call events. On the forwarding lane Zernio emits call webhooks (received, ended, failed — with caller, destination and duration) alongside recordings and transcripts; see Webhooks. Trunked calls are delivered directly to ElevenLabs, so their post-call webhooks are the event source on that lane.
Transfers. Supported on both lanes. On the forwarding lane, the agent hands the caller off like any call transfer. On trunks, inbound SIP REFER is honored — an agent's transfer_to_number (SIP REFER type) mid-call transfers the caller, verified live.
Countries and KYC. Numbers are available in every country Zernio sells (including Spain, Italy, Portugal, Greece, and Cyprus), with regulatory KYC handled inside the purchase flow and number porting supported.
Emergency calling. Zernio numbers do not carry emergency (112/911) service.
Two items are still being confirmed with our carrier — wideband G.722 negotiation and EU-only media processing. If either matters for your deployment, ask support before going live.