---
title: "Create an appointment"
description: "Book one slot only after the person explicitly confirms it. Pass the exact slotToken returned by find_availability, the patient's name, documentNumber and documentType (one of the organization's documentTypes codes; the first one when omitted), and the intake the organization requires (call get_intake_settings first). When the service has an age rule (eligibility in list_offerings), ask the patient's date of birth and pass patientBirthDate; never infer age from a name or document type. The booking also creates or updates the patient's record. It answers with guidance to tell the patient and slip: a link, valid for an hour, to the appointment's printable slip PDF (with the service's indications) to send them as a file.\n\n- **Scope:** `agenda:bookings:write`\n- **Credentials:** an API key, a client-credentials token or a person's access token\n- **Effect:** writes; idempotent, safe to retry\n- **Limits:** request body up to 256 KB, response up to 8 MB\n- **CLI:** `arbol agenda bookings create` · **MCP tool:** `agenda_bookings_create`"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.getarbol.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Agenda API › Bookings

`POST /v1/agenda/bookings`

Book one slot only after the person explicitly confirms it. Pass the exact slotToken returned by find_availability, the patient's name, documentNumber and documentType (one of the organization's documentTypes codes; the first one when omitted), and the intake the organization requires (call get_intake_settings first). When the service has an age rule (eligibility in list_offerings), ask the patient's date of birth and pass patientBirthDate; never infer age from a name or document type. The booking also creates or updates the patient's record. It answers with guidance to tell the patient and slip: a link, valid for an hour, to the appointment's printable slip PDF (with the service's indications) to send them as a file.

- **Scope:** `agenda:bookings:write`
- **Credentials:** an API key, a client-credentials token or a person's access token
- **Effect:** writes; idempotent, safe to retry
- **Limits:** request body up to 256 KB, response up to 8 MB
- **CLI:** `arbol agenda bookings create` · **MCP tool:** `agenda_bookings_create`

## Authentication

Requires one of the following:

- `arbolHuman`, oauth2, scopes: `agenda:bookings:write`
- `arbolMachine`, oauth2, scopes: `agenda:bookings:write`
- `arbolApiKey`, http, header `Authorization`

## Request body

_Required._

- `slotToken` (`agenda.bookings.create.slotToken`; string, required) — Opaque signed token for one exact available slot. Use the returned token unchanged after the patient confirms that time.
  - minLength 20
- `contactId` (`agenda.bookings.create.contactId`; string | null, optional) — External contact reference associated with this booking; null when it has no external contact.
  - pattern `^cnt_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
- `intake` (`agenda.bookings.create.intake`; any of, optional) — Appointment-specific contact, payer, authorization and custom-field values; null when no intake was recorded.
  - any of: `AgendaAppointmentIntakeInput`, `null`
- `patient` (`agenda.bookings.create.patient`; object | null, optional) — Patient identity copied into the booking; null when no patient identity was supplied.
  - `name` (`agenda.bookings.create.patient.name`; string, required) — Patient display name with surrounding whitespace removed.
  - `documentNumber` (`agenda.bookings.create.patient.documentNumber`; string | null, optional) — Patient document number as typed ("12.345.678"), stored normalized; null when the patient has none. Identity combines its type and number.
  - `documentType` (`agenda.bookings.create.patient.documentType`; string | null, optional) — Organization-configured document type code. A number without a supplied type uses the configured first type; no number means no stored type.
    - default `null`
  - `document` (`agenda.bookings.create.patient.document`; string | null, optional, deprecated) — Deprecated: use `documentNumber`. Answered until 2027-01-28.
- `patientBirthDate` (`agenda.bookings.create.patientBirthDate`; string, optional) — Patient-supplied date of birth (YYYY-MM-DD), stored on the record and checked against service age eligibility.
  - format `date`
- `title` (`agenda.bookings.create.title`; string | null, optional) — Desk-authored appointment title; null permits the service name to supply the display title.
- `channel` (`agenda.bookings.create.channel`; string, optional) — The conversation's channel, set by the platform. It changes nothing in Agenda; omit it.
  - one of `"voice"`, `"whatsapp"`, `"web"`
- `connectionId` (`agenda.bookings.create.connectionId`; string, optional) — The platform's id for the organization's Agenda, set by the platform. An organization has one Agenda, so it selects nothing; omit it.
  - minLength 1; maxLength 128; pattern `^[\w-]+$`

## Example request

```json
{
  "contactId": "string",
  "intake": {
    "authorization": null,
    "conversationUrl": null,
    "email": null,
    "entity": null,
    "fields": {},
    "notes": null,
    "phone": null,
    "priority": "normal"
  },
  "patient": {
    "documentNumber": "string",
    "documentType": null,
    "name": "string",
    "document": "string"
  },
  "patientBirthDate": "2019-08-24",
  "slotToken": "stringstringstringst",
  "title": "string",
  "channel": "voice",
  "connectionId": "string"
}
```

## Code samples

### cURL

```bash
curl https://api.getarbol.com/v1/agenda/bookings \
  --request POST \
  --header "Authorization: Bearer $ARBOL_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
  "slotToken": "<slotToken>"
}'
```

### TypeScript

```typescript
import { createClient } from "@arbol-ai/sdk";

