List products
Returns products scoped to the authenticated account.
Scope behaviour:
- Tokens with
products.read(orproducts.write) scoped to a seller/account: automatically scoped to the account’s own sellers — no extra params needed. - Tokens without an account/seller scope:
shop_subdomainsis required (prevents enumeration).
GET
/productsAuthorization
AuthorizationBearer token (JWT) · headerrequiredQuery parameters
qstringFull-text search query across product name and description.
statusstringFilter by visibility. Account-scoped tokens may use `hidden` or `all`.
default: "visible"
Allowed:
visiblehiddenallpageintegermin 1 · default: 1
per_pageintegermin 1 · max 200 · default: 20
idsstringComma-separated product IDs.
collectionsstringComma-separated collection slugs. Returns products belonging to all listed collections.
tagsstringComma-separated product tags to filter by.
skustringFilter by exact variant SKU.
product_type_idintegerFilter by product type ID.
price_gtenumberMinimum sale price (inclusive).
price_ltenumberMaximum sale price (inclusive).
stock_gteintegerMinimum stock quantity (inclusive). Use `1` to exclude out-of-stock items.
stock_lteintegerMaximum stock quantity (inclusive).
created_on_gtestring<date-time>Products created on or after this ISO 8601 timestamp.
created_on_ltestring<date-time>Products created on or before this ISO 8601 timestamp.
updated_on_gtestring<date-time>Products updated on or after this ISO 8601 timestamp.
updated_on_ltestring<date-time>Products updated on or before this ISO 8601 timestamp.
sortstringSort order for results.
default: "created_on_desc"
Allowed:
created_on_asccreated_on_descupdated_on_ascupdated_on_descprice_ascprice_descmodel_ascmodel_desccurrencystringISO 4217 currency code to filter by.
price_list_idintegerReturn prices from this price list instead of the default.
shop_subdomainsstringComma-separated shop subdomains.
**Required** for god-level tokens. Ignored for account-scoped tokens.
suggestbooleanReturn lightweight suggestion objects for autocomplete (fewer fields rendered).
default: false
exactbooleanWhen `true`, `q` is matched exactly rather than as a prefix/fuzzy query.
default: false
Responses
200Paginated list of products
total_itemsintegerper_pageintegerpageinteger_linksHalLinks_classstring[]_embeddedobjectShow propertiesHide properties
productsProduct[]Show propertiesHide properties
Array of
Product_linksHalLinksidintegernamestringProduct display name.
slugstringclass_namestringstatusstringAllowed:
visiblehiddendescriptionstringshort_descriptionstringis_bundlebooleanis_deliverablebooleanhas_optionsbooleantagsstring[]currency_codestringbundle_price_modestringAllowed:
pricesumbundle_discountnumberregular_pricenumberIn cents
pricenumberEffective price in cents
sale_pricenumberIn cents
sale_price_starts_atstring<date-time>sale_price_ends_atstring<date-time>has_multiple_pricesbooleandiscount_percentagenumbersafety_stockintegeravailablebooleanstockintegerCurrent stock
online_stockintegerall_stockintegerStock across all locations
vendorstringvariant_optionsobject[]Show propertiesHide properties
Array of
objectnamestringvaluestringglobal_tagsstring[]stocksobjectstocks_per_locationobjectcart_max_quantityintegercart_quantity_multipleintegerlist_pricesobject[]Show propertiesHide properties
Array of
objectprice_list_idintegerpricenumbercreated_onstring<date-time>updated_onstring<date-time>401Invalid or missing token
403Access denied
422Missing required parameter (e.g. `shop_subdomains` for tokens without an account/seller scope)
Request
curl -X GET "https://api.onbolder.com/v2/products" \
-H "Authorization: Bearer YOUR_TOKEN"const response = await fetch("https://api.onbolder.com/v2/products", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_TOKEN"
}
});import requests
response = requests.get(
"https://api.onbolder.com/v2/products",
headers={
"Authorization": "Bearer YOUR_TOKEN"
},
)Response
{
"_class": [
"results",
"products"
],
"total_items": 2,
"per_page": 20,
"page": 1,
"_links": {
"self": {
"href": "https://api.onbolder.com/v2/products"
},
"shops:show": {
"href": "https://api.onbolder.com/v2/shops/1"
}
},
"_embedded": {
"items": [
{
"id": 101,
"name": "Summer Dress",
"slug": "summer-dress",
"status": "visible",
"price": 49.99,
"regular_price": 69.99,
"currency": "USD",
"created_on": "2024-03-15T10:00:00Z",
"_links": {
"self": {
"href": "https://api.onbolder.com/v2/products/101"
},
"products:update": {
"href": "https://api.onbolder.com/v2/products/101",
"method": "put"
},
"products:delete": {
"href": "https://api.onbolder.com/v2/products/101",
"method": "delete"
}
}
},
{
"id": 102,
"name": "Linen Shirt",
"slug": "linen-shirt",
"status": "visible",
"price": 35,
"regular_price": 35,
"currency": "USD",
"created_on": "2024-02-10T08:30:00Z",
"_links": {
"self": {
"href": "https://api.onbolder.com/v2/products/102"
}
}
}
]
}
}Invalid or missing token
Access denied
Missing required parameter (e.g. `shop_subdomains` for tokens without an account/seller scope)