View Categories

Launching soon on the Shopify App StoreJoin the waitlist

GraphQL API reference: Rentals & Bookings types

20 min read

The input objects, object types and enums the Rentals & Bookings GraphQL operations take and return. A ! after a type means it is required (in an input) or never null (in an answer); [Type!]! is a list. The GraphQL explorer (Settings › API › Open the GraphQL explorer) shows the same in its Docs pane.

Input types #

What you pass to the operations, area by area. Fields you leave out take the default shown after =.

Products, availability and prices #

RentalAvailabilityInput – An availability question. Give variantId, or productId when the product has one rent variant.

FieldTypeNotes
productIdID
variantIdID
startDateStringStart: 2026-12-01, 2026-12-01 09:00 or 2026-12-01T09:00. Required (or checkIn).
endDateStringEnd. A date-only rental from the 1st to the 3rd runs to midnight on the 3rd; start = end is one day (a stay needs a night). Required (or checkOut).
quantityInt = 1
excludeBookingIdIDLeave this booking’s own units out (an edit screen asking whether a booking can move).
excludeOrderIdIDLeave every booking of this order out.
applyTurnoverBoolean = trueAdd the product’s turnaround time around the range (as the calendar blocks it). Default true.
locationIdIDUnits at this location only (gid://shopify/Location/… or the number).
checkInStringA stay’s check-in day (stands for startDate).
checkOutStringA stay’s check-out day (stands for endDate).

RentalCalendarInput – A window to describe for a date picker. Give variantId, or productId (its first rent variant for the storefront).

FieldTypeNotes
productIdID
variantIdID
startDateStringFirst day, Y-m-d. With it, the widget payload covers startDate … endDate (default 90 days, at most 400); without it, everything from two days ago on.
endDateStringLast day, Y-m-d.
slimBooleanA lighter widget payload (no day prices), as the POS asks for.
displayStringglobal = the store-wide calendar’s display.
locationIdIDThe pick-up location: the calendar is for that location’s stock and bookings.
returnLocationIdIDA one-way rental’s return location: the calendar answers for renting it one way (widgetConfig.returnLocations lists the choices).
methodRentalHandoverMethodThe calendar for this method (its transit and hand-over days; the payload’s handover).
returnMethodRentalReturnMethod
postcodeStringDelivery: the postcode (its area’s days; with several locations, where it is delivered from).
zoneIdID

RentalPriceInput – What to price. Give variantId, or productId when the product has one rent variant.

FieldTypeNotes
productIdID
variantIdID
quantityInt = 1
startDateStringStart date (Y-m-d), or date and time (2026-10-01T09:00). Required (or checkIn).
endDateStringEnd date; default the start date (one day; a stay needs a later check-out).
startTimeStringStart time (HH:mm) when startDate has none.
endTimeStringEnd time (HH:mm) when endDate has none.
guestsRentalPartyInputThe party, for a product that counts guests.
localeStringThe storefront language for texts (Rental dates line property), e.g. fr.
locationIdIDThe pick-up location (prices don’t depend on it yet; with returnLocationId it decides the one-way fee).
returnLocationIdIDReturned to another location than the pick-up: the one-way fee is added.
methodRentalHandoverMethodThe method (prices don’t depend on it yet).
returnMethodRentalReturnMethod
checkInStringA stay’s check-in day (stands for startDate).
checkOutStringA stay’s check-out day (stands for endDate).

RentalPartyInput – A party of guests, for products that count guests (the widget’s guest picker). Omit for products that don’t.

FieldTypeNotes
guestsIntTotal guests, when the product doesn’t split them.
adultsInt
childrenInt
infantsInt
petsInt

RentalDayPricesInput

FieldTypeNotes
productIdID
variantIdID
startDateStringFirst day, Y-m-d; default today.
endDateStringLast day, Y-m-d; default 30 days after the start. At most 366 days.

RentalSearchSelectionInput – A date search (the search block’s selection; the theme’s sr_* URL parameters).

FieldTypeNotes
fromStringFirst day, Y-m-d.
toStringLast day, Y-m-d (default from).
fromTimeStringHH:mm
toTimeStringHH:mm
quantityInt
lengthStringA length code instead of to: 4h, 3d, 2w, 1m, 1y.
guestsInt
adultsInt
childrenInt
infantsInt
petsInt
whereStringA place as typed (≤ 100 characters): the shop’s own places first, then the geocoder.
radiusKmIntKilometres around where, 1–500 (default 25).
locationIdIDA pick-up location (the theme’s sr_loc): available THERE; without it, available at some location.
EnumValues
RentalHandoverMethodPICKUP – The customer picks it up.
DELIVERY – The store delivers it.
SHIPPED – It is transported (shipped).
RentalReturnMethodIN_STORE – The customer brings it back to the store.
COLLECT – The store collects it.
POST – The customer transports it back.

Bookings #

RentalBookingFilterInput – Booking filters; they combine with AND.

FieldTypeNotes
productIdID
variantIdID
orderIdID
stateRentalBookingState
statuses[RentalBookingStatus!]
sources[RentalBookingSource!]
endsAfterStringOnly bookings ending (turnaround included) after this moment.
startsBeforeStringOnly bookings starting (turnaround included) before this moment; a bare date means that day at 23:59.
searchStringOrder name / number, booking number, customer, product / variant title, SKU or notes.
isBookedBooleantrue: still hold stock; false: cancelled.
locationIdIDPicked up at this location (bookings without one belong to the default location).
methodRentalHandoverMethod
outOnStringGoes out on this day (Y-m-d).
backOnStringComes back on this day (Y-m-d).

RentalBookingCreateInput

FieldTypeNotes
productIdID
variantIdID
startDateString!Start: 2026-12-01, 2026-12-01 09:00 or 2026-12-01T09:00.
endDateString!End. A date-only rental from the 1st to the 3rd runs to midnight on the 3rd; start = end is one day.
quantityInt = 1
customerIdIDThe customer the draft order is for.
emailStringThe customer’s email, when there is no customer yet.
notesString
blockBoolean = falseBlocked dates (maintenance, private use): no order.
forceBoolean = falseLet blocked dates overlap other bookings.
guestsRentalPartyInputThe party, for a product that counts guests: person mode books the party’s seats, unit mode at least the units the party needs.
locationIdIDThe pick-up location (the hold and the draft order are for its stock).
returnLocationIdIDA one-way rental’s return location.
methodRentalHandoverMethod
returnMethodRentalReturnMethod
windowString
backWindowString

RentalBookingUpdateInput

FieldTypeNotes
startDateStringNew start (one date alone keeps the other).
endDateStringNew end.
notesStringReplaces the booking’s notes.
reasonStringWhy the dates changed (kept on the booking’s history).
forceBoolean = falseSkip the stock check.
EnumValues
RentalBookingStateUPCOMING
OUT
OVERDUE
RETURNED
RentalBookingStatusRESERVED – Holds stock; nothing out yet.
OUT – Units are with the customer.
RETURNED – Everything is back.
CANCELLED – Cancelled; the stock is free.
CONFLICT – The order came in when the stock was gone: needs attention.
RentalBookingSourceONLINE – The Online Store or a headless storefront (checkout).
POS – Shopify POS.
ADMIN – Made by staff in the app (a draft order).
API – Made through this API with a secret key.
ICAL – An imported outside calendar (iCal).
BLOCK – Blocked dates (maintenance, private use).
IMPORT – Imported from another system (a data import).
RentalBookingSortKeyID
START_DATE
END_DATE

Orders #

RentalOrderFilterInput

FieldTypeNotes
startDateStringThe window’s start: default today 00:00.
endDateStringThe window’s end: default the end of the start day.
productIdID
variantIdID
stateRentalBookingState
statuses[RentalBookingStatus!]Booking statuses.
searchStringOrder name / number, booking number, customer, product / variant title, SKU.
isBookedBoolean = trueOnly rentals that still hold stock (default); false also lists orders whose rentals were cancelled.

Send & Return #

RentalMoveQueueFilterInput

FieldTypeNotes
productIdID
variantIdID
orderIdID
searchStringOrder name / number, booking number, customer, product / variant title, SKU.
locationIdIDPicked up at this location (bookings without one belong to the default location).

RentalMovementFilterInput

FieldTypeNotes
bookingIdID
variantIdID
productIdID
dateFromStringFirst day, Y-m-d (store time).
dateToStringLast day, Y-m-d.
searchStringProduct, order, customer, SKU — or a serial the movement moved.

RentalMovesInput

FieldTypeNotes
items[RentalMoveItemInput!]!
atomicBoolean = trueOne bad item refuses the whole batch (nothing recorded). Default true.
notifyBoolean = falseAsk the notification rules to tell the customer (the store’s rules decide).
locationIdIDWhere the check-out or check-in happened.

RentalMoveItemInput

FieldTypeNotes
bookingIdID!
quantityIntUnits to move: default the number of serials, else 1.
serials[String!]Serial numbers moved (one per unit for a product that tracks serials).
notesString

RentalScanInput

FieldTypeNotes
codeString!A serial number, an order name (#1042 / 1042), a booking number or a SKU.
bookingIdID
orderIdID
variantIdID
productIdID
notesString
notifyBoolean = false
locationIdIDWhere the check-out or check-in happened.
EnumValues
RentalMoveDirectionSEND
RETURN
RentalMovementSortKeyDATETIME
ID
BOOKING_ID
QUANTITY

Serial numbers #

RentalSerialNumberFilterInput

FieldTypeNotes
productIdID
variantIdID
statusRentalSerialStatus
searchStringPart of the code.

RentalSerialUsageInput

FieldTypeNotes
startDateStringFirst day, Y-m-d. With it, days days from there; without it, the last days days (30, 90 or 365) ending today.
daysInt
productIdID
sortStringcode, product, days_out, days_idle, utilisation, hires, revenue, revenue_per_day, …
directionStringasc or desc

RentalSerialNumberCreateInput

FieldTypeNotes
productIdIDGive variantId, or productId when the product has one rent variant.
variantIdID
serialNumberString!
statusRentalSerialStatusAVAILABLE (default), MAINTENANCE or RETIRED.
costStringA decimal string.
dateAcquiredStringY-m-d; default today.
notesString

RentalSerialNumberRangeInput

FieldTypeNotes
productIdID
variantIdID
fromStringThe first code, e.g. TENT-001.
toStringThe last code, e.g. TENT-020.
rangeStringOr both at once: TENT-001…TENT-020 (also .. or -).
statusRentalSerialStatus
costString
dateAcquiredString
notesString

RentalSerialNumberUpdateInput

FieldTypeNotes
serialNumberString
statusRentalSerialStatus
costString
dateAcquiredString
notesString
variantIdIDMove it to another rent variant (not while it is out).
EnumValues
RentalSerialStatusAVAILABLE – On the shelf; the only status a unit can go out in.
OUT – With a customer (set by a check-out, cleared by a check-in; never by hand).
MAINTENANCE – Being repaired or checked; can’t go out.
RETIRED – No longer owned; kept for its history.

Locations and stock #

RentalProductStockInput

FieldTypeNotes
productIdID!
modeRentalStockMode!
variants[RentalVariantStockInput!]BY_LOCATION: units per location per variant. SHARED: optional units per variant (default: keep the total).
returnRulesRentalReturnRulesInputBY_LOCATION: where customers return it (left out: unchanged).
forceBoolean = falseSave even when future bookings would no longer fit.

RentalVariantStockInput

FieldTypeNotes
variantIdID!
unitsIntSHARED: the variant’s units.
locations[RentalLocationStockInput!]

RentalLocationStockInput

FieldTypeNotes
locationIdID!
unitsInt!
minIntKeep at least (null = none; left out: unchanged).
maxIntKeep at most (null = none; left out: unchanged).
priceJSONThis variant’s price rule here (null = the location’s; left out: unchanged). See RentalLocationStock.price.
EnumValues
RentalStockModeSHARED – One stock, picked up at the default location.
BY_LOCATION – Units at each location.

RentalReturnRulesInput

FieldTypeNotes
returnsRentalReturnsTo!
locationIds[ID!]
policyRentalOneWayPolicy = STRICT
feeString
routes[RentalOneWayRouteInput!]

RentalOneWayRouteInput

FieldTypeNotes
fromLocationIdID
toLocationIdID
amountString!

RentalTransferCreateInput

FieldTypeNotes
fromLocationIdID!
toLocationIdID!
shipAtStringShop-local date or date and time (2026-10-04, 2026-10-04T09:00); default now.
arriveAtStringShop-local; default the ship time.
noteString
items[RentalTransferItemInput!]!
forceBoolean = falsePlan it even when the origin would be short (needs a reason).
reasonString

RentalTransferItemInput

FieldTypeNotes
variantIdID!
quantityIntCreate: required. Dispatch / receive: default all.
serials[String!]

RentalTransferMoveInput

FieldTypeNotes
idID!
items[RentalTransferItemInput!]Left out: every item, all of it.
serials[String!]Receive: the serial numbers scanned in (they pick their items).

RentalTransferFilterInput

FieldTypeNotes
statusRentalTransferFilterStatus = OPENOPEN = PLANNED or IN_TRANSIT (the default); null = all.
locationIdIDFrom or to this location (gid://shopify/Location/… or the number).
inboundBoolean = falseWith locationId: only transfers to it.
EnumValues
RentalReturnsToSAME – Where they picked it up (a round trip).
ANY – Any location that takes returns.
LIST – One of the listed locations.
RentalOneWayPolicySTRICT – The pick-up location must keep enough units for all its later bookings (the unit doesn’t come back there).
POOLED – The pick-up location has it on the day; all locations together cover the rental; the store moves units to cover later bookings.
RentalTransferFilterStatusOPEN
ALL
PLANNED
IN_TRANSIT
ARRIVED
CANCELLED

Rental kits #

RentalKitCreateInput

FieldTypeNotes
titleString!
items[RentalKitItemInput!]!1 to 30 items.
pricingRentalKitPricing = OWN
itemsDiscountPercentString
useItemRulesBoolean = true
rentalTypeStringdate | datetime | datefixed | datetimefixed (default: the first item’s).

RentalKitItemInput

FieldTypeNotes
variantIdID!The item’s rent variant (gid or numeric id).
quantityInt!1 to 2000.

RentalKitUpdateInput

FieldTypeNotes
titleString
items[RentalKitItemInput!]
pricingRentalKitPricing
itemsDiscountPercentString
useItemRulesBoolean
EnumValues
RentalKitPricingOWN – The kit’s own rental rates.
ITEMS_SUM – The sum of the items’ rental prices for the dates, minus itemsDiscountPercent.

Delivery & pickup #

RentalHandoverWindowsInput

FieldTypeNotes
productIdID
variantIdID
methodRentalHandoverMethod
returnMethodRentalReturnMethod
dateString!The day (Y-m-d).
locationIdID
backBooleanThe return day’s slots instead of the out day’s.
postcodeStringDelivery: the postcode (its area’s slots and the places left).
zoneIdID

RentalHandoverChangeInput

FieldTypeNotes
bookingIdID!gid://sirentals/Booking/… or the number.
methodRentalHandoverMethod
returnMethodRentalReturnMethod
windowString
backWindowString
returnTrackingString
forceBooleanKeep it even when the new transit days are booked.

RentalDeliveryZoneInput – A delivery area’s fields; on update, the fields left out keep their value.

FieldTypeNotes
nameString
publicNameString
locationIdID
postcodes[String!]
radiusKmFloat
centerLatFloat
centerLngFloat
feeHintString
minOrderHintString
days[String!]
windows[RentalDeliveryZoneWindowInput!]
deliverBeforeInt
collectAfterInt
activeBoolean
positionInt

RentalDeliveryZoneWindowInput

FieldTypeNotes
fromString!
toString!
capacityInt
days[String!]

Balances #

RentalBalanceInvoiceInput

FieldTypeNotes
balanceIdID!
toStringSend to this address instead of the customer’s.
messageStringA message in the email.
EnumValues
RentalBalanceStatusADDING – Being added to the order.
DUE
OVERDUE
PAID
WAIVED
CANCELLED – The order was cancelled.
FAILED – Shopify refused the order edit and the invoice: see the Balances page.

Subscriptions #

RentalSubscriptionInput – Rent billed per period instead of for dates (the store’s Settings › Subscriptions).

FieldTypeNotes
billingRentalBillingSource!EXTERNAL = another app’s selling plan (planId required); INVOICE = our invoice each period.
planIdIDThe selling plan (gid://shopify/SellingPlan/… or its number), for EXTERNAL.
termStringo (default) = until returned, or a number of periods (1–120).
intervalStringINVOICE: 1M, 2W… (default the product’s).

RentalSubscriptionEndInput

FieldTypeNotes
subscriptionIdID!
returnByStringY-m-d; default the end of the paid period.
noteString

RentalSubscriptionPaymentInput

FieldTypeNotes
subscriptionIdID!
amountStringDefault the period price.
noteString
orderIdIDThe order that paid it (gid://shopify/Order/… or its number), if any.

Calendar sync #

RentalCalendarImportInput

FieldTypeNotes
urlString!The calendar’s address (https://…ics).
nameString
variantIdIDThe rent variant it blocks (required when the product has several).
blockQuantityIntUnits each event blocks (default: every unit).
intervalMinutesIntMinutes between reads (at least 5, default 30).
syncNowBoolean = true

RentalCalendarImportUpdateInput

FieldTypeNotes
urlString
nameString
enabledBoolean
blockQuantityInt
blockAllUnitsBooleanBlock every unit again.
intervalMinutesInt
EnumValues
RentalCalendarFeedFlavourAVAILABILITY – Busy / free per day, no customer data: for booking channels.
OPERATIONAL – Every booking with its customer: for the team’s own calendar.

API keys #

RentalApiKeyInput

FieldTypeNotes
nameString!Who or what will use it.
scopes[String!][“read”] (default) or [“read”, “write”].

Object types #

What the operations answer. Connection types (…Connection, …Edge) follow the usual pattern: nodes, edges { cursor node }, pageInfo and totalCount. userErrors on every mutation payload is a list of RentalUserError { field message code data httpStatus }.

Store and caller #

TypeFields
RentalShop
The store the credential belongs to.
domain: String!, name: String, currency: String!, timezone: String!, today: String!, primaryLocale: String, checkoutReady: Boolean!, posCartMode: String
RentalApiCaller
Who is calling.
context: RentalApiContext!, app: String!, scopes: [String!]!, keyPrefix: String, installedApps: [String!]!, customerId: ID
EnumValues
RentalApiContextINTEGRATION – A secret API key (sirb_…): the merchant’s own servers and integrations.
STOREFRONT – A publishable key (sirpk_…) with allowed websites, or Shopify’s signed app proxy (the theme widget).
ADMIN – A staff session token: App Home, admin UI extensions, POS UI extensions.
CUSTOMER – A customer’s session token: customer account and checkout UI extensions.

Products, availability and prices #

TypeFields
RentalProduct
A rent variant: a product variant this store rents out.
productId: ID!, variantId: ID!, title: String, variantTitle: String, sku: String, rentalType: String, hasTime: Boolean!, mode: String!, units: Int, enabled: Boolean!, nightly: Boolean!, stayType: String, checkInTime: String, checkOutTime: String. stayType is days, days_free (Days: can go out again on the return day) or nights; it is null when the product follows the store.
RentalAvailability
Whether a quantity can be rented over a date range.
productId: ID!, variantId: ID!, startDate: String!, endDate: String!, totalQuantity: Int!, bookedQuantity: Int!, availableQuantity: Int!, requestedQuantity: Int!, isAvailable: Boolean!, nightly: Boolean!, nights: Int
RentalCalendar
Availability for one product over a window.
productId: ID!, variantId: ID!, totalQuantity: Int!, window: RentalDateWindow, today: String!, currency: String!, fullyBookedDays: [RentalBookedDay!]!, inventory: [RentalInventoryInterval!]!, widgetConfig: JSON!, product: RentalProduct!, nightly: Boolean!, turnoverDates: [String!]!, stayDays: [RentalStayDay!]!
RentalStayDay
How a day looks in a stay-of-nights calendar (the widget’s stayDayState).
date: String!, state: String!, checkIn: Boolean!, checkOut: Boolean!
RentalDateWindow
A range of days, Y-m-d.
from: String!, to: String!
RentalBookedDay
A day with every unit taken.
date: String!, quantity: Int!
RentalInventoryInterval
Units taken over an interval (the ledger, turnaround included).
quantity: Int!, start: String!, end: String!
RentalPriceList
The product’s rate card.
productId: ID!, variantId: ID!, name: String, variantTitle: String, rentalType: String, priceType: String, from: RentalPriceFrom!, headline: RentalPriceHeadline!, rates: [RentalRate!]!, minLength: JSON, maxLength: JSON, currency: String!, currencySymbol: String
RentalPriceFromamount: Float!, unit: String
RentalPriceHeadlineamount: Float!, period: String
RentalRate
One period of the rate card.
label: String!, period: String!, quantity: Int!, unit: String!, days: Float!, price: Float!, perDay: Float, addOn: RentalRateAddOn
RentalRateAddOnlabel: String!, period: String!, price: Float!
RentalQuote
What a rental costs: the storefront’s quote, what the cart line will charge.
productId: ID!, variantId: ID!, startDate: String!, endDate: String!, quantity: Int!, days: Int!, hours: Float!, unitPrice: Float!, total: Float!, lines: [RentalQuoteLine!]!, extraLines: [RentalQuoteLine!]!, guests: JSON, lengthUnit: String, currency: String!, currencySymbol: String, chargedTotal: Float!, tokenUnitPrice: String!, payment: RentalPaymentOptions, nightly: Boolean!, nights: Int
RentalQuoteLine
One line of a price breakdown.
label: String!, kind: String!, amount: Float!
RentalPaymentOptions
How a rental can be paid (the store’s Settings › Payments). Present when part payment can apply to the product.
options: [RentalPaymentChoice!]!, default: RentalPaymentChoice!, part: RentalPaymentSplit, reason: String, message: String
RentalPaymentSplit
Part now, the balance later: decimal strings in the store currency.
payNow: String!, balance: String!, dueDate: String!, dueAt: String, dueLabel: String, percent: Float, text: String
RentalDayPrices
A one-day hire’s price starting on each day.
productId: ID!, variantId: ID!, startDate: String!, endDate: String!, note: String!, days: [RentalDayPrice!]!, currency: String!, currencySymbol: String
RentalDayPricedate: String!, amount: Float!
RentalCatalogAvailabilityitems: [RentalCatalogEntry!]!, where: RentalWhere
RentalCatalogEntrykey: String!, productId: ID, handle: String, rental: Boolean!, available: Boolean, units: Int, distanceKm: Float, near: Boolean
RentalWhere
A place a Where search resolved to.
resolved: Boolean!, label: String, lat: Float, lng: Float, radiusKm: Int
RentalMapmarkers: [RentalMapMarker!]!, where: RentalWhere
RentalMapMarkerproductId: ID!, handle: String!, title: String!, url: String!, image: String, lat: Float!, lng: Float!, radius: Float, approximate: Boolean!, area: String, from: String, available: Boolean, near: Boolean, distanceKm: Float
EnumValues
RentalPaymentChoiceFULL
PART

Bookings #

TypeFields
RentalBooking
A booking: units of a rent variant held for a date range.
id: ID!, legacyResourceId: Int!, productId: ID, variantId: ID!, productName: String, variantTitle: String, sku: String, orderId: ID, orderName: String, lineItemId: ID, draftOrderId: ID, quantity: Int!, startDate: String!, endDate: String!, startDateWithTurnover: String, endDateWithTurnover: String, customerStart: String, customerEnd: String, startLabel: String, endLabel: String, quantitySent: Int!, quantityReturned: Int!, quantityToSend: Int!, quantityToReturn: Int!, canSend: Boolean!, canReturn: Boolean!, isBooked: Boolean!, status: RentalBookingStatus!, state: RentalBookingState!, overdue: Boolean!, conflictReason: String, source: RentalBookingSource, customer: RentalBookingCustomer, notes: String, guests: JSON, unitPrice: Float, currency: String, createdAt: String, serialsTracked: Boolean!, serials: [RentalBookingSerial!]!, serialsAvailable: [String!]!, movements: [RentalMovement!]!, dateChangeCalendar: RentalDateChangeCalendar, location: RentalLocation, returnLocation: RentalLocation, returnedElsewhere: Boolean!, payment: RentalBookingPayment, handover: RentalHandover, kind: RentalBookingKind!, kitBooking: RentalBooking, items: [RentalBooking!]!, term: String, subscription: RentalSubscription, nightly: Boolean!, nights: Int, checkIn: String, checkOut: String
RentalBookingCustomer
The customer of a booking.
id: ID, name: String, email: String
RentalBookingSerialcode: String!, out: Boolean!
RentalMovement
A check-out or a check-in.
id: ID!, legacyResourceId: Int!, direction: RentalMoveDirection!, datetime: String, quantity: Int!, serials: [String!]!, staffUserId: ID, notes: String!, booking: RentalBooking
RentalDateChangeCalendardisallowed: [String!]!, closedDays: [String!]!, min: String!, max: String!
RentalLocation
A Shopify location of the store, as a place to pick up rentals.
id: ID!, legacyResourceId: Int!, name: String!, shopifyName: String, publicName: String, address: RentalLocationAddress, area: String, active: Boolean!, rentalsEnabled: Boolean!, isDefault: Boolean!, acceptsReturns: Boolean!, pickupEnabled: Boolean!, instructions: String, rules: JSON
RentalLocationAddressaddress1: String, address2: String, city: String, province: String, zip: String, country: String, countryCode: String, phone: String
RentalBookingPayment
A part-paid rental line: what was paid at checkout and what is owed.
choice: RentalPaymentChoice!, full: String, paidNow: String, balance: String, dueDate: String, status: RentalBalanceStatus
RentalHandover
A booking’s hand-over: the out moment (pick-up, delivery or dispatch day) and the back moment (return, collection or the day the parcel is due back).
method: RentalHandoverMethod!, returnMethod: RentalReturnMethod!, label: String, returnLabel: String, outAt: String, outWindow: String, backAt: String, backWindow: String, outLabel: String, backLabel: String, text: String, transitOutMinutes: Int!, transitBackMinutes: Int!, mismatch: JSON, returnTracking: String, deliveryAddress: JSON, zone: RentalDeliveryArea, postcode: String
RentalBookingDatesCheckok: Boolean!, errors: [RentalRuleError!]!, priceDifference: Float
RentalRuleError
A rule of the store a request breaks.
code: String!, message: String!, field: String
RentalCustomerBookingscurrent: [RentalBooking!]!, upcoming: [RentalBooking!]!, past: [RentalBooking!]!
RentalCustomercustomerId: ID!, name: String, email: String, current: Int!, upcoming: Int!
RentalBookingCreatePayloadbooking: RentalBooking, draftOrder: RentalDraftOrder, userErrors: [RentalUserError!]!
RentalDraftOrderid: ID, name: String, invoiceUrl: String
RentalBookingPayloadbooking: RentalBooking, userErrors: [RentalUserError!]!
RentalBookingDeletePayloaddeletedBookingId: ID, cancelled: Boolean, previous: RentalBooking, userErrors: [RentalUserError!]!
EnumValues
RentalBookingKindITEM – One rental item (it holds stock).
KIT – A rental kit: its items are item bookings (see items).

Orders #

TypeFields
RentalOrder
An order, reduced to its rentals.
id: ID!, legacyResourceId: String!, name: String, status: RentalBookingStatus, customer: RentalBookingCustomer, earliestStart: String, latestEnd: String, bookings: [RentalBooking!]!, conflictCount: Int!

Send & Return #

TypeFields
RentalMoveQueueEdge
A booking in a work queue, with what the queue says about it.
cursor: String!, node: RentalBooking!, due: String, overdue: Boolean!, quantity: Int!, tracksSerials: Boolean!, serials: [String!]!
RentalMoveQueueCountstoday: Int!, overdue: Int!, week: Int!, all: Int!
RentalMovesPayloadprocessed: Int, items: [RentalMoveResult!], failures: [RentalMoveFailure!], userErrors: [RentalUserError!]!
RentalMoveResultbooking: RentalBooking!, quantity: Int!, serials: [String!]!, outstanding: Int!
RentalMoveFailureindex: Int!, bookingId: ID, code: String!, message: String!, httpStatus: Int
RentalScanPayloadaction: String, code: String, serials: [String!], booking: RentalBooking, outstanding: Int, userErrors: [RentalUserError!]!

Serial numbers #

TypeFields
RentalSerialNumber
One physical unit of a serial-tracked rent variant.
id: ID!, legacyResourceId: Int!, serialNumber: String!, productId: ID, variantId: ID!, status: RentalSerialStatus!, cost: String, dateAcquired: String, dateRetired: String, notes: String!, currentBookingId: ID, currentOrderId: ID, lastMovement: RentalSerialLastMovement, history: [RentalSerialMovement!]!
RentalSerialLastMovementdirection: RentalMoveDirection!, datetime: String, staffUserId: ID, bookingId: ID
RentalSerialMovementid: ID!, direction: RentalMoveDirection!, datetime: String, staffUserId: ID, bookingId: ID, orderId: ID, orderName: String, quantity: Int!, notes: String!
RentalSerialUsagewindow: RentalDateWindow!, rows: [RentalSerialUsageRow!]!, totals: RentalSerialUsageTotals!
RentalSerialUsageRowserialId: ID, variantId: ID, productId: ID, serialNumber: String, product: String, status: String, dateAcquired: String, daysOwned: Int, daysOut: Int, daysIdle: Int, utilisation: Int, hires: Int, revenue: Float, revenuePerDay: Float, unassigned: Boolean!
RentalSerialUsageTotalsdaysOut: Int!, daysOwned: Int!, revenue: Float!, serials: Int!, idle: Int!, unassignedRevenue: Float!, unassignedDays: Int!, overDays: Int!
RentalSerialLabels
A signed, short-lived link to a label sheet.
url: String!, count: Int!
RentalSerialTrackingproductId: ID!, tracking: Boolean!, counts: RentalSerialCounts!
RentalSerialCountsavailable: Int!, out: Int!, maintenance: Int!, retired: Int!
RentalSerialNumberPayloadserialNumber: RentalSerialNumber, userErrors: [RentalUserError!]!
RentalSerialNumbersPayloadserialNumbers: [RentalSerialNumber!], createdCount: Int, skipped: [String!], userErrors: [RentalUserError!]!
RentalSerialNumberDeletePayloaddeletedSerialNumberId: ID, previous: RentalSerialNumber, userErrors: [RentalUserError!]!

Locations and stock #

TypeFields
RentalProductStockproductId: ID!, mode: RentalStockMode!, variants: [RentalVariantStock!]!, returnRules: RentalReturnRules!
RentalVariantStockvariantId: ID!, title: String, total: Int, locations: [RentalLocationStock!]!
RentalLocationStocklocationId: ID!, units: Int!, activated: Boolean!, min: Int, max: Int, price: JSON
RentalProductStockPayloadstock: RentalProductStock, conflicts: [RentalStockConflict!], userErrors: [RentalUserError!]!
RentalStockConflict
A booking that needs more units at its location than the new stock has.
bookingId: ID!, orderName: String, start: String, end: String, quantity: Int!, locationId: ID, short: Int!
TypeFields
RentalLocationPayloadlocation: RentalLocation, userErrors: [RentalUserError!]!
RentalReturnRulesreturns: RentalReturnsTo!, locationIds: [ID!]!, policy: RentalOneWayPolicy!, fee: String, routes: [RentalOneWayRoute!]!
RentalOneWayRoutefromLocationId: ID, toLocationId: ID, amount: String!
RentalTransferid: ID!, legacyResourceId: Int!, status: RentalTransferStatus!, late: Boolean!, from: RentalLocation, to: RentalLocation, shipAt: String, arriveAt: String, shippedAt: String, receivedAt: String, cancelledAt: String, note: String, forcedReason: String, createdAt: String, items: [RentalTransferItem!]!
RentalTransferItemvariantId: ID!, productId: ID!, title: String, quantity: Int!, dispatched: Int!, received: Int!, inTransit: Int!, serials: [String!]!, receivedSerials: [String!]!
RentalTransferListtransfers: [RentalTransfer!]!, total: Int!
RentalTransferPayloadtransfer: RentalTransfer, userErrors: [RentalUserError!]!
RentalTransferSuggestionvariantId: ID!, productId: ID!, title: String, fromLocationId: ID!, toLocationId: ID!, quantity: Int!, reason: String!
RentalStockBoardlocations: [RentalLocation!]!, rows: [RentalStockBoardRow!]!, truncated: Boolean!
RentalStockBoardRowproductId: ID!, variantId: ID!, title: String, variantTitle: String, total: Int!, oneWay: Boolean!, locations: [RentalStockBoardCell!]!
RentalStockBoardCelllocationId: ID!, units: Int!, free: Int!, out: Int!, inTransit: Int!, min: Int, max: Int, belowMin: Boolean!, aboveMax: Boolean!
EnumValues
RentalTransferStatusPLANNED
IN_TRANSIT – Dispatched, not all received.
ARRIVED
CANCELLED

Rental kits #

TypeFields
RentalKitid: ID!, legacyResourceId: Int!, productId: ID!, variantId: ID!, title: String!, source: RentalKitSource!, pricing: RentalKitPricing!, itemsDiscountPercent: String, useItemRules: Boolean!, items: [RentalKitItem!]!
RentalKitItemproductId: ID!, variantId: ID!, title: String!, variantTitle: String, quantity: Int!
RentalKitPayloadkit: RentalKit, userErrors: [RentalUserError!]!
RentalKitDeletePayloaddeletedKitId: ID, userErrors: [RentalUserError!]!
EnumValues
RentalKitSourceAPP – Made in the app (App Home or this API).
SHOPIFY_BUNDLES – A Shopify Bundles product run as a fixed-price kit.

Delivery & pickup #

TypeFields
RentalHandoverWindow
A time slot of a hand-over day.
id: String!, from: String!, to: String!, label: String, capacity: Int, left: Int, full: Boolean!
RentalDeliverySettingsPayloadsettings: JSON, userErrors: [RentalUserError!]!
TypeFields
RentalDeliveryArea
A delivery area as shoppers see it .
id: ID!, name: String!, feeHint: String, minOrderHint: String
RentalDeliveryZone
A delivery area: the postcodes or radius it covers and its own days and slots.
id: ID!, legacyResourceId: Int!, name: String!, publicName: String, displayName: String!, locationId: ID, postcodes: [String!]!, radiusKm: Float, centerLat: Float, centerLng: Float, feeHint: String, minOrderHint: String, days: [String!], windows: [RentalDeliveryZoneWindow!], deliverBefore: Int, collectAfter: Int, active: Boolean!, position: Int!
RentalDeliveryZoneWindowfrom: String!, to: String!, capacity: Int, days: [String!]!
RentalDeliveryZonePayloadzone: RentalDeliveryZone, userErrors: [RentalUserError!]!
RentalDeliveryZoneDeletePayloaddeletedZoneId: ID, userErrors: [RentalUserError!]!
RentalDeliveryCheck
The postcode check.
ok: Boolean!, postcode: String, zone: RentalDeliveryArea, locationId: ID, code: String, message: String, earliestStart: String
RentalSchedule
One day’s run sheet: deliveries and collections in route order, pick-ups, returns in store, parcels to transport and returns due back by transport.
day: String!, today: String!, locationId: ID, locationName: String, deliveries: [RentalScheduleStop!]!, collections: [RentalScheduleStop!]!, pickups: [RentalScheduleStop!]!, returns: [RentalScheduleStop!]!, toPost: [RentalScheduleStop!]!, dueBack: [RentalScheduleStop!]!, route: [String!]!, mapLinks: [String!]!
RentalScheduleStop
One stop (an order) of the run sheet.
key: String!, section: String!, orderId: ID, orderName: String, customerName: String, email: String, phone: String, address: [String!]!, addressText: String!, mapUrl: String, postcode: String, zone: String, window: String, windowLabel: String, at: String, items: [RentalScheduleItem!]!, bookingIds: [ID!]!, note: String, status: String!, late: Boolean!, tracking: String
RentalScheduleItembookingId: ID!, title: String, variantTitle: String, quantity: Int!
RentalDeliveryFeeLine
A delivery fee cart line .
merchandiseId: ID!, amount: String!, stop: String!, token: String!, properties: JSON!, attributes: [RentalAttribute!]!

Balances #

TypeFields
RentalBalance
The balance of an order with part-paid rentals: one per order, one payment link.
id: ID!, legacyResourceId: Int!, orderId: ID!, orderName: String, amount: String!, currency: String!, amountShop: String!, shopCurrency: String!, dueDate: String!, status: RentalBalanceStatus!, method: RentalBalanceMethod!, remindersSent: Int!, paidAt: String, paymentUrl: String, bookings: [RentalBooking!]!
RentalBalancePayloadbalance: RentalBalance, userErrors: [RentalUserError!]!
EnumValues
RentalBalanceMethodORDER_EDIT – On the same order (an order edit): the order’s own payment page.
INVOICE – A separate invoice (a draft order), when the order couldn’t be edited.
POS – The outstanding amount of a POS split payment.

Subscriptions #

TypeFields
RentalSubscription
A rental billed per period: an ongoing rental (until returned) or a fixed-term one (N periods).
id: ID!, legacyResourceId: Int!, bookingId: ID, orderId: ID, orderName: String, customerId: ID, source: RentalBillingSource!, sellingPlanId: ID, planName: String, interval: String!, everyLabel: String!, term: String!, cycles: Int, cyclesPaid: Int!, periodPrice: String!, currency: String!, status: RentalSubscriptionStatus!, start: String!, paidThrough: String, nextDue: String, holdUntil: String, returnBy: String, endedReason: String, summary: String!, periods: [RentalSubscriptionPeriod!]!
RentalSubscriptionPeriod
One billing period of a rental billed per period.
cycle: Int!, start: String!, end: String!, due: String!, status: RentalSubscriptionPeriodStatus!, via: String, amount: String!, currency: String!, orderId: ID, orderName: String, paidAt: String
RentalSubscriptionPayloadsubscription: RentalSubscription, userErrors: [RentalUserError!]!
RentalReserveSubscription
The subscription of a held rental: pass sellingPlan with the cart line (Online Store /cart/add.js selling_plan, Storefront API sellingPlanId).
billing: RentalBillingSource!, sellingPlan: Int, planName: String, interval: String!, everyLabel: String!, term: String!, cycles: Int, periodPrice: String!, currency: String!, holdUntil: String, termEnd: String, consent: String!, consentAmounts: [String!]!
EnumValues
RentalBillingSourceEXTERNAL – Another app’s subscription (a selling plan on the rent variant): the app charges, we hold the stock.
INVOICE – Our invoice each period: a Shopify payment link.
CONTRACT – Our own subscription contract.
RentalSubscriptionStatusACTIVE
PAUSED
PAST_DUE – A period wasn’t paid by its due date plus the store’s grace days.
ENDING – Ended by the customer, staff or Flow: due back by returnBy.
ENDED – Every unit is back.
CANCELLED
OWNED
RentalSubscriptionPeriodStatusDUE
PAID
FAILED
SKIPPED
WAIVED
REFUNDED
CANCELLED

POS alerts #

TypeFields
RentalPosAlert
A rent item rung up at POS without the Rentals desk: no dates, no booking.
id: ID!, legacyResourceId: String!, kind: String!, status: RentalPosAlertStatus!, orderId: ID!, orderName: String, productId: ID, variantId: ID!, title: String, variantTitle: String, quantity: Int!, unitPrice: String, currency: String, customerId: ID, customerName: String, bookingId: ID, note: String, text: String!, createdAt: String, resolvedAt: String
RentalPosAlertPayloadalert: RentalPosAlert, userErrors: [RentalUserError!]!
EnumValues
RentalPosAlertStatusOPEN – Waiting for the merchant: book the dates or refund it.
BOOKED – Booked: a booking is attached to the order line.
DISMISSED – Dismissed (refunded, cancelled, or sold on purpose).

Calendar sync #

TypeFields
RentalCalendarSyncproductId: ID!, rentalType: String, feeds: RentalCalendarFeeds!, variants: [RentalCalendarVariant!]!, imports: [RentalCalendarImport!]!
RentalCalendarFeedsavailability: RentalCalendarFeed!, operational: RentalCalendarFeed, variants: [RentalCalendarVariantFeeds!]!, locations: [RentalCalendarLocationFeeds!]!
RentalCalendarLocationFeedslocationId: ID!, name: String!, availability: RentalCalendarFeed!, operational: RentalCalendarFeed
RentalCalendarFeedflavour: RentalCalendarFeedFlavour!, url: String!, rotatedAt: String, lastAccessAt: String
RentalCalendarVariantFeedsvariantId: ID!, title: String, availability: RentalCalendarFeed!, operational: RentalCalendarFeed
RentalCalendarVariantid: ID!, title: String, units: Int!
RentalCalendarImport
A calendar the store imports.
id: ID!, legacyResourceId: Int!, productId: ID!, variantId: ID!, name: String, host: String!, enabled: Boolean!, blockQuantity: Int, intervalMinutes: Int!, lastSyncAt: String, nextSyncAt: String, lastStatus: String, lastError: String, lastEventCount: Int, failures: Int!, blocks: Int!
RentalCalendarSyncPayloadcalendarSync: RentalCalendarSync, userErrors: [RentalUserError!]!
RentalCalendarImportPayloadcalendarImport: RentalCalendarImport, result: RentalCalendarSyncResult, userErrors: [RentalUserError!]!
RentalCalendarSyncResult
What a read of an imported calendar did.
status: String!, message: String, added: Int, updated: Int, removed: Int, events: Int
RentalCalendarImportDeletePayloaddeletedCalendarImportId: ID, userErrors: [RentalUserError!]!

Rental settings and API keys #

TypeFields
RentalSettingsImportPayloadreport: RentalSettingsImportReport, userErrors: [RentalUserError!]!
RentalSettingsImportReportdryRun: Boolean!, summary: JSON!, products: [RentalSettingsImportProduct!]!, errors: JSON!, unknownColumns: [String!]!
RentalSettingsImportProductproductId: ID!, title: String, lines: [Int!]!, action: String, changes: JSON, errors: JSON, warnings: JSON, result: JSON
RentalApiKeyid: ID!, legacyResourceId: Int!, name: String!, prefix: String!, lastFour: String, scopes: [String!]!, createdAt: String, lastUsedAt: String, revokedAt: String
RentalApiKeyCreatePayloadapiKey: RentalApiKey, secret: String, userErrors: [RentalUserError!]!
RentalApiKeyPayloadapiKey: RentalApiKey, userErrors: [RentalUserError!]!