Skip to main content
GET
/
agent
/
products
/
search
Agent Product Search
curl --request GET \
  --url https://api.zinc.com/agent/products/search
import requests

url = "https://api.zinc.com/agent/products/search"

response = requests.get(url)

print(response.text)
const options = {method: 'GET'};

fetch('https://api.zinc.com/agent/products/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/products/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);

$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/search"

req, _ := http.NewRequest("GET", url, nil)

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.zinc.com/agent/products/search")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.zinc.com/agent/products/search")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
{
  "status": "<string>",
  "results": [],
  "next_page": 123
}
{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}
GET /agent/products/search searches a single retailer (amazon or walmart) and is the agent-native, MPP-paid counterpart to the authenticated Search Products endpoint. Use it when you want to search one retailer at a time; use Agent Search when you want breadth across every retailer in one call. No Zinc account is required. Each call is paid per request via the Machine Payments Protocol (MPP).

Pricing

Price$0.01 per call (fixed)
PaymentMPP (HTTP 402 challenge-credential flow)
AccountNot required

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.

Headers

authorization
string | null

Query Parameters

query
string
required

Search term

retailer
enum<string>
required

Retailer: amazon or walmart

Available options:
amazon,
walmart
page
integer | null

Page number for pagination

free_shipping
boolean
default:false

Only return items that ship for free (Walmart: ship price of 0). Currently a no-op for Amazon: the upstream search data under-reports Prime, so Amazon results are returned unfiltered. Applied per-page after pagination; use next_page in the response to keep paging — an empty page with a non-null next_page is not the end of results.

Response

Successful Response

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).