Skip to content
Markets open

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)

FieldTypeDescription
messagerequiredstring-max 4000 chars
historyany[]The history returned by the previous turn

Response 200

FieldTypeDescription
datarequiredobject-
replyrequireddata.replystring-
actionsrequireddata.actionsobject[]-
toolrequireddata.actions[].toolstring-
okrequireddata.actions[].okboolean-
writerequireddata.actions[].writeboolean-
suggestionsrequireddata.suggestionsstring[]-
historyrequireddata.historyany[]-

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

NameInTypeDescription
fromquerystringISO date/time
toquerystringISO date/time

Response 200

FieldTypeDescription
datarequiredobject-
windowrequireddata.windowobject-
fromrequireddata.window.fromstring (date-time)ISO-8601 timestamp (UTC)
torequireddata.window.tostring (date-time)ISO-8601 timestamp (UTC)
campaignsrequireddata.campaignsobjectCampaign counts by status, plus total
headlinerequireddata.headlineobject-
dialedrequireddata.headline.dialedinteger-
answeredrequireddata.headline.answeredinteger-
failedrequireddata.headline.failedinteger-
connectRaterequireddata.headline.connectRatenumber-
acdrequireddata.headline.acdnumber-
talkMinutesrequireddata.headline.talkMinutesnumber-
spendrequireddata.headline.spendnumberUSD, a display number
costPerAnsweredrequireddata.headline.costPerAnswerednumber-
costPerMinuterequireddata.headline.costPerMinutenumber-
topDestinationsrequireddata.topDestinationsobject[]-
dialedrequireddata.topDestinations[].dialedinteger-
answeredrequireddata.topDestinations[].answeredinteger-
asrrequireddata.topDestinations[].asrnumber-
prefixrequireddata.topDestinations[].prefixstring-
byHourrequireddata.byHourobject[]-
dailyrequireddata.dailyobject[]-
dialedrequireddata.daily[].dialedinteger-
answeredrequireddata.daily[].answeredinteger-
asrrequireddata.daily[].asrnumber-
dayrequireddata.daily[].daystring-
topCampaignsrequireddata.topCampaignsobject[]-
dialedrequireddata.topCampaigns[].dialedinteger-
answeredrequireddata.topCampaigns[].answeredinteger-
asrrequireddata.topCampaigns[].asrnumber-
idrequireddata.topCampaigns[].idstring (uuid)-
namerequireddata.topCampaigns[].namestring-
statusrequireddata.topCampaigns[].statusstring-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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobject-
campaignrequireddata.campaignobject-
idrequireddata.campaign.idstring (uuid)-
namerequireddata.campaign.namestring-
statusrequireddata.campaign.statusstring-One of draft, ready, running, paused, completed, failed
kindrequireddata.campaign.kindstring-One of voice, sms
headlinerequireddata.headlineobject-
dialedrequireddata.headline.dialedinteger-
answeredrequireddata.headline.answeredinteger-
failedrequireddata.headline.failedinteger-
connectRaterequireddata.headline.connectRatenumber-
acdrequireddata.headline.acdnumber-
talkMinutesrequireddata.headline.talkMinutesnumber-
spendrequireddata.headline.spendnumberUSD, a display number
costPerAnsweredrequireddata.headline.costPerAnswerednumber-
costPerMinuterequireddata.headline.costPerMinutenumber-
totalNumbersrequireddata.headline.totalNumbersinteger-
pendingrequireddata.headline.pendinginteger-
asrrequireddata.headline.asrnumber-
bestHourrequireddata.headline.bestHourobject | null-
hourrequireddata.headline.bestHour.hourinteger-
asrrequireddata.headline.bestHour.asrnumber-
tzrequireddata.headline.bestHour.tzstring-
dispositionsrequireddata.dispositionsobject[]-
statusrequireddata.dispositions[].statusstring-
countrequireddata.dispositions[].countinteger-
pctrequireddata.dispositions[].pctnumber-
failureCausesrequireddata.failureCausesobject[]-
coderequireddata.failureCauses[].codeinteger-
labelrequireddata.failureCauses[].labelstring-
countrequireddata.failureCauses[].countinteger-
byHourrequireddata.byHourobject[]-
byDayOfWeekrequireddata.byDayOfWeekobject[]-
dialedrequireddata.byDayOfWeek[].dialedinteger-
answeredrequireddata.byDayOfWeek[].answeredinteger-
asrrequireddata.byDayOfWeek[].asrnumber-
dowrequireddata.byDayOfWeek[].dowinteger-
byDestinationrequireddata.byDestinationobject[]-
dialedrequireddata.byDestination[].dialedinteger-
answeredrequireddata.byDestination[].answeredinteger-
asrrequireddata.byDestination[].asrnumber-
prefixrequireddata.byDestination[].prefixstring-
acdrequireddata.byDestination[].acdnumber-
retryEffectivenessrequireddata.retryEffectivenessobject[]-
dialedrequireddata.retryEffectiveness[].dialedinteger-
answeredrequireddata.retryEffectiveness[].answeredinteger-
asrrequireddata.retryEffectiveness[].asrnumber-
attemptrequireddata.retryEffectiveness[].attemptinteger-
dailyrequireddata.dailyobject[]-
dialedrequireddata.daily[].dialedinteger-
answeredrequireddata.daily[].answeredinteger-
asrrequireddata.daily[].asrnumber-
dayrequireddata.daily[].daystring-

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

