Skip to content

Callbacks

Generated from DialerDigital/core commit 6e9f026f0a72 — spec openapi/dialer-v1.yaml v0.36.0. Do not edit by hand; see How this reference is built. Download the OpenAPI spec.

Consumer-agreed redial appointments.

Endpoints

MethodPathSummary
GET/v1/callbacksCallback queue view / due feed
POST/v1/callbacksSchedule a consumer-agreed redial
POST/v1/callbacks/{id}/completepending → done
POST/v1/callbacks/{id}/cancelpending → cancelled
POST/v1/callbacks/{id}/misspending → missed

Callback queue view / due feed

http
GET /v1/callbacks

due=now (also true/1) is the runner-facing due feed (pending AND scheduled_at <= now, priority then time order); otherwise the queue view filtered by status (default pending, soonest first).

Parameters

NameInTypeRequiredDescription
duequerynow · true · 1no
statusquerypending · done · cancelled · missedno
campaign_idquerystring (uuid)no
debt_idquerystring (uuid)no
limitqueryintegernoPage size (default 100, max 1000).

Responses

200

Callbacks matching the view.

FieldTypeRequiredDescription
callbacksarray of Callbackyes
callbacks[].idstring (uuid)no
callbacks[].tenant_idstring (uuid)no
callbacks[].debt_idstring (uuid)no
callbacks[].contact_phonestringno
callbacks[].campaign_idstring (uuid) | nullno
callbacks[].agent_idstring (uuid) | nullno
callbacks[].scheduled_atstring (date-time)no
callbacks[].notestring | nullno
callbacks[].priorityintegerno
callbacks[].statuspending · done · cancelled · missedno
callbacks[].created_atstring (date-time)no
callbacks[].updated_atstring (date-time)no

400 — BadRequest

Malformed request (shape/type errors, invalid filters, bad timestamps).

json
{
  "error": {
    "code": "bad_request",
    "message": "from must be RFC-3339"
  }
}

401 — Unauthorized

