WhatsApp API Platform
Calls

SIP Trunks

Create inbound and outbound trunks, and a complete reference for every setting — destinations, transport, media, DTMF, codecs, capacity limits and caller ID.

A trunk is the SIP link between your phone system and WhatsApp calling. It holds where calls go, how they are authenticated, which codecs are offered, and how many calls it may carry at once. You need one trunk per direction you want to support.

New SIP trunk dialog with the inbound and outbound direction cards, name, WhatsApp number, authentication mode and destination list

In the app: Dashboard → Automation → Calls → Trunks


Create a trunk

Open the dialog

Click New trunk in the top right. On an empty account you can also start from the Inbound trunk or Outbound trunk buttons in the middle of the page.

Pick a direction

Choose Inbound (Receive WhatsApp calls on your PBX) or Outbound (Place WhatsApp calls from your PBX).

Direction is permanent

A trunk's direction cannot be changed after it is created. If you picked wrong, delete the trunk and create a new one.

Name it

Name is required, up to 100 characters, and must be unique on your account — names are compared case-insensitively, so Office 3CX and office 3cx collide. Saving a duplicate name is rejected.

Description is optional and shows up in the trunk's side panel.

Choose the WhatsApp number

Leave WhatsApp number on All numbers for an account-wide trunk, or bind the trunk to one number. A trunk bound to a specific number takes precedence over the account-wide one for calls on that number.

Set the destinations (inbound only)

Under Deliver calls to, enter at least one SIP target. Outbound trunks skip this — see The dial-out endpoint below.

Adjust advanced settings if you need to

Everything under Advanced settings has a working default. Open it only if your phone system needs TLS, SRTP, a specific codec order, or capacity caps.

Create

Click Create trunk. Outbound trunks confirm with "Trunk created. Your dial-out sip: endpoint is ready." — open the trunk to copy it.


Where calls go

Destinations (inbound)

An inbound trunk needs at least one destination, and you can add up to ten. Each row has four parts:

ColumnMeaning
URIWhere we send the call, e.g. sip:pbx.example.com:5060. Must start with sip: or sips:
PriorityLower wins. The lowest-priority enabled target is tried first
WeightSplits traffic between targets that share the same priority
EnabledOff takes the target out of rotation without deleting it

Routing works like this: we sort by priority ascending, load-balance across equal priorities using their weights, and skip anything disabled. If the first target does not answer, we move down the priority list; when the list is exhausted, the call fails.

A typical two-site setup:

URIPriorityWeightResult
sip:pbx-primary.example.com:5060110Takes every call while it is up
sip:pbx-dr.example.com:5060210Only used when the primary does not answer

And an even split across two equal servers — both priority 1, both weight 10.

Editing destinations later

Destinations are edited from Edit trunk, not from the side panel. Sending an empty list is rejected — an inbound trunk always needs at least one target.

The dial-out endpoint (outbound)

Outbound trunks have no destination list. Instead, we generate the endpoint your phone system dials when the trunk is created. It looks like:

sip:office-3cx-a1b2c3@sip.pingmate.app

You cannot choose or edit it. Open the trunk's side panel to find it under Dial-out endpoint, with a copy button. Point your PBX's SIP trunk at that URI, then dial customers as +<country code><number>.


Settings reference

Everything a trunk holds, with its default.

Basics

SettingValuesDefaultNotes
NameUp to 100 charactersRequired, unique per account (case-insensitive)
DescriptionUp to 500 charactersEmptyShown in the side panel
DirectionInbound / OutboundRequired, permanent
WhatsApp numberA connected number, or All numbersAll numbersA number-bound trunk beats the account-wide one
AuthenticationIP allowlist / Digest credential / IP + credentialIP allowlistSee Authentication
ActiveActive / DisabledActiveToggled from the side panel; disabled trunks carry no calls

Advanced