NameInTypeDescription
statusquerystring-One of draft, ready, running, paused, completed, failed
searchquerystring-
cursorquerystring (uuid)-
limitqueryinteger-Default 25

Response 200

FieldTypeDescription
datarequiredobject[]-
idrequireddata[].idstring (uuid)-
userIdrequireddata[].userIdstring (uuid)-
routeIdrequireddata[].routeIdstring (uuid) | nullThe purchased route the campaign sends over
namerequireddata[].namestring-
kindrequireddata[].kindstring-One of voice, sms
environmentrequireddata[].environmentstringtest = created with a test key; simulated, never really dialled or billedOne of live, test
statusrequireddata[].statusstring-One of draft, ready, running, paused, completed, failed
messageBodyrequireddata[].messageBodystring | nullSMS campaigns: the message text
senderIdrequireddata[].senderIdstring | nullSMS campaigns: the sender ID
aiAgentIdrequireddata[].aiAgentIdstring (uuid) | nullVoice campaigns: the AI voice agent that handles answered calls
concurrencyrequireddata[].concurrencyinteger-
maxCallDurationrequireddata[].maxCallDurationintegerSeconds
callIntervalrequireddata[].callIntervalinteger-
platformFeePerCallrequireddata[].platformFeePerCallmoneyUSD as a decimal string with exactly 6 places, e.g. "0.012500".
totalNumbersrequireddata[].totalNumbersinteger-
totalClisrequireddata[].totalClisinteger-
cliSetIdrequireddata[].cliSetIdstring (uuid) | null-
cliStrategyrequireddata[].cliStrategyobject | nullCaller-ID rotation strategy, when a caller-ID set is assigned
numbersDialedrequireddata[].numbersDialedinteger-
numbersAnsweredrequireddata[].numbersAnsweredinteger-
numbersFailedrequireddata[].numbersFailedinteger-
totalDurationSecondsrequireddata[].totalDurationSecondsinteger-
windowStartHourrequireddata[].windowStartHourinteger | null-
windowEndHourrequireddata[].windowEndHourinteger | null-
windowTzrequireddata[].windowTzstring | null-
maxAttemptsrequireddata[].maxAttemptsinteger-
retryDelayMinutesrequireddata[].retryDelayMinutesinteger-
maxSpendrequireddata[].maxSpendmoney | nullBudget cap; the campaign pauses when reached USD as a decimal string with exactly 6 places, e.g. "0.012500".
scheduleAtrequireddata[].scheduleAtstring (date-time) | nullISO-8601 timestamp (UTC)
startedAtrequireddata[].startedAtstring (date-time) | nullISO-8601 timestamp (UTC)
completedAtrequireddata[].completedAtstring (date-time) | nullISO-8601 timestamp (UTC)
createdAtrequireddata[].createdAtstring (date-time)ISO-8601 timestamp (UTC)
updatedAtrequireddata[].updatedAtstring (date-time)ISO-8601 timestamp (UTC)
nextCursorrequiredstring | nullPass as cursor to fetch the next page; null on the last page.
hasMorerequiredbooleanTrue 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)

