Skip to content
Markets open

Switch API reference

Switch: routing

Route plans, dialplans, routing rules, ACLs and route traces.

23 operationsBase URL https://packetexchange.io/api/v1Postman collection

List route groups

GET/api/v1/switch/route-plans

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Route groups (stored as route plans): ordered supplier chains with failover rules. Newest change first, with entry counts.

Response 200

FieldTypeDescription
datarequiredobject[]-
idrequireddata[].idstring (uuid)-
operatorIdrequireddata[].operatorIdstring (uuid)-
namerequireddata[].namestring-
descriptionrequireddata[].descriptionstring | null-
enabledrequireddata[].enabledboolean-
failoverSipCodesrequireddata[].failoverSipCodesinteger[]SIP results that move the call to the next supplier
maxAttemptsrequireddata[].maxAttemptsinteger1 to 6
selectionModerequireddata[].selectionModestringHow the first supplier is picked; failover is always sequentialOne of priority, least_cost, weighted
failoverTimeoutSecondsrequireddata[].failoverTimeoutSecondsinteger | nullnull = the platform budget
createdAtrequireddata[].createdAtstring (date-time)ISO-8601 timestamp (UTC)
updatedAtrequireddata[].updatedAtstring (date-time)ISO-8601 timestamp (UTC)
entryCountrequireddata[].entryCountinteger-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Create a route group

POST/api/v1/switch/route-plans

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Names must be unique per operator. Defaults: priority selection, 3 attempts, the platform failover timeout.

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Request body (application/json)

FieldTypeDescription
namerequiredstring-max 120 chars
descriptionstring | null-max 2000 chars
selectionModestring-One of priority, least_cost, weighted
failoverSipCodesinteger[]-
maxAttemptsinteger-1 to 6
failoverTimeoutSecondsinteger | null-5 to 600

Response 201

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
operatorIdrequireddata.operatorIdstring (uuid)-
namerequireddata.namestring-
descriptionrequireddata.descriptionstring | null-
enabledrequireddata.enabledboolean-
failoverSipCodesrequireddata.failoverSipCodesinteger[]SIP results that move the call to the next supplier
maxAttemptsrequireddata.maxAttemptsinteger1 to 6
selectionModerequireddata.selectionModestringHow the first supplier is picked; failover is always sequentialOne of priority, least_cost, weighted
failoverTimeoutSecondsrequireddata.failoverTimeoutSecondsinteger | nullnull = the platform budget
createdAtrequireddata.createdAtstring (date-time)ISO-8601 timestamp (UTC)
updatedAtrequireddata.updatedAtstring (date-time)ISO-8601 timestamp (UTC)

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Get a route group with its suppliers

GET/api/v1/switch/route-plans/{id}

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Parameters

NameInTypeDescription
idrequiredpathstring-

Response 200

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
operatorIdrequireddata.operatorIdstring (uuid)-
namerequireddata.namestring-
descriptionrequireddata.descriptionstring | null-
enabledrequireddata.enabledboolean-
failoverSipCodesrequireddata.failoverSipCodesinteger[]SIP results that move the call to the next supplier
maxAttemptsrequireddata.maxAttemptsinteger1 to 6
selectionModerequireddata.selectionModestringHow the first supplier is picked; failover is always sequentialOne of priority, least_cost, weighted
failoverTimeoutSecondsrequireddata.failoverTimeoutSecondsinteger | nullnull = the platform budget
createdAtrequireddata.createdAtstring (date-time)ISO-8601 timestamp (UTC)
updatedAtrequireddata.updatedAtstring (date-time)ISO-8601 timestamp (UTC)
entriesrequireddata.entriesobject[]-
idrequireddata.entries[].idstring (uuid)-
prefixrequireddata.entries[].prefixstring"" = any destination
routeIdrequireddata.entries[].routeIdstring (uuid) | nullA marketplace route you bought
vendorTrunkIdrequireddata.entries[].vendorTrunkIdstring (uuid) | nullOne of your supplier trunks
priorityrequireddata.entries[].priorityinteger-
weightPctrequireddata.entries[].weightPctinteger | null-
minAsrrequireddata.entries[].minAsrstring | nullASR gate in percent, as a decimal string; null = off
maxPddrequireddata.entries[].maxPddinteger | nullPDD gate in ms; null = off
enabledrequireddata.entries[].enabledboolean-
destinationNamerequireddata.entries[].destinationNamestring | null-
countryrequireddata.entries[].countrystring | null-
externalrequireddata.entries[].externalbooleanTrue for a supplier trunk, false for a marketplace route
supplierLabelrequireddata.entries[].supplierLabelstring-
supplierMetarequireddata.entries[].supplierMetastring-
trunkLabelrequireddata.entries[].trunkLabelstring | null-
trunkHostrequireddata.entries[].trunkHoststring | nullWithheld (null) for marketplace-promoted trunks
trunkStatusrequireddata.entries[].trunkStatusstring | null-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Update a route group's settings

