Skip to main content

List Store Products

Retrieve a paginated list of store products.

Endpointโ€‹

GET /v1/store-products

Authenticationโ€‹

Requires an API key with the store:read scope.

Query Parametersโ€‹

ParameterTypeDefaultDescription
pageinteger1Page number
per_pageinteger15Items per page (max 100)
searchstring-Search by name or SKU
category_idinteger-Filter by store category ID
statusstring-Filter by status: active, archived
is_standaloneboolean-Filter by standalone flag
who_can_buystring-Filter by everyone, staff_only or off. Replaces the standalone default
track_inventoryboolean-Filter by inventory tracking
sortstring-Sort field: id, name, sku, price, stock_quantity, created_at, status, sort_order
directionstringdescSort direction: asc or desc
Default order

With no sort parameter, store products are returned in the supplier's manual display order โ€” the same order shown in the booking widget, POS, and app (category order, then product order within each category, as set on the Arrange order screen). Pass an explicit sort to override it.

Responseโ€‹

Success (200 OK)โ€‹

{
"data": [
{
"id": 1,
"name": "Ski Wax Kit",
"sku": "WAX-001",
"brief_description": "Complete ski wax kit with iron and brush",
"long_description": "Everything you need to wax your skis at home...",
"category": {
"id": 3,
"name": "Accessories"
},
"price": 45.00,
"compare_at_price": 59.99,
"status": "active",
"track_inventory": true,
"inventory_tracking": "group",
"stock_quantity": 25,
"weight": 1.2,
"weight_unit": "kg",
"dimensions": "30x20x10 cm",
"variations": false,
"max_per_booking": 5,
"is_standalone": true,
"staff_only": false,
"who_can_buy": "everyone",
"suggest_in_cart": true,
"images": null,
"variation_options": null,
"product_variations": null,
"created_at": "2026-01-10T00:00:00+00:00",
"updated_at": "2026-02-01T14:30:00+00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 15,
"total": 12,
"total_pages": 1,
"request_id": "req_abc123",
"timestamp": "2026-02-13T12:00:00+00:00"
}
}
note

The images, variation_options, and product_variations fields are not loaded in the list endpoint for performance. Use the Get Store Product endpoint to retrieve the full product with all relations.

Response Fieldsโ€‹

Store Productโ€‹

FieldTypeDescription
idintegerUnique product identifier
namestringProduct name
skustring|nullStock keeping unit
brief_descriptionstring|nullShort description for listings
long_descriptionstring|nullFull description
categoryobject|nullStore category (id, name)
pricefloatSelling price
compare_at_pricefloat|nullOriginal/RRP price for discount display
statusstringactive or archived
track_inventorybooleanWhether stock quantity is tracked
inventory_trackingstringTracking mode: group (total quantity) or item (individual items with identifiers)
stock_quantityintegerCurrent stock level
weightfloat|nullProduct weight
weight_unitstring|nullWeight unit: kg, lb, g, or oz
dimensionsstring|nullProduct dimensions (free text, e.g., "30x20x10 cm")
variationsbooleanWhether the product has variations enabled
max_per_bookinginteger|nullMaximum quantity per booking
is_standalonebooleanAvailable as a standalone store product
staff_onlybooleanSold by staff only (POS, the app, the API, Dash), never on the booking page
who_can_buystringeveryone, staff_only or off (add-on only)
suggest_in_cartbooleanfalse when the shop left this product out of cart suggestions.
imagesarray|nullProduct images (loaded on detail endpoint)
variation_optionsarray|nullVariation option definitions (loaded on detail endpoint)
product_variationsarray|nullProduct variations (loaded on detail endpoint)
created_atstringISO 8601 datetime
updated_atstringISO 8601 datetime

Errorsโ€‹

StatusCodeDescription
401authentication_requiredNo API key provided
401invalid_api_keyInvalid API key
403insufficient_scopeAPI key lacks store:read scope

Example Requestโ€‹

curl -X GET "https://app.equipdash.com/api/v1/store-products?status=active&per_page=25" \
-H "Authorization: Bearer eqd_live_abc123xyz789..."