/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
The filter contract is round-trip based: each response’sfilters array describes every filter available for your catalog, and applying a filter means sending it back in the next request’s filters array. field, op and data are required on each filter you send; data holds the selected state.
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
Unexpected errors return
{"error": "..."} including an Error ID — quote that ID to Depict support when reporting a problem.
