Bookings Tools
Manage bookings including rentals, experiences, and store product orders. Track fulfillment, manage notes and tags, and handle late pickups and returns.
Required scope: bookings:read for read tools, bookings:write for write tools
Tools Overviewโ
| Tool | Description | Read-only? |
|---|---|---|
list_bookings | List bookings with optional filters | Yes |
get_booking | Get detailed booking information | Yes |
get_today | The day at a glance: needs, gear, sessions and hires | Yes |
get_needs_you | What needs the signed-in person, as on the dashboard's Dash card | Yes |
create_booking | Create a new booking (preview/confirm) | No |
confirm_booking | Confirm a draft booking (preview/confirm) | No |
update_booking | Update an existing booking | No |
cancel_booking | Cancel a booking (preview/confirm) | No |
archive_booking | Archive a past or cancelled booking | No |
unarchive_booking | Restore a previously archived booking | No |
revert_booking_pickup | Undo a rental pickup | No |
revert_booking_return | Undo a rental return | No |
revert_experience_booking | Undo an experience completion or check-in | No |
mark_no_show | Mark a booking, or one person in it, as a no-show | No |
undo_no_show | Undo a no-show marked by mistake | No |
get_booking_notes | Get all internal notes on a booking | Yes |
get_booking_history | A booking's History tab, with who made each change | Yes |
list_unsigned_agreements | Pickups in a date window whose rental agreement is not signed yet | Yes |
add_booking_note | Add an internal note to a booking | No |
add_booking_tag | Add a tag to a booking | No |
remove_booking_tag | Remove a tag from a booking | No |
get_late_pickups | Get bookings with overdue pickups | Yes |
get_late_returns | Get bookings with overdue returns | Yes |
get_delivery_run | Every delivery drop-off and collection over a range of days, as the run sheet shows them | Yes |
send_booking_email | Send an email to the booking customer | No |
list_bookingsโ
List bookings with optional filters. Returns paginated results.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by status: pending, confirmed, picked_up, checked_in, returned, completed, no_show, cancelled. no_show means staff marked that the customer never came |
booking_type | string | No | Filter by type: rental, experience, store |
product_id | integer | No | Filter to bookings containing this rental product |
product_name | string | No | Filter to bookings containing rental products matching this name |
experience_id | integer | No | Filter to bookings containing this experience |
store_product_id | integer | No | Filter to bookings containing this store product |
store_product_name | string | No | Filter to bookings containing store products matching this name |
date_from | string | No | Start date for the period |
date_to | string | No | End date for the period |
customer_search | string | No | Search by customer name, organization name (school, club, company), saved group name, or email |
limit | integer | No | Number of results (default 10, max 50) |
Exampleโ
"List confirmed bookings for next week"
The AI calls list_bookings with status: "confirmed" and appropriate date filters.
What comes backโ
Each row is one booking, not one person. Alongside the customer, dates, total and payment_status, every row carries:
amount_due- what is still owed on that booking, the same figure its booking page andget_amount_dueshow. Use it to answer who still has to pay.people- on a booking with an experience, how many people it holds. A booking can hold several, and a cancelled booking has none.customer_id,customer_phoneandcustomer_email- who to contact about the booking, as its booking page shows them. Passcustomer_idtoget_customer. Phone and email are blank for a team member whose role does not include View customers.
When the whole list fits on one page, totals adds up the listed bookings that hold people and are not cancelled: {"bookings": 4, "people": 7}.
get_bookingโ
Get detailed information about a specific booking by ID or reference number.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | No | The booking ID |
reference | string | No | The booking reference number (e.g., EQD-2026-0123) |
Provide either booking_id or reference.
get_needs_youโ
What needs the signed-in person right now: the same list as the Dash card on their dashboard. Each group has what, count, lines (up to six) and link (where it is fixed). Groups, most pressing first: booking requests, booked departures in the next two days with no guide leading them, late returns, unpaid bookings coming up, marketplace problems, boat inspection or insurance to renew, staff certifications lapsed or lapsing within 30 days, and changes waiting for their OK.
Each group only appears for someone allowed to act on it, and anything they hid on the card stays hidden. Needs an OAuth connection as a person; an API key is refused, since it has no one whose list this is.
Parametersโ
None.
Example responseโ
{
"total": 3,
"groups": [
{
"what": "Booked departures in the next two days with no guide",
"count": 1,
"lines": ["Sunset Paddle, tomorrow 1:30 PM: 4 booked, no guide on it"],
"link": "/experiences/detail/12/schedule/345?assign=guide"
},
{
"what": "Staff certifications to renew",
"count": 2,
"lines": ["Jane Doe's CPR expired August 26th 2026", "Sam Lee's First Aid expires October 10th 2026"],
"link": "/staff/detail/7?activeTab=profile#certifications"
}
],
"message": null
}
get_todayโ
The day at a glance, exactly as the Today screen shows it: what needs attention next, the gear to get out by time, each session with booked, checked-in, signed and unpaid, and the hires to pick up, out now and due back. Same response as GET /api/v1/today.
Parametersโ
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | No | Day in YYYY-MM-DD; defaults to today in the shop's timezone |
location_id | integer | No | Only this location |
section | string | No | out_now returns only date, now, out_now and still_to_pick_up: what is out of the shop this minute and the hires still waiting to be picked up. Leave out for the whole day |
items | string[] | No | With section: out_now, only the items whose names match these words, such as ["boards"] |
create_bookingโ
Create a new booking. Uses a two-step preview/confirm flow. Handles rental, experience, and store product bookings.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
customer_id | integer | No | Existing customer ID |
customer_email | string | No | Customer email (to find or create customer) |
customer_name | string | No | Customer full name |
customer_phone | string | No | Customer phone number |
start_date | string | No | Start date for the booking |
end_date | string | No | End date for the booking |
products | array | No | Rental products: [{product_id, quantity, variation_id}] |
experiences | array | No | Experiences: [{experience_id, schedule_id, participants, rates}] |
store_products | array | No | Store products: [{store_product_id, quantity, variation_id}] |
participants | array | No | Participant details: [{email, first_name, last_name}]. Required when products or experiences require participants. |
notes | string | No | Internal notes for the booking |
save_as_draft | boolean | No | Save as a draft. A draft sends nothing to the customer or the team until confirm_booking. |
hold_dates | boolean | No | Drafts only. Hold the items and seats while it is a draft. Default false. |
hold_until | string | No | Drafts only, with hold_dates. Last day to hold them (YYYY-MM-DD). |
user_confirmed | boolean | Yes | Must be true to create. First call without this returns a preview. |
For a per-participant experience with multiple rate categories, each experience entry may include rates: [{rate_category_id, quantity}] (e.g. 2 Adult + 1 Child) โ each entry is priced at that rate category's own price. Use get_experience to see the rate categories and prices. When rates is provided, participants is ignored (the rate quantities define the headcount). Not applicable to group-priced experiences.
Store-only bookings (buying physical products) do not require dates. Store products can also be added as add-ons to rental or experience bookings.
Exampleโ
"Create a booking for john@example.com, renting product 5 (qty 2) from March 15-17"
"Book the 10am departure of experience 12 for 2 adults and 1 child for jane@example.com"
confirm_bookingโ
Confirm a draft booking. Checks availability again when the draft was not holding its dates, then confirms it and, by default, emails the customer their confirmation and waiver link. Uses a two-step preview/confirm flow.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The draft booking ID |
send_confirmation | boolean | No | Email the customer their confirmation. Default true. |
send_waivers | boolean | No | Email the waiver link. Default true. |
user_confirmed | boolean | No | Set to true after the user has seen the preview |
Exampleโ
"Save a booking for jane@example.com for product 5 tomorrow as a draft and hold it"
"Confirm draft 123 but don't email the customer yet"
update_bookingโ
Update an existing booking.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID to update |
status | string | No | New status: confirmed, picked_up, checked_in, returned, completed, no_show. no_show sends the We missed you email (use mark_no_show to skip it); confirmed on a no-show undoes it |
start_date | string | No | New start date |
end_date | string | No | New end date |
add_store_products | array | No | Store products to add: [{store_product_id, quantity, variation_id}] |
remove_store_product_ids | array | No | IDs of store product booking records to remove |
user_confirmed | boolean | No | Must be true for any changes |
cancel_bookingโ
Cancel a booking. Uses a two-step preview/confirm flow that shows the cancellation policy and refund preview before executing.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID to cancel |
reason | string | No | Cancellation reason |
user_confirmed | boolean | No | Set to true after reviewing the cancellation policy preview |
get_booking_notesโ
Get all internal notes on a booking.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID |
get_booking_historyโ
A booking's History tab, newest first: every change, payment, email, pickup, return and check-in, with who did it and from where. Use it to answer who changed a booking, what changed, and when.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID |
limit | integer | No | How many of the newest events to return (default 30, at most 100) |
Returnsโ
Each event has when (in the shop's time zone), what, details and, when the event records a person, by - for example Jane Doe ยท Booking link for a customer who moved their own booking, or Dash AI for Sam.
list_unsigned_agreementsโ
The bookings picked up in a date window whose rental agreement is not signed yet, soonest first. The rental agreement is a separate document from waivers and forms: for unsigned waivers use get_bookings_missing_waivers.
Required scope: agreements:read
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
period | string | No | today (default), tomorrow, this_week, next_week, next_7_days or this_month, in the shop's own calendar |
date_from | string | No | Start date (YYYY-MM-DD) for any other window. Overrides period |
date_to | string | No | End date (YYYY-MM-DD), inclusive. Defaults to date_from |
limit | integer | No | How many bookings to list (default 25, at most 100). total_count is always the full number |
Returnsโ
agreements_on is false, with a message, when the shop has the rental agreement switched off. Otherwise checked_window, total_count and bookings: each with id, customer, pickup (in the shop's time zone), agreement (Not signed or Waiting for signature, as the booking's Documents card shows it), detail, emailed, times_emailed and opened.
add_booking_noteโ
Add an internal note to a booking.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID |
note | string | Yes | The note text to add |
add_booking_tagโ
Add a tag to a booking. Creates the tag if it does not exist.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID |
tag_name | string | Yes | The tag name to add |
remove_booking_tagโ
Remove a tag from a booking.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID |
tag_name | string | Yes | The tag name to remove |
get_late_pickupsโ
Get bookings with overdue pickups (confirmed but not yet picked up past start date).
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Number of results (default 10) |
get_late_returnsโ
Get bookings with overdue returns (picked up but not returned past end date).
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Number of results (default 10) |
get_delivery_runโ
Every delivery drop-off and every collection between two days, read from the same place as the Deliveries run sheet. Use it to answer what is going out or coming back over a week or two.
Required scope: bookings:read, and the person needs the fulfillment permission the run sheet takes.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
from | string | No | First day (YYYY-MM-DD) in the shop's time zone. Defaults to today |
to | string | No | Last day (YYYY-MM-DD), inclusive. Defaults to from, at most 62 days after it |
location_id | integer | No | Only the stops for this location |
Returnsโ
drops, collections, late and total_distance for the window, then stops in run sheet order (late stops first, then by time). Each stop has booking_id, what (Drop-off or Collection), when (in the shop's time zone), customer, address, items, distance, done and notes. A drop-off also has collected_back: when the shop goes back for it, even after the window, or a note that the customer brings it back. A collection has dropped_off. When today is in the window, stops still owed from the last two weeks are included and marked late.
send_booking_emailโ
Send an email to the customer for a booking.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID |
email_type | string | Yes | Type of email: confirmation, reminder, cancellation (cancelled bookings only), overdue_pickup, overdue_return, overdue_checkin (the Late check-in email), no_show (the We missed you email again, for a booking marked no-show only) |
user_confirmed | boolean | Yes | Must be true to send |
revert_experience_bookingโ
Undo an experience completion or check-in recorded by mistake. completion puts a completed booking back to checked in; check_in puts a checked-in booking back to confirmed. Undo the completion first. Payments are not changed.
Requires the bookings.fulfillment permission (and bookings:write API scope).
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID |
step | string | Yes | completion or check_in |
revert_booking_pickup and revert_booking_return do the same for rental pickups and returns and take only booking_id. See Undo a Status Change.
mark_no_showโ
Mark a booking as a no-show: the customer never came. The booking stays paid and on the books, the rental items are free for other bookings, and a held security deposit is released. A customer who arrives late is checked in as normal, which clears the no-show.
Requires the bookings.fulfillment or manifests.checkin permission (and bookings:write API scope).
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID |
participant_id | integer | No | Mark only this person in a group, by the id get_manifest returns. Leave out to mark the whole booking |
email_customer | boolean | No | Send the We missed you email. Default true. It goes out only when the whole booking reads no-show |
Returns success, message, booking_id, booking_url, status and no_show_at. See Mark a No Show for what changes.
Exampleโ
"The 10am group on booking 123 never turned up, mark them as a no-show"
"Sam on booking 123 didn't come, the rest of the group did"
undo_no_showโ
Undo a no-show marked by mistake: the booking, or one person, goes back to booked. No email is sent. Refused when another booking has taken the rental items since. For a customer who arrived late, check them in instead.
Requires the bookings.fulfillment or manifests.checkin permission (and bookings:write API scope).
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID |
participant_id | integer | No | Undo only this person, by the id get_manifest returns. Leave out to undo the whole booking |
archive_bookingโ
Archive a past or cancelled booking. Hides it from the bookings list and the calendar. It stays in manifests, reports, customer detail, and search, and still holds its stock or seats.
Requires the bookings.archive permission (and bookings:write API scope).
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID to archive |
Only past bookings (end_date before today) or cancelled bookings can be archived.
unarchive_bookingโ
Restore a previously archived booking so it appears in the bookings list again.
Requires the bookings.archive permission (and bookings:write API scope).
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
booking_id | integer | Yes | The booking ID to restore |
Relatedโ
- Bookings REST API - REST API endpoints for bookings
- Payments Tools - Payment operations for bookings
- Tags Tools - Tag management
- Customers Tools - Customer management