/v3/search/related returns the same response shape as
/v3/recommend/products, not a search
response. Its displays carry recommendation_id (not search_result_id) for
tracking.Limits and behavior
- Every response is a single JSON body. No search endpoint streams; there is no SSE or chunked delivery.
- Two pagination styles exist — cursor-based and page-based. They are mutually exclusive: mixing fields from both in one request returns 400.
- Cursor-based
limit: 1–250. Page-basedhits_per_page: 1–200 and required wheneverpageis sent. merchant,marketandlocaleare required on every request. Enumerate valid values via/v3/marketsand/v3/locales.- Unknown request fields are silently ignored — a misspelled field name is dropped, not rejected.
- Available filters and sorts are per-merchant configuration. Do not hardcode them: read them off the
filtersandsortsarrays in each response. GET /v2/search/content(dedicated content search) has no v3 equivalent. Content results are available only ascontent_search_linksinside/v3/search/resultsresponses.- Suggestions responses carry a one-hour cache header;
limitfor suggestions is 1–10, default 3. - Response fields with null values are omitted from the JSON (
exclude_noneserialization).
Search results
POST /v3/search/results with a JSON body:
Example request:
Response
Pagination
Rules for how the two styles interact:
- The styles are mutually exclusive. A request that mixes fields from both returns 400 with
{"error": "Cannot mix cursor-based and page-based pagination."}. pagewithouthits_per_pagereturns 400.- An undecodable
cursorreturns 400 with{"error": "Invalid pagination cursor."}. - The response mirrors the style used: page-based requests always echo
page(defaulting to 1) and omitcursor; cursor-based requests omitpage.
Filters
Each response’sfilters array describes the available filters. To apply a
filter, send its field, op and selected data in the next request.
The schema requires field and op. It permits omitted or null data, but
that does not select a value. An empty selection does not constrain results.
A filter object:
The filter type is in
meta.type:
Range filters
data is [min, max]. meta carries the selectable bounds min and max, plus optional unit and currency for rendering.
Value filters
data is the list of selected values. meta.values lists the selectable values, meta.counts the result count per value, and meta.names optional display names.
Hierarchical filters
data is a list of paths, where each path is the list of node titles from the root to a selected node. If a parent is selected, all of its children must also be included as selected.
Example: a category tree where the user selected Shirts and Jeans:
- Clothes
- Shirts
- Cotton Shirts
- Linen Shirts
- Pants
- Jeans
- Shorts
- Shirts
data is:
{"error": "Invalid request parameters. Please check your filters, market, and locale."}.
Sorting
Each response’ssorts array lists the available sorting methods for your catalog; the default is relevance. To sort, send one of them back as sort: {"field": "...", "order": "asc" | "desc"}. The meta object on each sort (title, selectable orders, display names) is for rendering and does not need to be sent back.
Query suggestions
GET /v3/search/suggestions with query-string parameters:
The response is
{"suggestions_request_id": "...", "suggestions": [...]} where each suggestion is one of two shapes:
On v2 the suggested-query field was named
title and listing suggestions
were category suggestions. On v3 the field is query and suggestions
reference listings.{"error": ...} body.
Content results
There is no dedicated content-search endpoint on v3 —GET /v2/search/content has no successor. Content results arrive as the content_search_links array on /v3/search/results responses. Each element:
Errors
Handled unexpected search errors include an
Error ID. Give that ID to Depict
support. Other failures can have a different body. Check the HTTP status before
you read response fields. Apply a request timeout in your storefront. Keep the
page usable if the request fails. Depict does not specify a storefront timeout
or a rate-limit policy on this page.
Product card data
displays contains merchant-specific product objects. Confirm your display
mapping with Depict before you assign types to these objects.
If your mapping uses variant_displays and variant_index, select the card
variant with display.variant_displays[display.variant_index]. The
display transformer guide
shows this structure and the usual card fields:
product_ididentifies the selected variant for product page and add-to-cart tracking.titlesupplies the card title.image_urlsis an array of image URLs. Some mappings use oneimage_urlinstead.sale_priceandoriginal_pricesupply the resolved prices.page_urlcan come from your display transformer. It is not guaranteed in the raw response.- If your mapping supplies
in_stock, use it for the card’s availability state.
search_result_id on the outer display for card tracking. Use the
returned prices for the requested market and locale. Keep the API’s product
order. If a returned variant is unavailable, disable its add-to-cart control.
Do not infer availability from the image or price. Provide an image placeholder
when no usable image is present.
