Skip to main content
GET
Search Products
Search one retailer’s catalog. Results are normalized into a single shape across retailers: product_id, title, image, brand, price, stars, and num_reviews are common to every retailer, and the remaining fields are retailer-specific and null elsewhere. The Response section below lists each field, and the example shows a real Amazon page of results. Prices are integers in cents. Etsy results also carry currency_code, and their price is in minor units of that currency.

Pricing

This is a metered data call, billed whether or not you go on to order. A retry loop bills every attempt: check GET /wallet/me rather than retrying into a 402.
The MPP counterpart POST /agent/products/search is the same search at the same price, paid per request instead of from a wallet.

Going from a result to a product

Pass a result’s product_id, with the same retailer, to Get Product Details or Get Product Offers. Best Buy is the exception: search returns the SKU as product_id, but the details endpoint is addressed by the bsin, the trailing id in the product URL.

Paging

Use next_page from the response rather than counting results. A short or even empty results array with a non-null next_page is not the end of the results; this happens on free_shipping searches, on Best Buy (which server-renders only a few items per page), and on Etsy (which drops non-USD listings after paginating). next_page is null when the results are exhausted, and always null for Shopify stores, which return a single page.

Authorizations

Authorization
string
header
required

Zinc API key (Bearer zn_...)

Headers

authorization
string | null

Query Parameters

query
string
required

Search term

Minimum string length: 1
retailer
string
required

Retailer identifier: amazon, amazon_uk, amazon_ca, amazon_de, amazon_mx, amazon_fr, walmart, bestbuy, etsy, or a Shopify store's domain (e.g. retailer=yetch.studio)

page
integer | null

Page number for pagination

free_shipping
boolean
default:false

Only return items that ship for free (Walmart and Best Buy: ship price of 0). Currently a no-op for Amazon: the upstream search data under-reports Prime, so filtering on it would drop valid items — Amazon results are returned unfiltered. Filtering happens after pagination, so per-page counts vary; use next_page in the response to keep paging — an empty page with a non-null next_page is not the end of results. Rejected for Shopify stores: their search data carries no shipping information, so the filter cannot be honored.

Response

Normalized search results. Common fields are always present; retailer-specific fields are null or omitted for other retailers.

Response from the product search endpoint.

status
string
required
results
ProductSearchResult · object[]
next_page
integer | null

Only set on free_shipping searches: the page to request to keep paging. An empty results with a non-null next_page is NOT the end of results — request next_page to continue. None means results are exhausted (or the search was unfiltered).