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

# Bookings

> List, view, create, update, and take payments on bookings.

A booking is a scheduled meeting between a host and a client. See the [API reference](/api-reference/bookings/list) for the full resource shape.

## List bookings

```bash theme={"system"}
neetocal bookings list --type upcoming
neetocal bookings list --client-email oliver@example.com --sorting-key starts_at --sorting-order asc
```

| Flag              | Type     | Required | Default | Description                                            |
| ----------------- | -------- | -------- | ------- | ------------------------------------------------------ |
| `--client-email`  | `string` |          |         | Filter by client email                                 |
| `--host-email`    | `string` |          |         | Filter by host email                                   |
| `--page`          | `int`    |          | `0`     | Page number                                            |
| `--page-size`     | `int`    |          | `0`     | Items per page (max 100)                               |
| `--sorting-key`   | `string` |          |         | Sort by field (created\_at, starts\_at)                |
| `--sorting-order` | `string` |          |         | Sort order (asc, desc)                                 |
| `--type`          | `string` |          |         | Filter by type (upcoming, past, cancelled, incomplete) |

```json Sample output (--json) theme={"system"}
{
  "data": [
    {
      "id": "efb296a3-8205-419f-8ac4-1abfc46bc3c7",
      "sid": "8sqtzrs",
      "name": "Oliver Smith",
      "email": "oliver@example.com",
      "host_name": "Sam Smith",
      "host_email": "host@example.com",
      "starts_at": "2026-05-15T10:00:00.000Z",
      "ends_at": "2026-05-15T10:30:00.000Z",
      "time_zone": "America/New_York",
      "status": "confirmed",
      "meeting": { "name": "Product demo" }
    },
    {
      "id": "f1a3b5c7-9d2e-4f60-8b1a-2c3d4e5f6a7b",
      "sid": "9tru0as",
      "name": "Eve Smith",
      "email": "eve@example.com",
      "host_name": "Sam Smith",
      "host_email": "host@example.com",
      "starts_at": "2026-05-16T14:00:00.000Z",
      "ends_at": "2026-05-16T14:30:00.000Z",
      "time_zone": "America/New_York",
      "status": "confirmed",
      "meeting": { "name": "Product demo" }
    }
  ],
  "pagination": { "total_records": 2, "total_pages": 1, "current_page_number": 1, "page_size": 30 }
}
```

Mirrors [List bookings](/api-reference/bookings/list) in the API.

## Show a booking

```bash theme={"system"}
neetocal bookings show <id>
```

```json Sample output (--json) theme={"system"}
{
  "data": {
    "booking": {
      "id": "efb296a3-8205-419f-8ac4-1abfc46bc3c7",
      "sid": "8sqtzrs",
      "name": "Oliver Smith",
      "email": "oliver@example.com",
      "host_name": "Sam Smith",
      "host_email": "host@example.com",
      "starts_at": "2026-05-15T10:00:00.000Z",
      "ends_at": "2026-05-15T10:30:00.000Z",
      "time_zone": "America/New_York",
      "status": "confirmed",
      "preferred_meeting_spot": "zoom",
      "meeting_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "meeting": { "name": "Product demo" },
      "meeting_outcome": null,
      "admin_booking_url": "https://spinkart.neetocal.com/admin/bookings/8sqtzrs",
      "client_booking_url": "https://spinkart.neetocal.com/booking/8sqtzrs"
    }
  }
}
```

Returns the full booking, including nested `client`, `host`, and `meeting` objects. Mirrors [Get booking](/api-reference/bookings/get) in the API.

## Create a booking

```bash theme={"system"}
neetocal bookings create \
  --meeting-slug demo \
  --name "Oliver Smith" \
  --email oliver@example.com \
  --slot-date 2026-05-15 \
  --slot-start-time 10:00 \
  --time-zone "America/New_York"
```

| Flag                       | Type     | Required | Default | Description             |
| -------------------------- | -------- | -------- | ------- | ----------------------- |
| `--email`                  | `string` | Yes      |         | Client email            |
| `--meeting-slug`           | `string` | Yes      |         | Meeting slug            |
| `--name`                   | `string` | Yes      |         | Client name             |
| `--preferred-meeting-spot` | `string` |          |         | Preferred meeting spot  |
| `--slot-date`              | `string` | Yes      |         | Slot date (YYYY-MM-DD)  |
| `--slot-start-time`        | `string` | Yes      |         | Slot start time (HH:MM) |
| `--time-zone`              | `string` | Yes      |         | Time zone               |

