---
title: "Read booking analytics"
description: "How the booking pages did over a window, and what is still to come."
url: "https://openemail.uk/docs/api/bookings/analytics"
area: "API"
category: "Mailbox"
---

# Read booking analytics

How the booking pages did over a window, and what is still to come.

`GET /bookings/analytics`

## GET /bookings/analytics

How the booking pages did over a window, and what is still to come.

## Example

Needs `calendar:read`. `days` looks back from 1 to 1095 days and defaults to 30, `minutes` wins over it, `grain` is `minute`, `hour` or `day`, and `offsetMinutes` cuts the days where the reader lives. `pageIds` narrows everything to some pages.

**curl**

```
curl "$OE/bookings/analytics?days=30&offsetMinutes=120" -H "$AUTH"
```

**Response**

```
{
  "object": "booking_analytics",
  "pageId": null,
  "pageIds": [],
  "since": "2026-10-04T22:00:00.000Z",
  "until": "2026-11-02T08:00:00.000Z",
  "grain": "day",
  "offsetMinutes": 120,
  "totals": {
    "booked": 12,
    "confirmed": 9,
    "pending": 1,
    "expired": 0,
    "declined": 0,
    "cancelled": 2,
    "cancelledByGuest": 2,
    "cancelledByHost": 0,
    "rescheduled": 3,
    "minutesBooked": 330,
    "cancellationRate": 0.1667
  },
  "upcoming": { "confirmed": 4, "waiting": 1, "nextStart": "2026-11-03T09:00:00.000Z" },
  "series": [{ "bucket": "2026-10-28", "booked": 3, "cancelled": 1 }],
  "pages": [{ "pageId": "bkp_5c1e9a7b3d2f48e6a0b4c7d1", "name": "Intro call", "booked": 12, "cancelled": 2 }],
  "weekdays": [{ "weekday": 0, "meetings": 0 }, { "weekday": 1, "meetings": 4 }]
}
```

> A booking counts in the window it was made in, whatever its meeting time. `confirmed`, `pending`, `expired`, `declined` and `cancelled` split `booked` by what became of each booking, so they add up to it.

> `upcoming` ignores the window: it counts the confirmed meetings that have not ended and the requests still waiting, and gives when the next meeting starts.

> `series` leaves out buckets with nothing in them, `pages` lists at most 10 pages with the most bookings first, and `weekdays` always holds seven entries from Sunday (0) to Saturday (6).

> A page in `pageIds` the person does not own answers 404 `booking_page_not_found`.

## Reference

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