PATCH/api/v1/switch/route-plans/{id}

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Send failoverTimeoutSeconds: null to go back to the platform budget; omit it to leave it unchanged.

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Parameters

NameInTypeDescription
idrequiredpathstring-

Request body (application/json)

FieldTypeDescription
namestring-max 120 chars
descriptionstring | null-max 2000 chars
enabledboolean-
selectionModestring-One of priority, least_cost, weighted
failoverSipCodesinteger[]-
maxAttemptsinteger-1 to 6
failoverTimeoutSecondsinteger | null-5 to 600

Response 200

FieldTypeDescription
datarequiredobjectSame fields as SwitchRouteGroup, shown earlier on this page.

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.
  • AlsoSTALE_WRITE

Delete a route group

DELETE/api/v1/switch/route-plans/{id}

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Customers assigned to it are detached and fall back to their routing strategy.

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Parameters

NameInTypeDescription
idrequiredpathstring-

Response 200

FieldTypeDescription
datarequiredobject-
deletedrequireddata.deletedboolean-One of true

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.
  • AlsoSTALE_WRITE

Clone a route group with all its suppliers

POST/api/v1/switch/route-plans/{id}/clone

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Parameters

NameInTypeDescription
idrequiredpathstring-

Response 201

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
namerequireddata.namestring-
entriesClonedrequireddata.entriesClonedinteger-

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Replace the suppliers in a route group

PUT/api/v1/switch/route-plans/{id}/entries

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Up to 200 entries, each naming exactly one supplier: a marketplace route you bought or one of your active supplier trunks. Duplicate supplier for the same prefix is refused.

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Parameters

NameInTypeDescription
idrequiredpathstring-

Request body (application/json)

FieldTypeDescription
entriesrequiredobject[]-
prefixentries[].prefixstring-max 24 chars
routeIdentries[].routeIdstring (uuid) | null-
vendorTrunkIdentries[].vendorTrunkIdstring (uuid) | null-
priorityentries[].priorityinteger-1 to 99
weightPctentries[].weightPctinteger | null-0 to 100
minAsrentries[].minAsrnumber | null-0 to 100
maxPddentries[].maxPddinteger | null-min 0
enabledentries[].enabledboolean-

