> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voice.wixzel.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Twilio Elastic SIP Trunking: console steps for Wixzel Voice

> Connect Twilio Elastic SIP Trunking to Wixzel Voice for AI phone calls: allowlist the platform IP, set the Origination URI, and use a Twilio caller ID.

Agents you build on Wixzel Voice place and answer phone calls over a SIP trunk
you bring, and Twilio Elastic SIP Trunking is one of the carriers that works
with it. Twilio bills you for the trunk and the minutes at your own rates; the
voice engine is billed per second of actual usage from your Wixzel Voice
balance. This page covers where Twilio keeps each setting. The steps that are
the same for every carrier, and the troubleshooting list, are on
[SIP trunks](/sip-trunks).

<Info>
  Allowlist **`95.216.218.102`** for outbound calls, and send inbound calls to
  **`sip:95.216.218.102:5090`**. Every trunk returns both as `platform_ip` and
  `origination_uri`, so read them from `GET /v1/sip-trunks` rather than trusting
  this page to stay current.
</Info>

## How do I connect a Twilio SIP trunk to Wixzel Voice?

Twilio authorises outbound calls by source IP, and rejects anything else
instantly.

<Steps>
  <Step title="Open the trunk's termination settings">
    **Elastic SIP Trunking → your trunk → Termination → Authentication.**
  </Step>

  <Step title="Add the platform IP to an IP Access Control List">
    Create or edit an IP ACL and add **`95.216.218.102`**. A Credential List
    works instead, if you would rather authenticate with a username and
    password: put those on the trunk's `username` and `password` fields and
    Wixzel Voice will use them in place of IP auth.
  </Step>

  <Step title="Check the Termination SIP URI matches the trunk host">
    The `host` on your Wixzel Voice trunk must be the same
    `your-domain.pstn.twilio.com` shown in the console.
  </Step>

  <Step title="Confirm the caller ID is a number on that account">
    Twilio rejects a `from_number_id` it does not own.
  </Step>

  <Step title="Set the Origination URI, for inbound">
    **Elastic SIP Trunking → your trunk → Origination**, then add an Origination
    SIP URI of `sip:95.216.218.102:5090`, or whatever `GET /v1/sip-trunks`
    reports as `origination_uri`.

    Outbound works without this; inbound does not, and does not complain. Attach
    your numbers to the trunk in the same console, then give the number an
    `inbound_agent_id` in Wixzel Voice so there is an agent to answer them.
  </Step>
</Steps>

Twilio expects the leading `+` on the number, so leave `send_plus` at its
default.

## What does a missing Twilio IP ACL entry look like?

A missing IP ACL entry shows up as an **immediate rejection**, roughly a second
after the call is placed, with hangup cause 21 (Call Rejected). It does not ring
and it does not time out.

If a Twilio call fails some other way, work through
[When a call does not connect](/sip-trunks#when-a-call-does-not-connect), and
start with Twilio's own call logs.

## Related

* [SIP trunks](/sip-trunks): the allowlist, the inbound address and the
  troubleshooting list that apply to every carrier.
* [Quickstart](/quickstart): connect the trunk, register a number, create an
  agent and place a first call.
* [Twilio SIP trunk setup](https://voice.wixzel.com/integrations/twilio):
  the short version on the Wixzel Voice site, with what a minute costs on each
  voice engine.
