---
title: "Create a booking"
method: POST
path: "/v1/bookings"
tags: ["Bookings"]
---

# Create a booking

`POST /v1/bookings`

## Request

- Base URL: `https://api.astrocal.dev`
- URL: `https://api.astrocal.dev/v1/bookings`
- Auth: none required

Creates a new booking. Public endpoint — no authentication required. Validates the requested slot against availability rules and existing bookings.

## Request body

- union
  - object
    - `event_type_id` string, uuid, required
    - `start_time` string, date-time, required
    - `invitee_name` string, required
    - `invitee_email` string, email, required
    - `invitee_timezone` string
    - `duration` integer
    - `notes` string
    - `metadata` object
  - object
    - `event_type_id` string, uuid, required
    - `start_time` string, date-time, required
    - `attendees` object[], required
      - `name` string, required
      - `email` string, email, required
      - `timezone` string
    - `duration` integer
    - `notes` string
    - `metadata` object

## Response `201`

Booking created

- object
  - `id` string, uuid, required
  - `organization_id` string, uuid, required
  - `event_type_id` string, uuid, required
  - `calendar_connection_id` string, uuid, nullable, required
  - `assigned_host` object, nullable, required
    - `member_id` string, uuid, required
    - `name` string, nullable, required
    - `email` string, nullable, required
  - `status` 'confirmed' | 'cancelled' | 'rescheduled' | 'pending_payment', required
  - `is_test` boolean, required
  - `start_time` string, required
  - `end_time` string, required
  - `invitee_name` string, required
  - `invitee_email` string, required
  - `invitee_timezone` string, required
  - `attendee_count` integer, required
  - `attendees` object[], required
    - `id` string, uuid, required
    - `name` string, required
    - `email` string, required
    - `timezone` string, required
    - `is_primary` boolean, required
  - `notes` string, nullable, required
  - `cancel_token` string, required
  - `calendar_event_id` string, nullable, required
  - `meeting_url` string, nullable, required
  - `location` string, nullable, required
  - `metadata` object, required
  - `cancelled_at` string, nullable, required
  - `cancel_reason` string, nullable, required
  - `created_at` string, required
  - `updated_at` string, required
  - `payment` object
    - `amount` integer, required
    - `currency` string, required
    - `client_secret` string, required
    - `stripe_payment_intent_id` string, required

## Other responses

- `404`: Event type not found or inactive
- `409`: Time slot unavailable, no assigned host available, or booking cap reached
- `422`: Validation error
- `502`: Payment gateway error

---

[API](https://skmtc.dev/astrocal/apis/astrocal-api.md) · [All operations](https://skmtc.dev/astrocal/apis/astrocal-api/llms.txt) · [OpenAPI document](https://skmtc.dev/astrocal/apis/astrocal-api/revisions/3b953e19a348?raw)