const arbol = createClient({
  baseUrl: "https://api.getarbol.com",
  token: process.env.ARBOL_API_KEY!,
});

const { data } = await arbol.agenda.bookings.create({
  slotToken: "<slotToken>",
});
```

### Rust

```rust
use arbol_sdk::{types, Client, Credential};

let arbol = Client::new(Credential::ApiKey(std::env::var("ARBOL_API_KEY")?))?;

let data = arbol
    .agenda()
    .bookings()
    .create(&types::AgendaBookingsCreateInput {
        slot_token: "<slotToken>".into(),
        contact_id: None,
        intake: None,
        patient: None,
        patient_birth_date: None,
        title: None,
        channel: None,
        connection_id: None,
    })
    .await?;
```

### CLI

```bash
arbol agenda bookings create --slot-token '<slotToken>'
```

### MCP

```json
{
  "name": "agenda_bookings_create",
  "arguments": {
    "slotToken": "<slotToken>"
  }
}
```

## Responses

### 200

Successful operation.

#### Example

```json
{
  "success": true,
  "data": {
    "bookingChannel": "string",
    "configurationVersionId": "string",
    "contactId": "string",
    "createdAt": "2019-08-24T14:15:22Z",
    "createdBy": null,
    "endsAt": "2019-08-24T14:15:22Z",
    "id": "string",
    "intake": null,
    "object": "scheduling.appointment",
    "occupationMinutes": null,
    "offeringId": "string",
    "origin": "native",
    "overbooked": false,
    "patient": null,
    "patientId": null,
    "resourceIds": [
      "string"
    ],
    "schemaVersion": 1,
    "startsAt": "2019-08-24T14:15:22Z",
    "status": "tentative",
    "statusChange": null,
    "timezone": "string",
    "title": "string",
    "updatedAt": "2019-08-24T14:15:22Z",
    "version": 1,
    "guidance": {
      "arrivalOrder": true,
      "attendedBy": [
        "string"
      ],
      "location": {
        "address": "string",
        "city": "string",
        "name": "string"
      },
      "patientInstructions": "string",
      "serviceName": "string"
    },
    "slip": {
      "expiresAt": "2019-08-24T14:15:22Z",
      "url": "http://example.com"
    }
  },
  "error": null,
  "metadata": {
    "requestId": "string"
  }
}
```

- `success` (`agenda.bookings.create.response.200.success`; boolean, required)
- `data` (`agenda.bookings.create.response.200.data`; object, required)
  - `bookingChannel` (`agenda.bookings.create.response.200.data.bookingChannel`; string | null, required) — Booking source recorded on the appointment; null when no channel was recorded.
  - `configurationVersionId` (`agenda.bookings.create.response.200.data.configurationVersionId`; string | null, required) — Immutable operating profile version captured when the appointment was booked; null when none applied.
    - pattern `^spv_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
  - `contactId` (`agenda.bookings.create.response.200.data.contactId`; string | null, required) — External contact reference associated with this booking; null when it has no external contact.
    - pattern `^cnt_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
  - `createdAt` (`agenda.bookings.create.response.200.data.createdAt`; string, required) — Instant when the scheduling record was first created.
    - format `date-time`
  - `createdBy` (`agenda.bookings.create.response.200.data.createdBy`; string | null, required) — Principal reference of whoever booked it; compare with the session's subject.
    - default `null`
  - `endsAt` (`agenda.bookings.create.response.200.data.endsAt`; string, required) — Exclusive end of the visible appointment or slot, before allocation buffers are added.
    - format `date-time`
  - `id` (`agenda.bookings.create.response.200.data.id`; string, required) — Organization-owned appointment identifier.
    - pattern `^eng_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
  - `intake` (`agenda.bookings.create.response.200.data.intake`; any of, required) — Appointment-specific contact, payer, authorization and custom-field values; null when no intake was recorded.
    - default `null`
    - any of: `AgendaAppointmentIntake`, `null`
  - `object` (`agenda.bookings.create.response.200.data.object`; string, required) — scheduling.appointment identifies this appointment.
  - `occupationMinutes` (`agenda.bookings.create.response.200.data.occupationMinutes`; integer | null, required) — Study length in minutes the desk chose when booking (6, 8 or 12 hours of a sleep study); its agendas stay held that long from the start. Null: the service’s usual length.
    - min 1; default `null`
  - `offeringId` (`agenda.bookings.create.response.200.data.offeringId`; string | null, required) — Offering recorded on the appointment; null when the appointment has no linked offering.
    - pattern `^off_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
  - `origin` (`agenda.bookings.create.response.200.data.origin`; string, required) — Whether the appointment originated in Scheduling or an imported provider record.
    - one of `"native"`, `"provider"`
  - `overbooked` (`agenda.bookings.create.response.200.data.overbooked`; boolean, required) — A sobrecupo: the desk added it at a full time or outside hours; it never takes capacity. A move into a free slot makes it a regular appointment.
    - default `false`
  - `patient` (`agenda.bookings.create.response.200.data.patient`; any of, required) — Patient identity copied into the booking; null when no patient identity was supplied.
    - default `null`
    - any of: `AgendaPatientIdentity`, `null`
  - `patientId` (`agenda.bookings.create.response.200.data.patientId`; string | null, required) — The patient record this booking created or updated; null without a patient.
    - pattern `^pat_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`; default `null`
  - `resourceIds` (`agenda.bookings.create.response.200.data.resourceIds`; array<string>, required) — Agendas assigned to the appointment or slot, including required professionals, rooms and equipment.
    - pattern `^srs_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
  - `schemaVersion` (`agenda.bookings.create.response.200.data.schemaVersion`; number, required) — Revision of the public record shape; separate from the record version used for concurrency control.
  - `startsAt` (`agenda.bookings.create.response.200.data.startsAt`; string, required) — Visible appointment or slot start instant, including an explicit timezone offset.
    - format `date-time`
  - `status` (`agenda.bookings.create.response.200.data.status`; string, required) — Current appointment lifecycle state; cancelled and completed appointments cannot regain capacity through a status change.
    - one of `"tentative"`, `"scheduled"`, `"confirmed"`, `"checked_in"`, `"completed"`, `"cancelled"`, `"no_show"`, `"unknown"`
  - `statusChange` (`agenda.bookings.create.response.200.data.statusChange`; any of, required) — The latest status change: when, by whom, and the reason given.
    - default `null`
    - any of: `AgendaAppointmentStatusChange`, `null`
  - `timezone` (`agenda.bookings.create.response.200.data.timezone`; string, required) — IANA timezone used to interpret local dates and agenda working hours.
    - minLength 1; maxLength 120
  - `title` (`agenda.bookings.create.response.200.data.title`; string | null, required) — Desk-authored appointment title; null permits the service name to supply the display title.
  - `updatedAt` (`agenda.bookings.create.response.200.data.updatedAt`; string, required) — Instant of the latest change to this scheduling record.
    - format `date-time`
  - `version` (`agenda.bookings.create.response.200.data.version`; integer, required) — Current record revision; pass it unchanged as expectedVersion for a guarded mutation.
  - `guidance` (`agenda.bookings.create.response.200.data.guidance`; any of, required) — Current nonclinical arrival instructions; null when no guidance projection is available.
    - any of: `AgendaAppointmentGuidance`, `null`
  - `slip` (`agenda.bookings.create.response.200.data.slip`; object | null, required) — A link, valid for an hour, to the appointment's printable slip PDF to send the patient as a file; null for a cancelled appointment.
    - `expiresAt` (`agenda.bookings.create.response.200.data.slip.expiresAt`; string, required) — When the link stops working, ISO 8601: fetch it right after booking.
      - format `date-time`
    - `url` (`agenda.bookings.create.response.200.data.slip.url`; string, required) — HTTPS link to the PDF, without any credential. It grants this slip alone; never show it to the patient as text, send the file itself.
      - format `uri`
