Skip to content

API reference

CLI tests

Caller-ID tests on real handsets.

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

List your caller-ID tests

GET/api/v1/cli-tests

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

Parameters

  • 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

  • datarequired

    object[]

  • idrequired

    string (uuid) · data[].id

  • routeIdrequired

    string (uuid) | null · data[].routeId

  • blendRouteIdrequired

    string (uuid) | null · data[].blendRouteId

  • displayClirequired

    string · data[].displayCli

    The caller ID presented on the test call
  • testCountryrequired

    string · data[].testCountry

  • testNumberrequired

    string | null · data[].testNumber

    The handset that received the call
  • statusrequired

    string · data[].status

    One of scheduled, pending, dispatching, in_progress, completed, failed, not_tested, cancelled
  • recurrencerequired

    string · data[].recurrence

  • scheduledAtrequired

    string (date-time) | null · data[].scheduledAt

    ISO-8601 timestamp (UTC)
  • reportedClirequired

    string | null · data[].reportedCli

    What the handset actually displayed
  • displayedCorrectlyrequired

    boolean | null · data[].displayedCorrectly

  • resultNotesrequired

    string | null · data[].resultNotes

  • dispatchedAtrequired

    string (date-time) | null · data[].dispatchedAt

    ISO-8601 timestamp (UTC)
  • completedAtrequired

    string (date-time) | null · data[].completedAt

    ISO-8601 timestamp (UTC)
  • createdAtrequired

    string (date-time) · data[].createdAt

    ISO-8601 timestamp (UTC)
  • routerequired

    object · data[].route

  • countryrequired

    string | null · data[].route.country

  • destinationNamerequired

    string | null · data[].route.destinationName

    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

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

Run a caller-ID test on a route

POST/api/v1/cli-tests

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 reported result (match or not), plus the call's minutes at the route rate if it connects. The fee is taken when the handset rings and refunded automatically if no caller ID is reported. A call that never rings costs nothing. GET /cli-tests/quota returns the current price as costPerTest.

Request body (application/json)

  • 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

  • datarequired

    object

  • id

    string (uuid) · data.id

  • routeId

    string (uuid) | null · data.routeId

  • blendRouteId

    string (uuid) · data.blendRouteId

  • displayCli

    string · data.displayCli

    The caller ID presented on the test call
  • testCountry

    string · data.testCountry

  • testNumber

    string | null · data.testNumber

    The handset that received the call
  • status

    string · data.status

    One of scheduled, pending, dispatching, in_progress, completed, failed, not_tested, cancelled
  • recurrence

    string · data.recurrence

  • scheduledAt

    string (date-time) | null · data.scheduledAt

    ISO-8601 timestamp (UTC)
  • reportedCli

    string | null · data.reportedCli

    What the handset actually displayed
  • displayedCorrectly

    boolean | null · data.displayedCorrectly

  • resultNotes

    string | null · data.resultNotes

  • dispatchedAt

    string (date-time) | null · data.dispatchedAt

    ISO-8601 timestamp (UTC)
  • completedAt

    string (date-time) | null · data.completedAt

    ISO-8601 timestamp (UTC)
  • createdAt

    string (date-time) · data.createdAt

    ISO-8601 timestamp (UTC)
  • tests

    object[] · data.tests

  • idrequired

    string (uuid) · data.tests[].id

  • routeIdrequired

    string (uuid) | null · data.tests[].routeId

  • blendRouteIdrequired

    string (uuid) | null · data.tests[].blendRouteId

  • displayClirequired

    string · data.tests[].displayCli

    The caller ID presented on the test call
  • testCountryrequired

    string · data.tests[].testCountry

  • testNumberrequired

    string | null · data.tests[].testNumber

    The handset that received the call
  • statusrequired

    string · data.tests[].status

    One of scheduled, pending, dispatching, in_progress, completed, failed, not_tested, cancelled
  • recurrencerequired

    string · data.tests[].recurrence

  • scheduledAtrequired

    string (date-time) | null · data.tests[].scheduledAt

    ISO-8601 timestamp (UTC)
  • reportedClirequired

    string | null · data.tests[].reportedCli

    What the handset actually displayed
  • displayedCorrectlyrequired

    boolean | null · data.tests[].displayedCorrectly

  • resultNotesrequired

    string | null · data.tests[].resultNotes

  • dispatchedAtrequired

    string (date-time) | null · data.tests[].dispatchedAt

    ISO-8601 timestamp (UTC)
  • completedAtrequired

    string (date-time) | null · data.tests[].completedAt

    ISO-8601 timestamp (UTC)
  • createdAtrequired

    string (date-time) · data.tests[].createdAt

    ISO-8601 timestamp (UTC)
  • skippedTrunks

    any[] · data.skippedTrunks

Errors

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

Check whether handset caller-ID testing is available

GET/api/v1/cli-tests/provider-status

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

