API reference
Phone numbers
The DID Store: search, buy, route and release phone numbers; SMS and softphone lines on them.
52 operationsBase URL https://packetexchange.io/api/v1Postman collection
BrowsePhone numbers
Browse the number catalogue
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Number groups by country, city and type, with the price of each SKU. While the number store is switched off this answers 200 with data: { disabled: true, comingSoon: true, message }.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
countryId | query | string | From GET .../catalog/countries |
typeId | query | string | From GET .../catalog/types |
search | query | string | Text match over country, city, area prefix and type; digits also match the start of the full dialling prefix ("4420" finds London). Spans the whole catalogue once it is indexed, otherwise the fetched page |
page | query | integer | - |
sort | query | string | Order by the cheapest monthly price, setup price or location. Omitted: the catalogue orderOne of monthly_asc, monthly_desc, setup_asc, location_asc |
maxMonthly | query | number | Only groups whose cheapest monthly price is at most this, in USD |
Response 200
| Field | Type | Description |
|---|---|---|
groupsrequired | object[] | - |
groupIdrequiredgroups[].groupId | string | Pass to POST /dids/buy with a skuId |
countryrequiredgroups[].country | string | - |
countryIdrequiredgroups[].countryId | string | Catalogue country id (filter value), not an ISO code |
countryPrefixrequiredgroups[].countryPrefix | string | - |
cityrequiredgroups[].city | string | null | - |
areaPrefixrequiredgroups[].areaPrefix | string | null | - |
typeIdrequiredgroups[].typeId | string | null | - |
typeNamerequiredgroups[].typeName | string | null | Local, National, Mobile, Toll-free... |
skusrequiredgroups[].skus | object[] | - |
skuIdrequiredgroups[].skus[].skuId | string | Pass to POST /dids/buy |
channelsrequiredgroups[].skus[].channels | integer | Concurrent call channels included |
setupPricerequiredgroups[].skus[].setupPrice | number | One-off price in USD (display number, not a money string) |
monthlyPricerequiredgroups[].skus[].monthlyPrice | number | Monthly price in USD (display number, not a money string) |
totalrequired | integer | null | - |
pagerequired | 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. - 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.
List countries with numbers for sale
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
While the number store is switched off this answers 200 with data: { disabled: true, comingSoon: true, message }.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
countryIdrequireddata[].countryId | string | - |
countryrequireddata[].country | string | - |
countryPrefixrequireddata[].countryPrefix | 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. - 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.
List number types for sale
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
While the number store is switched off this answers 200 with data: { disabled: true, comingSoon: true, message }.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string | - |
namerequireddata[].name | 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. - 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.
Buy a phone number
POST/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
- Safe retries
- Send
X-Idempotency-Key; a replay within 24 hours returns the first response. - Moves money
- Buys a phone number, charged to your balance.
Charges the setup price plus the first month to your balance (or the named sub-account's) and orders the number. It starts pending; number is null until provisioning completes. Requires a verified identity where KYC is enforced.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string | Any unique string (a UUID is ideal). Replays within 24 hours return the first response instead of acting twice. |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
skuIdrequired | string | -max 64 chars |
groupIdrequired | string | -max 64 chars |
countryId | string | -max 64 chars |
country | string | -max 120 chars |
city | string | null | -max 120 chars |
areaPrefix | string | null | -max 16 chars |
didType | string | null | -max 40 chars |
subAccountId | string (uuid) | Buy the number for one of your sub-accounts: its balance pays and the number is theirs |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
numberrequireddata.number | string | null | null while the number is still being provisioned |
countryrequireddata.country | string | null | - |
countryCoderequireddata.countryCode | string | null | ISO-3166-1 alpha-2 country codemax 2 chars |
cityrequireddata.city | string | null | - |
areaPrefixrequireddata.areaPrefix | string | null | - |
didTyperequireddata.didType | string | null | - |
channelsIncludedrequireddata.channelsIncluded | integer | - |
statusrequireddata.status | string | suspended = a monthly renewal failed; the number is held for graceDays before releaseOne of pending, active, suspended, released, failed |
pointModerequireddata.pointMode | string | -One of unrouted, sip, forward |
pointsTorequireddata.pointsTo | string | null | Primary destination: host[:port] for sip, E.164 for forward |
pointsToBackuprequireddata.pointsToBackup | string | null | - |
autoRenewrequireddata.autoRenew | boolean | - |
setupPricerequireddata.setupPrice | money | USD as a decimal string with exactly 6 places, e.g. "0.012500". |
monthlyPricerequireddata.monthlyPrice | money | USD as a decimal string with exactly 6 places, e.g. "0.012500". |
orderedAtrequireddata.orderedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
activatedAtrequireddata.activatedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
nextRenewalAtrequireddata.nextRenewalAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
suspendedAtrequireddata.suspendedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
releasedAtrequireddata.releasedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
endpointReachablerequireddata.endpointReachable | boolean | null | null = not checked yet |
endpointCauserequireddata.endpointCause | string | null | - |
endpointCheckedAtrequireddata.endpointCheckedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
aiAgentIdrequireddata.aiAgentId | string (uuid) | null | The AI voice agent answering inbound calls to this number, or null (PUT /dids/{id}/ai-agent) |
graceDaysrequireddata.graceDays | integer | Days an unpaid (suspended) number is held before release |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 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. - Also
KYC_REQUIRED
List your phone numbers
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
While the number store is switched off this answers 200 with data: { disabled: true, comingSoon: true, message }.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | Same fields as Did, 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. - 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.
Get your request to list numbers on the marketplace
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Your latest request, plus a profile prefill for the form. Works while the number store is off.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
ownedActiveDidsrequireddata.ownedActiveDids | integer | - |
requestrequireddata.request | object | null | Your latest request, or null |
idrequireddata.request.id | string (uuid) | - |
statusrequireddata.request.status | string | - |
selectedDidsrequireddata.request.selectedDids | object[] | null | - |
idrequireddata.request.selectedDids[].id | string (uuid) | - |
numberrequireddata.request.selectedDids[].number | string | null | - |
countryrequireddata.request.selectedDids[].country | string | null | - |
didTyperequireddata.request.selectedDids[].didType | string | null | - |
didCountrequireddata.request.didCount | integer | null | - |
submittedAtrequireddata.request.submittedAt | string (date-time) | ISO-8601 timestamp (UTC) |
reviewedAtrequireddata.request.reviewedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
prefillrequireddata.prefill | object | - |
companyNamerequireddata.prefill.companyName | string | - |
contactNamerequireddata.prefill.contactName | string | - |
contactEmailrequireddata.prefill.contactEmail | string | - |
contactPhonerequireddata.prefill.contactPhone | 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. - 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.
Ask to list your numbers on the marketplace
POST/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 5 requests per 10 minutes
Our team reviews the request and lists the numbers by hand. One open request at a time (409 CONFLICT otherwise). A validation failure here answers 400 with error.field naming the first bad field instead of a details array.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
companyName | string | null | -max 255 chars |
contactNamerequired | string | -max 255 chars |
contactEmail | string (email) | null | -max 255 chars |
contactPhone | string | null | -max 40 chars |
selectedDidIds | string (uuid)[] | Numbers from your portfolio to list |
didCount | integer | null | - |
countries | string | null | -max 255 chars |
numberTypes | string | null | -max 255 chars |
monthlyVolume | string | null | -max 255 chars |
targetPrice | string | null | -max 2000 chars |
notes | string | null | -max 4000 chars |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
statusrequireddata.status | string | - |
submittedAtrequireddata.submittedAt | string (date-time) | 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. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List your numbers usable as outbound caller IDs
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Active, provisioned numbers you own.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
clirequireddata[].cli | string | Digits only |
numberrequireddata[].number | string | - |
countryrequireddata[].country | string | null | - |
countryCoderequireddata[].countryCode | string | null | - |
cityrequireddata[].city | string | null | - |
didTyperequireddata[].didType | string | null | - |
channelsrequireddata[].channels | integer | - |
labelrequireddata[].label | 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. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Add your numbers to a dialer caller-ID set
POST/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Adds the chosen (or all) active numbers so they rotate as caller IDs on voice campaigns.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
setIdrequired | string (uuid) | One of your dialer caller-ID sets |
didIds | string (uuid)[] | string | Omit or "all" for every active number |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
insertedrequireddata.inserted | integer | - |
skippedrequireddata.skipped | integer | - |
rejectsrequireddata.rejects | object[] | - |
valuerequireddata.rejects[].value | string | - |
reasonrequireddata.rejects[].reason | 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. - 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 one of your phone numbers
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as Did, 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. - 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 number's call flow
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Ring strategy and ordered destinations. Hosted line passwords are never included.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
strategyrequireddata.strategy | string | -One of failover, simultaneous |
timeoutSecrequireddata.timeoutSec | integer | - |
endpointsrequireddata.endpoints | object[] | - |
idrequireddata.endpoints[].id | string (uuid) | - |
kindrequireddata.endpoints[].kind | string | -One of sip, forward, hosted |
targetrequireddata.endpoints[].target | string | null | - |
sipUsernamerequireddata.endpoints[].sipUsername | string | null | Hosted lines only; the password is never listed |
labelrequireddata.endpoints[].label | string | null | - |
priorityrequireddata.endpoints[].priority | integer | - |
enabledrequireddata.endpoints[].enabled | 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. - 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.
Replace a number's call flow
PUT/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Full replace: an endpoint sent with an id is kept or updated, one without an id is created, and any existing endpoint you leave out is deleted (hosted lines included - send them back by id to keep them).
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
strategy | string | -One of failover, simultaneous |
timeoutSec | integer | -5 to 600 |
endpointsrequired | object[] | - |
idendpoints[].id | string (uuid) | Send an existing id to keep or update it; omit to create |
kindrequiredendpoints[].kind | string | -One of sip, forward, hosted |
targetendpoints[].target | string | null | Required for sip and forward; ignored for hostedmax 255 chars |
labelendpoints[].label | string | null | -max 120 chars |
priorityendpoints[].priority | integer | -1 to 999 |
enabledendpoints[].enabled | boolean | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as DidCallFlow, 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. - 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.
Point a number at one destination (and an optional backup)
PATCH/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
The simple form of call routing: a primary and an optional failover backup. Hosted softphone lines and any extra destinations are left alone. Use PUT for the full call flow.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
moderequired | string | -One of sip, forward |
targetrequired | string | host[:port] for sip, E.164 for forwardmax 255 chars |
backupMode | string | null | Defaults to modeOne of sip, forward |
backupTarget | string | null | null or "" clears the backup; omit to keep itmax 255 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as Did, 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. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List a number's softphone lines
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Passwords are not included; use reveal.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
sipUsernamerequireddata[].sipUsername | string | - |
labelrequireddata[].label | string | null | - |
priorityrequireddata[].priority | integer | - |
enabledrequireddata[].enabled | boolean | - |
createdAtrequireddata[].createdAt | string (date-time) | 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. - 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.
Create a softphone line on a number
POST/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Returns the full login, password included, once.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
label | string | null | -max 120 chars |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
sipUsernamerequireddata.sipUsername | string | - |
sipPasswordrequireddata.sipPassword | string | Shown only here and on an explicit reveal |
serverrequireddata.server | string | - |
portrequireddata.port | 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. - 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.
Reveal a softphone line's login
POST/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
lineIdrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as DidSipLineLogin, 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. - 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.
Delete a softphone line
DELETE/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
lineIdrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string | - |
deletedrequireddata.deleted | 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. - 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.
Turn monthly auto-renew on or off
PATCH/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
With auto-renew off, the number is released at its next renewal date instead of being charged.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
enabledrequired | boolean | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as Did, 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. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List inbound calls to a number
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Recent inbound calls, newest first, with a calls and minutes total.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
limit | query | integer | Newest first; default 200 |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
callsrequireddata.calls | object[] | - |
idrequireddata.calls[].id | string (uuid) | - |
fromNumberrequireddata.calls[].fromNumber | string | null | - |
toNumberrequireddata.calls[].toNumber | string | null | - |
durationSecrequireddata.calls[].durationSec | integer | - |
statusrequireddata.calls[].status | string | null | - |
startedAtrequireddata.calls[].startedAt | string (date-time) | ISO-8601 timestamp (UTC) |
summaryrequireddata.summary | object | - |
callsrequireddata.summary.calls | integer | - |
minutesrequireddata.summary.minutes | number | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 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.
See which AI voice agent answers a number
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Returns the agent pointed at this number (or null), whether inbound AI answering is switched on for the platform, and the per-minute AI voice rate.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
didIdrequireddata.didId | string (uuid) | - |
agentIdrequireddata.agentId | string (uuid) | null | - |
agentNamerequireddata.agentName | string | null | - |
agentEnabledrequireddata.agentEnabled | boolean | null | A disabled agent does not answer; the number rings its call flow |
liverequireddata.live | boolean | Whether inbound AI answering is switched on for the platform right now |
ratePerMinrequireddata.ratePerMin | string | AI voice rate in USD per minute, billed per second |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 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.
Point a number at an AI voice agent
PUT/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Send { "agentId": "<your agent id>" } and inbound calls to the number are answered by that agent instead of ringing the number's call flow; send { "agentId": null } to go back to the call flow, which is kept untouched meanwhile. Billed per second at the AI voice per-minute rate to the number's owner, on top of the number's monthly price. Each call is capped at the agent's maximum call length and at what your balance covers; when the agent is disabled or your balance covers less than 30 seconds, the number rings its call flow as usual. The agent must belong to your account.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string (uuid) | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
agentIdrequired | string (uuid) | null | One of your AI agents (GET /ai-agents), or null to clear |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as DidAiAgent, 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. - 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 a number's voicemail, recording, IVR and schedule settings
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
A number with nothing configured rings its call flow as normal.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
voicemailrequireddata.voicemail | object | - |
enabledrequireddata.voicemail.enabled | boolean | - |
moderequireddata.voicemail.mode | string | -One of on_no_answer, always |
greetingAssetIdrequireddata.voicemail.greetingAssetId | string (uuid) | null | - |
hasGreetingrequireddata.voicemail.hasGreeting | boolean | - |
transcriberequireddata.voicemail.transcribe | boolean | - |
recordingrequireddata.recording | object | - |
enabledrequireddata.recording.enabled | boolean | - |
announcerequireddata.recording.announce | boolean | - |
retentionDaysrequireddata.recording.retentionDays | integer | - |
ivrrequireddata.ivr | object | - |
enabledrequireddata.ivr.enabled | boolean | - |
greetingAssetIdrequireddata.ivr.greetingAssetId | string (uuid) | null | - |
hasGreetingrequireddata.ivr.hasGreeting | boolean | - |
timeoutSecrequireddata.ivr.timeoutSec | integer | - |
maxRetriesrequireddata.ivr.maxRetries | integer | - |
optionsrequireddata.ivr.options | object[] | - |
idrequireddata.ivr.options[].id | string (uuid) | - |
digitrequireddata.ivr.options[].digit | string | - |
actionrequireddata.ivr.options[].action | string | -One of endpoint, voicemail, hangup |
endpointIdrequireddata.ivr.options[].endpointId | string (uuid) | null | - |
labelrequireddata.ivr.options[].label | string | null | - |
schedulerequireddata.schedule | object | - |
enabledrequireddata.schedule.enabled | boolean | - |
timezonerequireddata.schedule.timezone | string | - |
schedulerequireddata.schedule.schedule | object | null | - |
sunrequireddata.schedule.schedule.sun | object[] | - |
openrequireddata.schedule.schedule.sun[].open | string | HH:MMmax 5 chars |
closerequireddata.schedule.schedule.sun[].close | string | HH:MMmax 5 chars |
monrequireddata.schedule.schedule.mon | object[] | - |
openrequireddata.schedule.schedule.mon[].open | string | HH:MMmax 5 chars |
closerequireddata.schedule.schedule.mon[].close | string | HH:MMmax 5 chars |
tuerequireddata.schedule.schedule.tue | object[] | - |
openrequireddata.schedule.schedule.tue[].open | string | HH:MMmax 5 chars |
closerequireddata.schedule.schedule.tue[].close | string | HH:MMmax 5 chars |
wedrequireddata.schedule.schedule.wed | object[] | - |
openrequireddata.schedule.schedule.wed[].open | string | HH:MMmax 5 chars |
closerequireddata.schedule.schedule.wed[].close | string | HH:MMmax 5 chars |
thurequireddata.schedule.schedule.thu | object[] | - |
openrequireddata.schedule.schedule.thu[].open | string | HH:MMmax 5 chars |
closerequireddata.schedule.schedule.thu[].close | string | HH:MMmax 5 chars |
frirequireddata.schedule.schedule.fri | object[] | - |
openrequireddata.schedule.schedule.fri[].open | string | HH:MMmax 5 chars |
closerequireddata.schedule.schedule.fri[].close | string | HH:MMmax 5 chars |
satrequireddata.schedule.schedule.sat | object[] | - |
openrequireddata.schedule.schedule.sat[].open | string | HH:MMmax 5 chars |
closerequireddata.schedule.schedule.sat[].close | string | HH:MMmax 5 chars |
holidaysrequireddata.schedule.holidays | object[] | null | - |
daterequireddata.schedule.holidays[].date | string | YYYY-MM-DDmax 10 chars |
namedata.schedule.holidays[].name | string | -max 120 chars |
outsideHoursActionrequireddata.schedule.outsideHoursAction | string | -One of voicemail, endpoints, hangup |
closedEndpointsrequireddata.schedule.closedEndpoints | object[] | - |
idrequireddata.schedule.closedEndpoints[].id | string (uuid) | - |
kindrequireddata.schedule.closedEndpoints[].kind | string | -One of sip, forward |
targetrequireddata.schedule.closedEndpoints[].target | string | - |
labelrequireddata.schedule.closedEndpoints[].label | string | null | - |
priorityrequireddata.schedule.closedEndpoints[].priority | integer | - |
enabledrequireddata.schedule.closedEndpoints[].enabled | boolean | - |
openNowrequireddata.schedule.openNow | boolean | null | - |
assetsrequireddata.assets | object[] | - |
idrequireddata.assets[].id | string (uuid) | - |
kindrequireddata.assets[].kind | string | -One of voicemail_greeting, ivr_greeting |
namerequireddata.assets[].name | string | null | - |
mimerequireddata.assets[].mime | string | - |
createdAtrequireddata.assets[].createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
mediaLiverequireddata.mediaLive | boolean | Whether voicemail and recording capture is live on the platform |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 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.
Configure voicemail on a number
PUT/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
enabled | boolean | - |
mode | string | -One of on_no_answer, always |
greetingAssetId | string (uuid) | null | - |
transcribe | boolean | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as DidFeatures, 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. - 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.
Configure call recording on a number
PUT/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
enabled | boolean | - |
announce | boolean | - |
retentionDays | integer | -0 to 3650 |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as DidFeatures, 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. - 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.
Configure the IVR menu on a number
PUT/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
enabled | boolean | - |
greetingAssetId | string (uuid) | null | - |
timeoutSec | integer | -1 to 30 |
maxRetries | integer | -1 to 5 |
options | object[] | Replaces the whole menu when sent |
digitrequiredoptions[].digit | string | 0-9, * or #max 1 chars |
actionrequiredoptions[].action | string | -One of endpoint, voicemail, hangup |
endpointIdoptions[].endpointId | string (uuid) | null | - |
labeloptions[].label | string | null | -max 120 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as DidFeatures, 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. - 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.
Configure business-hours routing on a number
PUT/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
enabled | boolean | - |
timezone | string | IANA zone, e.g. Europe/Londonmax 64 chars |
schedule | object | - |
sunrequiredschedule.sun | object[] | - |
openrequiredschedule.sun[].open | string | HH:MMmax 5 chars |
closerequiredschedule.sun[].close | string | HH:MMmax 5 chars |
monrequiredschedule.mon | object[] | - |
openrequiredschedule.mon[].open | string | HH:MMmax 5 chars |
closerequiredschedule.mon[].close | string | HH:MMmax 5 chars |
tuerequiredschedule.tue | object[] | - |
openrequiredschedule.tue[].open | string | HH:MMmax 5 chars |
closerequiredschedule.tue[].close | string | HH:MMmax 5 chars |
wedrequiredschedule.wed | object[] | - |
openrequiredschedule.wed[].open | string | HH:MMmax 5 chars |
closerequiredschedule.wed[].close | string | HH:MMmax 5 chars |
thurequiredschedule.thu | object[] | - |
openrequiredschedule.thu[].open | string | HH:MMmax 5 chars |
closerequiredschedule.thu[].close | string | HH:MMmax 5 chars |
frirequiredschedule.fri | object[] | - |
openrequiredschedule.fri[].open | string | HH:MMmax 5 chars |
closerequiredschedule.fri[].close | string | HH:MMmax 5 chars |
satrequiredschedule.sat | object[] | - |
openrequiredschedule.sat[].open | string | HH:MMmax 5 chars |
closerequiredschedule.sat[].close | string | HH:MMmax 5 chars |
holidays | object[] | - |
daterequiredholidays[].date | string | YYYY-MM-DDmax 10 chars |
nameholidays[].name | string | -max 120 chars |
outsideHoursAction | string | -One of voicemail, endpoints, hangup |
closedEndpoints | object[] | - |
kindrequiredclosedEndpoints[].kind | string | -One of sip, forward |
targetrequiredclosedEndpoints[].target | string | -max 255 chars |
labelclosedEndpoints[].label | string | null | -max 120 chars |
priorityclosedEndpoints[].priority | integer | -1 to 999 |
enabledclosedEndpoints[].enabled | boolean | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as DidFeatures, 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. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List a number's uploaded greetings
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
kindrequireddata[].kind | string | -One of voicemail_greeting, ivr_greeting |
namerequireddata[].name | string | null | - |
mimerequireddata[].mime | string | - |
createdAtrequireddata[].createdAt | string (date-time) | 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. - 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.
Upload a voicemail or IVR greeting
POST/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
WAV or MP3, up to 8 MB. Send multipart with a file part (and kind as a field or query parameter), or JSON with contentBase64.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
kindrequired | string | -One of voicemail_greeting, ivr_greeting |
name | string | null | -max 120 chars |
contentBase64 | string | WAV or MP3, base64, up to 8 MB. Or send multipart with a file part |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as DidGreeting, 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. - 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.
Download a greeting's audio
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
assetIdrequired | path | string | - |
Response 200 (audio/*)
The greeting audio bytes (WAV or MP3; the Content-Type says which).
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Delete a greeting
DELETE/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
assetIdrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string | - |
deletedrequireddata.deleted | 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. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List call recordings on a number
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
limit | query | integer | Newest first; default 200 |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
kindrequireddata[].kind | string | -One of call, voicemail |
fromNumberrequireddata[].fromNumber | string | null | - |
toNumberrequireddata[].toNumber | string | null | - |
durationSecrequireddata[].durationSec | integer | - |
mimerequireddata[].mime | string | null | - |
byteSizerequireddata[].byteSize | integer | - |
heardrequireddata[].heard | boolean | - |
transcriptrequireddata[].transcript | string | null | - |
hasAudiorequireddata[].hasAudio | boolean | - |
expiresAtrequireddata[].expiresAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
createdAtrequireddata[].createdAt | string (date-time) | 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. - 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.
Download a call recording
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
recIdrequired | path | string | - |
Response 200 (audio/*)
The recording audio bytes (WAV or MP3; the Content-Type says which).
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Delete a call recording
DELETE/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
recIdrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string | - |
deletedrequireddata.deleted | 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. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List voicemails on a number
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
limit | query | integer | Newest first; default 200 |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | Same fields as DidRecording, 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. - 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.
Download a voicemail
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
recIdrequired | path | string | - |
Response 200 (audio/*)
The voicemail audio bytes (WAV or MP3; the Content-Type says which).
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 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.
Mark a voicemail heard or unheard
POST/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
recIdrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
heard | boolean | Default true |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
heardrequireddata.heard | 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. - 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.
Delete a voicemail
DELETE/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
recIdrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string | - |
deletedrequireddata.deleted | 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. - 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.
Release a phone number
POST/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Cancels the number and stops its monthly charge. Irreversible: the number goes back to the carrier.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as Did, 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. - 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 a number's SMS settings
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
While SMS on numbers is switched off this answers 200 with data: { disabled: true, comingSoon: true, message }.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
smsEnabledrequireddata.smsEnabled | boolean | - |
forwardWebhookUrlrequireddata.forwardWebhookUrl | string | null | https URL each inbound SMS is forwarded to |
notifyEmailrequireddata.notifyEmail | 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. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Update a number's SMS settings
PUT/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
smsEnabled | boolean | - |
forwardWebhookUrl | string | null | https only; null or "" clears itmax 2048 chars |
notifyEmail | string | null | null or "" clears itmax 255 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as DidSmsSettings, 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. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List SMS conversations on a number
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
One row per other party, newest activity first, with unread counts.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
peerrequireddata[].peer | string | - |
lastBodyrequireddata[].lastBody | string | - |
lastDirectionrequireddata[].lastDirection | string | -One of in, out |
lastStatusrequireddata[].lastStatus | string | -One of received, queued, sent, delivered, failed |
lastAtrequireddata[].lastAt | string (date-time) | ISO-8601 timestamp (UTC) |
unreadrequireddata[].unread | integer | - |
totalrequireddata[].total | 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. - 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 SMS messages on a number
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Newest first. Page older with before set to the previous nextBefore.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
peer | query | string | One conversation; omit for the number's whole log |
before | query | string | ISO timestamp: page older than this (use nextBefore) |
limit | query | integer | Default 50 |
Response 200
| Field | Type | Description |
|---|---|---|
messagesrequired | object[] | - |
idrequiredmessages[].id | string (uuid) | - |
directionrequiredmessages[].direction | string | -One of in, out |
fromrequiredmessages[].from | string | - |
torequiredmessages[].to | string | - |
peerrequiredmessages[].peer | string | The other party, digits only; the conversation key |
bodyrequiredmessages[].body | string | - |
segmentsrequiredmessages[].segments | integer | - |
statusrequiredmessages[].status | string | -One of received, queued, sent, delivered, failed |
errorrequiredmessages[].error | string | null | - |
providerMessageIdrequiredmessages[].providerMessageId | string | null | Upstream carrier message id |
readAtrequiredmessages[].readAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
createdAtrequiredmessages[].createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
nextBeforerequired | 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. - 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.
Send an SMS from one of your numbers
POST/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
- Safe retries
- Send
X-Idempotency-Key; a replay within 24 hours returns the first response. - Real traffic
- Sends a real SMS from your number, billed to your balance.
Charges per segment, then hands the message to the carrier. A hard send failure refunds the charge and marks the message failed.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
X-Idempotency-Key | header | string | Any unique string (a UUID is ideal). Replays within 24 hours return the first response instead of acting twice. |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
torequired | string | -max 32 chars |
bodyrequired | string | -max 1600 chars |
idempotencyKey | string | null | A retry with the same key returns the original messagemax 80 chars |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
directionrequireddata.direction | string | -One of in, out |
fromrequireddata.from | string | - |
torequireddata.to | string | - |
peerrequireddata.peer | string | The other party, digits only; the conversation key |
bodyrequireddata.body | string | - |
segmentsrequireddata.segments | integer | - |
statusrequireddata.status | string | -One of received, queued, sent, delivered, failed |
errorrequireddata.error | string | null | - |
providerMessageIdrequireddata.providerMessageId | string | null | Upstream carrier message id |
readAtrequireddata.readAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
createdAtrequireddata.createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
costrequireddata.cost | money | What you were charged; 0.000000 when failed and refunded USD as a decimal string with exactly 6 places, e.g. "0.012500". |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 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.
Mark an SMS conversation read
POST/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
peerrequired | string | -max 32 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
updatedrequireddata.updated | 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. - 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.
Search the catalogue by digit pattern or vanity run
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Scans catalogue pages for groups whose dialing prefix matches. While the number store is switched off this answers 200 with data: { disabled: true, comingSoon: true, message }.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
pattern | query | string | Digits to match against the dialing prefix (country + area) |
match | query | string | Default containsOne of contains, starts_with, ends_with, exact |
vanity | query | string | Only prefixes with repeating or sequential runsOne of true, false, 1, 0, yes, no, on, off |
countryId | query | string | - |
typeId | query | string | - |
text | query | string | Text over country, city and type name |
limit | query | integer | Default 50 |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
hitsrequireddata.hits | object[] | - |
groupIdrequireddata.hits[].groupId | string | Pass to POST /dids/buy with a skuId |
countryrequireddata.hits[].country | string | - |
countryIdrequireddata.hits[].countryId | string | Catalogue country id (filter value), not an ISO code |
countryPrefixrequireddata.hits[].countryPrefix | string | - |
cityrequireddata.hits[].city | string | null | - |
areaPrefixrequireddata.hits[].areaPrefix | string | null | - |
typeIdrequireddata.hits[].typeId | string | null | - |
typeNamerequireddata.hits[].typeName | string | null | Local, National, Mobile, Toll-free... |
skusrequireddata.hits[].skus | object[] | Same fields as DidCatalogSku, shown earlier on this page. |
dialingPrefixrequireddata.hits[].dialingPrefix | string | Country prefix plus area prefix |
vanityrequireddata.hits[].vanity | boolean | - |
scannedPagesrequireddata.scannedPages | integer | - |
truncatedrequireddata.truncated | boolean | True when the scan budget ran out before the end of the catalogue |
hits | object[] | - |
groupIdrequiredhits[].groupId | string | Pass to POST /dids/buy with a skuId |
countryrequiredhits[].country | string | - |
countryIdrequiredhits[].countryId | string | Catalogue country id (filter value), not an ISO code |
countryPrefixrequiredhits[].countryPrefix | string | - |
cityrequiredhits[].city | string | null | - |
areaPrefixrequiredhits[].areaPrefix | string | null | - |
typeIdrequiredhits[].typeId | string | null | - |
typeNamerequiredhits[].typeName | string | null | Local, National, Mobile, Toll-free... |
skusrequiredhits[].skus | object[] | Same fields as DidCatalogSku, shown earlier on this page. |
dialingPrefixrequiredhits[].dialingPrefix | string | Country prefix plus area prefix |
vanityrequiredhits[].vanity | boolean | - |
scannedPages | integer | - |
truncated | boolean | True when the scan budget ran out before the end of the catalogue |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 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.
Buy several phone numbers in one request
POST/
- Access
- API key. Scoped keys need
numbers:write. - Rate limit
- 100 requests per second (the default)
- Safe retries
- Send
X-Idempotency-Key; a replay within 24 hours returns the first response. - Moves money
- Buys a phone number, charged to your balance.
Buys each item in order and reports a result per item. Stops buying once your balance runs out and marks the rest skipped.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
X-Idempotency-Key | header | string | Any unique string (a UUID is ideal). Replays within 24 hours return the first response instead of acting twice. |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
itemsrequired | object[] | - |
skuIdrequireditems[].skuId | string | -max 64 chars |
groupIdrequireditems[].groupId | string | -max 64 chars |
countryIditems[].countryId | string | -max 64 chars |
countryitems[].country | string | -max 120 chars |
cityitems[].city | string | null | -max 120 chars |
areaPrefixitems[].areaPrefix | string | null | -max 16 chars |
didTypeitems[].didType | string | null | -max 40 chars |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
requestedrequireddata.requested | integer | - |
succeededrequireddata.succeeded | integer | - |
failedrequireddata.failed | integer | - |
skippedrequireddata.skipped | integer | - |
itemsrequireddata.items | object[] | - |
indexrequireddata.items[].index | integer | Position in the submitted array |
skuIdrequireddata.items[].skuId | string | - |
groupIdrequireddata.items[].groupId | string | - |
statusrequireddata.items[].status | string | -One of ok, failed, skipped |
diddata.items[].did | object | Present when status is okSame fields as Did, shown earlier on this page. |
errordata.items[].error | 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. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Get a spend and usage overview across your numbers
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
countsrequireddata.counts | object | - |
totalrequireddata.counts.total | integer | - |
activerequireddata.counts.active | integer | - |
pendingrequireddata.counts.pending | integer | - |
suspendedrequireddata.counts.suspended | integer | - |
releasedrequireddata.counts.released | integer | - |
failedrequireddata.counts.failed | integer | - |
monthlyRecurringrequireddata.monthlyRecurring | number | Sum of monthly prices on active numbers, USD display number |
lifetimeSpendrequireddata.lifetimeSpend | number | Net charged across all your numbers, USD display number |
usagerequireddata.usage | object | - |
callsrequireddata.usage.calls | integer | - |
callMinutesrequireddata.usage.callMinutes | number | - |
smsrequireddata.usage.sms | integer | - |
voicemailsrequireddata.usage.voicemails | integer | - |
voicemailMinutesrequireddata.usage.voicemailMinutes | number | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 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.
Get spend and usage analytics for a number
GET/
- Access
- API key. Scoped keys need
numbers:read. - Rate limit
- 100 requests per second (the default)
Totals and a month-by-month series. Spend figures are USD display numbers.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
months | query | integer | Trailing months in the series |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
numberrequireddata.number | string | null | - |
statusrequireddata.status | string | - |
pricerequireddata.price | object | - |
setuprequireddata.price.setup | money | USD as a decimal string with exactly 6 places, e.g. "0.012500". |
monthlyrequireddata.price.monthly | money | USD as a decimal string with exactly 6 places, e.g. "0.012500". |
spendrequireddata.spend | object | USD as display numbers |
grossrequireddata.spend.gross | number | - |
refundedrequireddata.spend.refunded | number | - |
netrequireddata.spend.net | number | - |
setuprequireddata.spend.setup | number | - |
recurringrequireddata.spend.recurring | number | - |
usagerequireddata.usage | object | - |
callsrequireddata.usage.calls | integer | - |
callMinutesrequireddata.usage.callMinutes | number | - |
smsrequireddata.usage.sms | integer | - |
voicemailsrequireddata.usage.voicemails | integer | - |
voicemailMinutesrequireddata.usage.voicemailMinutes | number | - |
windowrequireddata.window | object | - |
monthsrequireddata.window.months | integer | - |
fromrequireddata.window.from | string | - |
seriesrequireddata.series | object[] | - |
callsrequireddata.series[].calls | integer | - |
callMinutesrequireddata.series[].callMinutes | number | - |
smsrequireddata.series[].sms | integer | - |
voicemailsrequireddata.series[].voicemails | integer | - |
voicemailMinutesrequireddata.series[].voicemailMinutes | number | - |
periodrequireddata.series[].period | string | YYYY-MM |
spendrequireddata.series[].spend | number | USD, display number |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 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.
Browse the public number catalogue
GET/
- Access
- Public. No key needed.
- Rate limit
- 30 requests per minute
No account needed: prices only, for pre-signup browsing. While the number store is switched off this answers 200 with data: { disabled: true, comingSoon: true, message }.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
countryId | query | string | From GET .../catalog/countries |
typeId | query | string | From GET .../catalog/types |
search | query | string | Text match over country, city, area prefix and type; digits also match the start of the full dialling prefix ("4420" finds London). Spans the whole catalogue once it is indexed, otherwise the fetched page |
page | query | integer | - |
sort | query | string | Order by the cheapest monthly price, setup price or location. Omitted: the catalogue orderOne of monthly_asc, monthly_desc, setup_asc, location_asc |
maxMonthly | query | number | Only groups whose cheapest monthly price is at most this, in USD |
Response 200
| Field | Type | Description |
|---|---|---|
groupsrequired | object[] | Same fields as DidCatalogGroup, shown earlier on this page. |
totalrequired | integer | null | - |
pagerequired | integer | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Number catalogue market summary
GET/
- Access
- Public. No key needed.
- Rate limit
- 15 requests per minute
No account needed. The store's live figures: how many countries and number groups are for sale, and the cheapest monthly price by number type and by country. Prices only. Indexed in the background and refreshed about every 20 minutes. While the number store is switched off this answers 200 with data: { disabled: true, comingSoon: true, message }.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
readydata.ready | boolean | The catalogue is being indexed (the first minute after a restart); ask again shortlyOne of false |
completedata.complete | boolean | false when the catalogue was larger than the indexing budget, so the figures are a lower bound |
asOfdata.asOf | string (date-time) | When the catalogue was last indexed |
groupsdata.groups | integer | Buyable number groups (a city, area or national pool you order a number from) |
countriesdata.countries | integer | - |
fromMonthlydata.fromMonthly | number | null | Cheapest monthly price in the catalogue, USD |
typesdata.types | object[] | Most groups first |
typeIdrequireddata.types[].typeId | string | - |
typeNamerequireddata.types[].typeName | string | Local, National, Mobile, Toll-free... |
groupsrequireddata.types[].groups | integer | Number groups of this type |
countriesrequireddata.types[].countries | integer | Countries with at least one group of this type |
fromMonthlyrequireddata.types[].fromMonthly | number | null | Cheapest monthly price of this type, USD |
fromSetuprequireddata.types[].fromSetup | number | null | Cheapest one-off setup price of this type, USD |
countryListdata.countryList | object[] | Alphabetical |
countryIdrequireddata.countryList[].countryId | string | Catalogue country id (filter value) |
countryrequireddata.countryList[].country | string | - |
countryPrefixrequireddata.countryList[].countryPrefix | string | - |
groupsrequireddata.countryList[].groups | integer | - |
fromMonthlyrequireddata.countryList[].fromMonthly | number | null | Cheapest monthly price in this country, USD |
typeIdsrequireddata.countryList[].typeIds | string[] | Number types sold in this country |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List countries in the public number catalogue
GET/
- Access
- Public. No key needed.
- Rate limit
- 15 requests per minute
While the number store is switched off this answers 200 with data: { disabled: true, comingSoon: true, message }.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | Same fields as DidCatalogCountry, shown earlier on this page. |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List number types in the public number catalogue
GET/
- Access
- Public. No key needed.
- Rate limit
- 15 requests per minute
While the number store is switched off this answers 200 with data: { disabled: true, comingSoon: true, message }.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | Same fields as DidCatalogType, shown earlier on this page. |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.