Skip to content

API reference

Dialer

Outbound dialer and SMS campaigns, their numbers, caller IDs and results.

49 operationsBase URL https://packetexchange.io/api/v1Postman collection
BrowseDialer

Ask the dialer assistant a question or give it an instruction

POST/api/v1/dialer/agent/ask

Access
API key. Scoped keys need dialer:write.
Rate limit
20 requests per minute

A conversational assistant that reads and operates YOUR dialer (campaigns, numbers, caller IDs). Send the history from the previous reply to continue a conversation. actions lists what it did, including any writes.

Request body (application/json)

  • messagerequired

    string

    max 4000 chars
  • history

    any[]

    The history returned by the previous turn

Response 200

  • datarequired

    object

  • replyrequired

    string · data.reply

  • actionsrequired

    object[] · data.actions

  • toolrequired

    string · data.actions[].tool

  • okrequired

    boolean · data.actions[].ok

  • writerequired

    boolean · data.actions[].write

  • suggestionsrequired

    string[] · data.suggestions

  • historyrequired

    any[] · data.history

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 dialer analytics across all your campaigns

GET/api/v1/dialer/analytics/overview

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Defaults to the last 30 days when from/to are omitted.

Parameters

  • from

    query · string

    ISO date/time
  • to

    query · string

    ISO date/time

Response 200

  • datarequired

    object

  • windowrequired

    object · data.window

  • fromrequired

    string (date-time) · data.window.from

    ISO-8601 timestamp (UTC)
  • torequired

    string (date-time) · data.window.to

    ISO-8601 timestamp (UTC)
  • campaignsrequired

    object · data.campaigns

    Campaign counts by status, plus total
  • headlinerequired

    object · data.headline

  • dialedrequired

    integer · data.headline.dialed

  • answeredrequired

    integer · data.headline.answered

  • failedrequired

    integer · data.headline.failed

  • connectRaterequired

    number · data.headline.connectRate

  • acdrequired

    number · data.headline.acd

  • talkMinutesrequired

    number · data.headline.talkMinutes

  • spendrequired

    number · data.headline.spend

    USD, a display number
  • costPerAnsweredrequired

    number · data.headline.costPerAnswered

  • costPerMinuterequired

    number · data.headline.costPerMinute

  • topDestinationsrequired

    object[] · data.topDestinations

  • dialedrequired

    integer · data.topDestinations[].dialed

  • answeredrequired

    integer · data.topDestinations[].answered

  • asrrequired

    number · data.topDestinations[].asr

  • prefixrequired

    string · data.topDestinations[].prefix

  • byHourrequired

    object[] · data.byHour

  • dailyrequired

    object[] · data.daily

  • dialedrequired

    integer · data.daily[].dialed

  • answeredrequired

    integer · data.daily[].answered

  • asrrequired

    number · data.daily[].asr

  • dayrequired

    string · data.daily[].day

  • topCampaignsrequired

    object[] · data.topCampaigns

  • dialedrequired

    integer · data.topCampaigns[].dialed

  • answeredrequired

    integer · data.topCampaigns[].answered

  • asrrequired

    number · data.topCampaigns[].asr

  • idrequired

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

  • namerequired

    string · data.topCampaigns[].name

  • statusrequired

    string · data.topCampaigns[].status

    One of draft, ready, running, paused, completed, failed

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 detailed analytics for one campaign