Response 200

  • datarequired

    object

  • enabledrequired

    boolean · data.enabled

Errors

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

List the countries with test handsets online

GET/api/v1/cli-tests/testable-destinations

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

  • datarequired

    object

  • countriesrequired

    string[] | null · data.countries

  • dialCodesrequired

    string[] | null · data.dialCodes

  • checkedAtrequired

    string (date-time) | null · data.checkedAt

    ISO-8601 timestamp (UTC)

Errors

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

Get your caller-ID test quota and price

GET/api/v1/cli-tests/quota

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

Response 200

  • datarequired

    object

  • costPerTestrequired

    number · data.costPerTest

    USD per test call, as a number
  • usedThisHourrequired

    integer · data.usedThisHour

  • limitPerHourrequired

    integer · data.limitPerHour

  • remainingrequired

    integer · data.remaining

Errors

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

Preview a route liveness test before starting it

POST/api/v1/cli-tests/batches/preview

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)

  • routeIdsrequired

    string (uuid)[]

Response 200

  • datarequired

    object

  • enabledrequired

    boolean · data.enabled

    False when the test handset network is not connected: a route test cannot start
  • routesrequired

    object[] · data.routes

  • idrequired

    string (uuid) · data.routes[].id

  • namerequired

    string · data.routes[].name

    "A route" when the route is not one you may see
  • countryrequired

    string | null · data.routes[].country

  • testablerequired

    boolean · data.routes[].testable

  • reasonrequired

    string | null · data.routes[].reason

    Why it cannot be tested
  • testableCountrequired

    integer · data.testableCount

  • minRoutesrequired

    integer · data.minRoutes

    Smallest route test (2). To test one route use POST /cli-tests.
  • maxRoutesrequired

    integer · data.maxRoutes

    Largest route test (20 by default)
  • costPerTestrequired

    number · data.costPerTest

    USD per route that rings (JSON number)
  • maxCostrequired

    number · data.maxCost

    USD if every testable route rings (JSON number)
  • balancerequired

    number | null · data.balance

    Your balance in USD (JSON number)
  • quotarequired

    object · data.quota

    Test calls in the last hour against the hourly cap
  • usedThisHourrequired

    integer · data.quota.usedThisHour

  • capPerHourrequired

    integer · data.quota.capPerHour

  • remainingrequired

    integer · data.quota.remaining

  • countriesrequired

    object[] · data.countries

  • countryrequired

    string · data.countries[].country

  • routesrequired

    integer · data.countries[].routes

  • handsetsrequired

    integer | null · data.countries[].handsets

    Test handsets online now; null when availability could not be read
  • parallelrequired

    integer · data.countries[].parallel

    Calls that can run at once in this country (0 = none can start)
  • secondsrequired

    integer | null · data.countries[].seconds

    Estimated seconds to call every route in this country once
  • estimatedSecondsrequired

    integer | null · data.estimatedSeconds

    Estimated time for the whole test
  • noHandsetCountriesrequired

    string[] · data.noHandsetCountries

    Countries with no handset online now: their routes wait, then close as not tested
  • handsetWaitMinutesrequired

    integer · data.handsetWaitMinutes

    How long a route waits for a handset before it closes as not tested
  • gapSecondsrequired

    integer · data.gapSeconds

    Rest between two calls to the same handset
  • maxParallelrequired

    integer · data.maxParallel

  • runningBatchIdrequired

    string (uuid) | null · data.runningBatchId

    Your route test already running, if any (only one may run at a time)

Errors

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

List your route liveness tests

GET/api/v1/cli-tests/batches

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

  • limit

    query · integer

    Default 20

