SIP Trunking: UDP is accepted; the real hazard is fragmentation
SIP Trunking: UDP is accepted; the real hazard is fragmentation
Correction to the 2026-08-28 transport contract. The previous version stated our SIP ingress rejects UDP signalling outright. That was wrong: the ingress accepts UDP, TCP, and TLS, verified with a live OPTIONS probe over UDP answered with 200 OK.
What is actually true, and why the old advice still mostly worked. Full-size INVITEs (SDP body, several codecs, custom headers) can exceed the size a UDP datagram survives on the path. Fragments are silently discarded by many networks and firewalls, so the INVITE never arrives: no reply, no ICMP, retransmissions time out. A small OPTIONS ping over the same UDP path succeeds, which is what makes the failure look mysterious. Switching signalling to TCP or TLS fixes it, which is why the earlier “use TCP/TLS” recommendation resolved real integrations even though the stated reason was wrong.
Pages updated: SIP Trunking (transport table, troubleshooting, limitations), the Twilio / Telnyx / Vonage setup guides, Phone Numbers (Import SIP field table), and the FAQ. The recommendation is unchanged: prefer TLS (5061), fall back to TCP (5060), avoid UDP for signalling.
Also corrected on the SIP Trunking page: codecs offered on the SIP leg are G.722 and G.711 (PCMU / PCMA), not Opus; DTMF is RFC 2833/4733 telephone-event only (SIP INFO removed); added the RTP keepalive rule (calls end after 15 s without RTP mid-call, 30 s at setup), the early-offer requirement, X-* custom header passthrough into agent variables, and how call transfers appear on your trunk (a second outbound call, no SIP REFER, two channels per transferred call).
Voice Agents: Tools registry and Secrets vault on the API reference
Voice Agents: Tools registry and Secrets vault on the API reference
The reusable Tools library and Secrets vault now render on the API reference (and generate SDK methods).
Tools
GET /tool,POST /tool,PATCH /tool/{toolId},DELETE /tool/{toolId},POST /tool/{toolId}/duplicate: create org-level tools once and reference them from any agent.toolIdformattool_<24 lowercase alphanumerics>. Editing a tool propagates to every referencing agent; deleting one is blocked while agents still reference it.
Secrets
GET /secret,POST /secret,DELETE /secret/{secretId}: a write-only vault for tool credentials. Values are encrypted at rest and never returned — list and create surface the name only.
Agent config
toolRefs: string[]onsinglePromptConfig: attach a library tool by adding itstoolId, detach by removing it. Expanded inline and stripped at serve time, so the runtime sees a normaltools[].authblock on anapi_calltool definition (none/bearer/api_key/basic): references a secret by name; injected server-side at call time and stripped before the config reaches the runtime.
These routes have been in production. This change documents them; no behavior changed.

