curl --request POST \
--url https://api.zinc.com/agent/searchimport requests
url = "https://api.zinc.com/agent/search"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.zinc.com/agent/search', 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/search",
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/search"
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/search")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zinc.com/agent/search")
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_body{
"status": "<string>",
"query": "<string>",
"results": [],
"excluded_by_price": 123,
"hint": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Agent Search
Search every supported retailer in one call for AI agents, paid per request via the Machine Payments Protocol (MPP).
curl --request POST \
--url https://api.zinc.com/agent/searchimport requests
url = "https://api.zinc.com/agent/search"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.zinc.com/agent/search', 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/search",
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/search"
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/search")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zinc.com/agent/search")
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_body{
"status": "<string>",
"query": "<string>",
"results": [],
"excluded_by_price": 123,
"hint": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}POST /agent/search is the agent-native counterpart to Cross-Retailer Search. It returns a single ranked list of buyable products across every supported retailer, and each result’s url can be passed straight to Create MPP Order — no opaque sku id, the URL is the contract.
No Zinc account is required. Like the other /agent/* data endpoints, this call is paid per request via the Machine Payments Protocol (MPP): if no valid payment credential is provided, the API returns 402 Payment Required with a WWW-Authenticate challenge for each configured payment method.
Pricing
| Price | $0.01 per call (fixed) |
| Payment | MPP (HTTP 402 challenge-credential flow) |
| Account | Not required |
/agent/search to discover orderable URLs, then feed the chosen url directly into POST /agent/orders to buy it — no account, no API key.Filtering and sorting
POST /agent/search takes the same optional retailer, sort, and limit query parameters as GET /search, and they behave the same way. See Filtering and sorting. A call costs $0.01 whatever limit you set.
POST /agent/search?q=cast+iron+skillet&retailer=amazon&retailer=target&sort=price_asc&limit=10
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 a full walkthrough.Query Parameters
Search term
Cents. Drop results priced below this.
x >= 0Cents. Drop results priced above this. Pass the max_price you intend to send to POST /orders and every result returned fits it. Results with no known price are dropped when a clamp is set.
x >= 0Only return results from these retailers. Repeat the param for several: ?retailer=amazon&retailer=target.
amazon, bestbuy, bhphotovideo, chewy, costco, homedepot, kohls, lowes, macys, newegg, staples, target, walmart, wayfair Result order. relevance (default) blends query match, source rank and rating, and mixes retailers. The explicit sorts order the 20 most relevant results (or limit, if larger) that match at least half the query, so accessories that merely name the product don't lead; results with no price (or no rating, for rating) sort last.
relevance, price_asc, price_desc, rating Return at most this many results (1-50). One search is one billed call either way.
1 <= x <= 50Response
Successful Response
Response from the cross-retailer search endpoint.