FieldTypeDescription
namerequiredstring-max 255 chars
routeIdrequiredstring (uuid)-
kindstring-One of voice, sms
messageBodystring-max 1600 chars
senderIdstring-max 20 chars
targetAcdstring-
targetAsrstring-
concurrencyinteger-1 to 128, default 1
maxCallDurationinteger-1 to 3600, default 300
callIntervalinteger-0 to 60000, default 0
notesstring-max 2000 chars
windowStartHourinteger-0 to 23
windowEndHourinteger-0 to 23
windowTzstring-max 64 chars
maxAttemptsinteger-1 to 10, default 1
retryDelayMinutesinteger-1 to 1440, default 60
maxSpendstring-
scheduleAtstring (date-time)-
aiAgentIdstring (uuid) | null-

Response 201

FieldTypeDescription
datarequiredobjectSame 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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobjectSame 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

NameInTypeDescription
idrequiredpathstring (uuid)-

Request body (application/json)

FieldTypeDescription
namestring-max 255 chars
messageBodystring | null-max 1600 chars
senderIdstring | null-max 20 chars
targetAcdstring | null-
targetAsrstring | null-
concurrencyinteger-1 to 128
maxCallDurationinteger-1 to 3600
callIntervalinteger-0 to 60000
notesstring | null-max 2000 chars
windowStartHourinteger | null-0 to 23
windowEndHourinteger | null-0 to 23
windowTzstring | null-max 64 chars
maxAttemptsinteger-1 to 10
retryDelayMinutesinteger-1 to 1440
maxSpendstring | null-
scheduleAtstring (date-time) | null-
aiAgentIdstring (uuid) | null-

Response 200

FieldTypeDescription
datarequiredobjectSame 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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobject-
messagerequireddata.messagestring-

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

NameInTypeDescription
idrequiredpathstring (uuid)-

Request body (application/json)

FieldTypeDescription
actionrequiredstring-One of start, pause, stop

Response 200

FieldTypeDescription
datarequiredobjectSame 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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobjectSame 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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobject-
totalNumbersrequireddata.totalNumbersinteger-
numbersDialedrequireddata.numbersDialedinteger-
numbersAnsweredrequireddata.numbersAnsweredinteger-
numbersFailedrequireddata.numbersFailedinteger-
numbersPendingrequireddata.numbersPendinginteger-
totalDurationSecondsrequireddata.totalDurationSecondsinteger-
asrrequireddata.asrnumberAnswer-seizure ratio, percent
acdrequireddata.acdnumberAverage call duration, seconds
progressrequireddata.progressnumberPercent of numbers dialled
activeCallsrequireddata.activeCallsinteger-
totalSpendrequireddata.totalSpendnumberUSD spent so far (a display number, not a 6-decimal string)
maxSpendrequireddata.maxSpendnumber | nullBudget cap in USD, as a number
budgetProgressrequireddata.budgetProgressnumber | nullPercent 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)

FieldTypeDescription
filenamestring-max 255 chars
contentBase64stringThe file, base64-encoded
contentstringThe file as plain text (CSV)

Response 200

FieldTypeDescription
datarequiredobject-
hasHeaderrequireddata.hasHeaderboolean-
columnsrequireddata.columnsobject[]-
indexrequireddata.columns[].indexinteger-
labelrequireddata.columns[].labelstring-
sampleRowsrequireddata.sampleRowsstring[][]-
dataRowsrequireddata.dataRowsstring[][]-
suggestedMappingrequireddata.suggestedMappingobject-
headerRowIndexrequireddata.suggestedMapping.headerRowIndexinteger0-based header row, or -1 when the file has none
columnsrequireddata.suggestedMapping.columnsobject-
phonerequireddata.suggestedMapping.columns.phoneinteger-
namerequireddata.suggestedMapping.columns.nameinteger | null-
firstNamerequireddata.suggestedMapping.columns.firstNameinteger | null-
lastNamerequireddata.suggestedMapping.columns.lastNameinteger | null-
extraColumnsrequireddata.suggestedMapping.extraColumnsinteger[]Columns kept as per-contact fields
notesdata.suggestedMapping.notesstring-
rowCountrequireddata.rowCountinteger-
truncatedrequireddata.truncatedboolean-

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)

FieldTypeDescription
rowsrequiredstring[][]The dataRows returned by /contacts/parse
mappingrequiredobjectSame fields as DialerContactMapping, shown earlier on this page.
columnLabelsobject[]-
indexrequiredcolumnLabels[].indexinteger-
labelrequiredcolumnLabels[].labelstring-max 255 chars
campaignIdstring (uuid)-
listIdstring (uuid)-
saveAsListNamestring-max 255 chars
keepDraftboolean-

