Collections API
A collection is one page of anything a shop sells, in the order the shop chooses, with its own link:
https://app.equipdash.com/widget/{shop}/c/{slug}. It can hold rentals, experiences, store products,
bundles, programs, the services page and the gift card page side by side, split into sections by
headings.
Collections are built in Settings -> Booking widget -> Collections. The API reads and writes the same collections, through the same engine, so a collection built here and one built in the portal behave the same.
Rowsโ
A collection is a list of rows, first to last. Each row is one of three kinds:
| Kind | What it holds | Fields |
|---|---|---|
item | One thing the shop sells | item_type, item_id (none for gift_card and service), optional title_override, is_large |
category | Every item in one category. Items added to the category later show up by themselves. | item_type (rental, experience or store), category_id |
heading | A heading that starts a new section on the page | heading |
item_type is one of rental, experience, store, bundle, program, service, gift_card, pass. A pass row is a season pass the shop sells; its card says Buy and opens the Store page, where the customer names the holder.
On the booking page, anything a customer cannot buy is left out: an item that is off, archived or not
sold online, and gift cards while gift card sales are off. An item picked on its own and again through
its category shows once. The row stays in the collection and missing is true when its item has
been deleted.
Collection structureโ
{
"id": 12,
"name": "Summer",
"slug": "summer",
"link": "https://app.equipdash.com/widget/your-shop/c/summer",
"layout": "grid",
"columns": 3,
"show_prices": true,
"show_calendar_tab": false,
"show_search": false,
"show_up_to": null,
"ask_dates_first": false,
"rows": [
{ "id": 81, "position": 0, "kind": "heading", "heading": "Activities", "name": "Activities" },
{ "id": 82, "position": 1, "kind": "item", "item_type": "experience", "item_id": 40, "name": "Morning class", "title_override": null, "image_url": null, "is_large": true, "missing": false },
{ "id": 83, "position": 2, "kind": "category", "item_type": "rental", "category_id": 7, "name": "Bikes", "missing": false },
{ "id": 84, "position": 3, "kind": "item", "item_type": "gift_card", "item_id": null, "name": "Gift card", "missing": false }
],
"created_at": "2026-09-25T10:00:00+00:00",
"updated_at": "2026-09-25T10:05:00+00:00"
}
| Field | Values |
|---|---|
layout | grid, list, tile, editorial, showcase, bento, mosaic (the booking page layouts) |
columns | 2, 3 or 4 |
show_prices | Show a price on each card |
show_calendar_tab | Add a Calendar tab listing upcoming times of the experiences in the collection |
show_search | A search box above the items |
show_up_to | Show the first 6 or 12 items with a Show all button; null shows all |
ask_dates_first | A date box above the items; each item then shows what is free that day |
Endpointsโ
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /v1/collections | List collections | collections:read |
GET | /v1/collections/{id} | Get one collection | collections:read |
POST | /v1/collections | Create a collection | collections:write |
PATCH | /v1/collections/{id} | Change name, link or display | collections:write |
DELETE | /v1/collections/{id} | Delete a collection | collections:write |
POST | /v1/collections/{id}/rows | Add a row to the end | collections:write |
PUT | /v1/collections/{id}/rows/order | Put the rows in a new order | collections:write |
PATCH | /v1/collections/{id}/rows/{rowId} | Change a row | collections:write |
DELETE | /v1/collections/{id}/rows/{rowId} | Remove a row | collections:write |
Embed codesโ
A collection's link can carry ?ref= like any other link, and the booking keeps it as its link tag.
To put a collection on a website, use the page iframe or the floating button:
<script src="https://app.equipdash.com/js/equipdash-widget-embed.js"
data-mode="floating-button"
data-supplier="123"
data-target="specific-item"
data-target-type="collection"
data-target-id="summer"
data-label="Book now"></script>
data-target-id is the collection's slug.