Skip to content

Book Resource

A booking carries a Schedule describing when the reservation occurs. The schedule supports single and recurring reservations. available: false marks the window as consumed.

Single Occurrence

POST /booking

json
{
  "name": "Project Sync",
  "description": "Weekly project sync meeting",
  "bookable_id": "aef3e951-ca5f-4cc7-b50d-28cdc9f4d7e0",
  "schedule": {
    "start_date": "2026-07-15T08:00:00Z",
    "end_date": "2026-07-15T09:00:00Z"
  }
}

Response:

json
{
  "data": {
    "id": "f9955a9a-bb9e-450b-8e91-09a43f0e6cd6",
    "name": "Project Sync",
    "description": "Weekly project sync meeting",
    "bookable_id": "aef3e951-ca5f-4cc7-b50d-28cdc9f4d7e0",
    "schedule": {
      "id": "12e2a0a7-9400-43fc-9cd9-fcdddf5133df",
      "start_date": "2026-07-15T08:00:00Z",
      "end_date": "2026-07-15T09:00:00Z",
      "pattern": {
        "type": "none",
        "interval": 1,
        "times": ["08:00/PT1H"]
      },
      "time_zone": null,
      "available": false
    },
    "checkin_id": null,
    "created_by": "e992bfc1-0336-42c5-bd0a-4f4804a9fd24",
    "owner_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "status": "confirmed",
    "created_at": "2026-05-11T22:45:45.228331Z",
    "updated_at": "2026-05-11T22:45:45.315892Z"
  },
  "request_id": "837c770e-4436-4a65-b98d-3f3117cab17a",
  "count": 1
}

Recurring Booking

A schedule with a recurrence pattern produces multiple occurrences from one booking row.

json
{
  "name": "Weekly Team Standup",
  "bookable_id": "aef3e951-ca5f-4cc7-b50d-28cdc9f4d7e0",
  "schedule": {
    "start_date": "2026-08-03T09:00:00Z",
    "end_date": "2026-12-31T00:00:00Z",
    "time_zone": "Europe/Oslo",
    "available": false,
    "pattern": {
      "type": "weekly",
      "interval": 1,
      "days_of_week": [1],
      "times": ["09:00/PT30M"]
    }
  }
}

Deletion

DELETE /booking/{id} removes the row, fires the booking_deleted trigger, writes an audit row, and frees the time window. To mark a booking as cancelled without removing it, use PUT /booking/{id} with a status update. See Delete a Booking.

Listing

See List Bookings for reading bookings back at the user, room and location levels.

See the Bookable API for full request and response shapes.