---
title: "List and read booking pages"
description: "Every booking page of the person, oldest first, or one page by its id."
url: "https://openemail.uk/docs/api/bookings/pages"
area: "API"
category: "Mailbox"
---

# List and read booking pages

Every booking page of the person, oldest first, or one page by its id.

`GET /booking-pages`

**Also documents:** `GET /booking-pages/{id}`

## GET /booking-pages

Every booking page of the person, oldest first, or one page by its id.

## Example

Needs `calendar:read`. The list is not paged, because a person holds at most 25 pages.

**curl**

```
curl "$OE/booking-pages?q=intro&sort=name" -H "$AUTH"
curl "$OE/booking-pages/bkp_5c1e9a7b3d2f48e6a0b4c7d1" -H "$AUTH"
```

**Response**

```
{
  "object": "list",
  "data": [{
      "object": "booking_page",
      "id": "bkp_5c1e9a7b3d2f48e6a0b4c7d1",
      "slug": "intro-call",
      "name": "Intro call",
      "status": "active",
      "url": "https://openemail.uk/book/intro-call",
      "problem": null,
      "config": {
        "description": "A first chat about your project.",
        "hostName": "Hana Sato",
        "durations": [30],
        "location": { "kind": "video", "value": "https://meet.example.com/hana" },
        "availability": {
          "timezone": "Europe/Berlin",
          "weekly": [
            [],
            [{ "start": 540, "end": 1020 }],
            [{ "start": 540, "end": 1020 }],
            [{ "start": 540, "end": 1020 }],
            [{ "start": 540, "end": 1020 }],
            [{ "start": 540, "end": 1020 }],
            []
          ],
          "overrides": [{ "date": "2026-12-24", "ranges": [] }]
        },
        "rules": {
          "noticeMinutes": 240,
          "horizonDays": 60,
          "intervalMinutes": null,
          "bufferBeforeMinutes": 0,
          "bufferAfterMinutes": 15,
          "dailyLimit": null
        },
        "approval": false,
        "fromEmail": "hana@acme.com",
        "notifyHost": true,
        "questions": [
          { "id": "notes", "kind": "long-text", "label": "Anything we should know?", "required": false, "options": [] }
        ],
        "confirmation": "",
        "redirectUrl": "",
        "appearance": {
          "accent": "#2563eb",
          "theme": "auto",
          "showAvatar": true,
          "background": "default",
          "fonts": { "primary": null, "secondary": null },
          "backgroundImage": null
        },
        "guestChanges": { "cancel": true, "reschedule": true, "cutoffMinutes": 120 },
        "busy": { "addresses": null, "subscriptions": true, "outOfOffice": true },
        "seo": { "title": "", "description": "", "indexable": false },
        "extraGuests": 0
      },
      "counts": { "upcoming": 3, "pending": 0 },
      "away": [
        { "address": "hana@acme.com", "startsAt": "2026-12-22T00:00:00.000Z", "endsAt": "2027-01-02T00:00:00.000Z" }
      ],
      "createdAt": "2026-10-13T07:00:05.870Z",
      "updatedAt": "2026-10-13T07:00:05.870Z"
    }]
}
```

> `counts.upcoming` is the confirmed bookings that have not started, and `counts.pending` the ones waiting for approval.

> `url` is the public link to hand to guests.

> A missing page, or one that belongs to another person, answers 404 `booking_page_not_found`.

> `q` finds pages by name or link, `status` keeps the `active` or the `paused` ones, `since` and `until` keep the pages made in a window, and `sort` is `oldest` (the default), `newest`, `name` or `upcoming`.

## Reference

- [`GET /booking-pages`](https://openemail.uk/docs/api/reference/booking-pages#get-booking-pages): full reference
- [`GET /booking-pages/{id}`](https://openemail.uk/docs/api/reference/booking-pages#get-booking-pages-id): full reference
