# Vobiz

Source: https://docs.usetone.ai/sip-trunking/vobiz

> Point a Vobiz SIP trunk at Tone. Digest or IP identity, and the number format that usually needs changing.

*Vobiz is an Indian carrier that sells SIP termination and DIDs directly, including to resellers.
If your numbers live there, this is how you route them to a Tone agent.*

**Not yet validated end to end by Tone against a live Vobiz account.** The configuration below
follows Vobiz's published trunk shape and standard SIP, and every Tone-side field is exact — but
we have not yet run a call through a production Vobiz trunk ourselves. If you are doing this,
tell support@usetone.ai what you hit and we will fold it back into this page.

## Before you start

- A Vobiz account with your DIDs provisioned, and trunk credentials or an IP allowlist from them.
- A Tone organization with KYC verified and **SIP trunking** enabled by Tone support.

## What to ask Vobiz for

Vobiz provisions trunks through their support or account team. Send them, in one message:

- **Inbound to Tone** — the SIP host to deliver your DIDs to (`sip.usetone.ai`), the transport
  (`TLS/5061`, or `TCP/5060`), and Tone's signalling IPs from your trunk's page in the dashboard.
- **Outbound from Tone** — their termination host, port and transport, plus either a username and
  password for Tone to present, or their confirmation that they have allowlisted Tone's IPs.
- **The caller IDs they will accept** on outbound, and whether they validate against the DIDs on
  the account.
- **The number format they expect** on the request URI — `+91…`, `91…` or `0…`. Ask explicitly;
  it is the single most common cause of a first failed call in India.

## Create the trunk in Tone

Vobiz can identify itself either way. Digest is the safer default if their signalling address is
not strictly fixed:

```http
POST /v1/sip-trunks
{
  "name": "Vobiz primary",
  "inboundAuth": "both",
  "ipAcl": ["203.0.113.16/28"],
  "outboundHost": "sbc.vobiz.example",
  "outboundPort": 5061,
  "outboundTransport": "tls",
  "outboundAuthUsername": "…",
  "outboundAuthPassword": "…",
  "outboundNumberFormat": "e164",
  "callerIdPolicy": "did",
  "codecs": ["PCMA", "PCMU"],
  "maxConcurrent": 20
}
```

`inboundAuth: "both"` requires the source IP **and** valid digest credentials. Use it when you
have both; drop to `digest` if their addresses move, or `ip_acl` if they cannot present
credentials.

The response carries the digest username and password **once**. Paste them into the Vobiz trunk
immediately — Tone cannot show them again, only rotate them
(`POST /v1/sip-trunks/{id}/credentials/rotate`, which invalidates the old pair at once).

Then import each DID:

```http
POST /v1/sip-trunks/{id}/numbers
{ "e164": "+912233445566", "agentId": "…" }
```

## Registration

Tone does **not** register to your carrier and does not need your carrier to register to it. If
Vobiz's default provisioning is registration-based, ask for a static (IP- or credential-
authenticated) trunk instead. A trunk that expects `REGISTER` from Tone will simply never come up.

## Testing

1. `POST /v1/sip-trunks/{id}/test` — an `OPTIONS` ping to their SBC, with reachability and RTT.
2. Call a DID from a mobile.
3. `POST /v1/calls` with the DID as `numberId`.

## When it does not work

| What you see | Why |
|---|---|
| Inbound `403` from Tone | Source IP not in `ipAcl`, credentials wrong, or the trunk is still `pending_verification`. |
| Inbound `404` from Tone | The DID was never imported with `POST /v1/sip-trunks/{id}/numbers`, or it was imported on a different trunk. |
| Outbound rejected, number format | Switch `outboundNumberFormat` to `national0` (leading zero, no `+91`) or `national`. |
| Outbound rejected, caller ID | Vobiz is validating `From` against the account's DIDs. Keep `callerIdPolicy: "did"`. |
| One-way audio | Their SBC is not sending media to the address in Tone's SDP. Confirm they allow RTP from Tone's IPs on UDP `16384–32768`. |

## Not this page

Tone's own **Vobiz-sourced numbers** — where Tone sells you a number that Vobiz operates and
forwards to a hosted platform — are a different product, and Tone sits outside the media path
there. See [Tone Media Streams](/tone-media-streams).