Response 201

FieldTypeDescription
datarequiredobject-
importedrequireddata.importedinteger-
skippedInvalidrequireddata.skippedInvalidinteger-
skippedDuprequireddata.skippedDupinteger-
samplerequireddata.sampleobject[]-
numberrequireddata.sample[].numberstring-
namerequireddata.sample[].namestring | null-
fieldsrequireddata.sample[].fieldsobject | null-
rejectsrequireddata.rejectsobject[]-
rowrequireddata.rejects[].rowinteger-
valuerequireddata.rejects[].valuestring-
reasonrequireddata.rejects[].reasonstring-
savedListIddata.savedListIdstring (uuid) | null-
campaigndata.campaignobjectSame fields as DialerCampaign, shown earlier on this page.
totalNumbersdata.totalNumbersinteger-

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

NameInTypeDescription
idrequiredpathstring (uuid)-
statusquerystring-One of pending, dialing, answered, no_answer, busy, failed, skipped
cursorquerystring (uuid)-
limitqueryinteger-Default 25

Response 200

FieldTypeDescription
datarequiredobject[]-
idrequireddata[].idstring (uuid)-
campaignIdrequireddata[].campaignIdstring (uuid)-
numberrequireddata[].numberstring-
statusrequireddata[].statusstring-One of pending, dialing, answered, no_answer, busy, failed, skipped
sipResponseCoderequireddata[].sipResponseCodeinteger | null-
durationSecondsrequireddata[].durationSecondsinteger | null-
attemptrequireddata[].attemptinteger-
nextAttemptAtrequireddata[].nextAttemptAtstring (date-time) | nullISO-8601 timestamp (UTC)
dialedAtrequireddata[].dialedAtstring (date-time) | nullISO-8601 timestamp (UTC)
answeredAtrequireddata[].answeredAtstring (date-time) | nullISO-8601 timestamp (UTC)
completedAtrequireddata[].completedAtstring (date-time) | nullISO-8601 timestamp (UTC)
createdAtrequireddata[].createdAtstring (date-time)ISO-8601 timestamp (UTC)
costrequireddata[].costmoney | nullCost of the latest call to this number, when there is one USD as a decimal string with exactly 6 places, e.g. "0.012500".
clirequireddata[].clistring | nullCaller ID presented on the latest call
sipCauserequireddata[].sipCausestring | null-
nextCursorrequiredstring | nullPass as cursor to fetch the next page; null on the last page.
hasMorerequiredbooleanTrue 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

NameInTypeDescription
idrequiredpathstring (uuid)-

Request body (application/json)

FieldTypeDescription
numbersrequiredstring[]-
keepDraftboolean-

Response 201

FieldTypeDescription
datarequiredobject-
countrequireddata.countintegerSame as inserted (kept for existing clients)
insertedrequireddata.insertedinteger-
skippedrequireddata.skippedinteger-
rejectsrequireddata.rejectsobject[]Up to 200 rejected entries with the reason
valuerequireddata.rejects[].valuestring-
reasonrequireddata.rejects[].reasonstring-
totalNumbersrequireddata.totalNumbersinteger-
campaignrequireddata.campaignobjectSame 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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobjectSame 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

NameInTypeDescription
idrequiredpathstring (uuid)-
numberIdrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-

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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobject[]-
idrequireddata[].idstring (uuid)-
campaignIdrequireddata[].campaignIdstring (uuid)-
clirequireddata[].clistring-
statusrequireddata[].statusstring-One of pending, verified, failed
verifiedrequireddata[].verifiedboolean-
verifiedAtrequireddata[].verifiedAtstring (date-time) | nullISO-8601 timestamp (UTC)
createdAtrequireddata[].createdAtstring (date-time)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

NameInTypeDescription
idrequiredpathstring (uuid)-

Request body (application/json)

FieldTypeDescription
clisrequiredstring[]-

Response 201

FieldTypeDescription
datarequiredobject-
countrequireddata.countinteger-
insertedrequireddata.insertedinteger-
skippedrequireddata.skippedinteger-
rejectsrequireddata.rejectsobject[]-
valuerequireddata.rejects[].valuestring-
reasonrequireddata.rejects[].reasonstring-
totalClisrequireddata.totalClisinteger-

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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobjectSame 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

