Skip to main content
The Platform API currently has two active versions. Build new integrations against the /v3 endpoints — /v3 is the successor to /v2. /v2 is expected to be deprecated within roughly 6 months and /v3 within roughly 9 months, with a v4 API expected in Q4. These are expectations, not committed dates — confirm timelines with your Depict contact before planning a migration deadline.
Search on the Platform API consists of these endpoints:
/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-based hits_per_page: 1–200 and required whenever page is sent.
  • merchant, market and locale are required on every request. Enumerate valid values via /v3/markets and /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 filters and sorts arrays in each response.
  • GET /v2/search/content (dedicated content search) has no v3 equivalent. Content results are available only as content_search_links inside /v3/search/results responses.
  • Suggestions responses carry a one-hour cache header; limit for suggestions is 1–10, default 3.
  • Response fields with null values are omitted from the JSON (exclude_none serialization).

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."}.
  • page without hits_per_page returns 400.
  • An undecodable cursor returns 400 with {"error": "Invalid pagination cursor."}.
  • The response mirrors the style used: page-based requests always echo page (defaulting to 1) and omit cursor; cursor-based requests omit page.

Filters

The filter contract is round-trip based: each response’s filters 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:
  1. Clothes
    1. Shirts
      1. Cotton Shirts
      2. Linen Shirts
    2. Pants
      1. Jeans
      2. Shorts
Selecting Shirts (a parent) implies both of its children, so the corresponding data is:
Invalid filter, market or locale combinations return 422 with {"error": "Invalid request parameters. Please check your filters, market, and locale."}.

Sorting

Each response’s sorts 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.
Suggestions responses carry a one-hour cache header. If the suggestions index for the requested locale has not been built yet, the endpoint returns 404 with an {"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.