Response 200

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
operatorIdrequireddata.operatorIdstring (uuid)-
namerequireddata.namestring-
descriptionrequireddata.descriptionstring | null-
enabledrequireddata.enabledboolean-
failoverSipCodesrequireddata.failoverSipCodesinteger[]SIP results that move the call to the next supplier
maxAttemptsrequireddata.maxAttemptsinteger1 to 6
selectionModerequireddata.selectionModestringHow the first supplier is picked; failover is always sequentialOne of priority, least_cost, weighted
failoverTimeoutSecondsrequireddata.failoverTimeoutSecondsinteger | nullnull = the platform budget
createdAtrequireddata.createdAtstring (date-time)ISO-8601 timestamp (UTC)
updatedAtrequireddata.updatedAtstring (date-time)ISO-8601 timestamp (UTC)
entriesrequireddata.entriesobject[]-
idrequireddata.entries[].idstring (uuid)-
prefixrequireddata.entries[].prefixstring"" = any destination
routeIdrequireddata.entries[].routeIdstring (uuid) | nullA marketplace route you bought
vendorTrunkIdrequireddata.entries[].vendorTrunkIdstring (uuid) | nullOne of your supplier trunks
priorityrequireddata.entries[].priorityinteger-
weightPctrequireddata.entries[].weightPctinteger | null-
minAsrrequireddata.entries[].minAsrstring | nullASR gate in percent, as a decimal string; null = off
maxPddrequireddata.entries[].maxPddinteger | nullPDD gate in ms; null = off
enabledrequireddata.entries[].enabledboolean-
destinationNamerequireddata.entries[].destinationNamestring | null-
countryrequireddata.entries[].countrystring | null-
externalrequireddata.entries[].externalbooleanTrue for a supplier trunk, false for a marketplace route
supplierLabelrequireddata.entries[].supplierLabelstring-
supplierMetarequireddata.entries[].supplierMetastring-
trunkLabelrequireddata.entries[].trunkLabelstring | null-
trunkHostrequireddata.entries[].trunkHoststring | nullWithheld (null) for marketplace-promoted trunks
trunkStatusrequireddata.entries[].trunkStatusstring | null-

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.
  • AlsoSTALE_WRITE

List dialplans

GET/api/v1/switch/dialplans

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Dialplans are ordered rules above route groups: match a number, rewrite it and the caller ID, then route or block.

Response 200

FieldTypeDescription
datarequiredobject[]-
idrequireddata[].idstring (uuid)-
operatorIdrequireddata[].operatorIdstring (uuid)-
namerequireddata[].namestring-
descriptionrequireddata[].descriptionstring | null-
enabledrequireddata[].enabledboolean-
createdAtrequireddata[].createdAtstring (date-time)ISO-8601 timestamp (UTC)
updatedAtrequireddata[].updatedAtstring (date-time)ISO-8601 timestamp (UTC)
ruleCountrequireddata[].ruleCountinteger-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Create a dialplan

POST/api/v1/switch/dialplans

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Request body (application/json)

FieldTypeDescription
namerequiredstring-max 120 chars
descriptionstring | null-max 2000 chars

Response 201

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
operatorIdrequireddata.operatorIdstring (uuid)-
namerequireddata.namestring-
descriptionrequireddata.descriptionstring | null-
enabledrequireddata.enabledboolean-
createdAtrequireddata.createdAtstring (date-time)ISO-8601 timestamp (UTC)
updatedAtrequireddata.updatedAtstring (date-time)ISO-8601 timestamp (UTC)

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Get a dialplan with its rules

GET/api/v1/switch/dialplans/{id}

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Parameters

NameInTypeDescription
idrequiredpathstring-

Response 200

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
operatorIdrequireddata.operatorIdstring (uuid)-
namerequireddata.namestring-
descriptionrequireddata.descriptionstring | null-
enabledrequireddata.enabledboolean-
createdAtrequireddata.createdAtstring (date-time)ISO-8601 timestamp (UTC)
updatedAtrequireddata.updatedAtstring (date-time)ISO-8601 timestamp (UTC)
rulesrequireddata.rulesobject[]-
idrequireddata.rules[].idstring (uuid)-
dialplanIdrequireddata.rules[].dialplanIdstring (uuid)-
positionrequireddata.rules[].positioninteger-
labelrequireddata.rules[].labelstring | null-
enabledrequireddata.rules[].enabledboolean-
matchPrefixrequireddata.rules[].matchPrefixstring"" = any dialled number
matchRegexrequireddata.rules[].matchRegexstring | null-
minLenrequireddata.rules[].minLeninteger | null-
maxLenrequireddata.rules[].maxLeninteger | null-
matchClirequireddata.rules[].matchClistring | null-
jurisdictionrequireddata.rules[].jurisdictionstring-One of any, intrastate, interstate, local, international, domestic
timeStartrequireddata.rules[].timeStartstring | nullHH:MM in your timezone
timeEndrequireddata.rules[].timeEndstring | null-
daysOfWeekrequireddata.rules[].daysOfWeekinteger[] | null0 = Sunday; null = every day
stripDigitsrequireddata.rules[].stripDigitsinteger-
prependDigitsrequireddata.rules[].prependDigitsstring-
cliModerequireddata.rules[].cliModestring-One of passthrough, set, strip, prepend, anonymous, did
cliValuerequireddata.rules[].cliValuestring | null-
actionrequireddata.rules[].actionstring-One of route_group, block
routeGroupIdrequireddata.rules[].routeGroupIdstring (uuid) | null-
blockCauserequireddata.rules[].blockCauseintegerSIP code sent when action = block

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Rename, describe, enable or disable a dialplan

