---
title: "Prepare a booking draft (the proposal shown to the user)"
method: POST
path: "/booking-drafts"
tags: ["mandates"]
---

# Prepare a booking draft (the proposal shown to the user)

`POST /booking-drafts`

## Request

- Base URL: `https://agentbookable.com`
- URL: `https://agentbookable.com/booking-drafts`
- Auth: none declared

Creates an immutable booking proposal with an opaque draft id. Validates live availability (the slot must be genuinely free now) and the service's customer requirements. Show this draft to the user as the final proposal before asking for consent.

## Request body

- DraftCreate
  - `businessId` string, required
  - `serviceId` string, required
  - `slotId` string: Slot id from the availability call (preferred)
  - `slot` object
    - `start` string
    - `end` string
    - `staffId` string
  - `customer` Customer, required (unresolved $ref)
  - `actorRef` string, required: Your agent/session identifier for the audit trail

## Response `201`

Draft created — show it to the user and obtain consent

- BookingDraft: The proposal to show the user. Consequential fields are immutable; consent binds to this exact content (draftHash).
  - `id` string
  - `businessId` string
  - `serviceId` string
  - `serviceName` string
  - `start` string
  - `end` string
  - `durationMinutes` integer
  - `timezone` string
  - `staffId` string, nullable
  - `customer` Customer (unresolved $ref)
  - `requirements` BookingRequirements: What the agent must collect from the user BEFORE booking. Contact requirements are provider-derived; AgentBookable never reveals which provider.
    - `name` 'required' | 'optional': Customer name.
    - `email` 'required' | 'optional': Customer email.
    - `phone` 'required' | 'optional': Customer phone. 'required' means the booking is rejected without one — collect it first.
    - `payment` boolean: True when payment is required to confirm.
  - `expiresAt` string: Drafts expire after 30 minutes

## Other responses

- `409`: Slot no longer available
- `422`: Missing required customer details
- `429`: Too many requests — slow down

---

[API](https://skmtc.dev/agentbookable/apis/agentbookable-booking-api-for-ai-agents.md) · [All operations](https://skmtc.dev/agentbookable/apis/agentbookable-booking-api-for-ai-agents/llms.txt) · [OpenAPI document](https://skmtc.dev/agentbookable/apis/agentbookable-booking-api-for-ai-agents/revisions/736963f5951a?raw)