FieldTypeDescription
datarequiredobject[]-
idrequireddata[].idstring (uuid)-
userIdrequireddata[].userIdstring (uuid)-
namerequireddata[].namestring-
descriptionrequireddata[].descriptionstring | null-
createdAtrequireddata[].createdAtstring (date-time)ISO-8601 timestamp (UTC)
updatedAtrequireddata[].updatedAtstring (date-time)ISO-8601 timestamp (UTC)
cliCountrequireddata[].cliCountinteger-

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)

FieldTypeDescription
namerequiredstring-max 255 chars
descriptionstring-max 2000 chars

Response 201

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
userIdrequireddata.userIdstring (uuid)-
namerequireddata.namestring-
descriptionrequireddata.descriptionstring | null-
createdAtrequireddata.createdAtstring (date-time)ISO-8601 timestamp (UTC)
updatedAtrequireddata.updatedAtstring (date-time)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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobjectSame fields as DialerCallerIdSet, 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.

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

NameInTypeDescription
idrequiredpathstring (uuid)-

Request body (application/json)

FieldTypeDescription
namestring-max 255 chars
descriptionstring | null-max 2000 chars

Response 200

FieldTypeDescription
datarequiredobjectSame fields as DialerCallerIdSet, 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 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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-

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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobject[]-
idrequireddata[].idstring (uuid)-
setIdrequireddata[].setIdstring (uuid)-
clirequireddata[].clistring-
labelrequireddata[].labelstring | null-
countryrequireddata[].countrystring | null-
countryCoderequireddata[].countryCodestring | null-
areaCoderequireddata[].areaCodestring | null-
sourcerequireddata[].sourcestring-One of upload, paste, manual, revshare, did
enabledrequireddata[].enabledboolean-
weightrequireddata[].weightinteger-
dailyCaprequireddata[].dailyCapinteger | null-
campaignCaprequireddata[].campaignCapinteger | null-
hourlyCaprequireddata[].hourlyCapinteger | null-
cooldownSecrequireddata[].cooldownSecinteger | null-
statusrequireddata[].statusstring-One of active, resting, retired
tagsrequireddata[].tagsstring[]-
notesrequireddata[].notesstring | null-
createdAtrequireddata[].createdAtstring (date-time)ISO-8601 timestamp (UTC)
statsrequireddata[].statsobject-
callsrequireddata[].stats.callsinteger-
connectsrequireddata[].stats.connectsinteger-
connectRaterequireddata[].stats.connectRatenumberPercent
avgSecrequireddata[].stats.avgSecnumber-
todayUsedrequireddata[].stats.todayUsedinteger-
campaignUsedrequireddata[].stats.campaignUsedinteger-
lastUsedAtrequireddata[].stats.lastUsedAtstring (date-time) | nullISO-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

NameInTypeDescription
idrequiredpathstring (uuid)-

Request body (application/json)

FieldTypeDescription
clisstring | object[]A manual list of E.164 caller IDs, bare or with a label
cliclis[].clistring-
labelclis[].labelstring | null-max 120 chars
pastestringA pasted block of numbersmax 2000000 chars
filenamestring-max 255 chars
contentBase64stringA CSV/XLSX file, base64-encoded
contentstringA CSV file as plain text

Response 201

FieldTypeDescription
datarequiredobject-
insertedrequireddata.insertedinteger-
skippedrequireddata.skippedinteger-
rejectsrequireddata.rejectsobject[]-
valuerequireddata.rejects[].valuestring-
reasonrequireddata.rejects[].reasonstring-

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

NameInTypeDescription
idrequiredpathstring (uuid)-

Request body (application/json)

FieldTypeDescription
takingIdsstring (uuid)[] | string-

Response 201

FieldTypeDescription
datarequiredobjectSame fields as DialerCallerIdAddResult, 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.

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

NameInTypeDescription
idrequiredpathstring (uuid)-
nidrequiredpathstring (uuid)-

Request body (application/json)

FieldTypeDescription
enabledboolean-
weightinteger-1 to 1000
dailyCapinteger | null-min 0
campaignCapinteger | null-min 0
hourlyCapinteger | null-min 0
cooldownSecinteger | null-min 0
tagsstring[]-
statusstring-One of active, resting, retired
labelstring | null-max 120 chars
notesstring | null-max 2000 chars

