Skip to main content

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:

KindWhat it holdsFields
itemOne thing the shop sellsitem_type, item_id (none for gift_card and service), optional title_override, is_large
categoryEvery item in one category. Items added to the category later show up by themselves.item_type (rental, experience or store), category_id
headingA heading that starts a new section on the pageheading

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"
}
FieldValues
layoutgrid, list, tile, editorial, showcase, bento, mosaic (the booking page layouts)
columns2, 3 or 4
show_pricesShow a price on each card
show_calendar_tabAdd a Calendar tab listing upcoming times of the experiences in the collection
show_searchA search box above the items
show_up_toShow the first 6 or 12 items with a Show all button; null shows all
ask_dates_firstA date box above the items; each item then shows what is free that day

Endpointsโ€‹

MethodEndpointDescriptionScope
GET/v1/collectionsList collectionscollections:read
GET/v1/collections/{id}Get one collectioncollections:read
POST/v1/collectionsCreate a collectioncollections:write
PATCH/v1/collections/{id}Change name, link or displaycollections:write
DELETE/v1/collections/{id}Delete a collectioncollections:write
POST/v1/collections/{id}/rowsAdd a row to the endcollections:write
PUT/v1/collections/{id}/rows/orderPut the rows in a new ordercollections:write
PATCH/v1/collections/{id}/rows/{rowId}Change a rowcollections:write
DELETE/v1/collections/{id}/rows/{rowId}Remove a rowcollections: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.