Create an outbound SIP trunk
Provision a BYO-carrier SIP trunk for outbound PSTN. The trunk is validated pre-save: set probe_status to registered / unregistered / unknown from a prior POST /sip-trunks/probe (smoke test the registrar before saving), and on a failed probe pass the diagnostic reason in probe_error. The wire remembers probe_status against the trunk so its live status does not start as “Unregistered” while the probe is fresh (5-minute freshness window). Optional failoverTrunkId points at a fallback trunk consulted when the primary is unregistered. Requires owner/admin.
Authorizations
Dashboard JWT token from Clerk
Headers
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
1 - 255Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
true, false Body
Display name.
1 - 120Registrar hostname or IP of the carrier SBC.
1 - 253SIP port (default 5060).
1 <= x <= 65535SIP transport (default udp).
udp, tcp, tls Optional REGISTER credentials for outbound gateways that expect digest auth.
Optional ordered codec preference list.
2032Whether the trunk participates in outbound dispatch (default true).
Optional concurrent-call cap respected at dispatch.
1 <= x <= 2000Optional fallback trunk id consulted when the primary reports unregistered.
Result of a prior POST /sip-trunks/probe the front-end ran. Only registered stamps the freshness window; unregistered pairs with probe_error for the diagnostic.
registered, unregistered, unknown Diagnostic reason from a failed pre-save probe (probe_status = unregistered). Rendered verbatim on the trunk row.
500Response
Created — the resource was created successfully.
The response is of type object.