- `error` (`agenda.bookings.create.response.200.error`; null, required)
- `metadata` (`agenda.bookings.create.response.200.metadata`; object, required)
  - `requestId` (`agenda.bookings.create.response.200.metadata.requestId`; string, required) — Request correlation identifier, also sent as X-Request-Id.

### 400

- `INVALID_INPUT`: The request does not match the published schema.
- `INVALID_APPOINTMENT_INTAKE`: Correct the indicated patient or intake fields before booking.
- `INVALID_PATIENT_FIELDS`: Correct the indicated patient fields before saving.
- `DURATION_CHANGE_OFF`: This service does not allow changing appointment duration.
- `DURATION_NOT_ALLOWED`: Select a duration allowed by this service.
- `STUDY_LENGTH_NOT_OFFERED`: Select one of the study lengths this agenda offers.
- `INVALID_FILE_KIND`: Select a supported attachment kind.
- `INVALID_FILE_NAME`: Provide a valid attachment filename.
- `INVALID_ID_TOKEN`: Provide a valid identity token.
- `INVALID_JSON`: Send a valid JSON document.
- `INVALID_WINDOW`: Provide a positive time window within the supported range.
- `UNEXPECTED_QUERY_PARAMETERS`: Remove query parameters not declared by this operation.
- `INVALID_BODY`: The request body could not be read. Send valid uncompressed JSON.