GET/api/v1/dialer/campaigns/{id}/analytics

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object

  • campaignrequired

    object · data.campaign

  • idrequired

    string (uuid) · data.campaign.id

  • namerequired

    string · data.campaign.name

  • statusrequired

    string · data.campaign.status

    One of draft, ready, running, paused, completed, failed
  • kindrequired

    string · data.campaign.kind

    One of voice, sms
  • headlinerequired

    object · data.headline

  • dialedrequired

    integer · data.headline.dialed

  • answeredrequired

    integer · data.headline.answered

  • failedrequired

    integer · data.headline.failed

  • connectRaterequired

    number · data.headline.connectRate

  • acdrequired

    number · data.headline.acd

  • talkMinutesrequired

    number · data.headline.talkMinutes

  • spendrequired

    number · data.headline.spend

    USD, a display number
  • costPerAnsweredrequired

    number · data.headline.costPerAnswered

  • costPerMinuterequired

    number · data.headline.costPerMinute

  • totalNumbersrequired

    integer · data.headline.totalNumbers

  • pendingrequired

    integer · data.headline.pending

  • asrrequired

    number · data.headline.asr

  • bestHourrequired

    object | null · data.headline.bestHour

  • hourrequired

    integer · data.headline.bestHour.hour

  • asrrequired

    number · data.headline.bestHour.asr

  • tzrequired

    string · data.headline.bestHour.tz

  • dispositionsrequired

    object[] · data.dispositions

  • statusrequired

    string · data.dispositions[].status

  • countrequired

    integer · data.dispositions[].count

  • pctrequired

    number · data.dispositions[].pct

  • failureCausesrequired

    object[] · data.failureCauses

  • coderequired

    integer · data.failureCauses[].code

  • labelrequired

    string · data.failureCauses[].label

  • countrequired

    integer · data.failureCauses[].count

  • byHourrequired

    object[] · data.byHour

  • byDayOfWeekrequired

    object[] · data.byDayOfWeek

  • dialedrequired

    integer · data.byDayOfWeek[].dialed

  • answeredrequired

    integer · data.byDayOfWeek[].answered

  • asrrequired

    number · data.byDayOfWeek[].asr

  • dowrequired

    integer · data.byDayOfWeek[].dow

  • byDestinationrequired

    object[] · data.byDestination

  • dialedrequired

    integer · data.byDestination[].dialed

  • answeredrequired

    integer · data.byDestination[].answered

  • asrrequired

    number · data.byDestination[].asr

  • prefixrequired

    string · data.byDestination[].prefix

  • acdrequired

    number · data.byDestination[].acd

  • retryEffectivenessrequired

    object[] · data.retryEffectiveness

  • dialedrequired

    integer · data.retryEffectiveness[].dialed

  • answeredrequired

    integer · data.retryEffectiveness[].answered

  • asrrequired

    number · data.retryEffectiveness[].asr

  • attemptrequired

    integer · data.retryEffectiveness[].attempt

  • dailyrequired

    object[] · data.daily

  • dialedrequired

    integer · data.daily[].dialed

  • answeredrequired

    integer · data.daily[].answered

  • asrrequired

    number · data.daily[].asr

  • dayrequired

    string · data.daily[].day

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.

List your dialer and SMS campaigns

GET/api/v1/dialer/campaigns

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Parameters

  • status

    query · string

    One of draft, ready, running, paused, completed, failed
  • search

    query · string

  • cursor

    query · string (uuid)

  • limit

    query · integer

    Default 25

Response 200

  • datarequired

    object[]

  • idrequired

    string (uuid) · data[].id

  • userIdrequired

    string (uuid) · data[].userId

  • routeIdrequired

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

    The purchased route the campaign sends over
  • namerequired

    string · data[].name

  • kindrequired

    string · data[].kind

    One of voice, sms
  • environmentrequired

    string · data[].environment

    test = created with a test key; simulated, never really dialled or billedOne of live, test
  • statusrequired

    string · data[].status

    One of draft, ready, running, paused, completed, failed
  • messageBodyrequired

    string | null · data[].messageBody

    SMS campaigns: the message text
  • senderIdrequired

    string | null · data[].senderId

    SMS campaigns: the sender ID
  • aiAgentIdrequired

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

    Voice campaigns: the AI voice agent that handles answered calls
  • concurrencyrequired

    integer · data[].concurrency

  • maxCallDurationrequired

    integer · data[].maxCallDuration

    Seconds
  • callIntervalrequired

    integer · data[].callInterval

  • platformFeePerCallrequired

    money · data[].platformFeePerCall

    USD as a decimal string with exactly 6 places, e.g. "0.012500".
  • totalNumbersrequired

    integer · data[].totalNumbers

  • totalClisrequired

    integer · data[].totalClis

  • cliSetIdrequired

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

  • cliStrategyrequired

    object | null · data[].cliStrategy

    Caller-ID rotation strategy, when a caller-ID set is assigned
  • numbersDialedrequired

    integer · data[].numbersDialed

  • numbersAnsweredrequired

    integer · data[].numbersAnswered

  • numbersFailedrequired

    integer · data[].numbersFailed

  • totalDurationSecondsrequired

    integer · data[].totalDurationSeconds

  • windowStartHourrequired

    integer | null · data[].windowStartHour

  • windowEndHourrequired

    integer | null · data[].windowEndHour

  • windowTzrequired

    string | null · data[].windowTz

  • maxAttemptsrequired

    integer · data[].maxAttempts

  • retryDelayMinutesrequired

    integer · data[].retryDelayMinutes

  • maxSpendrequired

    money | null · data[].maxSpend

    Budget cap; the campaign pauses when reached USD as a decimal string with exactly 6 places, e.g. "0.012500".
  • scheduleAtrequired

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

    ISO-8601 timestamp (UTC)
  • startedAtrequired

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

    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)
  • updatedAtrequired

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

    ISO-8601 timestamp (UTC)
  • 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.

Create a dialer or SMS campaign

POST/api/v1/dialer/campaigns

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