PATCH/api/v1/switch/dialplans/{id}

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Parameters

NameInTypeDescription
idrequiredpathstring-

Request body (application/json)

FieldTypeDescription
namestring-max 120 chars
descriptionstring | null-max 2000 chars
enabledboolean-

Response 200

FieldTypeDescription
datarequiredobjectSame fields as SwitchDialplan, shown earlier on this page.

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.
  • AlsoSTALE_WRITE

Delete a dialplan

DELETE/api/v1/switch/dialplans/{id}

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Parameters

NameInTypeDescription
idrequiredpathstring-

Response 200

FieldTypeDescription
datarequiredobject-
deletedrequireddata.deletedboolean-One of true

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.
  • AlsoSTALE_WRITE

Clone a dialplan with all its rules

POST/api/v1/switch/dialplans/{id}/clone

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Cloned rules keep their route-group targets.

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Parameters

NameInTypeDescription
idrequiredpathstring-

Response 201

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
namerequireddata.namestring-
rulesClonedrequireddata.rulesClonedinteger-

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Replace the rules in a dialplan

PUT/api/v1/switch/dialplans/{id}/rules

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Up to 200 rules, evaluated in position order. A route_group action must name one of your route groups; regular expressions that risk catastrophic backtracking are refused.

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Parameters

NameInTypeDescription
idrequiredpathstring-

Request body (application/json)

FieldTypeDescription
rulesrequiredobject[]-
positionrules[].positioninteger-
labelrules[].labelstring | null-max 120 chars
enabledrules[].enabledboolean-
matchPrefixrules[].matchPrefixstring-max 24 chars
matchRegexrules[].matchRegexstring | null-max 400 chars
minLenrules[].minLeninteger | null-0 to 24
maxLenrules[].maxLeninteger | null-0 to 24
matchClirules[].matchClistring | null-max 48 chars
jurisdictionrules[].jurisdictionstring-One of any, intrastate, interstate, local, international, domestic
timeStartrules[].timeStartstring | null-
timeEndrules[].timeEndstring | null-
daysOfWeekrules[].daysOfWeekinteger[] | null-
stripDigitsrules[].stripDigitsinteger-0 to 20
prependDigitsrules[].prependDigitsstring-max 24 chars
cliModerules[].cliModestring-One of passthrough, set, strip, prepend, anonymous, did
cliValuerules[].cliValuestring | null-max 32 chars
actionrules[].actionstring-One of route_group, block
routeGroupIdrules[].routeGroupIdstring (uuid) | null-
blockCauserules[].blockCauseinteger-400 to 699

