List Retailers
curl --request GET \
--url https://api.zinc.com/retailersimport requests
url = "https://api.zinc.com/retailers"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.zinc.com/retailers', 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/retailers",
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/retailers"
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/retailers")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zinc.com/retailers")
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{
"retailers": [
{
"retailer": "1800flowers",
"display_name": "1-800-Flowers",
"base_url": "1800flowers.com",
"no_account_needed": true,
"use_your_account": false,
"supported_countries": ["US"],
"free_shipping": false,
"free_shipping_threshold_cents": null,
"support": "active"
},
{
"retailer": "acehardware",
"display_name": "Ace Hardware",
"base_url": "acehardware.com",
"no_account_needed": true,
"use_your_account": false,
"supported_countries": ["US"],
"free_shipping": false,
"free_shipping_threshold_cents": null,
"support": "observed"
}
],
"total": 23,
"coverage": {
"policy": "open",
"summary": "Zinc can attempt checkout at most online stores, not only those listed. Listed retailers are verified with daily test orders. Ask about a specific store with GET /retailers/check?url=...",
"platforms": [
{ "platform": "shopify", "orderable": true }
]
}
}
Retailers
List Retailers
Browse the public catalog of curated retailers — no authentication required. The list is not the limit of what Zinc can buy from.
GET
/
retailers
List Retailers
curl --request GET \
--url https://api.zinc.com/retailersimport requests
url = "https://api.zinc.com/retailers"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.zinc.com/retailers', 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/retailers",
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/retailers"
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/retailers")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zinc.com/retailers")
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{
"retailers": [
{
"retailer": "1800flowers",
"display_name": "1-800-Flowers",
"base_url": "1800flowers.com",
"no_account_needed": true,
"use_your_account": false,
"supported_countries": ["US"],
"free_shipping": false,
"free_shipping_threshold_cents": null,
"support": "active"
},
{
"retailer": "acehardware",
"display_name": "Ace Hardware",
"base_url": "acehardware.com",
"no_account_needed": true,
"use_your_account": false,
"supported_countries": ["US"],
"free_shipping": false,
"free_shipping_threshold_cents": null,
"support": "observed"
}
],
"total": 23,
"coverage": {
"policy": "open",
"summary": "Zinc can attempt checkout at most online stores, not only those listed. Listed retailers are verified with daily test orders. Ask about a specific store with GET /retailers/check?url=...",
"platforms": [
{ "platform": "shopify", "orderable": true }
]
}
}
GET /retailers is the public catalog of curated retailer brands. It returns one flat object per brand with its identifier, domain, the countries Zinc ships to, and the free-shipping policy.
No authentication required — no API key, no MPP payment.
This list is the curated set, not the limit of what Zinc can buy from. The order path accepts most stores, including ones Zinc has never seen. A store missing from this response is not unsupported.To ask about one specific URL, call
GET /retailers/check. The coverage object on this response says the same thing in-band: coverage.policy is open, and coverage.platforms lists the storefront platforms (e.g. shopify) Zinc will attempt checkout on sight unseen.Notes
- International marketplaces (e.g.
amazon.com/amazon.de) are grouped under a single brand, with each country listed insupported_countries(ISO 3166-1 alpha-2). An empty array means the retailer has declared no country restriction — not that it ships nowhere. free_shippingindicates whether free shipping is offered either unconditionally or abovefree_shipping_threshold_cents. Anullthreshold means there is no minimum.no_account_neededis true when Zinc can check out without a customer account at any of the brand’s storefronts — the store takes guests, or Zinc holds a shared account for it.use_your_accountis true when the customer may supply their own retailer login. Both aggregate across the brand’s marketplaces: the brand offers a mode if any one storefront does.- Use
limit/offsetto page through results (defaultlimit100, max 1000), andnameto filter by a case-insensitive partial match. - Pass
include=allto get the long tail Zinc has ordered from but has not curated (hundreds of brands). Omit it for the curated set.allis the only accepted value; anything else is rejected. This selects how much of the catalog to return — it is not a filter on an entry’ssupporttier.
Support tiers
Each entry carries asupport tier describing how well Zinc covers that brand:
| Tier | Meaning |
|---|---|
verified | Curated, and its daily test order is passing. |
active | Real orders succeeded there in the last 90 days. |
observed | Zinc has attempted orders there. |
unsupported — a storefront Zinc refuses is not listed at all. Every brand here is orderable, and so are most stores that are not listed.
{
"retailers": [
{
"retailer": "1800flowers",
"display_name": "1-800-Flowers",
"base_url": "1800flowers.com",
"no_account_needed": true,
"use_your_account": false,
"supported_countries": ["US"],
"free_shipping": false,
"free_shipping_threshold_cents": null,
"support": "active"
},
{
"retailer": "acehardware",
"display_name": "Ace Hardware",
"base_url": "acehardware.com",
"no_account_needed": true,
"use_your_account": false,
"supported_countries": ["US"],
"free_shipping": false,
"free_shipping_threshold_cents": null,
"support": "observed"
}
],
"total": 23,
"coverage": {
"policy": "open",
"summary": "Zinc can attempt checkout at most online stores, not only those listed. Listed retailers are verified with daily test orders. Ask about a specific store with GET /retailers/check?url=...",
"platforms": [
{ "platform": "shopify", "orderable": true }
]
}
}
Query Parameters
Number of retailers to return
Required range:
1 <= x <= 1000Number of retailers to skip
Required range:
x >= 0Filter by name (case-insensitive partial match)
Pass all to include the long tail Zinc has ordered from but not curated (hundreds of brands). Omit for the curated set. This selects how much of the catalog to return; it is not a filter on an entry's support tier.
Response
Successful Response

