Skip to main content

Departure Fill Report

How full each experience departure was, or is, over a date range: people (or groups) booked against capacity, with totals per experience, per start time and per guide.

Endpoint​

GET /v1/reports/departure-fill

Authentication​

Requires an API key with the reports:read scope.

Query Parameters​

ParameterTypeDefaultDescription
periodstring-today, yesterday, this_week, last_week, next_week, this_weekend, next_weekend, this_month, last_month or next_month, in the business's timezone. last_month is the previous calendar month. this_weekend is the coming Saturday and Sunday, or the current one on a Saturday.
start_datestringtodayStart date YYYY-MM-DD. Ignored when period is set.
end_datestring7 days after start_dateEnd date YYYY-MM-DD. A range covers at most 93 days.
experience_idinteger-One experience only.
product_idinteger-One shared item (a boat, a vehicle, a room): every departure of every experience that runs on it, with ends on each departure, plus an item block naming it, its experience_ids, and booked_on_its_own (bookings of the item outside any departure). 404 when no experience runs on it.
fill_below_percentinteger-Only departures booked under this percent of capacity, e.g. 50 for under half full.
sortstringdateOrder of departures: date, emptiest or fullest. Defaults to emptiest when fill_below_percent is set.
limitinteger20How many departures to list (max 50). summary, by_experience and by_guide always cover the whole range.

Response​

Success (200 OK)​

{
"data": {
"start_date": "2026-09-01",
"end_date": "2026-09-30",
"truncated_range": false,
"summary": {
"departures": 90,
"already_ran": 90,
"still_to_run": 0,
"ran_with_no_bookings": 41,
"people_booked": 111,
"people_capacity": 1560,
"fill_percent": 7,
"fill_below_percent": 50,
"matching": 88
},
"by_experience": [
{
"experience": "Full-Day Outing",
"departures": 30,
"booked": 38,
"capacity": 480,
"counts": "people",
"fill_percent": 8,
"matching": 30
}
],
"by_guide": [
{
"staff_id": 66,
"guide": "Sam Rivers",
"departures_led": 11,
"departures_with_people_booked": 6,
"people_booked": 43,
"people_booked_already_ran": 31
}
],
"sort": "emptiest",
"departures": [
{
"schedule_id": 1234,
"experience": "Full-Day Outing",
"experience_id": 12,
"date": "Sep 5, 2026",
"time": "6:00 AM",
"booked": 0,
"capacity": 16,
"counts": "people",
"fill_percent": 0,
"status": "already ran"
}
]
}
}

Reading the numbers​

  • booked is who actually booked. counts says whether it is people or groups (a private experience is sold by the group). People and groups are never added together: summary reports them separately (groups_booked, groups_capacity, groups_fill_percent).
  • capacity is "no limit" when the departure has none, and fill_percent is then null.
  • fill_percent is booked against capacity in the unit the departure sells, from 0 to 100: a private departure of one group with 12 people on it is 100, never 1200. An overbooked departure reads 100, and the totals count it as full rather than as extra places.
  • A departure that has started reads "status": "already ran". summary.ran_with_no_bookings counts those nobody booked; upcoming_with_no_bookings_yet counts the ones still to run with nobody booked so far.
  • An upcoming departure carries open_spots. status is open, full (booked up to capacity), or not selling, with not_selling_because naming why empty places cannot be sold (no guide free, the equipment or shared places in use, a closure, places held in carts). A not selling departure is not full.
  • A departure that needs a guide carries led_by: the names of who leads it, or "nobody yet". When people are booked and nobody leads it, the row also has "booked_with_nobody_leading": true.
  • booked_with_nobody_leading at the top lists every booked departure still to run in the range with nobody leading it, as "October 11th 2026 9:00 AM Whale-Watching Cruise (5 booked)", even when it is past limit.
  • When no guide is free, not_selling_because names who is busy and where, for example "No guide free - Marcus is on the 9:00 AM Whale-Watching Cruise, Lena is off".
  • by_guide lists every guide on a departure in the range, most people first. people_booked counts the people booked on that guide's departures the same way the run sheet does, leaving out cancelled bookings. people_booked_already_ran counts only departures that have started. A departure with two guides counts its people for each guide, so the guides' figures can add up to more than summary.people_booked. Departures with nobody booked count toward departures_led only.
  • by_experience lists the emptiest experience first, with by_start_time when an experience runs at more than one time.
  • summary.fullest_experience names the activity with the highest aggregate fill_percent over the whole range, with booked, capacity and counts (people or groups). It also includes fullest_start_time when the activity has several start times. It is omitted when no activity has a capacity to compare; ties use the first activity in by_experience. This fact remains available when an AI response shortens the detailed lists.

Errors​

StatusWhen
404experience_id is not one of this business's experiences, or product_id is not an item any of its experiences runs on.
422A parameter is not one of the values above.