Product Bundles
Product bundles allow you to group multiple products together and sell them as a package, optionally with discounts. A bundle can also be a combo (mixed bundle) that pairs rentals with an experience behind "pick one" choice groups โ see Mixed bundles (combos).
The Bundles API is currently read-only. Bundles are created and managed through the EquipDash dashboard. The API allows you to retrieve bundle information for display in your applications.
Key Conceptsโ
Bundle Pricing Typesโ
| Type | Description |
|---|---|
calculated | Price is sum of individual product prices (with any item discounts applied) |
flat | Bundle has a fixed price regardless of item prices |
rates | Whole-bundle prices for selected rate categories |
Item Discountsโ
Each item in a bundle can have its own discount:
| Discount Type | Description |
|---|---|
percentage | Percentage off the item's regular price |
flat | Fixed amount off the item's price |
Bookabilityโ
A bundle is considered bookable when:
- It has at least 2 items
- All items are available for the requested dates
Mixed bundles (combos)โ
A bundle can pair rentals with an experience in one bookable combo. The per-item item_type is then product or experience, items sharing a choice_group are "pick one" alternatives, the rental half can carry a duration-tiered discount (discount_tiers), and the whole combo can take a single flat security hold (security_deposit_type: "flat"). A bundle containing both rentals and experiences creates a mixed booking. Full field reference and a worked example are in Get bundle โ Mixed bundles.
Common Use Casesโ
Display Available Bundlesโ
Fetch bundles to display on your website or app:
curl "https://app.equipdash.com/api/v1/bundles?status=active" \
-H "Authorization: Bearer YOUR_API_KEY"
Get Bundle Details for Bookingโ
Before adding a bundle to a booking, retrieve its full details:
curl "https://app.equipdash.com/api/v1/bundles/123" \
-H "Authorization: Bearer YOUR_API_KEY"
API Endpointsโ
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/bundles | List bundles |
| GET | /v1/bundles/{id} | Get bundle |
| GET | /v1/bundles/{id}/availability | Availability โ bookable count, per-item stock + advisory warnings |
| POST | /v1/bundles/{id}/price-preview | Price preview โ live combo total, no booking created |
You cannot create or edit bundles via the API โ bundles are managed in the EquipDash dashboard. price-preview is a POST only because it accepts a selection body; it never creates or changes anything.
Required Scopesโ
| Scope | Operations |
|---|---|
products:read | List bundles, get bundle details, price preview |
Prices by rate typeโ
When pricing.type is rates, pricing.rate_prices lists the offered rate category IDs, labels, prices, and seat_weight. pricing.rate_price_basis is once, hour, or day. Bundles with experiences charge once; rental-only bundles can charge by duration.
Send rate_counts as a map of rate category ID to count, for example {"1": 2, "2": 1}. These counts apply to every selected experience and to gear configured for each person. Choose departures through the existing schedules map and rental lengths through durations. Use each bundle's offered IDs rather than assuming labels or IDs.
A combo rate counts as one sale unit and reserves the number of people in seat_weight. Gear uses quantity_basis (person or booking) and an optional rate_category_id; a null category applies to everyone. Unavailable items or incompatible experience rates reject the whole booking.