Switch API reference
Switch: routing
Route plans, dialplans, routing rules, ACLs and route traces.
BrowseSwitch: routing
List route groups
GET/
- 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
datarequiredobject[]
idrequiredstring (uuid) · data[].id
operatorIdrequiredstring (uuid) · data[].operatorId
namerequiredstring · data[].name
descriptionrequiredstring | null · data[].description
enabledrequiredboolean · data[].enabled
failoverSipCodesrequiredinteger[] · data[].failoverSipCodes
SIP results that move the call to the next suppliermaxAttemptsrequiredinteger · data[].maxAttempts
1 to 6selectionModerequiredstring · data[].selectionMode
How the first supplier is picked; failover is always sequentialOne ofpriority,least_cost,weightedfailoverTimeoutSecondsrequiredinteger | null · data[].failoverTimeoutSeconds
null = the platform budgetcreatedAtrequiredstring (date-time) · data[].createdAt
ISO-8601 timestamp (UTC)updatedAtrequiredstring (date-time) · data[].updatedAt
ISO-8601 timestamp (UTC)entryCountrequiredinteger · data[].entryCount
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Create a route group
POST/
- 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)
namerequiredstring
max 120 charsdescriptionstring | null
max 2000 charsselectionModestring
One ofpriority,least_cost,weightedfailoverSipCodesinteger[]
maxAttemptsinteger
1 to 6failoverTimeoutSecondsinteger | null
5 to 600
Response 201
datarequiredobject
idrequiredstring (uuid) · data.id
operatorIdrequiredstring (uuid) · data.operatorId
namerequiredstring · data.name
descriptionrequiredstring | null · data.description
enabledrequiredboolean · data.enabled
failoverSipCodesrequiredinteger[] · data.failoverSipCodes
SIP results that move the call to the next suppliermaxAttemptsrequiredinteger · data.maxAttempts
1 to 6selectionModerequiredstring · data.selectionMode
How the first supplier is picked; failover is always sequentialOne ofpriority,least_cost,weightedfailoverTimeoutSecondsrequiredinteger | null · data.failoverTimeoutSeconds
null = the platform budgetcreatedAtrequiredstring (date-time) · data.createdAt
ISO-8601 timestamp (UTC)updatedAtrequiredstring (date-time) · data.updatedAt
ISO-8601 timestamp (UTC)
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Get a route group with its suppliers
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
idrequiredpath · string
Response 200
datarequiredobject
idrequiredstring (uuid) · data.id
operatorIdrequiredstring (uuid) · data.operatorId
namerequiredstring · data.name
descriptionrequiredstring | null · data.description
enabledrequiredboolean · data.enabled
failoverSipCodesrequiredinteger[] · data.failoverSipCodes
SIP results that move the call to the next suppliermaxAttemptsrequiredinteger · data.maxAttempts
1 to 6selectionModerequiredstring · data.selectionMode
How the first supplier is picked; failover is always sequentialOne ofpriority,least_cost,weightedfailoverTimeoutSecondsrequiredinteger | null · data.failoverTimeoutSeconds
null = the platform budgetcreatedAtrequiredstring (date-time) · data.createdAt
ISO-8601 timestamp (UTC)updatedAtrequiredstring (date-time) · data.updatedAt
ISO-8601 timestamp (UTC)entriesrequiredobject[] · data.entries
idrequiredstring (uuid) · data.entries[].id
prefixrequiredstring · data.entries[].prefix
"" = any destinationrouteIdrequiredstring (uuid) | null · data.entries[].routeId
A marketplace route you boughtvendorTrunkIdrequiredstring (uuid) | null · data.entries[].vendorTrunkId
One of your supplier trunkspriorityrequiredinteger · data.entries[].priority
weightPctrequiredinteger | null · data.entries[].weightPct
minAsrrequiredstring | null · data.entries[].minAsr
ASR gate in percent, as a decimal string; null = offmaxPddrequiredinteger | null · data.entries[].maxPdd
PDD gate in ms; null = offenabledrequiredboolean · data.entries[].enabled
destinationNamerequiredstring | null · data.entries[].destinationName
countryrequiredstring | null · data.entries[].country
externalrequiredboolean · data.entries[].external
True for a supplier trunk, false for a marketplace routesupplierLabelrequiredstring · data.entries[].supplierLabel
supplierMetarequiredstring · data.entries[].supplierMeta
trunkLabelrequiredstring | null · data.entries[].trunkLabel
trunkHostrequiredstring | null · data.entries[].trunkHost
Withheld (null) for marketplace-promoted trunkstrunkStatusrequiredstring | null · data.entries[].trunkStatus
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Update a route group's settings
PATCH/
- 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
idrequiredpath · string
Request body (application/json)
namestring
max 120 charsdescriptionstring | null
max 2000 charsenabledboolean
selectionModestring
One ofpriority,least_cost,weightedfailoverSipCodesinteger[]
maxAttemptsinteger
1 to 6failoverTimeoutSecondsinteger | null
5 to 600
Response 200
datarequiredobject
Same fields as SwitchRouteGroup, shown earlier on this page.
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
STALE_WRITE
Delete a route group
DELETE/
- 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
idrequiredpath · string
Response 200
datarequiredobject
deletedrequiredboolean · data.deleted
One oftrue
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
STALE_WRITE
Clone a route group with all its suppliers
POST/
- 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
idrequiredpath · string
Response 201
datarequiredobject
idrequiredstring (uuid) · data.id
namerequiredstring · data.name
entriesClonedrequiredinteger · data.entriesCloned
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Replace the suppliers in a route group
PUT/
- 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
idrequiredpath · string
Request body (application/json)
entriesrequiredobject[]
prefixstring · entries[].prefix
max 24 charsrouteIdstring (uuid) | null · entries[].routeId
vendorTrunkIdstring (uuid) | null · entries[].vendorTrunkId
priorityinteger · entries[].priority
1 to 99weightPctinteger | null · entries[].weightPct
0 to 100minAsrnumber | null · entries[].minAsr
0 to 100maxPddinteger | null · entries[].maxPdd
min 0enabledboolean · entries[].enabled
Response 200
datarequiredobject
idrequiredstring (uuid) · data.id
operatorIdrequiredstring (uuid) · data.operatorId
namerequiredstring · data.name
descriptionrequiredstring | null · data.description
enabledrequiredboolean · data.enabled
failoverSipCodesrequiredinteger[] · data.failoverSipCodes
SIP results that move the call to the next suppliermaxAttemptsrequiredinteger · data.maxAttempts
1 to 6selectionModerequiredstring · data.selectionMode
How the first supplier is picked; failover is always sequentialOne ofpriority,least_cost,weightedfailoverTimeoutSecondsrequiredinteger | null · data.failoverTimeoutSeconds
null = the platform budgetcreatedAtrequiredstring (date-time) · data.createdAt
ISO-8601 timestamp (UTC)updatedAtrequiredstring (date-time) · data.updatedAt
ISO-8601 timestamp (UTC)entriesrequiredobject[] · data.entries
idrequiredstring (uuid) · data.entries[].id
prefixrequiredstring · data.entries[].prefix
"" = any destinationrouteIdrequiredstring (uuid) | null · data.entries[].routeId
A marketplace route you boughtvendorTrunkIdrequiredstring (uuid) | null · data.entries[].vendorTrunkId
One of your supplier trunkspriorityrequiredinteger · data.entries[].priority
weightPctrequiredinteger | null · data.entries[].weightPct
minAsrrequiredstring | null · data.entries[].minAsr
ASR gate in percent, as a decimal string; null = offmaxPddrequiredinteger | null · data.entries[].maxPdd
PDD gate in ms; null = offenabledrequiredboolean · data.entries[].enabled
destinationNamerequiredstring | null · data.entries[].destinationName
countryrequiredstring | null · data.entries[].country
externalrequiredboolean · data.entries[].external
True for a supplier trunk, false for a marketplace routesupplierLabelrequiredstring · data.entries[].supplierLabel
supplierMetarequiredstring · data.entries[].supplierMeta
trunkLabelrequiredstring | null · data.entries[].trunkLabel
trunkHostrequiredstring | null · data.entries[].trunkHost
Withheld (null) for marketplace-promoted trunkstrunkStatusrequiredstring | null · data.entries[].trunkStatus
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
STALE_WRITE
List dialplans
GET/
- 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
datarequiredobject[]
idrequiredstring (uuid) · data[].id
operatorIdrequiredstring (uuid) · data[].operatorId
namerequiredstring · data[].name
descriptionrequiredstring | null · data[].description
enabledrequiredboolean · data[].enabled
createdAtrequiredstring (date-time) · data[].createdAt
ISO-8601 timestamp (UTC)updatedAtrequiredstring (date-time) · data[].updatedAt
ISO-8601 timestamp (UTC)ruleCountrequiredinteger · data[].ruleCount
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Create a dialplan
POST/
- 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)
namerequiredstring
max 120 charsdescriptionstring | null
max 2000 chars
Response 201
datarequiredobject
idrequiredstring (uuid) · data.id
operatorIdrequiredstring (uuid) · data.operatorId
namerequiredstring · data.name
descriptionrequiredstring | null · data.description
enabledrequiredboolean · data.enabled
createdAtrequiredstring (date-time) · data.createdAt
ISO-8601 timestamp (UTC)updatedAtrequiredstring (date-time) · data.updatedAt
ISO-8601 timestamp (UTC)
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Get a dialplan with its rules
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
idrequiredpath · string
Response 200
datarequiredobject
idrequiredstring (uuid) · data.id
operatorIdrequiredstring (uuid) · data.operatorId
namerequiredstring · data.name
descriptionrequiredstring | null · data.description
enabledrequiredboolean · data.enabled
createdAtrequiredstring (date-time) · data.createdAt
ISO-8601 timestamp (UTC)updatedAtrequiredstring (date-time) · data.updatedAt
ISO-8601 timestamp (UTC)rulesrequiredobject[] · data.rules
idrequiredstring (uuid) · data.rules[].id
dialplanIdrequiredstring (uuid) · data.rules[].dialplanId
positionrequiredinteger · data.rules[].position
labelrequiredstring | null · data.rules[].label
enabledrequiredboolean · data.rules[].enabled
matchPrefixrequiredstring · data.rules[].matchPrefix
"" = any dialled numbermatchRegexrequiredstring | null · data.rules[].matchRegex
minLenrequiredinteger | null · data.rules[].minLen
maxLenrequiredinteger | null · data.rules[].maxLen
matchClirequiredstring | null · data.rules[].matchCli
jurisdictionrequiredstring · data.rules[].jurisdiction
One ofany,intrastate,interstate,local,international,domestictimeStartrequiredstring | null · data.rules[].timeStart
HH:MM in your timezonetimeEndrequiredstring | null · data.rules[].timeEnd
daysOfWeekrequiredinteger[] | null · data.rules[].daysOfWeek
0 = Sunday; null = every daystripDigitsrequiredinteger · data.rules[].stripDigits
prependDigitsrequiredstring · data.rules[].prependDigits
cliModerequiredstring · data.rules[].cliMode
One ofpassthrough,set,strip,prepend,anonymous,didcliValuerequiredstring | null · data.rules[].cliValue
actionrequiredstring · data.rules[].action
One ofroute_group,blockrouteGroupIdrequiredstring (uuid) | null · data.rules[].routeGroupId
blockCauserequiredinteger · data.rules[].blockCause
SIP code sent when action = block
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Rename, describe, enable or disable a dialplan
PATCH/
- 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
idrequiredpath · string
Request body (application/json)
namestring
max 120 charsdescriptionstring | null
max 2000 charsenabledboolean
Response 200
datarequiredobject
Same fields as SwitchDialplan, shown earlier on this page.
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
STALE_WRITE
Delete a dialplan
DELETE/
- 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
idrequiredpath · string
Response 200
datarequiredobject
deletedrequiredboolean · data.deleted
One oftrue
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
STALE_WRITE
Clone a dialplan with all its rules
POST/
- 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
idrequiredpath · string
Response 201
datarequiredobject
idrequiredstring (uuid) · data.id
namerequiredstring · data.name
rulesClonedrequiredinteger · data.rulesCloned
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Replace the rules in a dialplan
PUT/
- 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
idrequiredpath · string
Request body (application/json)
rulesrequiredobject[]
positioninteger · rules[].position
labelstring | null · rules[].label
max 120 charsenabledboolean · rules[].enabled
matchPrefixstring · rules[].matchPrefix
max 24 charsmatchRegexstring | null · rules[].matchRegex
max 400 charsminLeninteger | null · rules[].minLen
0 to 24maxLeninteger | null · rules[].maxLen
0 to 24matchClistring | null · rules[].matchCli
max 48 charsjurisdictionstring · rules[].jurisdiction
One ofany,intrastate,interstate,local,international,domestictimeStartstring | null · rules[].timeStart
timeEndstring | null · rules[].timeEnd
daysOfWeekinteger[] | null · rules[].daysOfWeek
stripDigitsinteger · rules[].stripDigits
0 to 20prependDigitsstring · rules[].prependDigits
max 24 charscliModestring · rules[].cliMode
One ofpassthrough,set,strip,prepend,anonymous,didcliValuestring | null · rules[].cliValue
max 32 charsactionstring · rules[].action
One ofroute_group,blockrouteGroupIdstring (uuid) | null · rules[].routeGroupId
blockCauseinteger · rules[].blockCause
400 to 699
Response 200
datarequiredobject
idrequiredstring (uuid) · data.id
operatorIdrequiredstring (uuid) · data.operatorId
namerequiredstring · data.name
descriptionrequiredstring | null · data.description
enabledrequiredboolean · data.enabled
createdAtrequiredstring (date-time) · data.createdAt
ISO-8601 timestamp (UTC)updatedAtrequiredstring (date-time) · data.updatedAt
ISO-8601 timestamp (UTC)rulesrequiredobject[] · data.rules
idrequiredstring (uuid) · data.rules[].id
dialplanIdrequiredstring (uuid) · data.rules[].dialplanId
positionrequiredinteger · data.rules[].position
labelrequiredstring | null · data.rules[].label
enabledrequiredboolean · data.rules[].enabled
matchPrefixrequiredstring · data.rules[].matchPrefix
"" = any dialled numbermatchRegexrequiredstring | null · data.rules[].matchRegex
minLenrequiredinteger | null · data.rules[].minLen
maxLenrequiredinteger | null · data.rules[].maxLen
matchClirequiredstring | null · data.rules[].matchCli
jurisdictionrequiredstring · data.rules[].jurisdiction
One ofany,intrastate,interstate,local,international,domestictimeStartrequiredstring | null · data.rules[].timeStart
HH:MM in your timezonetimeEndrequiredstring | null · data.rules[].timeEnd
daysOfWeekrequiredinteger[] | null · data.rules[].daysOfWeek
0 = Sunday; null = every daystripDigitsrequiredinteger · data.rules[].stripDigits
prependDigitsrequiredstring · data.rules[].prependDigits
cliModerequiredstring · data.rules[].cliMode
One ofpassthrough,set,strip,prepend,anonymous,didcliValuerequiredstring | null · data.rules[].cliValue
actionrequiredstring · data.rules[].action
One ofroute_group,blockrouteGroupIdrequiredstring (uuid) | null · data.rules[].routeGroupId
blockCauserequiredinteger · data.rules[].blockCause
SIP code sent when action = block
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support. - Also
STALE_WRITE
Preview how a number would route
GET/
- 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
torequiredquery · string
Dialled numbercliquery · string
typequery · string
One of voice, smssubAccountIdquery · string (uuid)
The customercustomerTrunkIdquery · string (uuid)
Name the trunk for an exact restriction check
Response 200
datarequiredobject
dialplanIdrequiredstring (uuid) | null · data.dialplanId
dialplanNamerequiredstring | null · data.dialplanName
matchedrequiredboolean · data.matched
ruleIdrequiredstring (uuid) | null · data.ruleId
ruleLabelrequiredstring | null · data.ruleLabel
blockedrequiredboolean · data.blocked
blockCauserequiredinteger | null · data.blockCause
translatedNumberrequiredstring · data.translatedNumber
outClirequiredstring | null · data.outCli
routeGroupIdrequiredstring (uuid) | null · data.routeGroupId
routeGroupNamerequiredstring | null · data.routeGroupName
kindrequiredstring · data.kind
fixed route or route groupselectionModerequiredstring | null · data.selectionMode
failoverModerequiredstring · data.failoverMode
One ofsequentialfailoverSipCodesrequiredinteger[] · data.failoverSipCodes
maxAttemptsrequiredinteger · data.maxAttempts
setupBudgetSecondsrequirednumber | null · data.setupBudgetSeconds
refusalrequiredobject | null · data.refusal
Why the chain is empty on purposerestrictionrequiredobject | null · data.restriction
A customer or trunk restriction that would refuse this callskippedrequiredobject[] · data.skipped
supplierrequiredstring · data.skipped[].supplier
reasonrequiredstring · data.skipped[].reason
detailrequiredstring | null · data.skipped[].detail
vendorTrunkIdrequiredstring (uuid) | null · data.skipped[].vendorTrunkId
candidatesrequiredobject[] · data.candidates
attemptrequiredinteger · data.candidates[].attempt
routeIdrequiredstring · data.candidates[].routeId
destinationrequiredstring | null · data.candidates[].destination
countryrequiredstring | null · data.candidates[].country
pricePerUnitrequiredstring · data.candidates[].pricePerUnit
Cost per minute of this supplier, 6-decimal stringmatchedPrefixrequiredstring | null · data.candidates[].matchedPrefix
priorityrequiredinteger | null · data.candidates[].priority
externalrequiredboolean · data.candidates[].external
supplierrequiredstring · data.candidates[].supplier
One ofexternal trunk,marketplaceendpointrequiredstring | null · data.candidates[].endpoint
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Run a route trace for a number
POST/
- 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)
torequiredstring
max 32 charsclistring | null
max 32 charstypestring
One ofvoice,smssubAccountIdstring (uuid) | null
The customercustomerTrunkIdstring (uuid) | null
Response 200
datarequiredobject
traceIdrequiredstring (uuid) · data.traceId
atrequiredstring (date-time) · data.at
ISO-8601 timestamp (UTC)savedrequiredboolean · data.saved
savedNoterequiredstring | null · data.savedNote
inputrequiredobject · data.input
torequiredstring · data.input.to
clirequiredstring | null · data.input.cli
typerequiredstring · data.input.type
One ofvoice,smssubAccountIdrequiredstring (uuid) | null · data.input.subAccountId
subAccountLabelrequiredstring | null · data.input.subAccountLabel
customerTrunkIdrequiredstring (uuid) | null · data.input.customerTrunkId
customerTrunkLabelrequiredstring | null · data.input.customerTrunkLabel
verdictrequiredobject · data.verdict
routesrequiredboolean · data.verdict.routes
Would the call be carried?sipCoderequiredinteger | null · data.verdict.sipCode
What the customer's switch would receivereasonrequiredstring | null · data.verdict.reason
summaryrequiredstring · data.verdict.summary
stepsrequiredobject[] · data.steps
Each decision stage with its resultnumberrequiredobject · data.number
dialledrequiredstring · data.number.dialled
digitsrequiredstring · data.number.digits
afterTechPrefixrequiredstring · data.number.afterTechPrefix
translatedrequiredstring · data.number.translated
countryrequiredstring | null · data.number.country
outClirequiredstring | null · data.outCli
sellrequiredobject | null · data.sell
A price, or the reason there is none. Only kind = rated carries a rate.kindrequiredstring · data.sell.kind
One ofrated,no_matching_rate,not_yet_effective,expired,forbidden,rating_failed,not_billableratenumber · data.sell.rate
Present when kind = rated. May legitimately be 0.matchedPrefixstring · data.sell.matchedPrefix
deckVersioninteger | null · data.sell.deckVersion
sourcestring · data.sell.source
destinationstring · data.sell.destination
effectiveFromstring · data.sell.effectiveFrom
expiredAtstring · data.sell.expiredAt
reasonstring · data.sell.reason
Why it is forbidden or failedsellBillingRaterequirednumber | null · data.sellBillingRate
USD as a JSON number (engine output, up to 6 decimal places)candidatesrequiredobject[] · data.candidates
Suppliers in the chain, in attempt order, with buy rate, capacity and marginexcludedrequiredobject[] · data.excluded
Suppliers considered and not used, each with the reasonselectedrequiredobject | null · data.selected
durationrequiredobject | null · data.duration
secondsrequiredinteger · data.duration.seconds
boundByrequiredstring · data.duration.boundBy
One ofbalance,platform,trunksideEffectsrequiredobject · data.sideEffects
createdCdrrequiredboolean · data.sideEffects.createdCdr
One offalsemovedBalancerequiredboolean · data.sideEffects.movedBalance
One offalseconsumedCapacityrequiredboolean · data.sideEffects.consumedCapacity
One offalse
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List saved route traces
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
limitquery · integer
Default 25offsetquery · integer
Response 200
datarequiredobject
itemsrequiredobject[] · data.items
idrequiredstring (uuid) · data.items[].id
traceIdrequiredstring (uuid) · data.items[].traceId
noterequiredstring | null · data.items[].note
destinationrequiredstring · data.items[].destination
clirequiredstring | null · data.items[].cli
callTyperequiredstring · data.items[].callType
subAccountIdrequiredstring (uuid) | null · data.items[].subAccountId
customerTrunkIdrequiredstring (uuid) | null · data.items[].customerTrunkId
routesrequiredboolean · data.items[].routes
sipCoderequiredinteger | null · data.items[].sipCode
reasonrequiredstring | null · data.items[].reason
summaryrequiredstring · data.items[].summary
selectedLabelrequiredstring | null · data.items[].selectedLabel
buyRaterequiredstring | null · data.items[].buyRate
Decimal stringsellRaterequiredstring | null · data.items[].sellRate
Decimal stringsavedByrequiredstring | null · data.items[].savedBy
ranAtrequiredstring (date-time) · data.items[].ranAt
ISO-8601 timestamp (UTC)createdAtrequiredstring (date-time) · data.items[].createdAt
ISO-8601 timestamp (UTC)totalrequiredinteger · data.total
limitrequiredinteger · data.limit
offsetrequiredinteger · data.offset
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Save a route trace
POST/
- 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)
traceIdrequiredstring (uuid)
notestring | null
max 2000 chars
Response 200
datarequiredobject
idrequiredstring (uuid) · data.id
traceIdrequiredstring (uuid) · data.traceId
alreadySavedrequiredboolean · data.alreadySaved
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Get a saved route trace
GET/
- 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
idrequiredpath · string
Response 200
datarequiredobject
Same fields as SwitchRouteTrace, shown earlier on this page.
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Delete a saved route trace
DELETE/
- 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
idrequiredpath · string
Response 200
datarequiredobject
idrequiredstring (uuid) · data.id
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List inbound IP ACLs for a customer or trunk
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
entityTypequery · string
One of customer, trunkentityIdrequiredquery · string (uuid)
The customer or trunk id
Response 200
datarequiredobject[]
idrequiredstring (uuid) · data[].id
entityTyperequiredstring · data[].entityType
One ofcustomer,trunkentityIdrequiredstring (uuid) · data[].entityId
cidrrequiredstring · data[].cidr
descriptionrequiredstring | null · data[].description
createdAtrequiredstring (date-time) · data[].createdAt
ISO-8601 timestamp (UTC)
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Add an inbound IP ACL entry
POST/
- 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)
entityTyperequiredstring
One ofcustomer,trunkentityIdrequiredstring (uuid)
cidrrequiredstring
max 64 charsdescriptionstring | null
max 160 chars
Response 201
datarequiredobject
Same fields as SwitchIpAcl, shown earlier on this page.
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Remove an inbound IP ACL entry
DELETE/
- 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
idrequiredpath · string
Response 200
datarequiredobject
deletedrequiredboolean · data.deleted
One oftrue
Response 202
datarequiredobject
approvalRequiredboolean · data.approvalRequired
One oftrueapprovalRequestIdstring (uuid) | null · data.approvalRequestId
permissionstring · data.permission
expiresAtstring (date-time) · data.expiresAt
messagestring · data.message
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 402
SWITCH_SUBSCRIPTION_REQUIRED: the account has no active Switch plan or trial. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.