Response 200

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
operatorIdrequireddata.operatorIdstring (uuid)-
namerequireddata.namestring-
descriptionrequireddata.descriptionstring | null-
enabledrequireddata.enabledboolean-
createdAtrequireddata.createdAtstring (date-time)ISO-8601 timestamp (UTC)
updatedAtrequireddata.updatedAtstring (date-time)ISO-8601 timestamp (UTC)
rulesrequireddata.rulesobject[]-
idrequireddata.rules[].idstring (uuid)-
dialplanIdrequireddata.rules[].dialplanIdstring (uuid)-
positionrequireddata.rules[].positioninteger-
labelrequireddata.rules[].labelstring | null-
enabledrequireddata.rules[].enabledboolean-
matchPrefixrequireddata.rules[].matchPrefixstring"" = any dialled number
matchRegexrequireddata.rules[].matchRegexstring | null-
minLenrequireddata.rules[].minLeninteger | null-
maxLenrequireddata.rules[].maxLeninteger | null-
matchClirequireddata.rules[].matchClistring | null-
jurisdictionrequireddata.rules[].jurisdictionstring-One of any, intrastate, interstate, local, international, domestic
timeStartrequireddata.rules[].timeStartstring | nullHH:MM in your timezone
timeEndrequireddata.rules[].timeEndstring | null-
daysOfWeekrequireddata.rules[].daysOfWeekinteger[] | null0 = Sunday; null = every day
stripDigitsrequireddata.rules[].stripDigitsinteger-
prependDigitsrequireddata.rules[].prependDigitsstring-
cliModerequireddata.rules[].cliModestring-One of passthrough, set, strip, prepend, anonymous, did
cliValuerequireddata.rules[].cliValuestring | null-
actionrequireddata.rules[].actionstring-One of route_group, block
routeGroupIdrequireddata.rules[].routeGroupIdstring (uuid) | null-
blockCauserequireddata.rules[].blockCauseintegerSIP code sent when action = block

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.
  • AlsoSTALE_WRITE

Preview how a number would route

GET/api/v1/switch/routing/preview

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Read-only: the dialplan rule matched, number and caller-ID rewrites, the route group, the ordered supplier chain, any customer or trunk restriction that would refuse the call, and candidates that were skipped. Failover is always sequential. For the full reasoning use POST /routing/trace.

Parameters

NameInTypeDescription
torequiredquerystringDialled number
cliquerystring-
typequerystring-One of voice, sms
subAccountIdquerystring (uuid)The customer
customerTrunkIdquerystring (uuid)Name the trunk for an exact restriction check

Response 200

FieldTypeDescription
datarequiredobject-
dialplanIdrequireddata.dialplanIdstring (uuid) | null-
dialplanNamerequireddata.dialplanNamestring | null-
matchedrequireddata.matchedboolean-
ruleIdrequireddata.ruleIdstring (uuid) | null-
ruleLabelrequireddata.ruleLabelstring | null-
blockedrequireddata.blockedboolean-
blockCauserequireddata.blockCauseinteger | null-
translatedNumberrequireddata.translatedNumberstring-
outClirequireddata.outClistring | null-
routeGroupIdrequireddata.routeGroupIdstring (uuid) | null-
routeGroupNamerequireddata.routeGroupNamestring | null-
kindrequireddata.kindstringfixed route or route group
selectionModerequireddata.selectionModestring | null-
failoverModerequireddata.failoverModestring-One of sequential
failoverSipCodesrequireddata.failoverSipCodesinteger[]-
maxAttemptsrequireddata.maxAttemptsinteger-
setupBudgetSecondsrequireddata.setupBudgetSecondsnumber | null-
refusalrequireddata.refusalobject | nullWhy the chain is empty on purpose
restrictionrequireddata.restrictionobject | nullA customer or trunk restriction that would refuse this call
skippedrequireddata.skippedobject[]-
supplierrequireddata.skipped[].supplierstring-
reasonrequireddata.skipped[].reasonstring-
detailrequireddata.skipped[].detailstring | null-
vendorTrunkIdrequireddata.skipped[].vendorTrunkIdstring (uuid) | null-
candidatesrequireddata.candidatesobject[]-
attemptrequireddata.candidates[].attemptinteger-
routeIdrequireddata.candidates[].routeIdstring-
destinationrequireddata.candidates[].destinationstring | null-
countryrequireddata.candidates[].countrystring | null-
pricePerUnitrequireddata.candidates[].pricePerUnitstringCost per minute of this supplier, 6-decimal string
matchedPrefixrequireddata.candidates[].matchedPrefixstring | null-
priorityrequireddata.candidates[].priorityinteger | null-
externalrequireddata.candidates[].externalboolean-
supplierrequireddata.candidates[].supplierstring-One of external trunk, marketplace
endpointrequireddata.candidates[].endpointstring | null-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Run a route trace for a number