#### Example

```json
{
  "error": {
    "code": "INVALID_INPUT"
  }
}
```

- `error` (`agenda.bookings.create.response.400.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 401

`UNAUTHORIZED`: A valid access token is required.

#### Example

```json
{
  "error": {
    "code": "UNAUTHORIZED"
  }
}
```

- `error` (`agenda.bookings.create.response.401.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 403

- `FORBIDDEN`: The token does not authorize this operation.
- `ID_TOKEN_MISMATCH`: The identity token does not match the authenticated user.
- `NOT_FILE_UPLOADER`: Only the uploader may delete this attachment.
- `NOT_NOTE_AUTHOR`: Only the author may edit or delete this note.
- `ORIGIN_NOT_ALLOWED`: This request origin is not allowed.

#### Example

```json
{
  "error": {
    "code": "FORBIDDEN"
  }
}
```

- `error` (`agenda.bookings.create.response.403.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 404

`NOT_FOUND`: The requested resource does not exist.

#### Example

```json
{
  "error": {
    "code": "NOT_FOUND"
  }
}
```

- `error` (`agenda.bookings.create.response.404.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 405

`HTTP_METHOD_NOT_ALLOWED`: The HTTP method is not supported for this resource.

#### Example

```json
{
  "error": {
    "code": "HTTP_METHOD_NOT_ALLOWED"
  }
}
```

- `error` (`agenda.bookings.create.response.405.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 409

- `PAYER_STAFF_ONLY`: This payer requires booking by the organization team. Add the patient to the waitlist for review.
- `APPOINTMENT_NOT_REMINDABLE`: Only an open future appointment with a patient email can receive a reminder.
- `APPOINTMENT_WITHOUT_PATIENT`: Link a patient to this appointment before performing this action.
- `ARBOL_CATALOG_TOO_LARGE`: The integration catalog exceeds the supported size. Narrow the catalog before retrying.
- `ARBOL_CONFIGURATION_REQUIRED`: Configure the organization integration before using it.
- `NOTIFICATIONS_NOT_SET_UP`: Patient emails need the notifications module turned on.
- `SAME_OFFERING`: An agenda cannot take its own appointments.
- `SAME_SERVICE`: A service cannot be merged into itself.
- `INVALID_HOLD_PAYLOAD`: The held slot is malformed.
- `HOLD_NOT_ACTIVE`: The hold is no longer active.
- `APPOINTMENT_CLOSED`: A cancelled appointment cannot be edited.
- `APPOINTMENT_VERSION_MISMATCH`: The appointment changed after it was loaded.
- `APPOINTMENT_NOT_MOVABLE`: A closed appointment cannot be moved.
- `SERVICE_CHANGED`: The new slot belongs to another service.
- `SCHEDULE_CHANGED`: The selected time no longer matches the current schedule.
- `INVALID_AVAILABILITY_WINDOW`: Availability windows must be positive and at most 31 days.
- `SERVICE_CAPACITY_EXCEEDED`: This service already has as many appointments as it can run at once at that time.
- `RESOURCE_CAPACITY_EXCEEDED`: The selected time is no longer available.
- `OVERBOOK_OUT_OF_RANGE`: An overbooked appointment must start between yesterday and the booking horizon.
- `OVERBOOK_UNAVAILABLE`: No active agenda can take this appointment.
- `STUDY_OVERBOOKING_NOT_ALLOWED`: This study has an explicit capacity limit and requires an available ordinary slot.
- `INVALID_SLOT_TOKEN`: Request a fresh available slot before booking.
- `BIRTH_DATE_REQUIRED`: This service has an age rule: the patient's date of birth is required.
- `AGE_NOT_ELIGIBLE`: The patient's age on that day is outside this service's age rule.
- `INTAKE_SETTINGS_VERSION_MISMATCH`: Intake settings changed; reload before saving.
- `PAYER_NAME_TAKEN`: Another payer already has that name.
- `PAYER_VERSION_MISMATCH`: The payer changed; reload before saving.
- `LOCATION_VERSION_MISMATCH`: The site changed after it was loaded.
- `PROFILE_VERSION_MISMATCH`: The profile changed after it was loaded.
- `PROVIDER_DISABLED`: Enable the provider integration before using it.
- `BINDING_VERSION_MISMATCH`: Connection changed or is synchronizing; refresh and retry.
- `RESOURCE_VERSION_MISMATCH`: The resource changed after it was loaded.
- `SCHEDULE_RULE_AGENDA_MISMATCH`: The schedule rule belongs to another agenda.
- `SCHEDULE_RULE_EXPECTED_VERSION_REQUIRED`: Expected version is required for an update.
- `SCHEDULE_RULE_VERSION_MISMATCH`: The schedule rule changed after it was loaded.
- `SCHEDULE_RULES_CHANGED`: The schedule changed after it was loaded.
- `SERVICE_VERSION_MISMATCH`: The service changed after it was loaded.
- `OFFERING_VERSION_MISMATCH`: The offering changed after it was loaded.
- `SAME_RESOURCE`: An agenda cannot take its own appointments.
- `TARGET_INACTIVE`: An archived agenda takes no appointments.
- `SLOT_REQUIRED`: A hold or slot token is required.
- `ARBOL_SETTINGS_VERSION_MISMATCH`: Arbol settings changed.
- `NOTIFICATION_SETTINGS_VERSION_MISMATCH`: Notification settings changed; reload before saving.
- `ORGANIZATION_VERSION_MISMATCH`: The organization changed; reload before saving.
- `PATIENT_DOCUMENT_TAKEN`: Another patient has that document.
- `PATIENT_VERSION_MISMATCH`: The patient changed after it was loaded.
- `DAILY_REPORT_TOO_LARGE`: Daily report exceeds the supported size; no partial report was generated.
- `REPORT_SETTINGS_VERSION_MISMATCH`: Report settings changed; reload before saving.
- `REPORT_NOTIFICATIONS_DISABLED`: Enable the notifications module before sending a daily agenda.
- `REPORT_RECIPIENTS_REQUIRED`: No eligible organization owner or additional delivery address is available for this agenda.
- `WAITLIST_ENTRY_VERSION_MISMATCH`: The waitlist entry changed; reload before saving.
- `REMOVAL_JOB_CONFLICT`: A removal is already active, or this idempotency key belongs to another decision.
- `FOLLOWUP_SETTINGS_VERSION_MISMATCH`: Follow-up email settings changed; reload before saving.
- `FOLLOWUP_DISABLED`: Turn this follow-up email on in the notification settings first.
- `FOLLOWUP_CONSENT_REQUIRED`: The patient has not consented to this follow-up email for their current address.
- `PATIENT_EMAIL_REQUIRED`: Record the patient's email before this action.
- `PATIENT_ARCHIVED`: Restore the patient before this action.
- `RECALL_ALREADY_ACTIVE`: The patient already has an active recall for this service.
- `RECALL_MONTH_PASSED`: The recall's month has already passed.
- `RECALL_VISIT_REQUIRED`: Enter the last visit: there is no attended appointment of this service for the patient.
- `RECALL_VISIT_IN_FUTURE`: The last visit must be a past date.
- `RECALL_VERSION_MISMATCH`: The recall changed after it was loaded.
- `SLOT_OFFER_NOT_ALLOWED`: Only an open waiting-list entry of a registered patient can receive a slot offer.
- `SLOT_OFFER_MISMATCH`: The slot belongs to another service or agenda than the entry asks for.
- `SLOT_OFFER_TOO_SOON`: The slot starts too soon to hold it for the patient; offer a later one.
- `SLOT_OFFER_ALREADY_OPEN`: This waiting-list entry already has an open slot offer.
- `SLOT_OFFER_CLOSED`: The slot offer is no longer open.

#### Example

```json
{
  "error": {
    "code": "PAYER_STAFF_ONLY"
  }
}
```

- `error` (`agenda.bookings.create.response.409.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 413

`REQUEST_TOO_LARGE`: The request exceeds the allowed size.

#### Example

```json
{
  "error": {
    "code": "REQUEST_TOO_LARGE"
  }
}
```

- `error` (`agenda.bookings.create.response.413.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 415

- `UNSUPPORTED_MEDIA_TYPE`: The request content type is not supported.
- `APPLICATION_JSON_REQUIRED`: Send the request as application/json.
- `FILE_CONTENT_MISMATCH`: The uploaded content does not match its declared file type.
- `UNSUPPORTED_CONTENT_ENCODING`: Send an uncompressed request body.
- `UNSUPPORTED_FILE_TYPE`: Select a supported attachment file type.

#### Example

```json
{
  "error": {
    "code": "UNSUPPORTED_MEDIA_TYPE"
  }
}
```

- `error` (`agenda.bookings.create.response.415.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 426

`UPGRADE_REQUIRED`: Open the live channel with a WebSocket upgrade.

#### Example

```json
{
  "error": {
    "code": "UPGRADE_REQUIRED"
  }
}
```

- `error` (`agenda.bookings.create.response.426.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 429

`RATE_LIMITED`: The request rate limit was exceeded. Try again later.

#### Example

```json
{
  "error": {
    "code": "RATE_LIMITED"
  }
}
```

- `error` (`agenda.bookings.create.response.429.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 500

`INTERNAL_ERROR`: The service could not complete the operation.

#### Example

```json
{
  "error": {
    "code": "INTERNAL_ERROR"
  }
}
```

- `error` (`agenda.bookings.create.response.500.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 502

`OUTCOME_UNKNOWN`: The operation may have been applied; check its result before repeating it.

#### Example

```json
{
  "error": {
    "code": "OUTCOME_UNKNOWN"
  }
}
```

- `error` (`agenda.bookings.create.response.502.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 503

- `UPSTREAM_UNAVAILABLE`: The upstream service could not complete the request.
- `ARBOL_RESPONSE_TOO_LARGE`: The integration response exceeds the supported size.
- `ARBOL_UNAVAILABLE`: The integration service is temporarily unavailable. Retry later.
- `REMOVAL_WORKFLOW_UNAVAILABLE`: Durable removal is unavailable here; use the bounded manual removal operations.
- `ARBOL_REFUSED`: The integration service rejected this request. Review its configuration.

#### Example

```json
{
  "error": {
    "code": "UPSTREAM_UNAVAILABLE"
  }
}
```

- `error` (`agenda.bookings.create.response.503.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`

### 504

`UPSTREAM_TIMEOUT`: The upstream service did not respond before its deadline.

#### Example

```json
{
  "error": {
    "code": "UPSTREAM_TIMEOUT"
  }
}
```

- `error` (`agenda.bookings.create.response.504.error`; object, required)
  - any of: `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`, `object`


Source: https://docs.getarbol.com/api/agenda/bookings/create/index.md
