Switch API reference
Switch: customer trunks
Customer trunks: addressing, credentials, limits, readiness and approvals.
48 operationsBase URL https://packetexchange.io/api/v1Postman collection
BrowseSwitch: customer trunks
List the trunk authentication methods available to you
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
For each method: what the customer must send and what the switch checks. Methods the platform cannot honour for you are omitted.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
moderequireddata[].mode | string | -One of ip, credentials, ip_and_credentials, registration, certificate |
titlerequireddata[].title | string | - |
summaryrequireddata[].summary | string | - |
sendsrequireddata[].sends | string[] | What the customer must send |
checksrequireddata[].checks | string[] | What the switch checks on every call |
requiresrequireddata[].requires | string[] | -One of addresses, credentials |
needsPlatformSupportdata[].needsPlatformSupport | boolean | - |
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.
Update a Switch customer trunk
PATCH/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Setting status to disabled stops new calls but keeps the trunk configurable. A sipPassword sent here is echoed back once. Archived trunks are frozen: restore first. Send X-If-Unchanged-Since: <updatedAt you loaded> to have the save refused with 409 STALE_WRITE if someone changed the record since.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
label | string | -max 120 chars |
authMode | string | What the customer must present; the service refuses a mode the trunk is not configured forOne of ip, credentials, ip_and_credentials, registration, certificate |
sipUsername | string | null | -max 64 chars |
sipPassword | string | null | -max 64 chars |
maxConcurrentCalls | integer | null | -0 to 100000 |
maxCps | integer | null | -0 to 10000 |
markupPct | number | null | -0 to 10000 |
billingIncrement | string | null | -max 10 chars |
blockedPrefixes | string | null | -max 8000 chars |
status | string | -One of active, disabled |
mediaMode | string | -One of proxy, direct |
techPrefix | string | null | -max 24 chars |
cliRewrite | object | null | - |
modecliRewrite.mode | string | -One of pattern |
valuecliRewrite.value | string | -max 24 chars |
stripcliRewrite.strip | integer | -0 to 15 |
addcliRewrite.add | string | -max 12 chars |
matchcliRewrite.match | string | -max 200 chars |
replacecliRewrite.replace | string | -max 200 chars |
allowedPrefixes | string[] | null | - |
allowedCountries | string[] | null | - |
blockedCountries | string[] | null | - |
maxCallDurationSeconds | integer | null | -1 to 21600 |
requireCli | boolean | - |
allowedClis | string[] | null | - |
marginProtectionMode | string | -One of off, monitor, enforce |
minMarginPct | number | null | -0 to 99.999 |
minMarginAbs | number | null | -0 to 1000 |
maxLossPerMinute | number | null | -0 to 1000 |
dailyLossLimit | number | null | Warns only; never blocks0 to 10000000 |
dailyLossLimitPct | number | null | -0 to 100000 |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
subAccountIdrequireddata.subAccountId | string (uuid) | The customer this trunk belongs to |
labelrequireddata.label | string | - |
statusrequireddata.status | string | -One of active, disabled, archived |
authModedata.authMode | string | -One of ip, credentials, ip_and_credentials, registration, certificate |
sipUsernamerequireddata.sipUsername | string | null | - |
sipPasswordSetrequireddata.sipPasswordSet | boolean | - |
maxConcurrentCallsrequireddata.maxConcurrentCalls | integer | null | Null inherits the customer ceiling |
maxCpsrequireddata.maxCps | integer | null | - |
markupPctrequireddata.markupPct | string | null | - |
billingIncrementrequireddata.billingIncrement | string | null | - |
techPrefixrequireddata.techPrefix | string | null | - |
mediaModedata.mediaMode | string | -One of proxy, direct |
cliRewriterequireddata.cliRewrite | object | null | - |
allowedPrefixesrequireddata.allowedPrefixes | string[] | null | - |
allowedCountriesrequireddata.allowedCountries | string[] | null | - |
blockedCountriesrequireddata.blockedCountries | string[] | null | - |
createdAtrequireddata.createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
updatedAtrequireddata.updatedAt | string (date-time) | ISO-8601 timestamp (UTC) |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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 an unused Switch customer trunk
DELETE/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Refused, naming the dependency, once the trunk has carried traffic, holds rates or routing, or is the customer's last trunk. Archive it instead. Check removability first.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
deletedrequireddata.deleted | boolean | -One of true |
labelrequireddata.label | string | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Show the configuration actually in force on a trunk
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Every setting with the value a call would meet and the level it was inherited from, resolved by the same code as the call path. Read-only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
trunkrequireddata.trunk | object | - |
idrequireddata.trunk.id | string (uuid) | - |
labelrequireddata.trunk.label | string | - |
statusrequireddata.trunk.status | string | - |
customerIdrequireddata.trunk.customerId | string (uuid) | - |
customerLabelrequireddata.trunk.customerLabel | string | - |
sectionsrequireddata.sections | object[] | Each setting with the value in force and the level it came from |
capacityrequireddata.capacity | object | - |
limitsrequireddata.capacity.limits | object[] | - |
refusalsdata.capacity.refusals | any | - |
checkOrderrequireddata.capacity.checkOrder | string[] | - |
noterequireddata.capacity.note | string | - |
readOnlyrequireddata.readOnly | boolean | -One of true |
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.
Archive a Switch customer trunk
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Takes the trunk out of service and out of operational lists, and freezes it. Nothing is destroyed; restore brings it back disabled.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
reason | string | null | -max 500 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as SwitchCustomerTrunk, shown earlier on this page. |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Restore an archived Switch customer trunk
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Comes back disabled, so no traffic starts until you enable it.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as SwitchCustomerTrunk, shown earlier on this page. |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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 what disabling, enabling or archiving a trunk would do
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Live channels, recent traffic, whether it is the customer's last enabled trunk, and what survives.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
action | query | string | Default disableOne of disable, enable, archive, restore |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
actionrequireddata.action | string | -One of disable, enable, archive, restore |
trunkrequireddata.trunk | object | - |
idrequireddata.trunk.id | string (uuid) | - |
labelrequireddata.trunk.label | string | - |
statusrequireddata.trunk.status | string | - |
customerrequireddata.customer | object | - |
idrequireddata.customer.id | string (uuid) | - |
labelrequireddata.customer.label | string | - |
statusrequireddata.customer.status | string | - |
liveChannelsrequireddata.liveChannels | integer | - |
last24hrequireddata.last24h | object | - |
siblingsEnabledrequireddata.siblingsEnabled | integer | - |
stopsCustomerrequireddata.stopsCustomer | boolean | True when this is the customer's last enabled trunk |
reversiblerequireddata.reversible | boolean | - |
consequencesrequireddata.consequences | string[] | - |
preservedrequireddata.preserved | string[] | - |
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.
Check whether a Switch customer trunk can be deleted
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
trunkrequireddata.trunk | object | - |
idrequireddata.trunk.id | string (uuid) | - |
labelrequireddata.trunk.label | string | - |
statusrequireddata.trunk.status | string | - |
deletablerequireddata.deletable | boolean | - |
blockersrequireddata.blockers | object[] | - |
kindrequireddata.blockers[].kind | string | -One of traffic, refusals, billing, rates, routing, audit, last_trunk |
countrequireddata.blockers[].count | integer | - |
detailrequireddata.blockers[].detail | string | - |
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.
Clone a Switch customer trunk
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Copies the trunk's settings and sell rates to a new trunk on the same customer.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
labelrequired | string | -max 120 chars |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
subAccountIdrequireddata.subAccountId | string (uuid) | The customer this trunk belongs to |
labelrequireddata.label | string | - |
statusrequireddata.status | string | -One of active, disabled, archived |
authModedata.authMode | string | -One of ip, credentials, ip_and_credentials, registration, certificate |
sipUsernamerequireddata.sipUsername | string | null | - |
sipPasswordSetrequireddata.sipPasswordSet | boolean | - |
maxConcurrentCallsrequireddata.maxConcurrentCalls | integer | null | Null inherits the customer ceiling |
maxCpsrequireddata.maxCps | integer | null | - |
markupPctrequireddata.markupPct | string | null | - |
billingIncrementrequireddata.billingIncrement | string | null | - |
techPrefixrequireddata.techPrefix | string | null | - |
mediaModedata.mediaMode | string | -One of proxy, direct |
cliRewriterequireddata.cliRewrite | object | null | - |
allowedPrefixesrequireddata.allowedPrefixes | string[] | null | - |
allowedCountriesrequireddata.allowedCountries | string[] | null | - |
blockedCountriesrequireddata.blockedCountries | string[] | null | - |
createdAtrequireddata.createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
updatedAtrequireddata.updatedAt | string (date-time) | ISO-8601 timestamp (UTC) |
copiedRatesrequireddata.copiedRates | integer | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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 a trunk's allowed source addresses
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
cidrrequireddata[].cidr | string | - |
descriptionrequireddata[].description | string | null | - |
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.
Allow a source address on a trunk
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Stored in canonical form. Refused when it cannot be saved (see addresses/preview); overlaps with other entries are returned in conflicts. Applies to new calls only.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
cidrrequired | string | An IP address or CIDR blockmax 64 chars |
description | string | -max 160 chars |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
cidrrequireddata.cidr | string | - |
descriptionrequireddata.description | string | null | - |
conflictsrequireddata.conflicts | object[] | - |
kindrequireddata.conflicts[].kind | string | - |
otherIdrequireddata.conflicts[].otherId | string (uuid) | - |
otherCidrrequireddata.conflicts[].otherCidr | string | - |
otherTrunkIdrequireddata.conflicts[].otherTrunkId | string (uuid) | null | - |
otherTrunkLabelrequireddata.conflicts[].otherTrunkLabel | string | null | - |
otherCustomerIdrequireddata.conflicts[].otherCustomerId | string (uuid) | null | - |
otherCustomerLabelrequireddata.conflicts[].otherCustomerLabel | string | null | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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 a trunk's addresses with overlaps and customer-level entries
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
The richer form of /ips: each entry with its canonical form and every overlapping entry on your switch, including addresses added on the customer.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
trunkIdrequireddata.trunkId | string (uuid) | - |
trunkLabelrequireddata.trunkLabel | string | - |
customerIdrequireddata.customerId | string (uuid) | - |
entriesrequireddata.entries | object[] | - |
idrequireddata.entries[].id | string (uuid) | - |
cidrrequireddata.entries[].cidr | string | - |
canonicalrequireddata.entries[].canonical | string | null | - |
descriptionrequireddata.entries[].description | string | null | - |
ambiguousdata.entries[].ambiguous | boolean | - |
customerLevelrequireddata.customerLevel | object[] | Addresses added on the customer, which apply to every trunk |
ambiguousCountrequireddata.ambiguousCount | integer | - |
activationrequireddata.activation | object | - |
appliesTorequireddata.activation.appliesTo | string | -One of new_requests |
affectsCallsInProgressrequireddata.activation.affectsCallsInProgress | boolean | -One of false |
noterequireddata.activation.note | string | - |
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.
Preview an address before allowing it on a trunk
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Read-only: the canonical form, size, whether it would be refused, and what it overlaps.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
cidrrequired | string | -max 64 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
canonicalrequireddata.canonical | string | - |
prefixBitsrequireddata.prefixBits | integer | - |
addressCountrequireddata.addressCount | number | - |
blockedrequireddata.blocked | object | null | Set when the address cannot be saved at all |
reasonrequireddata.blocked.reason | string | - |
conflictsrequireddata.conflicts | object[] | - |
kindrequireddata.conflicts[].kind | string | - |
otherIdrequireddata.conflicts[].otherId | string (uuid) | - |
otherCidrrequireddata.conflicts[].otherCidr | string | - |
otherTrunkIdrequireddata.conflicts[].otherTrunkId | string (uuid) | null | - |
otherTrunkLabelrequireddata.conflicts[].otherTrunkLabel | string | null | - |
otherCustomerIdrequireddata.conflicts[].otherCustomerId | string (uuid) | null | - |
otherCustomerLabelrequireddata.conflicts[].otherCustomerLabel | string | null | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Test a caller-ID rewrite rule against a sample number
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Dry run; saves nothing and needs no trunk.
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)
| Field | Type | Description |
|---|---|---|
rule | any | A cliRewrite rule as used on a trunk |
samplerequired | string | -max 32 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
okrequireddata.ok | boolean | - |
resultrequireddata.result | string | null | - |
errordata.error | string | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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 allowed source address from a trunk
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
aclIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
cidrrequireddata.cidr | string | - |
descriptionrequireddata.description | string | null | - |
deletedrequireddata.deleted | boolean | -One of true |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Set routing on a Switch customer trunk
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Route group, failover group, dialplan, strategy or a direct supplier for this trunk. Send X-If-Unchanged-Since: <updatedAt you loaded> to have the save refused with 409 STALE_WRITE if someone changed the record since.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
routePlanId | string (uuid) | null | - |
failoverRoutePlanId | string (uuid) | null | - |
directRouteId | string (uuid) | null | - |
directVendorTrunkId | string (uuid) | null | - |
dialplanId | string (uuid) | null | - |
strategyOverride | string | null | -max 24 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
subAccountIdrequireddata.subAccountId | string (uuid) | - |
customerTrunkIddata.customerTrunkId | string (uuid) | null | - |
dialplanIdrequireddata.dialplanId | string (uuid) | null | - |
routePlanIdrequireddata.routePlanId | string (uuid) | null | - |
failoverRoutePlanIdrequireddata.failoverRoutePlanId | string (uuid) | null | - |
strategyOverriderequireddata.strategyOverride | string | null | - |
directRouteIdrequireddata.directRouteId | string (uuid) | null | - |
directVendorTrunkIdrequireddata.directVendorTrunkId | string (uuid) | null | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Show the route wired up for a trunk
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Customer, trunk, fixed route or route group, then supplier trunks, with ids. For what a specific number would do, use /switch/routing/preview.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
customerrequireddata.customer | object | null | - |
idrequireddata.customer.id | string (uuid) | - |
labelrequireddata.customer.label | string | - |
customerTrunkrequireddata.customerTrunk | object | - |
idrequireddata.customerTrunk.id | string (uuid) | - |
labelrequireddata.customerTrunk.label | string | - |
statusrequireddata.customerTrunk.status | string | - |
techPrefixrequireddata.customerTrunk.techPrefix | string | null | - |
kindrequireddata.kind | string | Fixed route, route group, or nothing wiredOne of fixed, group, none |
fixedrequireddata.fixed | object | null | - |
grouprequireddata.group | object | null | - |
failoverGrouprequireddata.failoverGroup | object | null | - |
dialplanrequireddata.dialplan | object | null | - |
idrequireddata.dialplan.id | string (uuid) | - |
namerequireddata.dialplan.name | string | - |
strategyOverriderequireddata.strategyOverride | string | null | - |
unroutedrequireddata.unrouted | boolean | - |
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.
Reveal a Switch customer trunk's SIP credentials
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Returns the current username and password without changing them. Every reveal is recorded in the audit log.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
sipUsernamerequireddata.sipUsername | string | null | - |
sipPasswordrequireddata.sipPassword | string | null | - |
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.
Get a trunk's credential history and last successful authentication
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Everything about the credential except its value: username, storage, last change and reveal, and the last call identified with it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
trunkIdrequireddata.trunkId | string (uuid) | - |
trunkLabelrequireddata.trunkLabel | string | - |
customerIdrequireddata.customerId | string (uuid) | - |
customerLabelrequireddata.customerLabel | string | null | - |
usernamerequireddata.username | string | null | - |
passwordSetrequireddata.passwordSet | boolean | - |
storagerequireddata.storage | object | - |
sealedrequireddata.storage.sealed | boolean | - |
noterequireddata.storage.note | string | - |
createdAtrequireddata.createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
lastChangedata.lastChange | any | - |
lastRevealdata.lastReveal | any | - |
historyAvailablerequireddata.historyAvailable | boolean | - |
lastSuccessfulAuthrequireddata.lastSuccessfulAuth | object | null | - |
atrequireddata.lastSuccessfulAuth.at | string | - |
sourceIprequireddata.lastSuccessfulAuth.sourceIp | string | null | - |
sourceIsRegisteredrequireddata.lastSuccessfulAuth.sourceIsRegistered | boolean | - |
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.
Record that a trunk credential was copied
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Writes an audit entry only. Call it when your interface copies a credential to the clipboard.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
field | string | -default "sipPassword"One of sipPassword, sipUsername |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
Response 204
Recorded.
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
Replace a Switch customer trunk's SIP password
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Generate one, or set one by hand with mode: "manual". The new password is returned ONCE and the old one stops working immediately (no overlap window).
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
mode | string | -default "generate"One of generate, manual |
password | string | Required when mode is manualmax 128 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
trunkIdrequireddata.trunkId | string (uuid) | - |
usernamerequireddata.username | string | null | - |
passwordrequireddata.password | string | The new password in plain text. Returned ONCE, here. |
moderequireddata.mode | string | -One of generate, manual |
changedAtrequireddata.changedAt | string (date-time) | ISO-8601 timestamp (UTC) |
overlapWindowrequireddata.overlapWindow | enum | null | There is no grace period: the old password stops working immediatelyOne of null |
noterequireddata.note | string | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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 trunk configuration changes awaiting or after review
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkId | query | string (uuid) | - |
status | query | string | Comma-separated statuses, e.g. pending,approved |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
vendorTrunkIdrequireddata[].vendorTrunkId | string (uuid) | - |
trunkLabelrequireddata[].trunkLabel | string | null | - |
statusrequireddata[].status | string | - |
fieldsrequireddata[].fields | string[] | - |
changesrequireddata[].changes | object[] | Secret fields show "(secret)", never their value |
fieldrequireddata[].changes[].field | string | - |
fromdata[].changes[].from | any | - |
todata[].changes[].to | any | - |
patchrequireddata[].patch | object | - |
beforeValuesrequireddata[].beforeValues | object | - |
noterequireddata[].note | string | null | - |
requestedByrequireddata[].requestedBy | string (uuid) | - |
requestedByEmailrequireddata[].requestedByEmail | string | null | - |
requestedAtrequireddata[].requestedAt | string (date-time) | ISO-8601 timestamp (UTC) |
reviewedByrequireddata[].reviewedBy | string (uuid) | null | - |
reviewedAtrequireddata[].reviewedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
reviewNoterequireddata[].reviewNote | string | null | - |
appliedAtrequireddata[].appliedAt | string (date-time) | null | 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.
Approve and apply a trunk configuration change
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
applied is the trunk after the change, redacted like every trunk read (sipAuthPasswordSet / smppPasswordSet instead of the secrets). driftedSinceRequest lists fields that changed on the trunk after the request was made.
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
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
note | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
appliedrequireddata.applied | object | - |
driftedSinceRequestrequireddata.driftedSinceRequest | string[] | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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.
Reject a trunk configuration change
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
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
note | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
rejectedrequireddata.rejected | boolean | -One of true |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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.
Withdraw your own pending trunk change
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
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
withdrawnrequireddata.withdrawn | boolean | -One of true |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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.
Get whether supplier trunk changes need approval
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
requireTrunkApprovalrequireddata.requireTrunkApproval | boolean | - |
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.
Turn supplier trunk change approval on or off
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)
| Field | Type | Description |
|---|---|---|
requireTrunkApprovalrequired | boolean | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
requireTrunkApprovalrequireddata.requireTrunkApproval | boolean | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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 whether trunk readiness blocks first activation
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
requireTrunkReadinessrequireddata.requireTrunkReadiness | boolean | - |
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.
Turn the trunk readiness gate on or off
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
When on, it can refuse only the first-ever activation of a new trunk; existing trunks are grandfathered and bundle trunks are exempt.
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)
| Field | Type | Description |
|---|---|---|
requireTrunkReadinessrequired | boolean | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
requireTrunkReadinessrequireddata.requireTrunkReadiness | boolean | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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 the sell deck in force on a trunk
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
The resolved deck, plus the customer and system defaults it did not pick, and a sentence saying which won.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
deckrequireddata.deck | object | null | - |
idrequireddata.deck.id | string (uuid) | - |
namerequireddata.deck.name | string | - |
versionrequireddata.deck.version | integer | - |
statusrequireddata.deck.status | string | - |
currencyrequireddata.deck.currency | string | - |
isSystemDefaultrequireddata.deck.isSystemDefault | boolean | - |
defaultRatePerUnitrequireddata.deck.defaultRatePerUnit | number | null | USD per minute for destinations the deck does not list; null = refuse them |
chargingrequireddata.deck.charging | object | - |
moderequireddata.mode | string | - |
choicerequireddata.choice | string | Which rule won: the trunk, the customer default or the system default |
bypassesCustomerDefaultrequireddata.bypassesCustomerDefault | boolean | - |
customerDefaultrequireddata.customerDefault | object | null | Same fields as SwitchCustomerSellDeckRef, shown earlier on this page. |
systemDefaultrequireddata.systemDefault | object | null | Same fields as SwitchCustomerSellDeckRef, shown earlier on this page. |
liveRowCountrequireddata.liveRowCount | integer | - |
explanationrequireddata.explanation | string | - |
problemrequireddata.problem | string | null | - |
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.
Assign a sell deck to a trunk
PUT/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Without confirm: true nothing changes and the response shows what would be in force. With it, the trunk reprices from the next call.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
moderequired | string | How a trunk picks its sell deckOne of customer_default, system_default, deck, none |
deckId | string (uuid) | null | - |
confirm | boolean | - |
reason | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
changeddata.changed | boolean | -One of true |
beforedata.before | object | Same fields as SwitchTrunkEffectiveSellDeck, shown earlier on this page. |
wouldBedata.wouldBe | object | - |
moderequireddata.wouldBe.mode | string | - |
deckrequireddata.wouldBe.deck | object | null | Same fields as SwitchCustomerSellDeckRef, shown earlier on this page. |
ratesdata.wouldBe.rates | any | - |
bypassesCustomerDefaultrequireddata.wouldBe.bypassesCustomerDefault | boolean | - |
warningrequireddata.wouldBe.warning | string | null | - |
defaultRaterequireddata.wouldBe.defaultRate | number | null | - |
unlistedDestinationsrequireddata.wouldBe.unlistedDestinations | string | - |
afterdata.after | object | Same fields as SwitchTrunkEffectiveSellDeck, shown earlier on this page. |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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 a sell-deck assignment for a trunk
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
What would be in force under a mode, computed by the same resolver. Writes nothing.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
mode | query | string | Default customer_defaultOne of customer_default, system_default, deck, none |
deckId | query | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
moderequireddata.mode | string | - |
deckrequireddata.deck | object | null | Same fields as SwitchCustomerSellDeckRef, shown earlier on this page. |
ratesdata.rates | any | - |
bypassesCustomerDefaultrequireddata.bypassesCustomerDefault | boolean | - |
warningrequireddata.warning | string | null | - |
defaultRaterequireddata.defaultRate | number | null | - |
unlistedDestinationsrequireddata.unlistedDestinations | string | - |
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.
List a trunk's sell rates with buy cost and margin
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
search | query | string | Prefix or destination text |
limit | query | integer | - |
offset | query | integer | - |
view | query | string | Default currentOne of current, scheduled, discontinued, expiring, all |
origin | query | string | -One of any, origin_only, destination_only |
increment | query | string | -One of any, custom, inherited |
cost | query | string | -One of any, missing |
margin | query | string | -One of any, thin, negative |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
rowsrequireddata.rows | object[] | - |
idrequireddata.rows[].id | string (uuid) | - |
subAccountIdrequireddata.rows[].subAccountId | string (uuid) | - |
customerTrunkIdrequireddata.rows[].customerTrunkId | string (uuid) | null | - |
prefixrequireddata.rows[].prefix | string | - |
originPrefixrequireddata.rows[].originPrefix | string | "" = any origin |
ratePerUnitrequireddata.rows[].ratePerUnit | money | Sell price per minute, 6-decimal USD string USD as a decimal string with exactly 6 places, e.g. "0.012500". |
billingIncrementrequireddata.rows[].billingIncrement | string | null | - |
statusrequireddata.rows[].status | string | active, pending (scheduled) or discontinued |
effectiveFromrequireddata.rows[].effectiveFrom | string (date-time) | ISO-8601 timestamp (UTC) |
endDaterequireddata.rows[].endDate | string (date-time) | null | ISO-8601 timestamp (UTC) |
buyCostrequireddata.rows[].buyCost | number | null | Best eligible buy cost per minute (USD number); null = no supplier prices it |
marginPctrequireddata.rows[].marginPct | number | null | - |
thinrequireddata.rows[].thin | boolean | - |
negativerequireddata.rows[].negative | boolean | - |
costSupplierrequireddata.rows[].costSupplier | string | null | - |
costSourcerequireddata.rows[].costSource | string | - |
costMatchedPrefixrequireddata.rows[].costMatchedPrefix | string | null | - |
costNoterequireddata.rows[].costNote | string | null | - |
totalrequireddata.total | integer | - |
totalIsPageScopedrequireddata.totalIsPageScoped | boolean | True when a cost or margin filter narrowed the page, so total counts this page only |
limitrequireddata.limit | integer | - |
offsetrequireddata.offset | integer | - |
viewrequireddata.view | string | - |
summaryrequireddata.summary | object | - |
prefixesrequireddata.summary.prefixes | integer | - |
blendedMarginPctrequireddata.summary.blendedMarginPct | number | null | - |
thinCountrequireddata.summary.thinCount | integer | - |
negativeCountrequireddata.summary.negativeCount | integer | - |
defaultRateCostCountrequireddata.summary.defaultRateCostCount | integer | - |
unpricedCountrequireddata.summary.unpricedCount | integer | - |
basisdata.basis | any | - |
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.
Add or replace one sell rate on a trunk
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
prefixrequired | string | -max 24 chars |
raterequired | number | USD per minutemin 0 |
origin | string | -max 24 chars |
billingIncrement | string | -max 10 chars |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
subAccountIdrequireddata.subAccountId | string (uuid) | - |
customerTrunkIdrequireddata.customerTrunkId | string (uuid) | null | - |
prefixrequireddata.prefix | string | - |
originPrefixrequireddata.originPrefix | string | "" = any origin |
ratePerUnitrequireddata.ratePerUnit | money | Sell price per minute, 6-decimal USD string USD as a decimal string with exactly 6 places, e.g. "0.012500". |
billingIncrementrequireddata.billingIncrement | string | null | - |
statusrequireddata.status | string | active, pending (scheduled) or discontinued |
effectiveFromrequireddata.effectiveFrom | string (date-time) | ISO-8601 timestamp (UTC) |
endDaterequireddata.endDate | string (date-time) | null | ISO-8601 timestamp (UTC) |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Count a trunk's sell rates by view
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
currentrequireddata.current | integer | - |
scheduledrequireddata.scheduled | integer | - |
expiringrequireddata.expiring | integer | - |
discontinuedrequireddata.discontinued | integer | - |
allrequireddata.all | integer | - |
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.
List upcoming sell-rate starts and ends on a trunk
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
subAccountIdrequireddata[].subAccountId | string (uuid) | - |
customerTrunkIdrequireddata[].customerTrunkId | string (uuid) | null | - |
prefixrequireddata[].prefix | string | - |
originPrefixrequireddata[].originPrefix | string | "" = any origin |
ratePerUnitrequireddata[].ratePerUnit | money | Sell price per minute, 6-decimal USD string USD as a decimal string with exactly 6 places, e.g. "0.012500". |
billingIncrementrequireddata[].billingIncrement | string | null | - |
statusrequireddata[].status | string | active, pending (scheduled) or discontinued |
effectiveFromrequireddata[].effectiveFrom | string (date-time) | ISO-8601 timestamp (UTC) |
endDaterequireddata[].endDate | string (date-time) | null | ISO-8601 timestamp (UTC) |
kindrequireddata[].kind | string | -One of starts, ends |
atrequireddata[].at | string (date-time) | null | 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. - 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.
List sell-rate discontinuation events on a trunk
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
revisionIdrequireddata[].revisionId | string (uuid) | null | - |
discontinuedAtrequireddata[].discontinuedAt | string (date-time) | ISO-8601 timestamp (UTC) |
rowsrequireddata[].rows | integer | - |
labelrequireddata[].label | string | - |
effectivedata[].effective | any | null | - |
timezonerequireddata[].timezone | string | null | - |
changeModerequireddata[].changeMode | string | null | - |
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.
Preview discontinuing a trunk's whole sell deck
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Omit the effective fields to act now. Send either effectiveFrom (an instant with an offset) or effectiveLocal plus timezone; a bare date is refused because midnight differs by country.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
effectiveFrom | string | An instant with offset, e.g. "2026-10-01T00:00:00Z". A bare date is refused.max 40 chars |
effectiveLocal | string | A wall-clock time, e.g. "2026-10-01T00:00"; requires timezonemax 30 chars |
timezone | string | null | IANA zone, e.g. Europe/London; always recordedmax 64 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
customerLabelrequireddata.customerLabel | string | - |
activeRatesrequireddata.activeRates | integer | - |
scheduledRatesrequireddata.scheduledRates | integer | - |
alreadyDiscontinuedrequireddata.alreadyDiscontinued | integer | - |
endDaterequireddata.endDate | string (date-time) | ISO-8601 timestamp (UTC) |
immediaterequireddata.immediate | boolean | - |
timezonerequireddata.timezone | string | null | - |
effectOnNewCallsrequireddata.effectOnNewCalls | string | - |
minutes30drequireddata.minutes30d | number | - |
calls30drequireddata.calls30d | integer | - |
revenue30drequireddata.revenue30d | number | US dollars as a JSON number (computed figure) |
impactTruncatedrequireddata.impactTruncated | boolean | - |
samplerequireddata.sample | object[] | - |
prefixrequireddata.sample[].prefix | string | - |
originPrefixrequireddata.sample[].originPrefix | string | - |
ratePerUnitrequireddata.sample[].ratePerUnit | money | USD as a decimal string with exactly 6 places, e.g. "0.012500". |
billingIncrementrequireddata.sample[].billingIncrement | string | null | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Discontinue a trunk's whole sell deck
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Nothing is deleted; priced calls keep their rate. Omit the effective fields to act now. Send either effectiveFrom (an instant with an offset) or effectiveLocal plus timezone; a bare date is refused because midnight differs by country.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
effectiveFrom | string | An instant with offset, e.g. "2026-10-01T00:00:00Z". A bare date is refused.max 40 chars |
effectiveLocal | string | A wall-clock time, e.g. "2026-10-01T00:00"; requires timezonemax 30 chars |
timezone | string | null | IANA zone, e.g. Europe/London; always recordedmax 64 chars |
includeScheduled | boolean | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
endDaterequireddata.endDate | string (date-time) | ISO-8601 timestamp (UTC) |
effectivedata.effective | any | The moment described in words and in the recorded zone |
revisionIddata.revisionId | string (uuid) | null | - |
discontinuedrequireddata.discontinued | integer | - |
deletedrequireddata.deleted | integer | Deprecated alias of discontinued; nothing is deleted |
scheduledLeftrequireddata.scheduledLeft | integer | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Discontinue one sell rate on a trunk
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Omit the effective fields to act now. Send either effectiveFrom (an instant with an offset) or effectiveLocal plus timezone; a bare date is refused because midnight differs by country.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
rateIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
effectiveFrom | string | An instant with offset, e.g. "2026-10-01T00:00:00Z". A bare date is refused.max 40 chars |
effectiveLocal | string | A wall-clock time, e.g. "2026-10-01T00:00"; requires timezonemax 30 chars |
timezone | string | null | IANA zone, e.g. Europe/London; always recordedmax 64 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
endDaterequireddata.endDate | string (date-time) | ISO-8601 timestamp (UTC) |
effectivedata.effective | any | The moment described in words and in the recorded zone |
revisionIddata.revisionId | string (uuid) | null | - |
discontinuedrequireddata.discontinued | boolean | -One of true |
deletedrequireddata.deleted | boolean | Deprecated alias; the rate is discontinued, not deletedOne of true |
immediaterequireddata.immediate | boolean | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Add or replace many sell rates on a trunk
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
rowsrequired | object[] | - |
prefixrequiredrows[].prefix | string | -max 24 chars |
raterequiredrows[].rate | number | -min 0 |
originrows[].origin | string | -max 24 chars |
billingIncrementrows[].billingIncrement | string | -max 10 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
appliedrequireddata.applied | integer | - |
revisionIdrequireddata.revisionId | string (uuid) | null | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Discontinue one sell rate on a trunk now
DELETE/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Kept for existing clients: the rate is discontinued immediately, not deleted.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
rateIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
endDaterequireddata.endDate | string (date-time) | ISO-8601 timestamp (UTC) |
effectivedata.effective | any | The moment described in words and in the recorded zone |
revisionIddata.revisionId | string (uuid) | null | - |
discontinuedrequireddata.discontinued | boolean | -One of true |
deletedrequireddata.deleted | boolean | Deprecated alias; the rate is discontinued, not deletedOne of true |
immediaterequireddata.immediate | boolean | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Discontinue every sell rate on a trunk now
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
endDaterequireddata.endDate | string (date-time) | ISO-8601 timestamp (UTC) |
effectivedata.effective | any | The moment described in words and in the recorded zone |
revisionIddata.revisionId | string (uuid) | null | - |
discontinuedrequireddata.discontinued | integer | - |
deletedrequireddata.deleted | integer | Deprecated alias of discontinued; nothing is deleted |
scheduledLeftrequireddata.scheduledLeft | integer | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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 scheduled (future-dated) sell rates on a trunk
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | Same fields as SwitchCustomerSellRate, 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.
Schedule a future sell-rate change on a trunk
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
The rate becomes active at the effective moment. Omit the effective fields to act now. Send either effectiveFrom (an instant with an offset) or effectiveLocal plus timezone; a bare date is refused because midnight differs by country.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
effectiveFrom | string | An instant with offset, e.g. "2026-10-01T00:00:00Z". A bare date is refused.max 40 chars |
effectiveLocal | string | A wall-clock time, e.g. "2026-10-01T00:00"; requires timezonemax 30 chars |
timezone | string | null | IANA zone, e.g. Europe/London; always recordedmax 64 chars |
prefixrequired | string | -max 24 chars |
raterequired | number | USD per minutemin 0 |
origin | string | -max 24 chars |
billingIncrement | string | -max 10 chars |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as SwitchCustomerSellRate, shown earlier on this page. |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Cancel a scheduled sell rate on a trunk
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
rateIdrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
cancelledrequireddata.cancelled | boolean | -One of true |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Reprice as a markup over buy cost from a trunk
POST/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Applies to the customer's deck; on a single-trunk customer that is this trunk's deck.
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
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
markupPctrequired | number | -min -100 |
prefixes | string[] | Only these prefixes; omit for the whole deck |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
updatedrequireddata.updated | integer | - |
skippedrequireddata.skipped | integer | - |
basisdata.basis | any | - |
revisionIdrequireddata.revisionId | string (uuid) | null | - |
Response 202
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
approvalRequireddata.approvalRequired | boolean | -One of true |
approvalRequestIddata.approvalRequestId | string (uuid) | null | - |
permissiondata.permission | string | - |
expiresAtdata.expiresAt | string (date-time) | - |
messagedata.message | string | - |
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
Export a trunk's sell rates as CSV
GET/
- Access
- API key. Scoped keys need
switch:manage. - Rate limit
- 100 requests per second (the default)
Scoped to this trunk's deck; takes the same filters as the list.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
trunkIdrequired | path | string (uuid) | - |
search | query | string | Prefix or destination text |
view | query | string | Default currentOne of current, scheduled, discontinued, expiring, all |
origin | query | string | -One of any, origin_only, destination_only |
increment | query | string | -One of any, custom, inherited |
cost | query | string | -One of any, missing |
margin | query | string | -One of any, thin, negative |
Response 200 (text/csv)
The trunk's filtered sell deck as a CSV attachment.
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.