API reference
CLI tests
Caller-ID tests on real handsets.
13 operationsBase URL https://packetexchange.io/api/v1Postman collection
BrowseCLI tests
List your caller-ID tests
GET/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
routeId | query | string (uuid) | - |
blendRouteId | query | string (uuid) | - |
status | query | string | -One of scheduled, pending, in_progress, completed, failed, not_tested, cancelled |
cursor | query | string (uuid) | - |
limit | query | integer | -Default 25 |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
routeIdrequireddata[].routeId | string (uuid) | null | - |
blendRouteIdrequireddata[].blendRouteId | string (uuid) | null | - |
displayClirequireddata[].displayCli | string | The caller ID presented on the test call |
testCountryrequireddata[].testCountry | string | - |
testNumberrequireddata[].testNumber | string | null | The handset that received the call |
statusrequireddata[].status | string | -One of scheduled, pending, dispatching, in_progress, completed, failed, not_tested, cancelled |
recurrencerequireddata[].recurrence | string | - |
scheduledAtrequireddata[].scheduledAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
reportedClirequireddata[].reportedCli | string | null | What the handset actually displayed |
displayedCorrectlyrequireddata[].displayedCorrectly | boolean | null | - |
resultNotesrequireddata[].resultNotes | string | null | - |
dispatchedAtrequireddata[].dispatchedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
completedAtrequireddata[].completedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
createdAtrequireddata[].createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
routerequireddata[].route | object | - |
countryrequireddata[].route.country | string | null | - |
destinationNamerequireddata[].route.destinationName | string | null | The listing name as a buyer reads it: generated by the platform, never the seller's text, and ending in the listing reference (e.g. "Niger Mobile · Ref 7K2Q", "A-Z Voice · Premium · Full CLI · Ref 3MX9"). Your own listings keep the name you gave them. |
nextCursorrequired | string | null | Pass as cursor to fetch the next page; null on the last page. |
hasMorerequired | boolean | True when another page exists. |
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.
Run a caller-ID test on a route
POST/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
- Real traffic
- Places a real test call to a handset. $0.50 per test, charged only if the call rang.
Places a real call to a test handset in the destination country and reports what caller ID it displayed. Give exactly one of routeId or blendRouteId; a blend runs one test per member route.
Billing: $0.50 per test, charged only if the call rang the handset (once per test). A call that never rings costs nothing. GET /cli-tests/quota returns the current price as costPerTest.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
routeId | string (uuid) | - |
blendRouteId | string (uuid) | - |
displayClirequired | string | - |
testCountryrequired | string | -max 100 chars |
testNumber | string | - |
scheduledAt | string (date-time) | - |
recurrence | string | -default "none"One of none, daily, weekly |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
iddata.id | string (uuid) | - |
routeIddata.routeId | string (uuid) | null | - |
blendRouteIddata.blendRouteId | string (uuid) | - |
displayClidata.displayCli | string | The caller ID presented on the test call |
testCountrydata.testCountry | string | - |
testNumberdata.testNumber | string | null | The handset that received the call |
statusdata.status | string | -One of scheduled, pending, dispatching, in_progress, completed, failed, not_tested, cancelled |
recurrencedata.recurrence | string | - |
scheduledAtdata.scheduledAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
reportedClidata.reportedCli | string | null | What the handset actually displayed |
displayedCorrectlydata.displayedCorrectly | boolean | null | - |
resultNotesdata.resultNotes | string | null | - |
dispatchedAtdata.dispatchedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
completedAtdata.completedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
createdAtdata.createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
testsdata.tests | object[] | - |
idrequireddata.tests[].id | string (uuid) | - |
routeIdrequireddata.tests[].routeId | string (uuid) | null | - |
blendRouteIdrequireddata.tests[].blendRouteId | string (uuid) | null | - |
displayClirequireddata.tests[].displayCli | string | The caller ID presented on the test call |
testCountryrequireddata.tests[].testCountry | string | - |
testNumberrequireddata.tests[].testNumber | string | null | The handset that received the call |
statusrequireddata.tests[].status | string | -One of scheduled, pending, dispatching, in_progress, completed, failed, not_tested, cancelled |
recurrencerequireddata.tests[].recurrence | string | - |
scheduledAtrequireddata.tests[].scheduledAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
reportedClirequireddata.tests[].reportedCli | string | null | What the handset actually displayed |
displayedCorrectlyrequireddata.tests[].displayedCorrectly | boolean | null | - |
resultNotesrequireddata.tests[].resultNotes | string | null | - |
dispatchedAtrequireddata.tests[].dispatchedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
completedAtrequireddata.tests[].completedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
createdAtrequireddata.tests[].createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
skippedTrunksdata.skippedTrunks | 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. - 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.
Check whether handset caller-ID testing is available
GET/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
enabledrequireddata.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. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List the countries with test handsets online
GET/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
All fields are null when availability could not be checked.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
countriesrequireddata.countries | string[] | null | - |
dialCodesrequireddata.dialCodes | string[] | null | - |
checkedAtrequireddata.checkedAt | 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. - 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 caller-ID test quota and price
GET/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
costPerTestrequireddata.costPerTest | number | USD per test call, as a number |
usedThisHourrequireddata.usedThisHour | integer | - |
limitPerHourrequireddata.limitPerHour | integer | - |
remainingrequireddata.remaining | 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.
Preview a route liveness test before starting it
POST/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
For "Test these routes": checks each route you would test, one by one, with the same access rule as a single caller-ID test (voice, and public, yours or bought), and returns what the confirm step needs: which routes can be tested and why not, the most it can cost, handsets online per country, the expected time and your hourly quota. Writes nothing and charges nothing.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
routeIdsrequired | string (uuid)[] | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
enabledrequireddata.enabled | boolean | False when the test handset network is not connected: a route test cannot start |
routesrequireddata.routes | object[] | - |
idrequireddata.routes[].id | string (uuid) | - |
namerequireddata.routes[].name | string | "A route" when the route is not one you may see |
countryrequireddata.routes[].country | string | null | - |
testablerequireddata.routes[].testable | boolean | - |
reasonrequireddata.routes[].reason | string | null | Why it cannot be tested |
testableCountrequireddata.testableCount | integer | - |
minRoutesrequireddata.minRoutes | integer | Smallest route test (2). To test one route use POST /cli-tests. |
maxRoutesrequireddata.maxRoutes | integer | Largest route test (20 by default) |
costPerTestrequireddata.costPerTest | number | USD per route that rings (JSON number) |
maxCostrequireddata.maxCost | number | USD if every testable route rings (JSON number) |
balancerequireddata.balance | number | null | Your balance in USD (JSON number) |
quotarequireddata.quota | object | Test calls in the last hour against the hourly cap |
usedThisHourrequireddata.quota.usedThisHour | integer | - |
capPerHourrequireddata.quota.capPerHour | integer | - |
remainingrequireddata.quota.remaining | integer | - |
countriesrequireddata.countries | object[] | - |
countryrequireddata.countries[].country | string | - |
routesrequireddata.countries[].routes | integer | - |
handsetsrequireddata.countries[].handsets | integer | null | Test handsets online now; null when availability could not be read |
parallelrequireddata.countries[].parallel | integer | Calls that can run at once in this country (0 = none can start) |
secondsrequireddata.countries[].seconds | integer | null | Estimated seconds to call every route in this country once |
estimatedSecondsrequireddata.estimatedSeconds | integer | null | Estimated time for the whole test |
noHandsetCountriesrequireddata.noHandsetCountries | string[] | Countries with no handset online now: their routes wait, then close as not tested |
handsetWaitMinutesrequireddata.handsetWaitMinutes | integer | How long a route waits for a handset before it closes as not tested |
gapSecondsrequireddata.gapSeconds | integer | Rest between two calls to the same handset |
maxParallelrequireddata.maxParallel | integer | - |
runningBatchIdrequireddata.runningBatchId | string (uuid) | null | Your route test already running, if any (only one may run at a time) |
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 route liveness tests
GET/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
Newest first, each with its per-route rows.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
limit | query | integer | -Default 20 |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
searchLabelrequireddata[].searchLabel | string | The description you gave the test, e.g. "Search: Pakistan, Voice" |
statusrequireddata[].status | string | -One of running, finished, cancelled |
displayClirequireddata[].displayCli | string | The caller ID presented on every test call |
routeCountrequireddata[].routeCount | integer | - |
costPerTestrequireddata[].costPerTest | number | USD per route that rings (JSON number) |
costCeilingrequireddata[].costCeiling | number | USD if every route rings: the most this test can cost (JSON number) |
chargedTotalrequireddata[].chargedTotal | number | USD actually charged so far (JSON number) |
createdAtrequireddata[].createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
finishedAtrequireddata[].finishedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
cancelledAtrequireddata[].cancelledAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
activerequireddata[].active | boolean | True while any route still needs a call. Poll GET /cli-tests/batches/{id} while this is true. |
callerIdPendingrequireddata[].callerIdPending | integer | Routes that rang and are still waiting for a caller-ID report |
summaryrequireddata[].summary | object | Routes per state |
queuedrequireddata[].summary.queued | integer | - |
waiting_handsetrequireddata[].summary.waiting_handset | integer | - |
callingrequireddata[].summary.calling | integer | - |
retryingrequireddata[].summary.retrying | integer | - |
rangrequireddata[].summary.rang | integer | - |
no_ringrequireddata[].summary.no_ring | integer | - |
not_testedrequireddata[].summary.not_tested | integer | - |
cancelledrequireddata[].summary.cancelled | integer | - |
itemsrequireddata[].items | object[] | One row per route, in the order you submitted |
testIdrequireddata[].items[].testId | string (uuid) | The ordinary caller-ID test behind this row (GET /cli-tests/{id}) |
routeIdrequireddata[].items[].routeId | string (uuid) | - |
routeNamerequireddata[].items[].routeName | string | The listing name as a buyer reads it: generated by the platform, never the seller's text, and ending in the listing reference (e.g. "Niger Mobile · Ref 7K2Q", "A-Z Voice · Premium · Full CLI · Ref 3MX9"). Your own listings keep the name you gave them. |
countryrequireddata[].items[].country | string | - |
positionrequireddata[].items[].position | integer | 1-based place in the order you submitted |
attemptsrequireddata[].items[].attempts | integer | Call attempts made so far |
chargedrequireddata[].items[].charged | number | USD actually charged for this route, as a JSON number: the test price if it rang, else 0 |
staterequireddata[].items[].state | string | rang = the route is live (a handset rang). no_ring = the call was placed and did not ring. not_tested = we could not place a test (no handset, provider trouble): NOT a result for the route. queued / waiting_handset / calling / retrying are still in progress.One of queued, waiting_handset, calling, retrying, rang, no_ring, not_tested, cancelled |
labelrequireddata[].items[].label | string | The state in words, e.g. "Live, rang" |
detailrequireddata[].items[].detail | string | null | One plain sentence under the label |
ringReasonrequireddata[].items[].ringReason | string | null | Why a call did not ring (the SIP-level reason in words) |
callerIdrequireddata[].items[].callerId | object | The caller-ID verdict. It can arrive up to 24 hours after the ring. |
staterequireddata[].items[].callerId.state | string | -One of pending, match, partial, replaced, restricted, not_available |
labelrequireddata[].items[].callerId.label | string | - |
updatedAtrequireddata[].items[].updatedAt | 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. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Start a route liveness test on several routes
POST/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
- Real traffic
- Places a real test call to a handset. $0.50 per test, charged only if the call rang.
Places one real test call over each route to a handset in its destination country, to show which routes are live right now, and reports the caller ID the handset displayed. Takes 2 to 20 voice routes (duplicates are merged). Calls are paced per country by the handsets online, and a route waits up to the handset wait time before it closes as not tested.
Billing: each route is charged the caller-ID test price ONLY if the call rang, once. Routes that do not ring, are not tested or are cancelled cost nothing. Your balance must cover routeCount x costPerTest before it starts.
Refusals: 400 VALIDATION_ERROR when the handset network is not connected, when fewer than 2 or more than the maximum routes are sent, when the test would pass your hourly test-call cap, when your balance does not cover the ceiling, or when any route cannot be tested (then error.details.routes lists { id, name, reason } for each and nothing starts). 409 CONFLICT when you already have a route test running. Preview with POST /cli-tests/batches/preview first.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
routeIdsrequired | string (uuid)[] | - |
searchLabelrequired | string | -max 200 chars |
displayClirequired | string | - |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as RouteTestBatch, 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. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Get a route liveness test and each route's result
GET/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
Live per-route status. Poll while active is true (every few seconds is plenty); caller-ID verdicts can arrive for up to 24 hours after that.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as RouteTestBatch, 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.
Cancel a running route liveness test
POST/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
Every route not yet called is cancelled and never charged. A call already ringing finishes normally and is billed only if it rang. A test that already finished answers 400 VALIDATION_ERROR.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as RouteTestBatch, 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.
Test a caller ID on your own switch
POST/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
- Real traffic
- Places a real test call to a handset. $0.50 per test, charged only if the call rang.
For a switch not hosted here: give its SIP address and the caller ID to present. A private test-only route is set up for you, and the test is reported like any other: $0.50, charged only if the call rang the handset.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
sipEndpointrequired | string | -max 255 chars |
sipPort | integer | -1 to 65535 |
displayClirequired | string | - |
testCountryrequired | string | -max 100 chars |
testCountryCoderequired | string | - |
testNumber | string | - |
scheduledAt | string (date-time) | - |
recurrence | string | -One of none, daily, weekly |
label | string | -max 120 chars |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
routeIdrequireddata.routeId | string (uuid) | - |
blendRouteIdrequireddata.blendRouteId | string (uuid) | null | - |
displayClirequireddata.displayCli | string | The caller ID presented on the test call |
testCountryrequireddata.testCountry | string | - |
testNumberrequireddata.testNumber | string | null | The handset that received the call |
statusrequireddata.status | string | -One of scheduled, pending, dispatching, in_progress, completed, failed, not_tested, cancelled |
recurrencerequireddata.recurrence | string | - |
scheduledAtrequireddata.scheduledAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
reportedClirequireddata.reportedCli | string | null | What the handset actually displayed |
displayedCorrectlyrequireddata.displayedCorrectly | boolean | null | - |
resultNotesrequireddata.resultNotes | string | null | - |
dispatchedAtrequireddata.dispatchedAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
completedAtrequireddata.completedAt | 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. - 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 caller-ID test and its result
GET/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as CliTest, 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.
Cancel a pending or scheduled caller-ID test
POST/
- Access
- API key. Scoped keys need
dialer:write. - Rate limit
- 100 requests per second (the default)
Tests already in progress or finished cannot be cancelled.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string (uuid) | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as CliTest, 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.