POST/api/v1/switch/routing/trace

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Explains the routing decision end to end: normalisation, the policy matched, the sell price, every eligible supplier with its buy rate, capacity and margin, and why each excluded supplier was excluded. Uses the same resolvers as live calls but is NOT a call: no call record, balance movement or capacity use. The result is kept for an hour so it can be saved.

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Request body (application/json)

FieldTypeDescription
torequiredstring-max 32 chars
clistring | null-max 32 chars
typestring-One of voice, sms
subAccountIdstring (uuid) | nullThe customer
customerTrunkIdstring (uuid) | null-

Response 200

FieldTypeDescription
datarequiredobject-
traceIdrequireddata.traceIdstring (uuid)-
atrequireddata.atstring (date-time)ISO-8601 timestamp (UTC)
savedrequireddata.savedboolean-
savedNoterequireddata.savedNotestring | null-
inputrequireddata.inputobject-
torequireddata.input.tostring-
clirequireddata.input.clistring | null-
typerequireddata.input.typestring-One of voice, sms
subAccountIdrequireddata.input.subAccountIdstring (uuid) | null-
subAccountLabelrequireddata.input.subAccountLabelstring | null-
customerTrunkIdrequireddata.input.customerTrunkIdstring (uuid) | null-
customerTrunkLabelrequireddata.input.customerTrunkLabelstring | null-
verdictrequireddata.verdictobject-
routesrequireddata.verdict.routesbooleanWould the call be carried?
sipCoderequireddata.verdict.sipCodeinteger | nullWhat the customer's switch would receive
reasonrequireddata.verdict.reasonstring | null-
summaryrequireddata.verdict.summarystring-
stepsrequireddata.stepsobject[]Each decision stage with its result
numberrequireddata.numberobject-
dialledrequireddata.number.dialledstring-
digitsrequireddata.number.digitsstring-
afterTechPrefixrequireddata.number.afterTechPrefixstring-
translatedrequireddata.number.translatedstring-
countryrequireddata.number.countrystring | null-
outClirequireddata.outClistring | null-
sellrequireddata.sellobject | nullA price, or the reason there is none. Only kind = rated carries a rate.
kindrequireddata.sell.kindstring-One of rated, no_matching_rate, not_yet_effective, expired, forbidden, rating_failed, not_billable
ratedata.sell.ratenumberPresent when kind = rated. May legitimately be 0.
matchedPrefixdata.sell.matchedPrefixstring-
deckVersiondata.sell.deckVersioninteger | null-
sourcedata.sell.sourcestring-
destinationdata.sell.destinationstring-
effectiveFromdata.sell.effectiveFromstring-
expiredAtdata.sell.expiredAtstring-
reasondata.sell.reasonstringWhy it is forbidden or failed
sellBillingRaterequireddata.sellBillingRatenumber | nullUSD as a JSON number (engine output, up to 6 decimal places)
candidatesrequireddata.candidatesobject[]Suppliers in the chain, in attempt order, with buy rate, capacity and margin
excludedrequireddata.excludedobject[]Suppliers considered and not used, each with the reason
selectedrequireddata.selectedobject | null-
durationrequireddata.durationobject | null-
secondsrequireddata.duration.secondsinteger-
boundByrequireddata.duration.boundBystring-One of balance, platform, trunk
sideEffectsrequireddata.sideEffectsobject-
createdCdrrequireddata.sideEffects.createdCdrboolean-One of false
movedBalancerequireddata.sideEffects.movedBalanceboolean-One of false
consumedCapacityrequireddata.sideEffects.consumedCapacityboolean-One of false

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

List saved route traces

GET/api/v1/switch/routing/traces

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Parameters

NameInTypeDescription
limitqueryintegerDefault 25
offsetqueryinteger-

Response 200

