Returns a paginated list of active products for the current store
import { createSpreeClient } from '@spree/sdk'
const client = createSpreeClient({
baseUrl: 'https://your-store.com',
publishableKey: '<api-key>',
})
const products = await client.store.products.list({
page: 1,
limit: 25,
sort: 'price asc',
name_cont: 'shirt',
price_gte: 20,
price_lte: 100,
with_option_value_ids: ['optval_abc', 'optval_def'],
expand: ['variants', 'images'],
}){
"data": [
{
"id": "prod_UkLWZg9DAJ",
"name": "Product 631938",
"description": "Voluptas est harum inventore accusamus vero quod tenetur quia. Assumenda quasi veritatis iste id. Amet vero quo tempora repellendus. Est illum sapiente vero cumque qui quis esse porro. Nemo natus sunt pariatur quos.",
"slug": "product-631938",
"meta_description": null,
"meta_keywords": null,
"variant_count": 1,
"available_on": "2025-03-05T20:52:36.543Z",
"created_at": "2026-03-05T20:52:36.559Z",
"updated_at": "2026-03-05T20:52:36.609Z",
"purchasable": true,
"in_stock": false,
"backorderable": true,
"available": true,
"default_variant_id": "variant_gbHJdmfrXB",
"thumbnail_url": null,
"tags": [],
"price": {
"id": "price_gbHJdmfrXB",
"amount": "19.99",
"amount_in_cents": 1999,
"compare_at_amount": null,
"compare_at_amount_in_cents": null,
"currency": "USD",
"display_amount": "$19.99",
"display_compare_at_amount": null,
"price_list_id": null
},
"original_price": null
},
{
"id": "prod_gbHJdmfrXB",
"name": "Product 643372",
"description": "Id eos veniam suscipit nam quod. Pariatur natus nesciunt temporibus molestiae. In deleniti molestiae corrupti iusto vitae dolores. Aut perspiciatis sapiente sunt assumenda quis consequuntur saepe. Enim eaque optio nesciunt provident magni perferendis officiis.\nDolore earum rem ratione eligendi. Distinctio maiores odit consequuntur soluta exercitationem natus ea magni. Dolores sequi reprehenderit explicabo excepturi numquam. Maiores quae distinctio necessitatibus vitae aut debitis autem.",
"slug": "product-643372",
"meta_description": null,
"meta_keywords": null,
"variant_count": 0,
"available_on": "2025-03-05T20:52:36.615Z",
"created_at": "2026-03-05T20:52:36.625Z",
"updated_at": "2026-03-05T20:52:36.637Z",
"purchasable": true,
"in_stock": false,
"backorderable": true,
"available": true,
"default_variant_id": "variant_EfhxLZ9ck8",
"thumbnail_url": null,
"tags": [],
"price": {
"id": "price_EfhxLZ9ck8",
"amount": "19.99",
"amount_in_cents": 1999,
"compare_at_amount": null,
"compare_at_amount_in_cents": null,
"currency": "USD",
"display_amount": "$19.99",
"display_compare_at_amount": null,
"price_list_id": null
},
"original_price": null
}
],
"meta": {
"page": 1,
"limit": 25,
"count": 2,
"pages": 1,
"from": 1,
"to": 2,
"in": 2,
"previous": null,
"next": null
}
}Publishable API key for store access
Publishable API key
Page number (default: 1)
Number of items per page (default: 25, max: 100)
Sort order. Values: price asc, price desc, best_selling, name asc, name desc, available_on desc, available_on asc
Filter by name containing string
Filter by taxon ID
Filter by minimum price
Filter by maximum price
Filter by option value prefix IDs (e.g., optval_abc). Pass multiple values for OR logic.
Filter to only in-stock products
Comma-separated associations to expand (variants, images, taxons, option_types)
Comma-separated list of fields to include (e.g., name,slug,price). id is always included.
Was this page helpful?
import { createSpreeClient } from '@spree/sdk'
const client = createSpreeClient({
baseUrl: 'https://your-store.com',
publishableKey: '<api-key>',
})
const products = await client.store.products.list({
page: 1,
limit: 25,
sort: 'price asc',
name_cont: 'shirt',
price_gte: 20,
price_lte: 100,
with_option_value_ids: ['optval_abc', 'optval_def'],
expand: ['variants', 'images'],
}){
"data": [
{
"id": "prod_UkLWZg9DAJ",
"name": "Product 631938",
"description": "Voluptas est harum inventore accusamus vero quod tenetur quia. Assumenda quasi veritatis iste id. Amet vero quo tempora repellendus. Est illum sapiente vero cumque qui quis esse porro. Nemo natus sunt pariatur quos.",
"slug": "product-631938",
"meta_description": null,
"meta_keywords": null,
"variant_count": 1,
"available_on": "2025-03-05T20:52:36.543Z",
"created_at": "2026-03-05T20:52:36.559Z",
"updated_at": "2026-03-05T20:52:36.609Z",
"purchasable": true,
"in_stock": false,
"backorderable": true,
"available": true,
"default_variant_id": "variant_gbHJdmfrXB",
"thumbnail_url": null,
"tags": [],
"price": {
"id": "price_gbHJdmfrXB",
"amount": "19.99",
"amount_in_cents": 1999,
"compare_at_amount": null,
"compare_at_amount_in_cents": null,
"currency": "USD",
"display_amount": "$19.99",
"display_compare_at_amount": null,
"price_list_id": null
},
"original_price": null
},
{
"id": "prod_gbHJdmfrXB",
"name": "Product 643372",
"description": "Id eos veniam suscipit nam quod. Pariatur natus nesciunt temporibus molestiae. In deleniti molestiae corrupti iusto vitae dolores. Aut perspiciatis sapiente sunt assumenda quis consequuntur saepe. Enim eaque optio nesciunt provident magni perferendis officiis.\nDolore earum rem ratione eligendi. Distinctio maiores odit consequuntur soluta exercitationem natus ea magni. Dolores sequi reprehenderit explicabo excepturi numquam. Maiores quae distinctio necessitatibus vitae aut debitis autem.",
"slug": "product-643372",
"meta_description": null,
"meta_keywords": null,
"variant_count": 0,
"available_on": "2025-03-05T20:52:36.615Z",
"created_at": "2026-03-05T20:52:36.625Z",
"updated_at": "2026-03-05T20:52:36.637Z",
"purchasable": true,
"in_stock": false,
"backorderable": true,
"available": true,
"default_variant_id": "variant_EfhxLZ9ck8",
"thumbnail_url": null,
"tags": [],
"price": {
"id": "price_EfhxLZ9ck8",
"amount": "19.99",
"amount_in_cents": 1999,
"compare_at_amount": null,
"compare_at_amount_in_cents": null,
"currency": "USD",
"display_amount": "$19.99",
"display_compare_at_amount": null,
"price_list_id": null
},
"original_price": null
}
],
"meta": {
"page": 1,
"limit": 25,
"count": 2,
"pages": 1,
"from": 1,
"to": 2,
"in": 2,
"previous": null,
"next": null
}
}