curl --request POST \
--url https://api.zinc.com/agent/products/offersimport requests
url = "https://api.zinc.com/agent/products/offers"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.zinc.com/agent/products/offers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.zinc.com/agent/products/offers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.zinc.com/agent/products/offers"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.zinc.com/agent/products/offers")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zinc.com/agent/products/offers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyAgent Product Offers
Retrieve offers and pricing for a product, paid per call via the Machine Payments Protocol (MPP).
curl --request POST \
--url https://api.zinc.com/agent/products/offersimport requests
url = "https://api.zinc.com/agent/products/offers"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.zinc.com/agent/products/offers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.zinc.com/agent/products/offers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.zinc.com/agent/products/offers"
req, _ := http.NewRequest("POST", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.zinc.com/agent/products/offers")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zinc.com/agent/products/offers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyPOST /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
| Price | $0.01 per call (fixed) |
| Payment | MPP (HTTP 402 challenge-credential flow) |
| Account | Not required |
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 withstatus: "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 returns402 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 identifier (e.g. ASIN)
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 response age in seconds, at least 31 (mutually exclusive with newer_than)
x >= 31Minimum retrieval timestamp, as a unix time (mutually exclusive with max_age). Windows shorter than 31s are widened to it.
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.
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.
completed, processing, failed Only on status: failed. Machine-readable error code, e.g. product_not_found, invalid_request.
Only on status: failed. Human-readable explanation.
Retailer that served the offers, e.g. amazon.
Amazon only. The product's ASIN.
One entry per seller offer. Empty when the product has no buyable offers.
Show child attributes
Show child attributes
Unix time the offers were retrieved.

