DialerBee APIv1 · 1.0.0-rc6

Appointments

Move an appointment (Tier 2: the customer may be texted)

POST /v1/appointments/{appointment_id}/reschedule

Scope
appointments:write
Tier
Tier 2 (reaches or unlocks real people)
Data
Personal data
Idempotency
Idempotency-Key: required

Tier 2. This operation can reach or unlock real people. It needs the scope appointments:write and the account switch tier2_appointment_write_enabled, which is off for every account unless DialerBee turns it on at your request. Until then it answers 403 tier_not_enabled. Daily cap: set before launch.

TIER 2. If-Match is required, so a stale copy in your system never overwrites a newer change. The customer may be texted that the appointment moved.

Parameters

NameInTypeRequiredDescription
appointment_idpathstring (AppointmentId)yes
Idempotency-KeyheaderstringyesYour unique value for this logical operation (a UUID is fine). Scoped to your API client, kept 24 hours. (min length 1; max length 255)
If-MatchheaderstringyesThe ETag from your last read. Required; 412 if the resource changed since, 428 if missing. (max length 128)
X-Correlation-IDheaderstringnoYour own trace value, logged with the request. Metadata only, never identity. (min length 1; max length 128)

Request body

The new time.

JSON: AppointmentRescheduleRequest

Response

200: The appointment.

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.
Idempotency-Replayedtrue when this answer is the stored answer of an earlier request with the same Idempotency-Key.
ETagThe resource version. Send it back as If-Match.

Examples

Request example

curl

curl -sS -X POST \
  "https://app.dialerbee.com/api/v1/appointments/appt_0f8fad5b-d9cb-469f-a165-70867728950e/reschedule" \
  -H "Authorization: Bearer $DIALERBEE_API_KEY" \
  -H 'Idempotency-Key: 5f2b7c1e-8a3d-4c6f-9b0e-2d4a6c8e1f3a' \
  -H 'If-Match: "etag-from-your-last-read"' \
  -H "Content-Type: application/json" \
  --data '{
  "scheduled_at": "2026-10-01T14:00:00Z"
}'

Python (SDK)

from dialerbee import DialerBee

db = DialerBee()  # reads DIALERBEE_API_KEY from the environment

result = db.appointments.reschedule(
    "appt_0f8fad5b-d9cb-469f-a165-70867728950e",
    scheduled_at="2026-10-01T14:00:00Z",
    if_match="\"etag-from-your-last-read\"",
    idempotency_key="5f2b7c1e-8a3d-4c6f-9b0e-2d4a6c8e1f3a",
)

Response example

200

{
  "id": "appt_0f8fad5b-d9cb-469f-a165-70867728950e",
  "status": "scheduled",
  "scheduled_at": "2026-10-01T14:00:00Z",
  "timezone": "Asia/Amman",
  "duration_minutes": 30,
  "service_type": "Consultation",
  "contact_name": "Ann Lee",
  "phone": "+12125550101",
  "email": "[email protected]",
  "notes": "Prefers calls after 5 pm.",
  "source": "api",
  "created_at": "2026-09-29T09:15:00Z",
  "updated_at": "2026-09-29T09:20:00Z"
}

Error examples

409 appointment_not_modifiable

{
  "type": "https://docs.dialerbee.com/errors/appointment-not-modifiable",
  "title": "Appointment cannot be changed",
  "status": 409,
  "detail": "The appointment is cancelled, completed or marked no-show, so it cannot be rescheduled or cancelled.",
  "instance": "urn:dialerbee:request:req_01K6BZ3M9X4T7Q2V8N5R6P1W0C",
  "code": "appointment_not_modifiable",
  "request_id": "req_01K6BZ3M9X4T7Q2V8N5R6P1W0C"
}

403 tier_not_enabled

{
  "type": "https://docs.dialerbee.com/errors/tier-not-enabled",
  "title": "Capability not enabled",
  "status": 403,
  "detail": "This operation can reach or unlock real people.",
  "instance": "urn:dialerbee:request:req_01K6BZ3M9X4T7Q2V8N5R6P1W0C",
  "code": "tier_not_enabled",
  "request_id": "req_01K6BZ3M9X4T7Q2V8N5R6P1W0C"
}

409 outcome_unknown

{
  "type": "https://docs.dialerbee.com/errors/outcome-unknown",
  "title": "Outcome unknown",
  "status": 409,
  "detail": "An earlier request with this Idempotency-Key may or may not have taken effect: the platform did not confirm it.",
  "instance": "urn:dialerbee:request:req_01K6BZ3M9X4T7Q2V8N5R6P1W0C",
  "code": "outcome_unknown",
  "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
403tier_not_enabledCapability not enabled
400credential_in_urlCredential in URL
400credential_in_bodyCredential in body
400, 422validation_failedInvalid request
413payload_too_largePayload too large
415unsupported_media_typeUnsupported media type
400idempotency_key_requiredIdempotency-Key required
404not_foundNot found
409appointment_not_modifiableAppointment cannot be changed
409conflictRequest in progress
409idempotency_conflictIdempotency key reused
409outcome_unknownOutcome unknown
412precondition_failedPrecondition failed
428precondition_requiredPrecondition required
429rate_limit_exceededToo many requests
429daily_cap_reachedDaily limit reached
503temporarily_unavailableTemporarily unavailable
503upstream_unavailableTemporarily unavailable
502upstream_invalid_responseUpstream error
500internal_errorInternal error

Objects

AppointmentRescheduleRequest

FieldTypeRequiredDescription
scheduled_atstring (date-time)yes

Appointment

FieldTypeRequiredDescription
idstring (AppointmentId)yesAn appointment. appt_ + a lower-case UUID.
statusstringyes
scheduled_atstring (date-time)yes
timezonestring or nullyes
duration_minutesintegeryes
service_typestring or nullyes
contact_namestring or nullyes
phonestringyes
emailstring or nullyes
notesstring or nullyes
sourcestringyes
created_atstring (date-time)yes
updated_atstring (date-time)yes