DialerBee APIv1 · 1.0.0-rc6

Callbacks

List a campaign's callbacks, newest created first

GET /v1/callbacks

Scope
callbacks:read
Tier
Tier 1
Data
Personal data
Idempotency
Idempotency-Key: not used
Limit
Up to 100 per page (default 50)

campaign_id is required. A campaign_id of another account returns an empty page, never another account's callbacks. A callback whose lead was deleted is listed with lead_id: null.

Parameters

NameInTypeRequiredDescription
campaign_idquerystring (CampaignId)yes
limitqueryintegerno (min 1; max 100; default 50)
cursorquerystringnopage.next_cursor from the previous page. Opaque; bound to your account, API client and filters. (min length 1; max length 1024)
statusqueryone of pending, completed, cancelledno
X-Correlation-IDheaderstringnoYour own trace value, logged with the request. Metadata only, never identity. (min length 1; max length 128)

Response

200: One page of callbacks, newest created first.

HeaderMeaning
X-Request-IDThe DialerBee request id. Quote it to support. Every response carries X-Request-ID: req_<ULID>, or edge_<32 hex> when the edge answered before the request reached the API.
Cache-ControlAlways no-store.

Examples

Request example

curl

curl -sS -X GET \
  "https://app.dialerbee.com/api/v1/callbacks?campaign_id=cmp_0f8fad5b-d9cb-469f-a165-70867728950e&limit=50" \
  -H "Authorization: Bearer $DIALERBEE_API_KEY"

Python (SDK)

from dialerbee import DialerBee

db = DialerBee()  # reads DIALERBEE_API_KEY from the environment

page = db.callbacks.list(campaign_id="cmp_0f8fad5b-d9cb-469f-a165-70867728950e", limit=50)
for item in page:  # this page, then every following page
    print(item.id)

Response example

200

{
  "data": [
    {
      "id": "cb_0f8fad5b-d9cb-469f-a165-70867728950e",
      "lead_id": "lead_0f8fad5b-d9cb-469f-a165-70867728950e",
      "campaign_id": "cmp_0f8fad5b-d9cb-469f-a165-70867728950e",
      "scheduled_at": "2026-10-01T14:00:00Z",
      "status": "pending",
      "notes": "Prefers calls after 5 pm.",
      "created_at": "2026-09-29T09:15:00Z"
    }
  ],
  "page": {
    "next_cursor": "c1.example-opaque-cursor",
    "has_more": true
  }
}

Error examples

400 invalid_cursor

{
  "type": "https://docs.dialerbee.com/errors/invalid-cursor",
  "title": "Invalid cursor",
  "status": 400,
  "detail": "The cursor is not valid for this request: it was changed, it belongs to another list or other filters, or it expired.",
  "instance": "urn:dialerbee:request:req_01K6BZ3M9X4T7Q2V8N5R6P1W0C",
  "code": "invalid_cursor",
  "request_id": "req_01K6BZ3M9X4T7Q2V8N5R6P1W0C"
}

403 insufficient_scope

{
  "type": "https://docs.dialerbee.com/errors/insufficient-scope",
  "title": "Not permitted",
  "status": 403,
  "detail": "The API client does not hold the scope this operation requires.",
  "instance": "urn:dialerbee:request:req_01K6BZ3M9X4T7Q2V8N5R6P1W0C",
  "code": "insufficient_scope",
  "request_id": "req_01K6BZ3M9X4T7Q2V8N5R6P1W0C"
}

401 invalid_api_key

{
  "type": "https://docs.dialerbee.com/errors/invalid-api-key",
  "title": "Invalid API key",
  "status": 401,
  "detail": "The Authorization header is missing, is not Bearer dbk_live_..., or the key is not recognised, has expired or was revoked (one answer for every key problem, so a key's state is never revealed).",
  "instance": "urn:dialerbee:request:req_01K6BZ3M9X4T7Q2V8N5R6P1W0C",
  "code": "invalid_api_key",
  "request_id": "req_01K6BZ3M9X4T7Q2V8N5R6P1W0C"
}

Errors

StatusCodeTitle
401invalid_api_keyInvalid API key
403api_access_disabledAPI access disabled
403ip_not_allowedIP address not allowed
403insufficient_scopeNot permitted
400credential_in_urlCredential in URL
400, 422validation_failedInvalid request
400invalid_cursorInvalid cursor
429rate_limit_exceededToo many requests
503temporarily_unavailableTemporarily unavailable
503upstream_unavailableTemporarily unavailable
502upstream_invalid_responseUpstream error
500internal_errorInternal error

Objects

CallbackList

FieldTypeRequiredDescription
dataarray of Callbackyes
pagePageyesPass next_cursor as cursor to get the next page. null means this is the last page.

Page

Pass next_cursor as cursor to get the next page. null means this is the last page.

FieldTypeRequiredDescription
next_cursorstring or nullyes (max length 1024)
has_morebooleanyes

Callback

FieldTypeRequiredDescription
idstring (CallbackId)yesA scheduled callback. cb_ + a lower-case UUID.
lead_idstring (LeadId) or nullyesThe lead, or null when the lead was deleted after the callback was scheduled.
campaign_idstring (CampaignId)yesA campaign. cmp_ + a lower-case UUID.
scheduled_atstring (date-time)yes
statusstringyes
notesstring or nullyes
created_atstring (date-time)yes