Skip to main content
Phone numbers connect your AI agents to real telephone calls. Sniko supports two provider types — Twilio (cloud phone numbers managed via the Twilio console) and SIP Trunk (numbers from any SIP-compatible carrier). Both support inbound and outbound calls.

Import methods

Twilio

Sync a number already provisioned in your Twilio account. Requires your Account SID and Auth Token.

SIP Trunk

Register any SIP-capable number manually. Requires outbound SIP address and optional inbound config.

Import a Twilio number

1

Open Phone Numbers

Navigate to Phone Numbers in the sidebar.
2

Click Import Twilio

Select Import Twilio Number and fill in the form:
FieldDescription
Phone numberE.164 format, e.g. +12025550100
LabelA friendly name shown in the UI
Account SIDYour Twilio Account SID (ACxxxxxxxx)
Auth TokenYour Twilio Auth Token
3

Submit

Sniko calls the ElevenLabs API (POST /v1/convai/phone-numbers) and stores the number locally, including the encrypted Twilio credentials.
Importing a Twilio number counts against your plan’s phone number quota. A 403 response means the quota has been reached.

Import a SIP trunk number

1

Click Import SIP Trunk

Select Import SIP Trunk Number and fill in the form.
2

Configure outbound trunk

The outbound config is required:
FieldDescription
AddressSIP server address (e.g. sip.carrier.example)
Transportauto, udp, tcp, or tls
Media encryptionallowed, required, or disabled
Custom headersOptional name/value pairs
CredentialsOptional SIP username and password
3

Configure inbound trunk (optional)

Inbound config allows you to control which addresses and numbers can send calls to this number:
FieldDescription
Media encryptionallowed, required, or disabled
Allowed addressesIP addresses permitted to send calls
Allowed numbersPhone numbers allowed to send calls
Remote domainsSIP domains to allow
CredentialsOptional SIP auth credentials
4

Submit

Both inbound and outbound configs are stored in the local database and synced to ElevenLabs.

Syncing numbers

Use the Sync button to pull the current state of all phone numbers from ElevenLabs and update the local database. Sync preserves Twilio credentials and SIP trunk configs — it does not overwrite them.
The sync and import routes share the quota.check:phone_numbers middleware. Sync does not consume additional quota slots; only initial imports do.

Assigning a number to an agent

A phone number can be assigned to one agent at a time. The agent handles all inbound calls received on that number.
1

Open the number

Click the phone number from the Phone Numbers list to open its detail page.
2

Select an agent

Choose an agent from the Assign Agent dropdown.
3

Save

Sniko sends PATCH /v1/convai/phone-numbers/{phone_number_id} with the agent_id and updates the local record.
To unassign a number, open the detail page and remove the assigned agent. Pass null for agent_id in the update request.

Making outbound calls from the softphone

You can initiate an outbound call directly from the UI using a phone number that is already assigned to an agent.
POST /api/twilio/outbound-call
Authorization: session cookie (auth required)

{
  "agent_id": "agent_abc123",
  "agent_phone_number_id": "pn_xyz789",
  "to_number": "+12025550199",
  "dynamic_variables": {
    "customer_name": "Jane Doe"
  }
}
Sniko determines the provider from the local database and routes the call to the appropriate ElevenLabs endpoint:
  • Twilio numbersPOST /v1/convai/twilio/outbound-call
  • SIP trunk numbersPOST /v1/convai/sip-trunk/outbound-call
A successful response includes conversation_id and callSid.
You can pass conversation_initiation_client_data and custom_llm_extra_body as optional objects to pre-populate the conversation context before the call connects.

Checking number usage before deletion

Before deleting a number, verify it is not actively assigned:
GET /phone-numbers/{phoneNumberId}/check-usage
The response tells you the assignment type and who it is assigned to:
{
  "is_assigned": true,
  "assignment_type": "agent",
  "assigned_to": {
    "type": "agent",
    "id": "agent_abc123",
    "name": "Support Bot"
  },
  "phone_number": "+12025550100"
}
Possible assignment_type values: agent, softphone, or null (unassigned).

Deleting a number

DELETE /phone-numbers/{phoneNumberId}
This removes the number from ElevenLabs and from the local database. Deleting a number decrements the quota counter, freeing one slot.
Unassign the number from any agent before deleting it. Deleting an assigned number may disrupt active inbound call routing.

Phone number data model

FieldTypeDescription
phone_number_idstringElevenLabs phone number ID (pn_...)
phone_numberstringE.164 number (e.g. +12025550100)
labelstringFriendly display name
providerstringtwilio or sip_trunk
customer_idintegerUser ID of the importing account
assigned_agent_idstring|nullElevenLabs agent ID
assigned_agent_namestring|nullAgent display name
twilio_sidstring|nullTwilio Account SID (Twilio only)
twilio_tokenstring|nullTwilio Auth Token (Twilio only)
inbound_trunk_configobject|nullSIP inbound config JSON (SIP trunk only)
outbound_trunk_configobject|nullSIP outbound config JSON (SIP trunk only)

Build docs developers (and LLMs) love