Skip to main content

Products API

Module-gated

All endpoints in this section require the supplier to have the Rentals module enabled. Calls return 403 module_disabled when it is off. The Bundles, Workshop, and Product Categories endpoint groups are gated the same way. Check GET /supplier/modules before relying on these endpoints.

Products represent the rental items in your inventory - the equipment, gear, and items that customers can rent.

What is a Product?โ€‹

A product is a rentable item in your catalog. Products include:

  • Basic info: Name, SKU, descriptions
  • Pricing: Rate structure, intervals, seasonal pricing
  • Inventory: Stock levels, variations (sizes, colors)
  • Constraints: Minimum/maximum rental periods, buffer times
  • Organization: Categories for grouping

Product Structureโ€‹

Product
โ”œโ”€โ”€ Category (optional)
โ”œโ”€โ”€ Variations[] (sizes, colors, models)
โ”‚ โ””โ”€โ”€ Inventory (stock per variation)
โ”œโ”€โ”€ PricingRules[] (seasonal/tiered pricing)
โ”œโ”€โ”€ Images[]
โ””โ”€โ”€ AssignedWaivers[]

Key Conceptsโ€‹

Variationsโ€‹

Products can have variations for different sizes, colors, or models:

ProductVariations
Mountain BikeSmall, Medium, Large
WetsuitXS, S, M, L, XL
Tent2-Person, 4-Person, 6-Person

Each variation tracks its own inventory independently.

Pricing Structuresโ€‹

StructureDescriptionExample
flatFixed price per interval$50/day
schedulePrice varies by duration tiers$50/day for 1-2 days, $40/day for 3+ days

Pricing Applies Toโ€‹

SettingDescription
yearRoundSame pricing applies all year
seasonalDifferent pricing for different seasons

Inventory Trackingโ€‹

When enabled, the system tracks:

  • Total stock: How many units you own
  • Available stock: Units not currently rented
  • Reserved: Units in confirmed bookings

Keep Selling When Sold Outโ€‹

A product can opt in to keep taking bookings after its on-hand stock is gone. This suits a shop that can buy, borrow, or rent in a few extra units at short notice and would rather take the booking than turn the customer away. Bookings past stock are accepted and flagged, so the shop knows how many extra units to source.

FieldTypeDescription
allow_shortagebooleanWhether this product may keep taking bookings after on-hand stock reaches zero. Default false
max_shortageinteger|nullHow many units past on-hand stock may be sold for any overlapping window. Minimum 1. When allow_shortage is true and this is null, the allowance is 1 unit. Ignored entirely when allow_shortage is false

How the allowance behaves:

  • One shared budget for the whole product, not per variation. Selling 2 units past stock on one option leaves nothing for the other options.
  • It is a running budget per overlapping window. Bookings already flagged short over the same dates draw it down, and a cancellation frees it again.
  • Kits never use it. A product with linked contents is refused up front when one of its parts is sold out, even if that part allows shortage itself.
  • Rentals only. Experiences do not use the allowance at all.

Where this shows up in the API:

  • Availability responses report available_quantity (units physically on hand) alongside bookable_quantity (what may actually be sold).
  • Each rental line on a booking reports shortage_quantity โ€” how many units of that line were sold past on-hand stock. See Get Booking.

How customers bookโ€‹

FieldTypeDescription
booking_modestringinstant (default): an online booking is confirmed on the spot. request: every online booking arrives as a booking request the business approves first

A bundle is a request when any product in it is set to request. Bookings made through the API or by staff are not affected: the business making the booking is the approval.

Product Statusโ€‹

StatusDescription
activeAvailable for booking
draftNot yet published
disabledTemporarily unavailable

API Endpointsโ€‹

MethodEndpointDescriptionScope Required
GET/v1/productsList all products with filteringproducts:read
GET/v1/products/{id}Get a single product with full detailsproducts:read
POST/v1/productsCreate a new productproducts:write
PATCH/v1/products/{id}Update an existing productproducts:write
DELETE/v1/products/{id}Delete a productproducts:write

Variationsโ€‹

MethodEndpointDescriptionScope Required
GET/v1/products/{id}/variationsList product variationsproducts:read
POST/v1/products/{id}/variationsCreate a variationproducts:write

Common Use Casesโ€‹

Syncing Products with E-commerceโ€‹

Sync your rental inventory with your online store:

curl "https://app.equipdash.com/api/v1/products?status=active" \
-H "Authorization: Bearer YOUR_API_KEY"

Checking Stock Availabilityโ€‹

Get product details including current stock levels:

curl "https://app.equipdash.com/api/v1/products/123" \
-H "Authorization: Bearer YOUR_API_KEY"

Updating Pricesโ€‹

Update product pricing via the API:

curl -X PATCH "https://app.equipdash.com/api/v1/products/123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"price": 55.00}'