Missing, unknown or revoked API key (or, on /v1/admin/*, a bad/unset admin token; on webhooks, a bad/missing signature).

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

Schedule a consumer-agreed redial

http
POST /v1/callbacks

contact_phone must already be a contact of the debt (the gates need line/locale data) → 422 otherwise; less than 10 minutes notice → 422; the number is in R16 quarantine → 422 (the platform will not promise a call it cannot make); unknown debt → 404; bad timestamp → 400. campaign_id defaults to the debt's. The campaign runner dials due callbacks BEFORE fresh leads.

Request body (JSON, required)

FieldTypeRequiredDescription
debt_idstring (uuid)yes
contact_phonestringyesE.164 of an existing contact of the debt.
scheduled_atstring (date-time)yesRFC 3339, at least 10 minutes in the future.
campaign_idstring (uuid)no
agent_idstring (uuid)no
notestringno
priorityintegerno
json
{
  "debt_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
  "contact_phone": "+13125551001",
  "scheduled_at": "2026-07-06T16:30:00Z",
  "note": "postman: consumer pidió el martes"
}

Responses

201

Scheduled callback.

FieldTypeRequiredDescription
callbackobject (Callback)yes
callback.idstring (uuid)no
callback.tenant_idstring (uuid)no
callback.debt_idstring (uuid)no
callback.contact_phonestringno
callback.campaign_idstring (uuid) | nullno
callback.agent_idstring (uuid) | nullno
callback.scheduled_atstring (date-time)no
callback.notestring | nullno
callback.priorityintegerno
callback.statuspending · done · cancelled · missedno
callback.created_atstring (date-time)no
callback.updated_atstring (date-time)no

400 — BadRequest

Malformed request (shape/type errors, invalid filters, bad timestamps).

json
{
  "error": {
    "code": "bad_request",
    "message": "from must be RFC-3339"
  }
}

401 — Unauthorized

Missing, unknown or revoked API key (or, on /v1/admin/*, a bad/unset admin token; on webhooks, a bad/missing signature).

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

403 — Forbidden

The tenant is suspended.

json
{
  "error": {
    "code": "forbidden",
    "message": "tenant is suspended"
  }
}

404 — NotFound

Unknown id, malformed (non-UUID) id OR another tenant's id — RLS returns zero rows, so all three are indistinguishable by design (no existence leak, never a 403 for foreign ids).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

422 — Unprocessable

Shape is fine, semantics are not (broken domain rule).

json
{
  "error": {
    "code": "unprocessable",
    "message": "scheduled_at must be at least 10 minutes out"
  }
}

pending → done

http
POST /v1/callbacks/{id}/complete

Status machine pending → done|cancelled|missed (terminal); 409 on re-transition.

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesResource UUID. Malformed or cross-tenant ids read as 404.

Responses

200

The completed callback.

FieldTypeRequiredDescription
callbackobject (Callback)yes
callback.idstring (uuid)no
callback.tenant_idstring (uuid)no
callback.debt_idstring (uuid)no
callback.contact_phonestringno
callback.campaign_idstring (uuid) | nullno
callback.agent_idstring (uuid) | nullno
callback.scheduled_atstring (date-time)no
callback.notestring | nullno
callback.priorityintegerno
callback.statuspending · done · cancelled · missedno
callback.created_atstring (date-time)no
callback.updated_atstring (date-time)no

401 — Unauthorized

Missing, unknown or revoked API key (or, on /v1/admin/*, a bad/unset admin token; on webhooks, a bad/missing signature).

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound

Unknown id, malformed (non-UUID) id OR another tenant's id — RLS returns zero rows, so all three are indistinguishable by design (no existence leak, never a 403 for foreign ids).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

409 — Conflict

Invalid state transition, uniqueness conflict, or a seat that is busy/reserved.

json
{
  "error": {
    "code": "conflict",
    "message": "invalid state transition"
  }
}

pending → cancelled

http
POST /v1/callbacks/{id}/cancel

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesResource UUID. Malformed or cross-tenant ids read as 404.

Responses

200

The cancelled callback.

FieldTypeRequiredDescription
callbackobject (Callback)yes
callback.idstring (uuid)no
callback.tenant_idstring (uuid)no
callback.debt_idstring (uuid)no
callback.contact_phonestringno
callback.campaign_idstring (uuid) | nullno
callback.agent_idstring (uuid) | nullno
callback.scheduled_atstring (date-time)no
callback.notestring | nullno
callback.priorityintegerno
callback.statuspending · done · cancelled · missedno
callback.created_atstring (date-time)no
callback.updated_atstring (date-time)no

401 — Unauthorized

Missing, unknown or revoked API key (or, on /v1/admin/*, a bad/unset admin token; on webhooks, a bad/missing signature).

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound

Unknown id, malformed (non-UUID) id OR another tenant's id — RLS returns zero rows, so all three are indistinguishable by design (no existence leak, never a 403 for foreign ids).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

409 — Conflict

Invalid state transition, uniqueness conflict, or a seat that is busy/reserved.

json
{
  "error": {
    "code": "conflict",
    "message": "invalid state transition"
  }
}

pending → missed

http
POST /v1/callbacks/{id}/miss

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesResource UUID. Malformed or cross-tenant ids read as 404.

Responses

200

The missed callback.

FieldTypeRequiredDescription
callbackobject (Callback)yes
callback.idstring (uuid)no
callback.tenant_idstring (uuid)no
callback.debt_idstring (uuid)no
callback.contact_phonestringno
callback.campaign_idstring (uuid) | nullno
callback.agent_idstring (uuid) | nullno
callback.scheduled_atstring (date-time)no
callback.notestring | nullno
callback.priorityintegerno
callback.statuspending · done · cancelled · missedno
callback.created_atstring (date-time)no
callback.updated_atstring (date-time)no

401 — Unauthorized

Missing, unknown or revoked API key (or, on /v1/admin/*, a bad/unset admin token; on webhooks, a bad/missing signature).

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound

Unknown id, malformed (non-UUID) id OR another tenant's id — RLS returns zero rows, so all three are indistinguishable by design (no existence leak, never a 403 for foreign ids).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

409 — Conflict

Invalid state transition, uniqueness conflict, or a seat that is busy/reserved.

json
{
  "error": {
    "code": "conflict",
    "message": "invalid state transition"
  }
}

Nothing in these docs is legal advice — always confirm compliance posture with your own counsel.