Limits and behavior
- Every route exists in two addressing variants: by Depict
listing_id(a UUID) or byexternal_id(the listing’s id in your PIM, CMS or e-commerce platform). Use whichever id system you store. - The products response contains no listing metadata — no title, breadcrumbs or content cards. Fetch metadata with the GET routes.
- Filters, sorting and pagination on the products endpoint work exactly as on search; the same limits apply (cursor
limit1–250,hits_per_page1–200, no mixing of pagination styles). - There is no
queryfield on listing requests. The per-response tracking id isproduct_listing_request_id(search:search_request_id) and each display carriesproduct_listing_result_id(search:search_result_id). - The GET routes carry a 10-second cache header — they are designed to be called on every page load.
- An unknown
listing_idorexternal_idreturns 404. - v2’s body-based addressing (
query_id— typically the slug — plustypeto disambiguate name collisions) does not exist on v3. v3 addresses listings by path parameter, so slug ambiguity cannot occur. - Response fields with null values are omitted from the JSON (
exclude_noneserialization).
The listing object
All listing endpoints return listings in this shape:Listing metadata
GET /v3/listings/{listing_id} or GET /v3/listings/external_id/{external_id} with query parameters merchant, market, locale (all required) and optional session_id.
The response is the listing object plus:
Content cards
Content cards are merchandising tiles (images or videos) placed in the product grid. On the wire the field is namedcontent_blocks. Each element:
Navigation tree
GET /v3/listings with query parameters merchant, market, locale (all required) and an optional repeatable types parameter to filter by listing_type.
The response is a list of listing objects, each extended with a recursive children array of the same shape — the complete listing tree in one call.
Products in a listing
POST /v3/listings/{listing_id}/products or POST /v3/listings/external_id/{external_id}/products with a JSON body:
Example request:
Response
Quicklinks and breadcrumbs when replacing the UI SDK
The metadata response suppliesancestors, children and siblings. It does
not supply a computed quick_links or breadcrumbs array.
To preserve the UI SDK’s quicklink selection:
- Select
childrenwhen the unfiltered array is not empty. - Otherwise, select
siblings. - Keep entries whose
show_in_quicklinksvalue istrue. - Keep the returned order.
ancestors in their returned order. Display entries
whose show_in_breadcrumbs value is true.
If your design also shows parent quicklinks, read them directly from the
metadata’s ancestors. Filter these parents by show_in_quicklinks. Exclude
the current listing_id from the parent group. Remove duplicate listing IDs.
Do not require the current listing to occur in the selected quicklink group.
It usually does not occur in children.
Build links with your storefront’s route function and the full ancestor
slug chain. For a child link, include the current listing’s slug before
the child’s slug. For a sibling link, use the current listing’s ancestors.
Keep all route segments, even when a navigation flag hides a segment’s label.
If a slug is absent, use your existing CMS route mapping.