Creates the campaign in draft. Add numbers (POST /campaigns/{id}/numbers or /contacts/import), then start it with POST /campaigns/{id}/control. A campaign created with a test key is simulated and never really dialled or billed.

Request body (application/json)

  • namerequired

    string

    max 255 chars
  • routeIdrequired

    string (uuid)

  • kind

    string

    One of voice, sms
  • messageBody

    string

    max 1600 chars
  • senderId

    string

    max 20 chars
  • targetAcd

    string

  • targetAsr

    string

  • concurrency

    integer

    1 to 128, default 1
  • maxCallDuration

    integer

    1 to 3600, default 300
  • callInterval

    integer

    0 to 60000, default 0
  • notes

    string

    max 2000 chars
  • windowStartHour

    integer

    0 to 23
  • windowEndHour

    integer

    0 to 23
  • windowTz

    string

    max 64 chars
  • maxAttempts

    integer

    1 to 10, default 1
  • retryDelayMinutes

    integer

    1 to 1440, default 60
  • maxSpend

    string

  • scheduleAt

    string (date-time)

  • aiAgentId

    string (uuid) | null

Response 201

  • datarequired

    object

    Same fields as DialerCampaign, 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 campaign

GET/api/v1/dialer/campaigns/{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 DialerCampaign, 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.

Update a campaign

PUT/api/v1/dialer/campaigns/{id}

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

Parameters

  • idrequired

    path · string (uuid)

Request body (application/json)

  • name

    string

    max 255 chars
  • messageBody

    string | null

    max 1600 chars
  • senderId

    string | null

    max 20 chars
  • targetAcd

    string | null

  • targetAsr

    string | null

  • concurrency

    integer

    1 to 128
  • maxCallDuration

    integer

    1 to 3600
  • callInterval

    integer

    0 to 60000
  • notes

    string | null

    max 2000 chars
  • windowStartHour

    integer | null

    0 to 23
  • windowEndHour

    integer | null

    0 to 23
  • windowTz

    string | null

    max 64 chars
  • maxAttempts

    integer

    1 to 10
  • retryDelayMinutes

    integer

    1 to 1440
  • maxSpend

    string | null

  • scheduleAt

    string (date-time) | null

  • aiAgentId

    string (uuid) | null

Response 200

  • datarequired

    object

    Same fields as DialerCampaign, 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.

Delete a campaign

DELETE/api/v1/dialer/campaigns/{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

  • messagerequired

    string · data.message

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.

Start, pause or stop a campaign

POST/api/v1/dialer/campaigns/{id}/control

Access
API key. Scoped keys need dialer:write.
Rate limit
100 requests per second (the default)
Real traffic
Starting a campaign dials real numbers or sends real messages, billed as they happen.

Starting spends money: calls and messages are billed to your balance as they happen. Start is refused with VALIDATION_ERROR when the balance is insufficient or the campaign has no numbers.

Parameters

  • idrequired

    path · string (uuid)

Request body (application/json)

  • actionrequired

    string

    One of start, pause, stop

Response 200

  • datarequired

    object

    Same fields as DialerCampaign, 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.

Mark a draft campaign ready to start

POST/api/v1/dialer/campaigns/{id}/ready

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

Status only; every start-time check still runs when you start it. Refused when the campaign has no contacts yet.

Parameters

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object

    Same fields as DialerCampaign, 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.

Get live progress and spend for a campaign

GET/api/v1/dialer/campaigns/{id}/stats

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object

  • totalNumbersrequired

    integer · data.totalNumbers

  • numbersDialedrequired

    integer · data.numbersDialed

  • numbersAnsweredrequired

    integer · data.numbersAnswered

  • numbersFailedrequired

    integer · data.numbersFailed

  • numbersPendingrequired

    integer · data.numbersPending

  • totalDurationSecondsrequired

    integer · data.totalDurationSeconds

  • asrrequired

    number · data.asr

    Answer-seizure ratio, percent
  • acdrequired

    number · data.acd

    Average call duration, seconds
  • progressrequired

    number · data.progress

    Percent of numbers dialled
  • activeCallsrequired

    integer · data.activeCalls

  • totalSpendrequired

    number · data.totalSpend

    USD spent so far (a display number, not a 6-decimal string)
  • maxSpendrequired

    number | null · data.maxSpend

    Budget cap in USD, as a number
  • budgetProgressrequired

    number | null · data.budgetProgress

    Percent of the budget used

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.

Parse a contact file and suggest a column mapping

POST/api/v1/dialer/contacts/parse

Access
API key. Scoped keys need dialer:write.
Rate limit
20 requests per minute

Upload a CSV or XLSX (multipart file part, or JSON contentBase64/content, up to about 12 MB). Returns the detected columns, a suggested mapping, a preview and the data rows to send back to /contacts/import. Nothing is saved.

Request body (application/json)

  • filename

    string

    max 255 chars
  • contentBase64

    string

    The file, base64-encoded
  • content

    string

    The file as plain text (CSV)

Response 200

  • datarequired

    object

  • hasHeaderrequired

    boolean · data.hasHeader

  • columnsrequired

    object[] · data.columns

  • indexrequired

    integer · data.columns[].index

  • labelrequired

    string · data.columns[].label

  • sampleRowsrequired

    string[][] · data.sampleRows

  • dataRowsrequired

    string[][] · data.dataRows

  • suggestedMappingrequired

    object · data.suggestedMapping

  • headerRowIndexrequired

    integer · data.suggestedMapping.headerRowIndex

    0-based header row, or -1 when the file has none
  • columnsrequired

    object · data.suggestedMapping.columns

  • phonerequired

    integer · data.suggestedMapping.columns.phone

  • namerequired

    integer | null · data.suggestedMapping.columns.name

  • firstNamerequired

    integer | null · data.suggestedMapping.columns.firstName

  • lastNamerequired

    integer | null · data.suggestedMapping.columns.lastName

  • extraColumnsrequired

    integer[] · data.suggestedMapping.extraColumns

    Columns kept as per-contact fields
  • notes

    string · data.suggestedMapping.notes

  • rowCountrequired

    integer · data.rowCount

  • truncatedrequired

    boolean · data.truncated

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.

Import mapped contacts into a campaign or a saved list

POST/api/v1/dialer/contacts/import

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

Rows are re-normalised to E.164 and de-duplicated server-side, so what the preview showed is what is stored.

Request body (application/json)

  • rowsrequired

    string[][]

    The dataRows returned by /contacts/parse
  • mappingrequired

    object

    Same fields as DialerContactMapping, shown earlier on this page.
  • columnLabels

    object[]

  • indexrequired

    integer · columnLabels[].index

  • labelrequired

    string · columnLabels[].label

    max 255 chars
  • campaignId

    string (uuid)

  • listId

    string (uuid)

  • saveAsListName

    string

    max 255 chars
  • keepDraft

    boolean

Response 201

  • datarequired

    object

  • importedrequired

    integer · data.imported

  • skippedInvalidrequired

    integer · data.skippedInvalid

  • skippedDuprequired

    integer · data.skippedDup

  • samplerequired

    object[] · data.sample

  • numberrequired

    string · data.sample[].number

  • namerequired

    string | null · data.sample[].name

  • fieldsrequired

    object | null · data.sample[].fields

  • rejectsrequired

    object[] · data.rejects

  • rowrequired

    integer · data.rejects[].row

  • valuerequired

    string · data.rejects[].value

  • reasonrequired

    string · data.rejects[].reason

  • savedListId

    string (uuid) | null · data.savedListId

  • campaign

    object · data.campaign

    Same fields as DialerCampaign, shown earlier on this page.
  • totalNumbers

    integer · data.totalNumbers

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 a campaign’s numbers with their call outcome

GET/api/v1/dialer/campaigns/{id}/numbers

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string (uuid)

  • status

    query · string

    One of pending, dialing, answered, no_answer, busy, failed, skipped
  • cursor

    query · string (uuid)

  • limit

    query · integer

    Default 25

Response 200

  • datarequired

    object[]

  • idrequired

    string (uuid) · data[].id

  • campaignIdrequired

    string (uuid) · data[].campaignId

  • numberrequired

    string · data[].number

  • statusrequired

    string · data[].status

    One of pending, dialing, answered, no_answer, busy, failed, skipped
  • sipResponseCoderequired

    integer | null · data[].sipResponseCode

  • durationSecondsrequired

    integer | null · data[].durationSeconds

  • attemptrequired

    integer · data[].attempt

  • nextAttemptAtrequired

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

    ISO-8601 timestamp (UTC)
  • dialedAtrequired

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

    ISO-8601 timestamp (UTC)
  • answeredAtrequired

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

    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)
  • costrequired

    money | null · data[].cost

    Cost of the latest call to this number, when there is one USD as a decimal string with exactly 6 places, e.g. "0.012500".
  • clirequired

    string | null · data[].cli

    Caller ID presented on the latest call
  • sipCauserequired

    string | null · data[].sipCause

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

Add destination numbers to a campaign

POST/api/v1/dialer/campaigns/{id}/numbers

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

Invalid and duplicate numbers are skipped and reported in rejects, not failed. The campaign becomes ready unless keepDraft is set.

Parameters

  • idrequired

    path · string (uuid)

Request body (application/json)

  • numbersrequired

    string[]

  • keepDraft

    boolean

Response 201

  • datarequired

    object

  • countrequired

    integer · data.count

    Same as inserted (kept for existing clients)
  • insertedrequired

    integer · data.inserted

  • skippedrequired

    integer · data.skipped

  • rejectsrequired

    object[] · data.rejects

    Up to 200 rejected entries with the reason
  • valuerequired

    string · data.rejects[].value

  • reasonrequired

    string · data.rejects[].reason

  • totalNumbersrequired

    integer · data.totalNumbers

  • campaignrequired

    object · data.campaign

    Same fields as DialerCampaign, 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.

Remove every number from a campaign

DELETE/api/v1/dialer/campaigns/{id}/numbers

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 Message, 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.

Remove one number from a campaign

DELETE/api/v1/dialer/campaigns/{id}/numbers/{numberId}

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

Parameters

  • idrequired

    path · string (uuid)

  • numberIdrequired

    path · string (uuid)

Response 200

  • datarequired

    object

  • idrequired

    string (uuid) · data.id

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.

List a campaign’s caller IDs

GET/api/v1/dialer/campaigns/{id}/clis

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object[]

  • idrequired

    string (uuid) · data[].id

  • campaignIdrequired

    string (uuid) · data[].campaignId

  • clirequired

    string · data[].cli

  • statusrequired

    string · data[].status

    One of pending, verified, failed
  • verifiedrequired

    boolean · data[].verified

  • verifiedAtrequired

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

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

Add caller IDs to a campaign

POST/api/v1/dialer/campaigns/{id}/clis

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

Up to 100 per request. Caller IDs rotate round-robin across calls unless a caller-ID set is assigned.

Parameters

  • idrequired

    path · string (uuid)

Request body (application/json)

  • clisrequired

    string[]

Response 201

  • datarequired

    object

  • countrequired

    integer · data.count

  • insertedrequired

    integer · data.inserted

  • skippedrequired

    integer · data.skipped

  • rejectsrequired

    object[] · data.rejects

  • valuerequired

    string · data.rejects[].value

  • reasonrequired

    string · data.rejects[].reason

  • totalClisrequired

    integer · data.totalClis

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.

Remove every caller ID from a campaign

DELETE/api/v1/dialer/campaigns/{id}/clis

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 Message, 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.

List your caller-ID sets

GET/api/v1/dialer/caller-ids

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Response 200

  • datarequired

    object[]

  • idrequired

    string (uuid) · data[].id

  • userIdrequired

    string (uuid) · data[].userId

  • namerequired

    string · data[].name

  • descriptionrequired

    string | null · data[].description

  • createdAtrequired

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

    ISO-8601 timestamp (UTC)
  • updatedAtrequired

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

    ISO-8601 timestamp (UTC)
  • cliCountrequired

    integer · data[].cliCount

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.

Create a caller-ID set

POST/api/v1/dialer/caller-ids

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

Request body (application/json)

  • namerequired

    string

    max 255 chars
  • description

    string

    max 2000 chars

Response 201

  • datarequired

    object

  • idrequired

    string (uuid) · data.id

  • userIdrequired

    string (uuid) · data.userId

  • namerequired

    string · data.name

  • descriptionrequired

    string | null · data.description

  • createdAtrequired

    string (date-time) · data.createdAt

    ISO-8601 timestamp (UTC)
  • updatedAtrequired

    string (date-time) · data.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.
  • 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 set

GET/api/v1/dialer/caller-ids/{id}

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string (uuid)

Response 200

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.

Rename or describe a caller-ID set

PATCH/api/v1/dialer/caller-ids/{id}

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

Parameters

  • idrequired

    path · string (uuid)

Request body (application/json)

  • name

    string

    max 255 chars
  • description

    string | null

    max 2000 chars

Response 200

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.

Delete a caller-ID set

DELETE/api/v1/dialer/caller-ids/{id}

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

Campaigns using the set are detached from it and fall back to their own caller-ID list.

Parameters

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object

  • idrequired

    string (uuid) · data.id

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.

List the caller IDs in a set, with usage stats

GET/api/v1/dialer/caller-ids/{id}/numbers

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object[]

  • idrequired

    string (uuid) · data[].id

  • setIdrequired

    string (uuid) · data[].setId

  • clirequired

    string · data[].cli

  • labelrequired

    string | null · data[].label

  • countryrequired

    string | null · data[].country

  • countryCoderequired

    string | null · data[].countryCode

  • areaCoderequired

    string | null · data[].areaCode

  • sourcerequired

    string · data[].source

    One of upload, paste, manual, revshare, did
  • enabledrequired

    boolean · data[].enabled

  • weightrequired

    integer · data[].weight

  • dailyCaprequired

    integer | null · data[].dailyCap

  • campaignCaprequired

    integer | null · data[].campaignCap

  • hourlyCaprequired

    integer | null · data[].hourlyCap

  • cooldownSecrequired

    integer | null · data[].cooldownSec

  • statusrequired

    string · data[].status

    One of active, resting, retired
  • tagsrequired

    string[] · data[].tags

  • notesrequired

    string | null · data[].notes

  • createdAtrequired

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

    ISO-8601 timestamp (UTC)
  • statsrequired

    object · data[].stats

  • callsrequired

    integer · data[].stats.calls

  • connectsrequired

    integer · data[].stats.connects

  • connectRaterequired

    number · data[].stats.connectRate

    Percent
  • avgSecrequired

    number · data[].stats.avgSec

  • todayUsedrequired

    integer · data[].stats.todayUsed

  • campaignUsedrequired

    integer · data[].stats.campaignUsed

  • lastUsedAtrequired

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

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

Add caller IDs to a set

POST/api/v1/dialer/caller-ids/{id}/numbers

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

Send ONE of: clis (a list), paste (free text), a file (multipart file part, or contentBase64/content). Numbers must be E.164; invalid and duplicate entries are reported in rejects.

Parameters

  • idrequired

    path · string (uuid)

Request body (application/json)

  • clis

    string | object[]

    A manual list of E.164 caller IDs, bare or with a label
  • cli

    string · clis[].cli

  • label

    string | null · clis[].label

    max 120 chars
  • paste

    string

    A pasted block of numbersmax 2000000 chars
  • filename

    string

    max 255 chars
  • contentBase64

    string

    A CSV/XLSX file, base64-encoded
  • content

    string

    A CSV file as plain text

Response 201

  • datarequired

    object

  • insertedrequired

    integer · data.inserted

  • skippedrequired

    integer · data.skipped

  • rejectsrequired

    object[] · data.rejects

  • valuerequired

    string · data.rejects[].value

  • reasonrequired

    string · data.rejects[].reason

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.

Add your revenue share numbers to a caller-ID set

POST/api/v1/dialer/caller-ids/{id}/from-revshare

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

Omit takingIds (or pass "all") to add every active revenue share number you hold.

Parameters

  • idrequired

    path · string (uuid)

Request body (application/json)

  • takingIds

    string (uuid)[] | string

Response 201

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.

Update one caller ID in a set

PATCH/api/v1/dialer/caller-ids/{id}/numbers/{nid}

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

Enable or disable it, and set its weight, caps, cooldown, status, tags, label or notes.

Parameters

  • idrequired

    path · string (uuid)

  • nidrequired

    path · string (uuid)

Request body (application/json)

  • enabled

    boolean

  • weight

    integer

    1 to 1000
  • dailyCap

    integer | null

    min 0
  • campaignCap

    integer | null

    min 0
  • hourlyCap

    integer | null

    min 0
  • cooldownSec

    integer | null

    min 0
  • tags

    string[]

  • status

    string

    One of active, resting, retired
  • label

    string | null

    max 120 chars
  • notes

    string | null

    max 2000 chars

Response 200

  • datarequired

    object

  • idrequired

    string (uuid) · data.id

  • setIdrequired

    string (uuid) · data.setId

  • clirequired

    string · data.cli

  • labelrequired

    string | null · data.label

  • countryrequired

    string | null · data.country

  • countryCoderequired

    string | null · data.countryCode

  • areaCoderequired

    string | null · data.areaCode

  • sourcerequired

    string · data.source

    One of upload, paste, manual, revshare, did
  • enabledrequired

    boolean · data.enabled

  • weightrequired

    integer · data.weight

  • dailyCaprequired

    integer | null · data.dailyCap

  • campaignCaprequired

    integer | null · data.campaignCap

  • hourlyCaprequired

    integer | null · data.hourlyCap

  • cooldownSecrequired

    integer | null · data.cooldownSec

  • statusrequired

    string · data.status

    One of active, resting, retired
  • tagsrequired

    string[] · data.tags

  • notesrequired

    string | null · data.notes

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

Remove one caller ID from a set

DELETE/api/v1/dialer/caller-ids/{id}/numbers/{nid}

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

Parameters

  • idrequired

    path · string (uuid)

  • nidrequired

    path · string (uuid)

Response 200

  • datarequired

    object

  • idrequired

    string (uuid) · data.id

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.

Enable, disable or delete many caller IDs in a set

POST/api/v1/dialer/caller-ids/{id}/numbers/bulk

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

Parameters

  • idrequired

    path · string (uuid)

Request body (application/json)

  • actionrequired

    string

    One of enable, disable, delete
  • cliIdsrequired

    string (uuid)[]

Response 200

  • datarequired

    object

  • affectedrequired

    integer · data.affected

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.

Get usage stats for a caller-ID set

GET/api/v1/dialer/caller-ids/{id}/stats

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object

  • totalClisrequired

    integer · data.totalClis

  • activeClisrequired

    integer · data.activeClis

  • restingClisrequired

    integer · data.restingClis

  • retiredClisrequired

    integer · data.retiredClis

  • callsrequired

    integer · data.calls

  • connectsrequired

    integer · data.connects

  • connectRaterequired

    number · data.connectRate

    Percent
  • avgSecrequired

    number · data.avgSec

  • campaignsrequired

    integer · data.campaigns

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.

Assign a caller-ID set and rotation strategy to a campaign

PUT/api/v1/dialer/campaigns/{id}/cli

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

Parameters

  • idrequired

    path · string (uuid)

Request body (application/json)

  • cliSetIdrequired

    string (uuid) | null

    null clears the assignment (the campaign falls back to its own caller-ID list)
  • strategy

    object

  • moderequired

    string · strategy.mode

    One of random, round_robin, per_day_cap, per_campaign_cap, hourly_cap, cooldown, sticky_dest, area_match, country_match, weighted, lru, best_perf and 1 more
  • dailyCap

    integer | null · strategy.dailyCap

    min 0
  • campaignCap

    integer | null · strategy.campaignCap

    min 0
  • hourlyCap

    integer | null · strategy.hourlyCap

    min 0
  • cooldownSec

    integer | null · strategy.cooldownSec

    min 0
  • restBelowAsr

    number | null · strategy.restBelowAsr

    Rest a caller ID whose ASR falls below this percent0 to 100
  • weightsRespected

    boolean · strategy.weightsRespected

Response 200

  • datarequired

    object

    Same fields as DialerCampaign, 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.

Build a call-back list from callers to your revenue share numbers

POST/api/v1/dialer/target-lists/from-revshare-cdr

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

Returns the distinct inbound callers in the window. Revenue share call records keep only a MASKED prefix of each caller, so entries are marked dialable: false and are not saved as a dial list; limitation explains this when it applies.

Request body (application/json)

  • takingIds

    string (uuid)[] | string

  • from

    string

    ISO date/time
  • to

    string

    ISO date/time
  • minDurationSec

    integer

    min 0
  • saveAsListName

    string

    max 255 chars

Response 200

  • datarequired

    object

  • totalrequired

    integer · data.total

  • dialableCountrequired

    integer · data.dialableCount

  • callersrequired

    object[] · data.callers

  • prefixrequired

    string · data.callers[].prefix

    The MASKED leading digits of the caller; full numbers are never stored
  • fromCarrierrequired

    string | null · data.callers[].fromCarrier

  • originIsorequired

    string | null · data.callers[].originIso

  • originCountryrequired

    string | null · data.callers[].originCountry

  • originDialCoderequired

    string | null · data.callers[].originDialCode

  • callCountrequired

    integer · data.callers[].callCount

  • lastCallAtrequired

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

    ISO-8601 timestamp (UTC)
  • dialablerequired

    boolean · data.callers[].dialable

    False for masked prefixes, which is currently always the case
  • savedrequired

    object | null · data.saved

    The saved contact list, when saveAsListName was given and there was something dialable to save
  • listrequired

    object · data.saved.list

  • idrequired

    string (uuid) · data.saved.list.id

  • userIdrequired

    string (uuid) · data.saved.list.userId

  • namerequired

    string · data.saved.list.name

  • countrequired

    integer · data.saved.list.count

  • createdAtrequired

    string (date-time) · data.saved.list.createdAt

    ISO-8601 timestamp (UTC)
  • savedrequired

    integer · data.saved.saved

  • skippedrequired

    integer · data.saved.skipped

  • limitationrequired

    string | null · data.limitation

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.

Match inbound callers to the caller IDs in a set

GET/api/v1/dialer/target-lists/compatible

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

For each caller ID in the set, the inbound callers reachable from its country. takingIds may be comma-separated.

Parameters

  • cliSetIdrequired

    query · string (uuid)

  • takingIds

    query · string

    "all" or comma-separated revenue share taking ids

Response 200

  • datarequired

    object

  • setIdrequired

    string (uuid) · data.setId

  • setNamerequired

    string · data.setName

  • groupsrequired

    object[] · data.groups

  • clirequired

    string · data.groups[].cli

  • labelrequired

    string | null · data.groups[].label

  • countryrequired

    string | null · data.groups[].country

  • countryCoderequired

    string | null · data.groups[].countryCode

  • targetsrequired

    object[] · data.groups[].targets

    Same fields as DialerRevshareCaller, shown earlier on this page.
  • savedrequired

    object | null · data.saved

    The saved contact list, when saveAsListName was given and there was something dialable to save
  • listrequired

    object · data.saved.list

    Same fields as DialerContactList, shown earlier on this page.
  • savedrequired

    integer · data.saved.saved

  • skippedrequired

    integer · data.saved.skipped

  • limitationrequired

    string | null · data.limitation

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.

Match inbound callers to a caller-ID set and optionally save them

POST/api/v1/dialer/target-lists/compatible

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

Request body (application/json)

  • cliSetIdrequired

    string (uuid)

  • takingIds

    string (uuid)[] | string

  • saveAsListName

    string

    max 255 chars

Response 200

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.

Preview a cleaned number list

POST/api/v1/dialer/target-lists/refine

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

De-duplicates, filters by country dial code or prefix, and optionally removes do-not-call entries. Nothing is saved.

Request body (application/json)

  • numbersrequired

    string[]

  • countryCode

    string

    Country dial code, e.g. "44"max 8 chars
  • prefix

    string

    max 24 chars
  • suppressDnc

    boolean

Response 200

  • datarequired

    object

  • keptrequired

    string[] · data.kept

    E.164 numbers that survived
  • invalidrequired

    integer · data.invalid

  • duprequired

    integer · data.dup

  • filteredrequired

    integer · data.filtered

  • suppressedrequired

    integer · data.suppressed

  • totalrequired

    integer · data.total

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.

Save numbers as a contact list

POST/api/v1/dialer/target-lists/save

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

Only valid full E.164 numbers are stored.

Request body (application/json)

  • namerequired

    string

    max 255 chars
  • numbersrequired

    string[]

Response 201

  • datarequired

    object

  • listrequired

    object · data.list

    Same fields as DialerContactList, shown earlier on this page.
  • savedrequired

    integer · data.saved

  • skippedrequired

    integer · data.skipped

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 SMS templates

GET/api/v1/dialer/templates

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Response 200

  • datarequired

    object[]

  • idrequired

    string (uuid) · data[].id

  • userIdrequired

    string (uuid) · data[].userId

  • namerequired

    string · data[].name

  • bodyrequired

    string · data[].body

  • 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.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Create an SMS template

POST/api/v1/dialer/templates

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

{{variable}} placeholders are stored as written; per-recipient merge is not applied yet.

Request body (application/json)

  • namerequired

    string

    max 255 chars
  • bodyrequired

    string

    max 1600 chars

Response 201

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.

Update an SMS template

PATCH/api/v1/dialer/templates/{id}

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

Parameters

  • idrequired

    path · string (uuid)

Request body (application/json)

  • name

    string

    max 255 chars
  • body

    string

    max 1600 chars

Response 200

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.

Delete an SMS template

DELETE/api/v1/dialer/templates/{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 Message, 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.

List your saved contact lists

GET/api/v1/dialer/contact-lists

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Response 200

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.

Create a saved contact list

POST/api/v1/dialer/contact-lists

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

Request body (application/json)

  • namerequired

    string

    max 255 chars
  • numbersrequired

    string[]

Response 201

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 saved contact list with its numbers

GET/api/v1/dialer/contact-lists/{id}

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string (uuid)

Response 200

  • datarequired

    object

  • idrequired

    string (uuid) · data.id

  • userIdrequired

    string (uuid) · data.userId

  • namerequired

    string · data.name

  • countrequired

    integer · data.count

  • createdAtrequired

    string (date-time) · data.createdAt

    ISO-8601 timestamp (UTC)
  • numbersrequired

    string[] · data.numbers

    Bare numbers (kept for existing clients)
  • contactsrequired

    object[] · data.contacts

  • numberrequired

    string · data.contacts[].number

  • namerequired

    string | null · data.contacts[].name

  • fieldsrequired

    object | null · data.contacts[].fields

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.

Delete a saved contact list

DELETE/api/v1/dialer/contact-lists/{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 Message, 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.

List your simple caller-ID lists

GET/api/v1/dialer/cli-sets

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

The older named caller-ID lists used by the campaign wizard. For rotation, caps and stats use /dialer/caller-ids.

Response 200

  • datarequired

    object[]

  • idrequired

    string (uuid) · data[].id

  • userIdrequired

    string (uuid) · data[].userId

  • namerequired

    string · data[].name

  • clisrequired

    string · data[].clis

    The caller IDs, newline-separated
  • 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.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Create a simple caller-ID list

POST/api/v1/dialer/cli-sets

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

Request body (application/json)

  • namerequired

    string

    max 255 chars
  • clisrequired

    string[]

Response 201

  • datarequired

    object

    Same fields as DialerCliSet, 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.

Delete a simple caller-ID list

DELETE/api/v1/dialer/cli-sets/{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 Message, 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.