Response 200

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
setIdrequireddata.setIdstring (uuid)-
clirequireddata.clistring-
labelrequireddata.labelstring | null-
countryrequireddata.countrystring | null-
countryCoderequireddata.countryCodestring | null-
areaCoderequireddata.areaCodestring | null-
sourcerequireddata.sourcestring-One of upload, paste, manual, revshare, did
enabledrequireddata.enabledboolean-
weightrequireddata.weightinteger-
dailyCaprequireddata.dailyCapinteger | null-
campaignCaprequireddata.campaignCapinteger | null-
hourlyCaprequireddata.hourlyCapinteger | null-
cooldownSecrequireddata.cooldownSecinteger | null-
statusrequireddata.statusstring-One of active, resting, retired
tagsrequireddata.tagsstring[]-
notesrequireddata.notesstring | null-
createdAtrequireddata.createdAtstring (date-time)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

NameInTypeDescription
idrequiredpathstring (uuid)-
nidrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-

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

NameInTypeDescription
idrequiredpathstring (uuid)-

Request body (application/json)

FieldTypeDescription
actionrequiredstring-One of enable, disable, delete
cliIdsrequiredstring (uuid)[]-

Response 200

FieldTypeDescription
datarequiredobject-
affectedrequireddata.affectedinteger-

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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobject-
totalClisrequireddata.totalClisinteger-
activeClisrequireddata.activeClisinteger-
restingClisrequireddata.restingClisinteger-
retiredClisrequireddata.retiredClisinteger-
callsrequireddata.callsinteger-
connectsrequireddata.connectsinteger-
connectRaterequireddata.connectRatenumberPercent
avgSecrequireddata.avgSecnumber-
campaignsrequireddata.campaignsinteger-

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

NameInTypeDescription
idrequiredpathstring (uuid)-

Request body (application/json)

FieldTypeDescription
cliSetIdrequiredstring (uuid) | nullnull clears the assignment (the campaign falls back to its own caller-ID list)
strategyobject-
moderequiredstrategy.modestring-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
dailyCapstrategy.dailyCapinteger | null-min 0
campaignCapstrategy.campaignCapinteger | null-min 0
hourlyCapstrategy.hourlyCapinteger | null-min 0
cooldownSecstrategy.cooldownSecinteger | null-min 0
restBelowAsrstrategy.restBelowAsrnumber | nullRest a caller ID whose ASR falls below this percent0 to 100
weightsRespectedstrategy.weightsRespectedboolean-

Response 200

FieldTypeDescription
datarequiredobjectSame 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)

FieldTypeDescription
takingIdsstring (uuid)[] | string-
fromstringISO date/time
tostringISO date/time
minDurationSecinteger-min 0
saveAsListNamestring-max 255 chars

Response 200

FieldTypeDescription
datarequiredobject-
totalrequireddata.totalinteger-
dialableCountrequireddata.dialableCountinteger-
callersrequireddata.callersobject[]-
prefixrequireddata.callers[].prefixstringThe MASKED leading digits of the caller; full numbers are never stored
fromCarrierrequireddata.callers[].fromCarrierstring | null-
originIsorequireddata.callers[].originIsostring | null-
originCountryrequireddata.callers[].originCountrystring | null-
originDialCoderequireddata.callers[].originDialCodestring | null-
callCountrequireddata.callers[].callCountinteger-
lastCallAtrequireddata.callers[].lastCallAtstring (date-time) | nullISO-8601 timestamp (UTC)
dialablerequireddata.callers[].dialablebooleanFalse for masked prefixes, which is currently always the case
savedrequireddata.savedobject | nullThe saved contact list, when saveAsListName was given and there was something dialable to save
listrequireddata.saved.listobject-
idrequireddata.saved.list.idstring (uuid)-
userIdrequireddata.saved.list.userIdstring (uuid)-
namerequireddata.saved.list.namestring-
countrequireddata.saved.list.countinteger-
createdAtrequireddata.saved.list.createdAtstring (date-time)ISO-8601 timestamp (UTC)
savedrequireddata.saved.savedinteger-
skippedrequireddata.saved.skippedinteger-
limitationrequireddata.limitationstring | null-

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

NameInTypeDescription
cliSetIdrequiredquerystring (uuid)-
takingIdsquerystring"all" or comma-separated revenue share taking ids

