Create Outbound Trunk

Creates an outbound trunk.

In version 2026-04-16, customers can create outbound trunks through the API even if the Outbound feature is not enabled on the account.

Request

HTTP Method: POST

URI Path: /v3/voice_out_trunks

Body Parameters

Name

Type

Nullable

Is Required?

Description

type

string

No

Yes

Must be voice_out_trunks.

attributes

object

No

Yes

Outbound trunk attributes object.

Data Attributes

Name

Type

Nullable

Is Required?

Description

name

string

No

Yes

The outbound trunk name.

external_reference_id

string

Yes

No

Optional identifier for the outbound trunk in the customer’s external system. Maximum length is 100 characters.

allowed_rtp_ips

Array of strings

Yes

No

Allowed RTP IP addresses for media traffic. Required when authentication_method.type is credentials_and_ip.

authentication_method

object

No

Yes

Authentication method object. Supported POST types:
credentials_and_ip - use SIP credentials together with allowed IP addresses.
twilio - use a Twilio Account SID for authentication.
ip_only is not supported in POST requests.

on_cli_mismatch_action

string

No

Yes

Possible values:
send_original_cli - pass the original From header value from your system to the destination without modification.
reject_call - reject the call if the From header value does not match any DID allowed on the trunk.
replace_cli - replace the CLI with one of the DIDs allowed on the trunk.

capacity_limit

integer

Yes

No

The capacity limit of the outbound trunk. Allowed values from 0 to 32767.

allow_any_did_as_cli

boolean

No

No

When set to true, all eligible DIDs can be used as CLI and the dids relationship must not contain explicit DIDs.

status

string

No

No

Possible values:
active - the trunk can be used for outbound traffic.
blocked - outbound traffic on the trunk is blocked.
If set to null, the default value is active.

threshold_amount

string

Yes

No

The outbound trunk 24-hour threshold limit. Can be from 0.0 to 100000.0.

default_dst_action

string

No

No

Possible values:
allow_all - allow calls to all destinations except the prefixes listed in dst_prefixes.
reject_all - s to all destinations except the prefixes listed in dst_prefixes.

dst_prefixes

Array of strings

Yes

No

The destination prefixes allowed or rejected based on default_dst_action.

emergency_enable_all

boolean

No

No

Allows all eligible DIDs to be used for emergency calling on the trunk. Default value is false.

media_encryption_mode

string

No

No

Media encryption mode. Possible values:
disabled - media encryption is turned off.
srtp_sdes - use SRTP encryption with SDES key exchange.
srtp_dtls - use SRTP encryption with DTLS key exchange.
zrtp - use SRTP encryption with ZRTP key exchange.

callback_url

string

Yes

No

Can be null or a valid HTTP(S) URL.

force_symmetric_rtp

boolean

No

No

Enables symmetric RTP / COMEDIA mode.

rtp_ping

boolean

No

No

Enables RTP ping after the call is connected.

rtp_timeout

integer

Yes

No

Disconnects the call if RTP packets do not arrive within the specified time. Supported values are from 30 to 600 seconds.

Request Body Object Relationships

Title

Type

Description

dids

DIDs

The DID numbers explicitly allowed as CLI when allow_any_did_as_cli is false. DIDs must support voice_out feature to be selected.

emergency_dids

DIDs

The DID numbers explicitly enabled for emergency calling when emergency_enable_all is false. DIDs must support voice_out and emergency features and have emergency_enabled = true to be selected.

Authentication Method

The outbound trunk authentication is configured through the authentication_method attribute.

Supported authentication method types:

  • credentials_and_ip - uses SIP credentials together with allowed IP addresses.

  • twilio - uses a Twilio Account SID for authentication.

  • ip_only is returned by GET endpoints but is not supported in POST requests.

Authentication Method Attributes by Type

Name

Type

Nullable

Is Required?

Description

allowed_sip_ips

Array of strings

No

Yes

The allowed originating SIP IPs.

tech_prefix

string

Yes

No

An optional technical prefix added before the destination number. The maximum length is 8 characters and only digits and # are supported.

Examples

http

