Skip to main content

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โ€‹

ToolDescriptionRead-only?
list_bookingsList bookings with optional filtersYes
get_bookingGet detailed booking informationYes
get_todayThe day at a glance: needs, gear, sessions and hiresYes
get_needs_youWhat needs the signed-in person, as on the dashboard's Dash cardYes
create_bookingCreate a new booking (preview/confirm)No
confirm_bookingConfirm a draft booking (preview/confirm)No
update_bookingUpdate an existing bookingNo
cancel_bookingCancel a booking (preview/confirm)No
archive_bookingArchive a past or cancelled bookingNo
unarchive_bookingRestore a previously archived bookingNo
revert_booking_pickupUndo a rental pickupNo
revert_booking_returnUndo a rental returnNo
revert_experience_bookingUndo an experience completion or check-inNo
mark_no_showMark a booking, or one person in it, as a no-showNo
undo_no_showUndo a no-show marked by mistakeNo
get_booking_notesGet all internal notes on a bookingYes
get_booking_historyA booking's History tab, with who made each changeYes
list_unsigned_agreementsPickups in a date window whose rental agreement is not signed yetYes
add_booking_noteAdd an internal note to a bookingNo
add_booking_tagAdd a tag to a bookingNo
remove_booking_tagRemove a tag from a bookingNo
get_late_pickupsGet bookings with overdue pickupsYes
get_late_returnsGet bookings with overdue returnsYes
get_delivery_runEvery delivery drop-off and collection over a range of days, as the run sheet shows themYes
send_booking_emailSend an email to the booking customerNo

list_bookingsโ€‹

List bookings with optional filters. Returns paginated results.

Parametersโ€‹

NameTypeRequiredDescription
statusstringNoFilter by status: pending, confirmed, picked_up, checked_in, returned, completed, no_show, cancelled. no_show means staff marked that the customer never came
booking_typestringNoFilter by type: rental, experience, store
product_idintegerNoFilter to bookings containing this rental product
product_namestringNoFilter to bookings containing rental products matching this name
experience_idintegerNoFilter to bookings containing this experience
store_product_idintegerNoFilter to bookings containing this store product
store_product_namestringNoFilter to bookings containing store products matching this name
date_fromstringNoStart date for the period
date_tostringNoEnd date for the period
customer_searchstringNoSearch by customer name, organization name (school, club, company), saved group name, or email
limitintegerNoNumber 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 and get_amount_due show. 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_phone and customer_email - who to contact about the booking, as its booking page shows them. Pass customer_id to get_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โ€‹

NameTypeRequiredDescription
booking_idintegerNoThe booking ID
referencestringNoThe 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โ€‹

ParameterTypeRequiredDescription
datestringNoDay in YYYY-MM-DD; defaults to today in the shop's timezone
location_idintegerNoOnly this location
sectionstringNoout_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
itemsstring[]NoWith 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โ€‹

NameTypeRequiredDescription
customer_idintegerNoExisting customer ID
customer_emailstringNoCustomer email (to find or create customer)
customer_namestringNoCustomer full name
customer_phonestringNoCustomer phone number
start_datestringNoStart date for the booking
end_datestringNoEnd date for the booking
productsarrayNoRental products: [{product_id, quantity, variation_id}]
experiencesarrayNoExperiences: [{experience_id, schedule_id, participants, rates}]
store_productsarrayNoStore products: [{store_product_id, quantity, variation_id}]
participantsarrayNoParticipant details: [{email, first_name, last_name}]. Required when products or experiences require participants.
notesstringNoInternal notes for the booking
save_as_draftbooleanNoSave as a draft. A draft sends nothing to the customer or the team until confirm_booking.
hold_datesbooleanNoDrafts only. Hold the items and seats while it is a draft. Default false.
hold_untilstringNoDrafts only, with hold_dates. Last day to hold them (YYYY-MM-DD).
user_confirmedbooleanYesMust 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.

note

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โ€‹

NameTypeRequiredDescription
booking_idintegerYesThe draft booking ID
send_confirmationbooleanNoEmail the customer their confirmation. Default true.
send_waiversbooleanNoEmail the waiver link. Default true.
user_confirmedbooleanNoSet 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โ€‹

NameTypeRequiredDescription
booking_idintegerYesThe booking ID to update
statusstringNoNew 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_datestringNoNew start date
end_datestringNoNew end date
add_store_productsarrayNoStore products to add: [{store_product_id, quantity, variation_id}]
remove_store_product_idsarrayNoIDs of store product booking records to remove
user_confirmedbooleanNoMust 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โ€‹

NameTypeRequiredDescription
booking_idintegerYesThe booking ID to cancel
reasonstringNoCancellation reason
user_confirmedbooleanNoSet to true after reviewing the cancellation policy preview

get_booking_notesโ€‹

Get all internal notes on a booking.

Parametersโ€‹

NameTypeRequiredDescription
booking_idintegerYesThe 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โ€‹

NameTypeRequiredDescription
booking_idintegerYesThe booking ID
limitintegerNoHow 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โ€‹

NameTypeRequiredDescription
periodstringNotoday (default), tomorrow, this_week, next_week, next_7_days or this_month, in the shop's own calendar
date_fromstringNoStart date (YYYY-MM-DD) for any other window. Overrides period
date_tostringNoEnd date (YYYY-MM-DD), inclusive. Defaults to date_from
limitintegerNoHow 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โ€‹

NameTypeRequiredDescription
booking_idintegerYesThe booking ID
notestringYesThe note text to add

add_booking_tagโ€‹

Add a tag to a booking. Creates the tag if it does not exist.

Parametersโ€‹

NameTypeRequiredDescription
booking_idintegerYesThe booking ID
tag_namestringYesThe tag name to add

remove_booking_tagโ€‹

Remove a tag from a booking.

Parametersโ€‹

NameTypeRequiredDescription
booking_idintegerYesThe booking ID
tag_namestringYesThe tag name to remove

get_late_pickupsโ€‹

Get bookings with overdue pickups (confirmed but not yet picked up past start date).

Parametersโ€‹

NameTypeRequiredDescription
limitintegerNoNumber of results (default 10)

get_late_returnsโ€‹

Get bookings with overdue returns (picked up but not returned past end date).

Parametersโ€‹

NameTypeRequiredDescription
limitintegerNoNumber 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โ€‹

NameTypeRequiredDescription
fromstringNoFirst day (YYYY-MM-DD) in the shop's time zone. Defaults to today
tostringNoLast day (YYYY-MM-DD), inclusive. Defaults to from, at most 62 days after it
location_idintegerNoOnly 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โ€‹

NameTypeRequiredDescription
booking_idintegerYesThe booking ID
email_typestringYesType 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_confirmedbooleanYesMust 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โ€‹

NameTypeRequiredDescription
booking_idintegerYesThe booking ID
stepstringYescompletion 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โ€‹

NameTypeRequiredDescription
booking_idintegerYesThe booking ID
participant_idintegerNoMark only this person in a group, by the id get_manifest returns. Leave out to mark the whole booking
email_customerbooleanNoSend 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โ€‹

NameTypeRequiredDescription
booking_idintegerYesThe booking ID
participant_idintegerNoUndo 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โ€‹

NameTypeRequiredDescription
booking_idintegerYesThe 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โ€‹

NameTypeRequiredDescription
booking_idintegerYesThe booking ID to restore