A trunk is how phone calls get in and out of your workspace. It is a named SIP/RTP profile that tells the voice gateway where your carrier lives, how to authenticate, which codecs to offer, and what to do with an inbound call. Wire a trunk once per carrier and calls flow to your AI agents, IVR flows, and human queues. You have two ways to connect:

Bring your own trunk

Point your existing carrier’s SBC at your workspace. You keep your numbers, your contract, and your rates — you just re-home the signalling.

Managed trunk

Provision a number and carrier connectivity from within TeleQuick. Nothing to configure on your side — the number lands in your inventory ready to bind.

Your inbound SIP endpoint

Every workspace gets its own SIP endpoint, provisioned automatically at onboarding:
<workspace-id>.sip.telequick.dev    (SIP signalling, UDP/TCP/TLS :5060)
This is where carriers send calls to you. The gateway reads the leftmost DNS label of each inbound INVITE and resolves it to your tenant, so calls are isolated per workspace with no cross-tenant extension collisions. Find your <workspace-id> under Admin → Trunks on agent.telequick.dev.
Browser and app callers use a separate per-workspace WebRTC endpoint, <workspace-id>.webrtc.telequick.dev — see Transport to Web & Apps. This page is the phone-network (PSTN/SIP) side.

Bring your own SIP trunk

Use this when you already have a carrier or on-prem PBX and want to keep it. You tell the gateway where the far end is; the gateway acts as a back-to-back user agent (B2BUA) between your carrier and the runtime. A built-in registrar means you do not need to stand up a separate registration server.
1

Name the trunk and set a channel limit

Give the trunk a stable Trunk ID (a short handle you will reference everywhere, e.g. INT-KA-SBC09) and a friendly Display Name. Set the Channel Limit — the maximum concurrent calls this trunk carries (default 50). Match it to your carrier contract: calls beyond the limit are rejected, so an over-tight number silently drops traffic at peak.
2

Point at the carrier or SBC

Enter where your carrier’s session border controller lives — the SBC IP (or Gateway IP for a direct peer), the SIP Domain used in the From header and registration (often the SBC host), the local Source Port (default 5060) and the far-end Destination Port your carrier assigned, and an Outbound Proxy (host:port) if the carrier routes through one.
Inbound INVITEs from a configured trunk peer bypass the workspace’s registrar ACL — the trunk is matched by source IP (and by the dialed DID), so your carrier does not need to register or digest-authenticate to reach you unless you require it below.
3

Add credentials (only if your carrier requires registration)

If your carrier expects you to register before placing calls, enable Require SIP REGISTER and set a SIP Username and SIP Password, plus Register Expires in seconds (default 3600). On save, the trunk registers immediately and its status chip turns connected — or error if the carrier rejects the credentials.
SIP passwords are sealed at rest and are never returned when you read a trunk back. To rotate a credential, save the trunk again with the new value.
4

Fill in your own network addresses and realm

Enter your side of the connection: Internal SIP IP / External SIP IP and Internal RTP IP / External RTP IP. The external (public) addresses are what the carrier sees in your SIP and SDP; the internal ones are the bind addresses for traffic that stays inside your network — this split is what makes the trunk work behind NAT.Set the Realm to describe what is on the far end: Internal for your own PBX or extensions, External for a PSTN/SIP carrier (per-minute billing applies), or AI Vendor when the trunk is an AI-agent leg.
5

Choose codecs and media mode

List Codec Preferences in priority order (default PCMU, PCMA, OPUS); the first codec both sides support wins. On the wire, phone legs are almost always G.711 (µ-law PCMU / A-law PCMA) — the gateway transcodes to the internal audio format for the runtime. See Codecs for the full matrix.Leave Media Mode on Proxy (the default) unless you have a specific reason to change it. Proxy anchors media at the gateway, which is the safe, NAT-friendly choice.
Direct media is a preview: even when selected, the runtime currently anchors (proxies) the RTP media. Keep new trunks on Proxy.
6

Pick your SIP compliance headers

Choose an outbound identity mode. Full adds the caller-identity headers carriers expect from a regulated edge (Remote-Party-ID, P-Asserted-Identity, P-Access-Network-Info) and is the recommended default. Minimal suppresses all three.
A few carriers silently drop calls when the customer edge asserts identity. If your outbound calls only ever return 100 Trying and then time out, switch to Minimal.
7

Save and confirm

Save the trunk. It appears in the list with a live status chip — connected, error, or disconnected — and live health (answer ratio, average call duration, and an estimated MOS from the media plane). Click a trunk to edit any section or to remove it; in-flight calls keep running until they hang up naturally.
Once the trunk is up, the last step is to register the numbers (DIDs) callers dial and bind each to this trunk — see Number Provisioning.

Managed trunk

If you would rather not run a carrier relationship, provision a number and its connectivity from inside TeleQuick. Under Admin → Trunks, choose the managed option, pick a number from the catalog, and it lands in your inventory ready to bind — no SBC, credentials, or network addresses to fill in.
The self-serve number catalog is currently an early-access demo with limited inventory; production carrier coverage (multi-region DID search across Twilio, Telnyx, and Bandwidth) is rolling out. The number-allocation and inbound-routing paths behind it are fully live — if the catalog does not list a number you need, bring it in as a bring-your-own DID and route it over a BYO trunk.

Inbound routing

inbound_rule decides what happens when a call arrives on the trunk. New trunks default to reject until you wire one of the handlers:
RuleWhat it does
RejectDecline the call (optionally play a clip, then hang up).
Play & hangupPlay an announcement, then release.
Notify & hangupFire a webhook, then release.
Handle with AIBridge the call to an AI agent (over the QUIC or WebSocket bridge).
You can also route the trunk into an IVR/ACD program by binding it to a skill or VDN instead of a single agent — see Inbound Calls and PBX & ACD.

Field reference & raw RPC

The console form maps 1:1 onto the trunk record. The key fields:
channel_limit
uint32
default:"50"
Maximum concurrent calls on the trunk.
internal_sip_ip / external_sip_ip
string
Your private bind address and the public address advertised in SIP (NAT).
internal_rtp_ip / external_rtp_ip
string
Same split for the RTP media plane.
sip_username / sip_password
string
Registrar credentials (used when registration is required). Sealed at rest.
register_expires_sec
uint32
default:"3600"
REGISTER Expires value when the trunk registers with the carrier.
media_mode
string
default:"proxy"
proxy (anchor media at the gateway) or direct (preview).
realm
string
internal, external, or ai_vendor.
compliance_headers
string
Outbound identity mode — full (asserts identity) or minimal.
inbound_rule
int32
Reject / play & hangup / notify & hangup / handle with AI.
Automating trunk provisioning? The full DTO — AddTrunk, UpdateTrunk, GetTrunk, RemoveTrunk — and its raw over-QUIC RPC envelope are documented in Trunks.

Next steps

Number provisioning

Register DIDs and bind each to a trunk, agent, or flow.

Inbound calls

Route incoming calls to AI agents, IVR flows, and queues.

Codecs

G.711 on the wire, Opus for apps, and how transcoding works.

Outbound calls

Originate calls and run paced campaigns over your trunks.