FieldTypeDescription
datarequiredobject-
itemsrequireddata.itemsobject[]-
idrequireddata.items[].idstring (uuid)-
traceIdrequireddata.items[].traceIdstring (uuid)-
noterequireddata.items[].notestring | null-
destinationrequireddata.items[].destinationstring-
clirequireddata.items[].clistring | null-
callTyperequireddata.items[].callTypestring-
subAccountIdrequireddata.items[].subAccountIdstring (uuid) | null-
customerTrunkIdrequireddata.items[].customerTrunkIdstring (uuid) | null-
routesrequireddata.items[].routesboolean-
sipCoderequireddata.items[].sipCodeinteger | null-
reasonrequireddata.items[].reasonstring | null-
summaryrequireddata.items[].summarystring-
selectedLabelrequireddata.items[].selectedLabelstring | null-
buyRaterequireddata.items[].buyRatestring | nullDecimal string
sellRaterequireddata.items[].sellRatestring | nullDecimal string
savedByrequireddata.items[].savedBystring | null-
ranAtrequireddata.items[].ranAtstring (date-time)ISO-8601 timestamp (UTC)
createdAtrequireddata.items[].createdAtstring (date-time)ISO-8601 timestamp (UTC)
totalrequireddata.totalinteger-
limitrequireddata.limitinteger-
offsetrequireddata.offsetinteger-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Save a route trace

POST/api/v1/switch/routing/traces

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Keeps a trace run within the last hour, by its traceId, with an optional note. The stored copy is the server's own result. Saving the same trace twice returns alreadySaved: true.

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Request body (application/json)

FieldTypeDescription
traceIdrequiredstring (uuid)-
notestring | null-max 2000 chars

Response 200

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
traceIdrequireddata.traceIdstring (uuid)-
alreadySavedrequireddata.alreadySavedboolean-

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Get a saved route trace

GET/api/v1/switch/routing/traces/{id}

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

The snapshot as it was saved. It is never re-run; running again produces a new trace.

Parameters

NameInTypeDescription
idrequiredpathstring-

Response 200

FieldTypeDescription
datarequiredobjectSame fields as SwitchRouteTrace, shown earlier on this page.

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Delete a saved route trace

DELETE/api/v1/switch/routing/traces/{id}

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Parameters

NameInTypeDescription
idrequiredpathstring-

Response 200

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

List inbound IP ACLs for a customer or trunk

GET/api/v1/switch/acls

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Parameters

NameInTypeDescription
entityTypequerystring-One of customer, trunk
entityIdrequiredquerystring (uuid)The customer or trunk id

Response 200

FieldTypeDescription
datarequiredobject[]-
idrequireddata[].idstring (uuid)-
entityTyperequireddata[].entityTypestring-One of customer, trunk
entityIdrequireddata[].entityIdstring (uuid)-
cidrrequireddata[].cidrstring-
descriptionrequireddata[].descriptionstring | null-
createdAtrequireddata[].createdAtstring (date-time)ISO-8601 timestamp (UTC)

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Add an inbound IP ACL entry

POST/api/v1/switch/acls

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Authorises an address or CIDR for a customer (IP authentication) or a trunk (identity).

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Request body (application/json)

FieldTypeDescription
entityTyperequiredstring-One of customer, trunk
entityIdrequiredstring (uuid)-
cidrrequiredstring-max 64 chars
descriptionstring | null-max 160 chars

Response 201

FieldTypeDescription
datarequiredobjectSame fields as SwitchIpAcl, shown earlier on this page.

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Remove an inbound IP ACL entry

DELETE/api/v1/switch/acls/{id}

Access
API key. Scoped keys need switch:manage.
Rate limit
100 requests per second (the default)

Removing a customer address stops calls from that address immediately.

Test keys: refused with 403 TEST_KEY_NOT_ALLOWED. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.

Parameters

NameInTypeDescription
idrequiredpathstring-

Response 200

FieldTypeDescription
datarequiredobject-
deletedrequireddata.deletedboolean-One of true

Response 202

FieldTypeDescription
datarequiredobject-
approvalRequireddata.approvalRequiredboolean-One of true
approvalRequestIddata.approvalRequestIdstring (uuid) | null-
permissiondata.permissionstring-
expiresAtdata.expiresAtstring (date-time)-
messagedata.messagestring-

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 402SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 404NOT_FOUND: no such resource on your account.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.