Skip to main content
POST /products/search lets Developers search and browse products across all active crawled catalogs. To restrict search to one catalog, include catalog in the request body. You can combine a free-text query (q) with structured facet filters, price range bounds, and a pagination cursor. The response returns a page of MerchantProductListItem objects and an opaque nextCursor for advancing through results. If you already have a source product and want similar products, use POST /products/more-like-this.

Request

Body parameters

string
Optional key of an active crawled catalog to search. When omitted, search runs across all active crawled catalogs. When provided, use a known active crawled catalog key.
string
Free-text keyword query. Omit or set to null to browse without keyword filtering. Can be combined with facets and price filters.
Facet[]
Array of structured facet filters. Each facet has a name and a values array. Multiple facets are ANDed; multiple values within a facet are ORed.
See Facet names below for the full list of supported names.
number
Inclusive minimum price filter. Only products with currentPrice >= price_min are returned.
number
Inclusive maximum price filter. Only products with currentPrice <= price_max are returned.
string
Opaque pagination cursor from a previous response’s nextCursor field. Pass this value — unmodified — along with the same filters to retrieve the next page. Omit on the first request.
integer
default:"50"
Number of products to return per page. Accepted range: 1–100. Defaults to 50.

Example

Response

MerchantProductListItem[]
required
The current page of product results. See the Product model for the full field reference.
string | null
Opaque cursor for the next page of results. Pass as cursor on your next request with the same filters. null when you have reached the last page.

Example response

Facet names

Use these values for the name field in each facet object. Facet values should be lowercase; phrase values may contain spaces. You can also filter on dynamic product attribute facets by passing the bare attribute key (e.g. fit) or its fully qualified form (e.g. attribute_facets.fit).

Pagination

For a detailed walkthrough of cursor-based pagination, see Pagination guide.
Advance through pages by repeating your request with the same filters and the cursor value from the previous response:
  1. Send your initial search request with the desired filters and an optional limit.
  2. If nextCursor is non-null in the response, send a new request with cursor set to that value and all other fields unchanged.
  3. Repeat until nextCursor is null.
Cursors are opaque — do not parse or construct them. They encode internal continuation state and may change shape across releases.

SDK equivalents