POST /v3/voice_out_trunks HTTP/1.1
Host: api.didww.com
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
Api-Key: [API token]

{
  "data": {
    "type": "voice_out_trunks",
    "attributes": {
      "name": "Outbound trunk Name",
      "callback_url": null,
      "allowed_rtp_ips": [
        "0.0.0.0/0"
      ],
      "authentication_method": {
        "type": "credentials_and_ip",
        "attributes": {
          "allowed_sip_ips": [
            "0.0.0.0/0"
          ],
          "tech_prefix": null
        }
      },
      "on_cli_mismatch_action": "send_original_cli",
      "capacity_limit": 100,
      "allow_any_did_as_cli": true,
      "status": "active",
      "threshold_amount": "10000.0",
      "default_dst_action": "allow_all",
      "dst_prefixes": [],
      "emergency_enable_all": false,
      "media_encryption_mode": "disabled",
      "force_symmetric_rtp": false,
      "rtp_ping": false,
      "rtp_timeout": 30
    }
  }
}

curl

curl -i -X POST https://api.didww.com/v3/voice_out_trunks -H "Accept: application/vnd.api+json" -H "Api-Key: [API token]" -H "Content-Type: application/vnd.api+json" --data-raw '{"data": {"attributes": {"allow_any_did_as_cli": true, "allowed_rtp_ips": ["0.0.0.0/0"], "authentication_method": {"attributes": {"allowed_sip_ips": ["0.0.0.0/0"], "tech_prefix": null}, "type": "credentials_and_ip"}, "callback_url": null, "capacity_limit": 100, "default_dst_action": "allow_all", "dst_prefixes": [], "emergency_enable_all": false, "force_symmetric_rtp": false, "media_encryption_mode": "disabled", "name": "Outbound trunk Name", "on_cli_mismatch_action": "send_original_cli", "rtp_ping": false, "rtp_timeout": 30, "status": "active", "threshold_amount": "10000.0"}, "type": "voice_out_trunks"}}'

response

HTTP/1.1 201 Created
Content-Type: application/vnd.api+json

{
  "data": {
    "id": "03813615-da15-4e3b-8e0a-3ea64b2585de",
    "type": "voice_out_trunks",
    "attributes": {
      "name": "Outbound trunk Name",
      "callback_url": null,
      "allowed_rtp_ips": [
        "0.0.0.0/0"
      ],
      "authentication_method": {
        "type": "credentials_and_ip",
        "attributes": {
          "allowed_sip_ips": [
            "0.0.0.0/0"
          ],
          "tech_prefix": null,
          "username": "554******",
          "password": "fqe******"
        }
      },
      "on_cli_mismatch_action": "send_original_cli",
      "capacity_limit": 100,
      "allow_any_did_as_cli": true,
      "status": "active",
      "threshold_reached": false,
      "threshold_amount": "10000.0",
      "default_dst_action": "allow_all",
      "dst_prefixes": [],
      "emergency_enable_all": false,
      "media_encryption_mode": "disabled",
      "force_symmetric_rtp": false,
      "rtp_ping": false,
      "rtp_timeout": 30,
      "created_at": "2025-04-02T10:00:00.000Z",
      "external_reference_id": null
    },
    "relationships": {
      "dids": {
        "links": {
          "self": "https://api.didww.com/v3/voice_out_trunks/03813615-da15-4e3b-8e0a-3ea64b2585de/relationships/dids",
          "related": "https://api.didww.com/v3/voice_out_trunks/03813615-da15-4e3b-8e0a-3ea64b2585de/dids"
        }
      },
      "emergency_dids": {
        "links": {
          "self": "https://api.didww.com/v3/voice_out_trunks/03813615-da15-4e3b-8e0a-3ea64b2585de/relationships/emergency_dids",
          "related": "https://api.didww.com/v3/voice_out_trunks/03813615-da15-4e3b-8e0a-3ea64b2585de/emergency_dids"
        }
      }
    }
  },
  "meta": {
    "api_version": "2026-04-16"
  }
}

Other Responses

Code

Success

Description

422

No

Validation Error Object

400

No

Bad Request

401

No

Unauthorized