The departure operations of the Rentals & Bookings GraphQL API. A departure is one run of a product sold by departures (a tour, a class, a boat trip: see Rental types). They use the same address, keys and rules as the rest of the API: see GraphQL API reference: Rentals & Bookings for how to send a request, and the API overview for keys, limits and errors. The same operations are in REST, with the fields explained: REST API reference: Departures. The guides and equipment on a run are in GraphQL API reference: Staff & resources.
Needs the Rentals & Bookings app. Every operation needs a secret key; mutations need Allow changes (write). The Free plan’s API can read only: a mutation is refused with plan_required.
refis a run’s id (gid://sirentals/Departure/31or31) or its key,p<rental product id>-<YYYYMMDDHHMM>(p12-202612050900). A run made by a product’s repeating departure times hasid: nulland only its key until something is stored for it; changing it stores it.productIdtakesgid://shopify/Product/…or the number.bookingIdand a guest’sidare numbers.- Times are
Y-m-d H:iin the store’s time zone, daysY-m-d. - Mutations answer
userErrors { field message code data }when a change is refused:duplicate,cancelled,checked_in,not_found,invalid_param(withfield). The REST errors table explains each.
curl -s "https://YOUR-API-ADDRESS/graphql/2026-10" -H "Authorization: Bearer sirb_your_secret_key" -H "Content-Type: application/json" \
-d '{"query": "{ rentalDepartures(from: \"2026-12-05\", to: \"2026-12-06\") { totalCount nodes { key title start status seatsLeft } } }"}'
Runs #
| Operation | Arguments | What it does |
|---|---|---|
rentalDeparturesquery · secret key returns RentalDepartureConnection! | from: Stringto: StringproductId: IDlocationId: IDstatus: RentalDepartureStatusFilterfirst: Intafter: String | Every run of the store’s departure products between two days (from, to: Y-m-d; default 14 days from today, at most 92), soonest first. Cancelled runs only with status: CANCELLED or ALL. |
rentalDeparturequery · secret key returns RentalDeparture | ref: String! | One run by ref (its id or its key, p12-202612050900), with the staff and resources assigned; null when there is none. |
createRentalDeparturemutation · secret key returns RentalDeparturePayload! | input: RentalDepartureCreateInput! | Add a one-off run (not one of the product’s repeating times). duplicate when the product already has a run at that time. |
updateRentalDeparturemutation · secret key returns RentalDeparturePayload! | ref: String!input: RentalDepartureUpdateInput! | Change a run: capacity, cut-off, close or reopen sales, notes, its own minimum. Only the fields you send change. |
runRentalDepartureAnywaymutation · secret key returns RentalDeparturePayload! | ref: String! | Run a departure that is below its minimum anyway: no more alerts, runState becomes run_anyway. |
query NextTwoDays {
rentalDepartures(from: "2026-12-05", to: "2026-12-06", status: OPEN, first: 50) {
totalCount
nodes {
id key title start end status seatsTotal seatsTaken seatsLeft cutoffAt salesStopped
minGuests guaranteed runState
limitedBy { by seats }
}
}
}
mutation MoreSeats {
updateRentalDeparture(ref: "p12-202612050900", input: {capacity: 10, notes: "Two guides needed"}) {
departure { id key capacity seatsLeft }
userErrors { field code message }
}
}
RentalDepartureCreateInput
| Field | Type | Notes |
|---|---|---|
productId | ID | |
rentalProductId | Int | |
variantId | ID | |
start | String! | Y-m-d H:i in the store’s time zone. |
end | String | |
length | String | Like 3h, 90m or 2d (default: the length of the product’s first departure time). |
capacity | Int | |
cutoffMinutes | Int | |
notes | String | |
notesPublic | String |
RentalDepartureUpdateInput
| Field | Type | Notes |
|---|---|---|
capacity | Int | Seats of its own; null = the product’s stock. |
cutoffMinutes | Int | Minutes before the start when online sales stop; null = the product’s. |
status | RentalDepartureStatus | OPEN or CLOSED (Close sales). |
notes | String | |
notesPublic | String | |
minGuests | Int | The run’s own minimum guests; null = the product’s. |
decideByMinutes | Int | Minutes before the start when the shop decides; null = the product’s. |
| Enum | Values |
|---|---|
RentalDepartureStatusFilter | OPENCLOSEDCANCELLEDDONEALL |
RentalDepartureStatus | OPENCLOSEDCANCELLEDDONE |
| Type | Fields |
|---|---|
RentalDepartureOne run of a product sold by departures (“Set departures”). | id: ID, legacyResourceId: Int, key: String!, rentalProductId: Int!, productId: ID!, variantId: ID!, title: String!, start: String!, end: String!, length: String, status: RentalDepartureStatus!, oneOff: Boolean!, capacity: Int, stock: Int, seatsTotal: Int, seatsTaken: Int!, seatsLeft: Int, booked: Int!, bookings: Int!, checkedIn: Int!, cutoffMinutes: Int, cutoffAt: String, salesStopped: Boolean!, locationId: ID, notes: String, notesPublic: String, cancelReason: String, cancelledAt: String, minGuests: Int, decideBy: String, guaranteed: Boolean!, runState: String, limitedBy: RentalDepartureLimit, staff: [RentalDepartureStaff!] |
RentalDepartureLimitWhat limits a run’s seats (Limit sales). | by: String!, seats: Int!, short: [RentalDepartureShort!]! |
RentalDepartureShort | role: String!, count: Int!, have: Int! |
RentalDepartureStaff | kind: String!, id: Int!, name: String, role: String, status: String! |
RentalDeparturePayload | departure: RentalDeparture, userErrors: [RentalUserError!]! |
Guest list #
| Operation | Arguments | What it does |
|---|---|---|
rentalDepartureManifestquery · secret key returns RentalDepartureManifest | ref: String! | The run’s guest list, one row per booking, with the pickup points, the itinerary and the totals. |
query GuestList {
rentalDepartureManifest(ref: "31") {
departure { title start }
rows { number bookingId name guests pickup { name } checkedInAt noShow ticket }
totals { bookings guests checkedIn }
}
}
| Type | Fields |
|---|---|
RentalDepartureManifest | departure: RentalDeparture!, staff: [RentalDepartureStaff!]!, rows: [RentalDepartureManifestRow!]!, pickups: [RentalManifestPickup!]!, itinerary: [RentalItineraryDay!]!, totals: RentalDepartureManifestTotals! |
RentalDepartureManifestRow | number: Int!, bookingId: Int!, name: String, guests: Int!, adults: Int, children: Int, seniors: Int, students: Int, otherGuests: String, private: Boolean, participants: [RentalParticipant!], pickup: RentalPickup, order: String, orderId: ID, phone: String, email: String, notes: String, balanceDue: Float, checkedInAt: String, noShow: Boolean, ticket: String |
RentalParticipantOne named guest of a booking. | id: Int!, position: Int!, name: String, email: String, phone: String, checkedInAt: String, noShow: Boolean, waiver: String, waiverUrl: String, details: JSON |
RentalPickupA pickup point and its time on the run. | id: String, name: String, address: String, at: String |
RentalManifestPickupOne stop of the driver’s list. | id: String, name: String, address: String, at: String, map: String, guests: Int!, bookings: [Int!]! |
RentalItineraryDayOne day of a multi-day trip. | day: Int!, title: String!, text: String, overnight: String |
RentalDepartureManifestTotals | bookings: Int!, guests: Int!, checkedIn: Int! |
Cancelling and moving #
input.reason is required here (WEATHER, NOT_ENOUGH or OTHER); outcome defaults to REFUND, notifyGuests and notifyStaff to true.
| Operation | Arguments | What it does |
|---|---|---|
rentalDepartureCancelPreviewquery · secret key returns RentalDepartureCancelPreview | ref: String!outcome: RentalDepartureOutcome | What cancelling the run would do: bookings, guests and the refund total (null for OFFER). |
cancelRentalDeparturemutation · secret key returns RentalDepartureCancelPayload! | ref: String!input: RentalDepartureCancelInput! | Cancel a run: each booking is refunded (REFUND) or offered the next runs with seats (OFFER), and guests and staff are told. cancelled when it already is. |
cancelRentalDepartureDaymutation · secret key returns RentalDepartureDayCancelPayload! | date: String!productIds: [ID!]input: RentalDepartureCancelInput! | Cancel every run that starts on a day (a storm); productIds limits it. Runs already cancelled or done are left alone. |
moveRentalDeparturemutation · secret key returns RentalDepartureMovePayload! | ref: String!start: String!notifyGuests: Boolean | Change a run’s time: its bookings move with it, the end keeps the run’s length, and guests are emailed unless notifyGuests: false. |
mutation Storm {
cancelRentalDeparture(ref: "31", input: {reason: WEATHER, outcome: REFUND, note: "High winds on the harbour."}) {
departure { id status cancelReason }
results { booking order refunded amount refundError emailed }
userErrors { field code message } # cancelled when it already is
}
}
RentalDepartureCancelInput
| Field | Type | Notes |
|---|---|---|
reason | RentalDepartureReason! | |
outcome | RentalDepartureOutcome | |
notifyGuests | Boolean | |
notifyStaff | Boolean | |
note | String | A message to the guests. |
| Enum | Values |
|---|---|
RentalDepartureOutcome | REFUND – A full refund to the way they paid.OFFER – An email with the next runs that have seats; a booking not moved within 7 days is refunded. |
RentalDepartureReason | WEATHERNOT_ENOUGHOTHER |
| Type | Fields |
|---|---|
RentalDepartureCancelPreview | departure: RentalDeparture!, bookings: Int!, guests: Int!, refundTotal: Float, currency: String, manual: Int! |
RentalDepartureCancelPayload | departure: RentalDeparture, results: [RentalDepartureCancelResult!], userErrors: [RentalUserError!]! |
RentalDepartureCancelResult | booking: Int!, order: String, refunded: Boolean, amount: Float, refundError: String, offered: Boolean, emailed: Boolean |
RentalDepartureDayCancelPayload | date: String, cancelled: Int, departures: [RentalDeparture!], results: [RentalDepartureCancelResult!], userErrors: [RentalUserError!]! |
RentalDepartureMovePayload | departure: RentalDeparture, moved: Int, userErrors: [RentalUserError!]! |
Check-in and guest names #
| Operation | Arguments | What it does |
|---|---|---|
checkInRentalBookingmutation · secret key returns RentalCheckInPayload! | bookingId: Intcode: StringdepartureId: Intaction: RentalCheckInAction | Check a booking in (or undo, or mark a no-show) by booking id or by the code on the guest’s ticket. warnings flags already, wrong_departure and cancelled. |
rentalBookingParticipantsquery · secret key returns RentalBookingParticipants | bookingId: Int! | A booking’s named guests, with the product’s setting (ask: off, optional or required) and the seats. |
setRentalBookingParticipantsmutation · secret key returns RentalBookingParticipantsPayload! | bookingId: Int!participants: [RentalParticipantInput!]! | Replace a booking’s names: at most one per seat; a position keeps its check-in. |
checkInRentalParticipantmutation · secret key returns RentalParticipantPayload! | id: Int!action: RentalCheckInAction | Check one named guest in (or undo, or mark a no-show). The first guest checked in checks the booking in too. |
mutation ScanTicket {
checkInRentalBooking(code: "42-3fa9c1d2e4b5", departureId: 31) {
booking { id order guests checkedInAt noShow }
warnings { code message } # already, wrong_departure or cancelled
userErrors { field code message }
}
}
mutation Names {
setRentalBookingParticipants(bookingId: 42, participants: [{name: "Jordan Lee", email: "[email protected]"}, {name: "Sam Lee"}]) {
seats
participants { id position name checkedInAt }
userErrors { field code message }
}
}
RentalParticipantInput
| Field | Type | Notes |
|---|---|---|
name | String | |
email | String | |
phone | String |
| Enum | Values |
|---|---|
RentalCheckInAction | CHECK_INUNDONO_SHOW |
| Type | Fields |
|---|---|
RentalCheckInPayload | booking: RentalCheckedInBooking, warnings: [RentalCheckInWarning!], userErrors: [RentalUserError!]! |
RentalCheckedInBooking | id: Int!, departureId: Int, order: String, status: String!, guests: Int!, checkedInAt: String, noShow: Boolean! |
RentalCheckInWarning | code: String!, message: String! |
RentalBookingParticipants | bookingId: Int!, ask: String!, seats: Int!, participants: [RentalParticipant!]! |
RentalBookingParticipantsPayload | bookingId: Int, ask: String, seats: Int, participants: [RentalParticipant!], userErrors: [RentalUserError!]! |
RentalParticipantPayload | participant: RentalParticipant, userErrors: [RentalUserError!]! |