Response 200

FieldTypeDescription
datarequiredobject-
setIdrequireddata.setIdstring (uuid)-
setNamerequireddata.setNamestring-
groupsrequireddata.groupsobject[]-
clirequireddata.groups[].clistring-
labelrequireddata.groups[].labelstring | null-
countryrequireddata.groups[].countrystring | null-
countryCoderequireddata.groups[].countryCodestring | null-
targetsrequireddata.groups[].targetsobject[]Same fields as DialerRevshareCaller, shown earlier on this page.
savedrequireddata.savedobject | nullThe saved contact list, when saveAsListName was given and there was something dialable to save
listrequireddata.saved.listobjectSame fields as DialerContactList, shown earlier on this page.
savedrequireddata.saved.savedinteger-
skippedrequireddata.saved.skippedinteger-
limitationrequireddata.limitationstring | null-

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)

FieldTypeDescription
cliSetIdrequiredstring (uuid)-
takingIdsstring (uuid)[] | string-
saveAsListNamestring-max 255 chars

Response 200

FieldTypeDescription
datarequiredobjectSame fields as DialerCompatibleTargets, 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.

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)

FieldTypeDescription
numbersrequiredstring[]-
countryCodestringCountry dial code, e.g. "44"max 8 chars
prefixstring-max 24 chars
suppressDncboolean-

Response 200

FieldTypeDescription
datarequiredobject-
keptrequireddata.keptstring[]E.164 numbers that survived
invalidrequireddata.invalidinteger-
duprequireddata.dupinteger-
filteredrequireddata.filteredinteger-
suppressedrequireddata.suppressedinteger-
totalrequireddata.totalinteger-

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)

FieldTypeDescription
namerequiredstring-max 255 chars
numbersrequiredstring[]-

Response 201

FieldTypeDescription
datarequiredobject-
listrequireddata.listobjectSame fields as DialerContactList, shown earlier on this page.
savedrequireddata.savedinteger-
skippedrequireddata.skippedinteger-

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

FieldTypeDescription
datarequiredobject[]-
idrequireddata[].idstring (uuid)-
userIdrequireddata[].userIdstring (uuid)-
namerequireddata[].namestring-
bodyrequireddata[].bodystring-
createdAtrequireddata[].createdAtstring (date-time)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)

FieldTypeDescription
namerequiredstring-max 255 chars
bodyrequiredstring-max 1600 chars

Response 201

FieldTypeDescription
datarequiredobjectSame fields as DialerSmsTemplate, 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.

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

NameInTypeDescription
idrequiredpathstring (uuid)-

Request body (application/json)

FieldTypeDescription
namestring-max 255 chars
bodystring-max 1600 chars

Response 200

FieldTypeDescription
datarequiredobjectSame fields as DialerSmsTemplate, 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 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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobjectSame 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

FieldTypeDescription
datarequiredobject[]Same fields as DialerContactList, 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.
  • 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)

FieldTypeDescription
namerequiredstring-max 255 chars
numbersrequiredstring[]-

Response 201

FieldTypeDescription
datarequiredobjectSame fields as DialerContactList, 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 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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobject-
idrequireddata.idstring (uuid)-
userIdrequireddata.userIdstring (uuid)-
namerequireddata.namestring-
countrequireddata.countinteger-
createdAtrequireddata.createdAtstring (date-time)ISO-8601 timestamp (UTC)
numbersrequireddata.numbersstring[]Bare numbers (kept for existing clients)
contactsrequireddata.contactsobject[]-
numberrequireddata.contacts[].numberstring-
namerequireddata.contacts[].namestring | null-
fieldsrequireddata.contacts[].fieldsobject | null-

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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobjectSame 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

FieldTypeDescription
datarequiredobject[]-
idrequireddata[].idstring (uuid)-
userIdrequireddata[].userIdstring (uuid)-
namerequireddata[].namestring-
clisrequireddata[].clisstringThe caller IDs, newline-separated
createdAtrequireddata[].createdAtstring (date-time)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)

FieldTypeDescription
namerequiredstring-max 255 chars
clisrequiredstring[]-

Response 201

FieldTypeDescription
datarequiredobjectSame 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

NameInTypeDescription
idrequiredpathstring (uuid)-

Response 200

FieldTypeDescription
datarequiredobjectSame 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.