/api/v1/products
- Scope
- catalogue
- Customer token
- none
A page of the website's product cards, newest first unless another sort is asked for. The filters combine. When exactly one category slug is given and found, meta.category carries that category, its parent and its active sub-categories for a breadcrumb and filter list; the sub-categories come featured first, then popular, then the fullest.
Parameters
-
categorystring · query - An active category's slug, or several separated by commas. A parent category takes in its active sub-categories' products. Unknown slugs are ignored, and when none is known the list is not filtered by category.
-
brandstring · query - A brand's slug, or several separated by commas.
-
filterstring · query - sale for products on a sale running today and in stock at the website branch, or featured for featured products.
-
on_sale, is_featuredboolean · query - The same as filter=sale and filter=featured, so both can be asked for at once.
-
min_price, max_pricenumber · query - Keeps products whose price, before any sale, is at least or at most this, both ends included. A value that is not a number is ignored.
-
qstring · query - Words the product's name or description holds, in any case. GET search looks in more places.
-
sortstring · query - newest (the default), sale_first (products on a running sale first, then newest), price_asc, price_desc, name_asc or popular (most viewed first). Anything else sorts newest first.
-
per_pageinteger · query - Products a page, 1 to 50; 20 by default. A number outside the range is brought into it.
-
pageinteger · query - The page, from 1.
The card's price is the product's lowest variant price at the website branch; sale_price and discount_percentage are set only while a sale runs. stock_quantity is what the branch holds across all the product's variants, and is_new means added in the last 30 days. description, cost_price, weight, attributes, tags and the SEO fields are always empty on a card; GET products/{slug} has them. The paginator's links and meta.links carry only page, not the filters, sort or per_page, so build the next page's address from your own query.
{
"data": [
{
"_id": "01a16356-8a39-73c4-be32-af0ba275c8f5",
"name": "Muc-Off tubeless sealant 140 ml",
"slug": "muc-off-tubeless-sealant-140-ml",
"sku": "MUC-SEAL-140",
"description": null,
"short_description": null,
"price": 1800,
"sale_price": null,
"discount_percentage": null,
"cost_price": null,
"stock_quantity": 20,
"manage_stock": true,
"in_stock": true,
"is_featured": false,
"is_new": true,
"has_variants": false,
"is_active": true,
"weight": null,
"weight_unit": null,
"images": [
{
"_id": "01a16356-8a3d-7128-9e41-6c2f0d8b7a15",
"url": "https://media.debianpos.com/products/muc-off-tubeless-sealant-140-ml.jpg",
"alt": "Muc-Off tubeless sealant 140 ml",
"is_primary": true,
"sort_order": 0
}
],
"primary_image": {
"_id": "01a16356-8a3d-7128-9e41-6c2f0d8b7a15",
"url": "https://media.debianpos.com/products/muc-off-tubeless-sealant-140-ml.jpg",
"alt": "Muc-Off tubeless sealant 140 ml",
"is_primary": true,
"sort_order": 0
},
"category": {
"_id": "01a16356-869c-7039-bd72-25da5ed9fb14",
"id": "01a16356-869c-7039-bd72-25da5ed9fb14",
"name": "Tyres and tubes",
"slug": "tyres-and-tubes",
"description": null,
"image_url": null,
"parent_id": "01a16356-8693-72a0-882a-401f785a9eb9"
},
"parent_category": {
"_id": "01a16356-8693-72a0-882a-401f785a9eb9",
"id": "01a16356-8693-72a0-882a-401f785a9eb9",
"name": "Parts",
"slug": "parts"
},
"brand": {
"_id": "01a16356-8a34-73b5-ab46-854e2ca956df",
"id": "01a16356-8a34-73b5-ab46-854e2ca956df",
"name": "Muc-Off",
"slug": "muc-off",
"logo_url": null,
"description": null
},
"attributes": [],
"tags": [],
"meta_title": null,
"meta_description": null,
"created_at": "2026-10-22T11:19:38.000000Z",
"updated_at": "2026-10-22T11:19:38.000000Z"
}
],
"links": {
"first": "https://app.debianpos.com/api/v1/products?page=1",
"last": "https://app.debianpos.com/api/v1/products?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": "https://app.debianpos.com/api/v1/products?page=1",
"label": "1",
"page": 1,
"active": true
}
],
"path": "https://app.debianpos.com/api/v1/products",
"per_page": 20,
"to": 4,
"total": 4,
"category": {
"id": "01a16356-8693-72a0-882a-401f785a9eb9",
"name": "Parts",
"slug": "parts",
"description": null,
"is_parent": true,
"has_children": true,
"parent": null,
"children": [
{
"id": "01a16356-869c-7039-bd72-25da5ed9fb14",
"name": "Tyres and tubes",
"slug": "tyres-and-tubes",
"product_count": 2
}
]
}
}
}