```json Sample output (--json) theme={"system"}
{
  "data": {
    "booking": {
      "id": "efb296a3-8205-419f-8ac4-1abfc46bc3c7",
      "sid": "8sqtzrs",
      "name": "Oliver Smith",
      "email": "oliver@example.com",
      "host_name": "Sam Smith",
      "host_email": "host@example.com",
      "starts_at": "2026-05-15T10:00:00.000Z",
      "ends_at": "2026-05-15T10:30:00.000Z",
      "time_zone": "America/New_York",
      "status": "confirmed",
      "meeting": { "name": "Product demo" },
      "meeting_outcome": null
    }
  }
}
```

<Tip>
  Pull valid slots first with [`neetocal meetings slots`](/cli-reference/meetings#list-available-slots),
  then pass one to `--slot-date` / `--slot-start-time`. In `--quiet` mode this
  prints the new booking `id`.
</Tip>

Mirrors [Create booking](/api-reference/bookings/create) in the API.

## Update a booking

Reschedule, cancel, approve, or reject a booking. Only the flags you set are sent.

```bash theme={"system"}
# Reschedule
neetocal bookings update <id> \
  --slot-date 2026-05-22 --slot-start-time 14:00 --time-zone "America/New_York" \
  --reschedule-reason "Client conflict"

# Cancel
neetocal bookings update <id> --status cancelled --cancel-reason "No longer needed"

# Approve
neetocal bookings update <id> --status approved
```

| Flag                  | Type     | Required | Default | Description                                                                       |
| --------------------- | -------- | -------- | ------- | --------------------------------------------------------------------------------- |
| `--cancel-reason`     | `string` |          |         | Cancellation reason                                                               |
| `--email`             | `string` |          |         | Client email (optional; overrides the existing booking's email when rescheduling) |
| `--name`              | `string` |          |         | Client name (optional; overrides the existing booking's name when rescheduling)   |
| `--rejection-reason`  | `string` |          |         | Rejection reason                                                                  |
| `--reschedule-reason` | `string` |          |         | Reschedule reason                                                                 |
| `--slot-date`         | `string` |          |         | New slot date (YYYY-MM-DD)                                                        |
| `--slot-start-time`   | `string` |          |         | New slot start time (HH:MM)                                                       |
| `--status`            | `string` |          |         | Status (cancelled, approved, rejected)                                            |
| `--time-zone`         | `string` |          |         | Time zone                                                                         |

```json Sample output (--json) theme={"system"}
{
  "data": {
    "booking": {
      "id": "efb296a3-8205-419f-8ac4-1abfc46bc3c7",
      "sid": "8sqtzrs",
      "name": "Oliver Smith",
      "email": "oliver@example.com",
      "host_name": "Sam Smith",
      "host_email": "host@example.com",
      "starts_at": "2026-05-22T14:00:00.000Z",
      "ends_at": "2026-05-22T14:30:00.000Z",
      "time_zone": "America/New_York",
      "status": "confirmed",
      "reschedule_requested": false,
      "meeting": { "name": "Product demo" },
      "meeting_outcome": null
    }
  }
}
```

Rescheduling reuses the existing client details; pass `--name` / `--email` only to override them. Mirrors [Update booking](/api-reference/bookings/update) in the API.

## Create a payment

```bash theme={"system"}
neetocal bookings payments create <booking-id> \
  --payment-provider stripe --discount-code SUMMER25
```

| Flag                 | Type     | Required | Default | Description        |
| -------------------- | -------- | -------- | ------- | ------------------ |
| `--discount-code`    | `string` |          |         | Discount code      |
| `--identifier`       | `string` |          |         | Payment identifier |
| `--payment-provider` | `string` | Yes      |         | Payment provider   |

```json Sample output (--json) theme={"system"}
{
  "data": {
    "payment": {
      "id": "f46c9ddf-221d-4238-afb2-280c1c6b3185",
      "identifier": "ext-123",
      "status": "confirmation_pending",
      "amount": "100.0",
      "currency": "USD"
    }
  }
}
```

Mirrors [Create payment](/api-reference/bookings/create-payment) in the API.

## Update a payment

```bash theme={"system"}
neetocal bookings payments update <booking-id> <payment-id> \
  --payment-provider stripe --status successful --notes "Paid in full"
```

| Flag                 | Type     | Required | Default | Description                           |
| -------------------- | -------- | -------- | ------- | ------------------------------------- |
| `--notes`            | `string` |          |         | Payment notes                         |
| `--payment-provider` | `string` | Yes      |         | Payment provider                      |
| `--status`           | `string` | Yes      |         | Payment status (successful, rejected) |

```json Sample output (--json) theme={"system"}
{
  "data": {
    "payment": {
      "id": "f46c9ddf-221d-4238-afb2-280c1c6b3185",
      "identifier": "ext-123",
      "status": "successful",
      "amount": "100.0",
      "currency": "USD"
    }
  }
}
```

Mirrors [Confirm payment](/api-reference/bookings/confirm-payment) in the API.
