Skip to main content
The Store API uses Ransack for filtering and sorting collection endpoints. All query parameters are passed via the q parameter.

Filtering

Pass filter conditions using the q parameter with Ransack predicates:
const products = await client.store.products.list({
  name_cont: 'shirt',
  price_gte: 20,
  price_lte: 100,
})

Common Predicates

PredicateDescriptionSDKcURL
eqEqualsstatus_eq: 'active'q[status_eq]=active
not_eqNot equalsstatus_not_eq: 'draft'q[status_not_eq]=draft
contContains (case-insensitive)name_cont: 'shirt'q[name_cont]=shirt
startStarts withname_start: 'Spree'q[name_start]=Spree
endEnds withslug_end: 'tote'q[slug_end]=tote
ltLess thanprice_lt: 50q[price_lt]=50
lteqLess than or equalprice_lteq: 50q[price_lteq]=50
gtGreater thanprice_gt: 10q[price_gt]=10
gteqGreater than or equalprice_gteq: 10q[price_gteq]=10
inIn a liststatus_in: ['active', 'draft']q[status_in][]=active&q[status_in][]=draft
nullIs nulldeleted_at_null: trueq[deleted_at_null]=true
not_nullIs not nullcompleted_at_not_null: trueq[completed_at_not_null]=true
presentIs present (not empty)description_present: trueq[description_present]=true
blankIs blank (null or empty)description_blank: trueq[description_blank]=true
trueIs true (boolean)purchasable_true: 1q[purchasable_true]=1
falseIs false (boolean)purchasable_false: 1q[purchasable_false]=1
The SDK automatically wraps filter keys in q[...] and appends [] for array values — just pass flat params.

Combining Filters

Multiple filters are combined with AND logic:
// Products that contain "shirt" AND cost between $20-$100
const products = await client.store.products.list({
  name_cont: 'shirt',
  price_gteq: 20,
  price_lteq: 100,
})

Filtering by Association

You can filter by associated model attributes using underscore notation:
// Products in a specific taxon (category)
const products = await client.store.products.list({
  taxons_id_eq: 'txn_abc123',
})

// Taxons at a specific depth
const taxons = await client.store.taxons.list({
  depth_eq: 1,
})

Product Scopes

Products support additional filter scopes beyond standard Ransack predicates:
const products = await client.store.products.list({
  price_gte: 20,                                        // Minimum price
  price_lte: 100,                                       // Maximum price
  with_option_value_ids: ['optval_abc', 'optval_def'], // Filter by option values
  in_stock: true,                                       // Only in-stock products
})
ScopeDescriptionSDKcURL
price_gteMinimum priceprice_gte: 20q[price_gte]=20
price_lteMaximum priceprice_lte: 100q[price_lte]=100
with_option_value_idsFilter by option value IDswith_option_value_ids: ['optval_abc']q[with_option_value_ids][]=optval_abc
in_stockOnly in-stock productsin_stock: trueq[in_stock]=true
out_of_stockOnly out-of-stock productsout_of_stock: trueq[out_of_stock]=true
multi_searchFull-text searchmulti_search: 'shirt'q[multi_search]=shirt

Sorting

Use the sort parameter to sort product results. The backend handles routing to the appropriate sort mechanism:
// Sort by price
const products = await client.store.products.list({
  sort: 'price asc',
})

// Sort by best selling
const products = await client.store.products.list({
  sort: 'best_selling',
})

// Sort by name
const products = await client.store.products.list({
  sort: 'name asc',
})

Product Sort Options

ValueDescription
manualManual sort order (default, uses taxon position)
best_sellingBest selling products first
price ascPrice low to high
price descPrice high to low
name ascName A-Z
name descName Z-A
available_on descNewest first
available_on ascOldest first
For other resources, use q[s] with standard Ransack column sorts:
const taxons = await client.store.taxons.list({
  sort: 'name asc',
})

Pagination

All collection endpoints return paginated results. Control pagination with page and limit parameters:
const { data: products, meta } = await client.store.products.list({
  page: 2,
  limit: 10,
})

// meta contains pagination info
console.log(meta)
// {
//   page: 2,
//   limit: 10,
//   count: 85,
//   pages: 9,
//   from: 11,
//   to: 20,
//   in: 10,
//   previous: 1,
//   next: 3
// }

Pagination Parameters

ParameterDefaultMaxDescription
page1-Page number
limit25100Number of records per page

Pagination Metadata

Collection responses include a meta object with pagination info:
{
  "data": [...],
  "meta": {
    "page": 1,
    "limit": 25,
    "count": 85,
    "pages": 4,
    "from": 1,
    "to": 25,
    "in": 25,
    "previous": null,
    "next": 2
  }
}
FieldDescription
pageCurrent page number
limitRecords per page
countTotal number of records
pagesTotal number of pages
fromStarting record number on this page
toEnding record number on this page
inNumber of records returned on this page
previousPrevious page number (null if first page)
nextNext page number (null if last page)