Docs

RingTrunk documentation

Indian phone numbers and SIP trunks for developers. What RingTrunk is, how the two call directions work, the connection details, the two rules every call must follow, and where to go next for LiveKit, Pipecat, OpenAI's Realtime API, Vapi and the REST API.

Updated 24 September 2026

In short: RingTrunk gives your software an Indian phone number and a SIP trunk to carry calls on it, both directions, on the platform you already use.

RingTrunk gives your software an Indian phone number and a SIP trunk to carry calls on it. You point the platform you already use at the trunk: LiveKit Cloud, self-hosted LiveKit, a Pipecat agent behind LiveKit, OpenAI's Realtime API over SIP, Vapi, or anything else that speaks SIP. There is no SDK to adopt and nothing to rewrite. Everything you can do in the portal is also available through a REST API.

What you get

  • An Indian phone number. A 10-digit Indian number that receives calls and is presented as the caller ID on calls you place.
  • A SIP trunk. A username (the trunk id), a password shown once, and a server address. One trunk carries both directions.
  • A console and an API. Create trunks, attach numbers, set where inbound calls go, rotate credentials and read call records, by hand or from code.

Definitions

  • SIP trunk. A connection between your voice software and the telephone network over SIP. Instead of physical lines, your system authenticates to a SIP server and sends calls to it, and that server sends calls back to you.
  • Termination (outbound). Calls your system places. Your platform authenticates to our SIP server with the trunk id and password and sends an INVITE; we deliver the call to the Indian mobile network.
  • Origination (inbound). Calls to your number. We send an INVITE to the origination URIs on your trunk. These carry no credentials, so your server accepts them by our source IP.
  • Origination URI. The host, and optionally port and transport, of the SIP server that should receive your inbound calls, for example your-project.sip.livekit.cloud:5060;transport=tcp. You can list several; they are tried in priority order, which is failover, not load balancing.
  • Caller ID (CLI). The number shown to the person you call. On RingTrunk it must be one of the numbers attached to the trunk.
  • Channel. One concurrent call. Every number comes with a number of channels, and a trunk's limit is the sum across the numbers attached to it.
  • CPS. Calls per second. A rate cap, separate from the channel limit.

How it fits together

Two directions, configured independently.

DirectionWho connects to whomAuthentication
Outbound (termination)Your platform → pstn.ringtrunk.comSIP digest. Username is the trunk id, password issued once.
Inbound (origination)RingTrunk → your origination URIsNone on the INVITE. Your server trusts our source IP.

Connection details

SettingValue
SIP serverpstn.ringtrunk.com. No port needed; SRV records carry it.
Explicit fallbacksip.ringtrunk.com:5070 for stacks that ignore SRV.
TransportUDP or TCP. In LiveKit, pin TCP rather than leaving it automatic.
UsernameYour trunk id, for example TRa8f3k2m9qz47b1c.
PasswordShown once, when the trunk is created or the password is rotated.
RealmAny.
CodecG.711 A-law (PCMA), 20 ms. Nothing else is negotiated.
Inbound source IPShown on your trunk's Origination tab in the portal. Allow it on your firewall.

Port 5070, not 5060. Port 5060 on our switch is the carrier side and will not accept your registration.

The two rules every call must follow

  1. Caller ID must be one of your own numbers. Present a number that is attached to the trunk, in plain 10-digit form. Anything else is rejected with 403 cli_not_allowed before it reaches the network. This is an Indian regulatory requirement and it is enforced on every call.
  2. Destinations are Indian mobile numbers. 10 digits starting 6, 7, 8 or 9. Landlines, short codes and international destinations are rejected with 403 destination_not_supported.

Number formats

Numbers are 10-digit Indian mobile numbers and are written without a prefix on RingTrunk, for example 9XXXXXXXXX. On an inbound call the user part of the request URI is the number in that form, so route on it. When you configure an inbound trunk in LiveKit, list the number in every form the To header may take: 9XXXXXXXXX, +919XXXXXXXXX, 09XXXXXXXXX and 919XXXXXXXXX.

Timing to expect

  • A new trunk can take up to 60 seconds before its first registration succeeds.
  • A rotated password becomes active within 60 seconds. The old one keeps working until then, and existing registrations are not dropped.
  • Suspending a trunk blocks new calls immediately. Calls already in progress are not disconnected.

Guides

Running something else?

RingTrunk is plain SIP, so it connects to any stack that can authenticate with digest credentials and accept an INVITE by source IP. Write to [email protected] with what you run and we will send you the settings.