SettingValuesDefaultNotes
TransportUDP, TCP, TLSUDPHow we signal to your phone system
MediaRTP, SRTPRTPWhether the audio stream to your phone system is encrypted
DTMFRFC 2833, SIP INFO, In-bandRFC 2833How keypad tones are carried
CodecsOPUS, PCMU, PCMA, G722, G729OPUS, PCMU, PCMAOffered in the order listed; at least one required
Max callsWhole number, 0 = unlimited0Concurrent calls this trunk may carry
Calls / secondWhole number, 0 = unlimited0New calls per second on this trunk
Caller IDUp to 32 charactersEmptyOverrides the number we present as the caller

Transport

UDP is the default and what most phone systems on a private network or a trusted link expect. Use TCP where your platform prefers it or where SIP messages are large enough to fragment. Use TLS to encrypt the signalling itself — worth pairing with SRTP so both the call setup and the audio are protected.

Transport applies to the leg between us and your phone system. The leg between WhatsApp and us is always TLS-encrypted, regardless of this setting.

Media

RTP sends audio unencrypted on the leg to your phone system. SRTP encrypts it. Audio between WhatsApp and us is always encrypted either way; this setting only decides what happens on your side of the relay.

Choose SRTP if that leg crosses the public internet. Make sure your phone system is configured to expect it — a mismatch here is a classic "call connects, nobody can hear anything" fault.

DTMF

How keypad presses reach your IVR:

  • RFC 2833 — tones travel as dedicated events alongside the audio. The default, and what nearly every modern platform expects.
  • SIP INFO — tones travel as SIP messages. Use only if your platform asks for it.
  • In-band — tones travel as actual audio inside the stream. Fragile once audio is converted between codecs; avoid unless nothing else works.

Codecs

Codecs are offered in the order you list them, most-preferred first. The defaults — OPUS, PCMU, PCMA — suit almost everyone.

Keep PCMU and PCMA enabled

WhatsApp calls arrive as OPUS. If your phone system can also speak G.711 (PCMU/PCMA), audio can be passed straight through instead of converted on every call, which means less delay and cleaner sound. Leaving both enabled costs nothing.

G722 is wideband and sounds better than G.711 where both ends support it. G729 is low-bandwidth and lossy — pick it only if bandwidth is genuinely tight and your platform is licensed for it.

Capacity limits

Both limits default to 0, which means unlimited.

  • Max calls caps how many calls this trunk carries at the same time. This is the hard cap — it is counted exactly, and a call beyond it is refused. Set it to match what your phone system's licensing or trunk capacity can actually handle.
  • Calls / second caps how fast new calls may start. This one is approximate; treat it as a burst guard rather than a precise quota.

Caller ID

Leave Caller ID empty and we present the WhatsApp number the call belongs to. Set it to override the number shown as the caller on outbound calls.

Set this if you have several numbers

On an outbound trunk that is not bound to a specific WhatsApp number, we work out which of your numbers to place the call from. With exactly one number on the account that is unambiguous. With several, the call is refused unless the trunk has either a WhatsApp number binding or a Caller ID.


Managing a trunk

Click any trunk row to open its side panel.

Trunk side panel showing the dial-out endpoint, a specification grid of transport, media, DTMF and capacity, plus the credentials and IP allowlist sections

The panel gives you:

  • The dial-out endpoint (outbound) or the ordered target list (inbound), each with a copy button
  • A spec grid — Transport, Media, DTMF, Max calls, Calls / sec, Codecs
  • The Active switch, which takes the trunk in and out of service immediately
  • Credentials and IP allowlist — covered in Authentication
  • Edit trunk, which reopens the full dialog

Pausing a trunk

Flip Active off to stop the trunk carrying calls without losing its configuration, credentials or allowlist. Useful during PBX maintenance. Flip it back on when you are ready.

Deleting a trunk

Use the delete icon on the trunk row. The trunk, its credentials and its IP allowlist are all removed, and calls routed through it stop immediately. There is no undo.


What's next


Best practices

How is this guide?

On this page