Response 200

  • datarequired

    object[]

  • idrequired

    string (uuid) · data[].id

  • searchLabelrequired

    string · data[].searchLabel

    The description you gave the test, e.g. "Search: Pakistan, Voice"
  • statusrequired

    string · data[].status

    One of running, finished, cancelled
  • displayClirequired

    string · data[].displayCli

    The caller ID presented on every test call
  • routeCountrequired

    integer · data[].routeCount

  • costPerTestrequired

    number · data[].costPerTest

    USD per route that rings (JSON number)
  • costCeilingrequired

    number · data[].costCeiling

    USD if every route rings: the most this test can cost (JSON number)
  • chargedTotalrequired

    number · data[].chargedTotal

    USD actually charged so far (JSON number)
  • createdAtrequired

    string (date-time) · data[].createdAt

    ISO-8601 timestamp (UTC)
  • finishedAtrequired

    string (date-time) | null · data[].finishedAt

    ISO-8601 timestamp (UTC)
  • cancelledAtrequired

    string (date-time) | null · data[].cancelledAt

    ISO-8601 timestamp (UTC)
  • activerequired

    boolean · data[].active

    True while any route still needs a call. Poll GET /cli-tests/batches/{id} while this is true.
  • callerIdPendingrequired

    integer · data[].callerIdPending

    Routes that rang and are still waiting for a caller-ID report
  • summaryrequired

    object · data[].summary

    Routes per state
  • queuedrequired

    integer · data[].summary.queued

  • waiting_handsetrequired

    integer · data[].summary.waiting_handset

  • callingrequired

    integer · data[].summary.calling

  • retryingrequired

    integer · data[].summary.retrying

  • rangrequired

    integer · data[].summary.rang

  • no_ringrequired

    integer · data[].summary.no_ring

  • not_testedrequired

    integer · data[].summary.not_tested

  • cancelledrequired

    integer · data[].summary.cancelled

  • itemsrequired

    object[] · data[].items

    One row per route, in the order you submitted
  • testIdrequired

    string (uuid) · data[].items[].testId

    The ordinary caller-ID test behind this row (GET /cli-tests/{id})
  • routeIdrequired

    string (uuid) · data[].items[].routeId

  • routeNamerequired

    string · data[].items[].routeName

    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.
  • countryrequired

    string · data[].items[].country

  • positionrequired

    integer · data[].items[].position

    1-based place in the order you submitted
  • attemptsrequired

    integer · data[].items[].attempts

    Call attempts made so far
  • chargedrequired

    number · data[].items[].charged

    USD actually charged for this route, as a JSON number: the test price if it rang, else 0
  • staterequired

    string · data[].items[].state

    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
  • labelrequired

    string · data[].items[].label

    The state in words, e.g. "Live, rang"
  • detailrequired

    string | null · data[].items[].detail

    One plain sentence under the label
  • ringReasonrequired

    string | null · data[].items[].ringReason

    Why a call did not ring (the SIP-level reason in words)
  • callerIdrequired

    object · data[].items[].callerId

    The caller-ID verdict. It can arrive up to 24 hours after the ring.
  • staterequired

    string · data[].items[].callerId.state

    One of pending, match, partial, replaced, restricted, not_available
  • labelrequired

    string · data[].items[].callerId.label

  • updatedAtrequired

    string (date-time) · data[].items[].updatedAt

    ISO-8601 timestamp (UTC)

Errors

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

Start a route liveness test on several routes

POST/api/v1/cli-tests/batches

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)

  • routeIdsrequired

    string (uuid)[]

  • searchLabelrequired

    string

    max 200 chars
  • displayClirequired

    string

Response 201

  • datarequired

    object

    Same fields as RouteTestBatch, shown earlier on this page.

Errors

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

Get a route liveness test and each route's result

GET/api/v1/cli-tests/batches/{id}

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

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object

    Same fields as RouteTestBatch, shown earlier on this page.

Errors

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

Cancel a running route liveness test

POST/api/v1/cli-tests/batches/{id}/cancel

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; its $0.50 is kept only if the handset reports a caller ID, and its minutes are billed only if it connected. A test that already finished answers 400 VALIDATION_ERROR.

Parameters

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object

    Same fields as RouteTestBatch, shown earlier on this page.

Errors

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

Test a caller ID on your own switch

POST/api/v1/cli-tests/quick

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 per reported result, plus the call's minutes at the route rate if it connects. No report, no charge.

Request body (application/json)

  • 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

  • datarequired

    object

  • idrequired

    string (uuid) · data.id

  • routeIdrequired

    string (uuid) · data.routeId

  • blendRouteIdrequired

    string (uuid) | null · data.blendRouteId

  • displayClirequired

    string · data.displayCli

    The caller ID presented on the test call
  • testCountryrequired

    string · data.testCountry

  • testNumberrequired

    string | null · data.testNumber

    The handset that received the call
  • statusrequired

    string · data.status

    One of scheduled, pending, dispatching, in_progress, completed, failed, not_tested, cancelled
  • recurrencerequired

    string · data.recurrence

  • scheduledAtrequired

    string (date-time) | null · data.scheduledAt

    ISO-8601 timestamp (UTC)
  • reportedClirequired

    string | null · data.reportedCli

    What the handset actually displayed
  • displayedCorrectlyrequired

    boolean | null · data.displayedCorrectly

  • resultNotesrequired

    string | null · data.resultNotes

  • dispatchedAtrequired

    string (date-time) | null · data.dispatchedAt

    ISO-8601 timestamp (UTC)
  • completedAtrequired

    string (date-time) | null · data.completedAt

    ISO-8601 timestamp (UTC)
  • createdAtrequired

    string (date-time) · data.createdAt

    ISO-8601 timestamp (UTC)

Errors

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

Get a caller-ID test and its result

GET/api/v1/cli-tests/{id}

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

Parameters

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object

    Same fields as CliTest, shown earlier on this page.

Errors

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

Cancel a pending or scheduled caller-ID test

POST/api/v1/cli-tests/{id}/cancel

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

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object

    Same fields as CliTest, shown earlier on this page.

Errors

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