Bindings
A binding enables intelligence on a point of ingress — a voice trunk or number. Give it a configuration and every conversation arriving there is analysed automatically under that configuration, with no per-conversation API call. Leave the configuration off and the calls are simply tracked, so you can start a session on demand for any of them.
A binding with a configuration is the standing counterpart to a session: where a session applies a configuration to one live conversation you start yourself, a binding applies one to everything arriving at a trunk or number, and the platform starts the session for you. A binding resolves to its configuration by the configuration's stable uuid, so editing the configuration takes effect everywhere it is bound without touching the binding.
Tracking vs automatic analysis
A call can only be analysed — automatically or on demand — if it is being tracked, and a binding is what turns tracking on for a target:
- With a
configuration_id— every conversation at the target is tracked and analysed automatically under that configuration, with no per-conversation API call. - Without a
configuration_id— conversations at the target are tracked only. Nothing is analysed until you start a session for a specific call, which you can do on demand for any live call there. This is the lightest-touch option.
There is no account-wide switch — tracking is opted into one trunk or number at a time, so a call is never tracked unless you have bound its ingress point.
Targets
A binding's target is the ingress point it applies to:
| Field | Meaning |
|---|---|
medium |
The ingress plane. voice today — every call, whether over PSTN or WhatsApp, is voice. |
type |
The ingress kind: trunk (every call over the trunk) or number (a single number/DDI). |
key |
The identifier — the trunk id, or the number in E.164 for a number target. |
A target can hold only one binding; binding a configuration to a target that is already bound returns 409. Park or delete the existing binding to rebind the target.
Because a WhatsApp call flows through the same voice platform as a PSTN call, a voice binding on
a trunk or number covers both automatically — you do not bind them separately.
Precedence
A single call can match more than one binding — a number binding for the dialled number and a trunk binding for the trunk it arrived on. The most specific wins: a number binding takes precedence over a trunk binding. If you also start a session explicitly for a call, that session is what runs — an explicit session is the per-call override of the standing binding.
Lifecycle
enabled— whether the binding is in force. Set itfalseto park a binding without deleting it.target_status—activewhile the target trunk/number is present and owned by your account;missingif it has been removed on the carrier side. Amissingbinding stops applying, and is removed after a grace period — so bindings do not accumulate against ingress points that no longer exist.sync_state—liveonce the running platform reflects the binding, orpendinguntil the next sync cycle. A change is durable immediately; it takes effect on new conversations oncesync_stateislive.
Finding what a configuration governs
Before you edit or retire a configuration, list bindings filtered by configuration_id to see every ingress point it currently governs — the blast radius of the change. Deleting a configuration removes its bindings. Parking one (is_active: false) leaves its bindings in place but stops the automatic analysis: those targets stay tracked, so on-demand sessions still work, and automatic analysis resumes when the configuration is active again.