Skip to the documentation
API

Read booking analytics

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

GET/bookings/analytics

Runs the real call on your workspace.

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