Skip to main content
POST
List sellers, prices and availability for one product
POST /agent/products/offers returns the offers and pricing for a specific product on a retailer (amazon or walmart). It’s the agent-native, MPP-paid counterpart to the authenticated Get Product Offers endpoint. No Zinc account is required. Each call is paid per request via the Machine Payments Protocol (MPP).

Pricing

Caching and freshness

Retailer data is cached. Use these optional query parameters to control freshness:
  • max_age — accept a cached response only if it is no older than this many seconds.
  • newer_than — accept a cached response only if it was retrieved at or after this Unix timestamp.
  • async — return immediately with status: "processing" instead of waiting for a fresh fetch. Poll again to retrieve the completed result.

402 Payment Required

If no valid payment credential is provided, the API returns 402 Payment Required with one WWW-Authenticate header per payable method (per RFC 9110 §11.6.1). Your MPP client uses these to complete payment and resubmit the request. See the MPP guide for details.

Query Parameters

product_id
string
required

Product identifier (e.g. ASIN)

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)

max_age
integer | null

Max response age in seconds, at least 31 (mutually exclusive with newer_than)

Required range: x >= 31
newer_than
integer | null

Minimum retrieval timestamp, as a unix time (mutually exclusive with max_age). Windows shorter than 31s are widened to it.

async
boolean | null

Return immediately with status=processing

Response

Seller offers for the product, passed through from the retailer. status is always present; offers is populated when status is completed.

Every seller's offer for the product, passed through from the retailer. Shopify stores and Etsy listings have a single seller, so they are rejected here and report price and availability on the details endpoint; Best Buy's per-condition prices are on the details endpoint too.

status
enum<string>
required

completed when the payload below is populated. processing when async=true was passed and the fetch is still running — poll again. failed when the retailer returned an error; see code and message.

Available options:
completed,
processing,
failed
code
string

Only on status: failed. Machine-readable error code, e.g. product_not_found, invalid_request.

message
string

Only on status: failed. Human-readable explanation.

retailer
string

Retailer that served the offers, e.g. amazon.

asin
string

Amazon only. The product's ASIN.

offers
ProductOffer · object[]

One entry per seller offer. Empty when the product has no buyable offers.

timestamp
integer

Unix time the offers were retrieved.