Skip to main content
GET
Check Retailer
The question GET /retailers cannot answer. That endpoint returns the curated catalog, but the order path accepts any reachable store — so a caller holding an arbitrary product URL finds nothing in the list and has no way to tell whether an order would go through. Pass the URL here instead. No authentication required. Read-only: asking never adds a store to the catalog.
orderable is the answer. support grades how much evidence Zinc has behind it.

Support tiers

Four of the five tiers mean “go ahead”. untested is not a refusal — it means no one has asked for that store yet.
Don’t branch on support yourself. support_detail spells out what the tier means and whether to proceed, and how_to_order gives the next step — both are written for this purpose and stay correct if a tier is added.
support_detail distinguishes cases the tier alone hides. An observed store that has completed an order before reads “Real customer orders have succeeded at this store before, though none within the last 90 days”, while one that never has says so plainly — most observed stores have never completed an order, and attempts also fail for ordinary reasons like the item being out of stock or over the price cap.

orderable is about the store, not your request

orderable: true does not promise a credential-less order. Where checkout.guest_checkout is false, the store still requires a linked account, and POST /orders will refuse unless you pass retailer_credentials_id. Read both fields to predict a credential-less order.
checkout is null when Zinc has no catalog row for the domain (an untested store). That is an absence of information, not false — a null there would read as a refusal if you treated it as one.

Checking a destination country

country takes an ISO 3166-1 alpha-2 code (US, GB), case-insensitive. Longer spellings such as USA are rejected, and the error names the code to use. Omit it — or send it blank — to skip the shipping check rather than invent a refusal. This applies the same two gates in the same order as POST /orders, so a check and an order can never disagree about the same URL.
ships_to: null means the store makes no claim either way — not that it is US-only. Auto-catalogued stores carry no country list precisely so the long tail stays orderable everywhere. Only a populated array is a statement about destinations.

Refusals

When orderable is false, unsupported_reason carries the same error code POST /orders would reject with — see error handling.

Other fields

  • platform is a hostname heuristic, not a fetch. A Shopify-hosted store is unambiguous from a *.myshopify.com domain; a custom domain running Shopify reports null rather than paying for a page load. Treat null as “not determined”, not “not Shopify”.
  • evidence is deliberately coarse — whether Zinc has ever placed an order here, and the date of the last one. Success rates are not exposed. It is null for a store with no catalog row.
  • retailer.retailer is the storefront slug (e.g. amazon-de); retailer.brand is the brand slug (e.g. amazon).

Query Parameters

url
string
required

A product or store URL, e.g. https://shop.aloyoga.com/products/x

Maximum string length: 2048
country
string | null

Destination country as an ISO 3166-1 alpha-2 code (e.g. 'US', 'GB'). Case-insensitive. Longer spellings such as 'USA' are rejected — the error names the code to use. Omit to skip the shipping check. Runs the same gate POST /orders applies, so the two cannot disagree.

Maximum string length: 64

Response

Successful Response

Can Zinc buy from this store, and ship it where the caller wants?

url
string
required
orderable
boolean
required

Zinc will attempt an order here, given whatever the store requires. True for every support tier except unsupported — including untested, a store Zinc has never seen. It is a fact about the store, not about one request: where checkout.guest_checkout is false the store still needs a linked account, so pass retailer_credentials_id to POST /orders or it will refuse. Check both fields to predict a credential-less order.

support
string
required

verified: curated, daily test order passing. active: real orders succeeded in the last 90 days. observed: Zinc has attempted orders here. untested: never seen, and Zinc will still try. unsupported: Zinc refuses; see unsupported_reason.

support_detail
string
required

What support means for this store, in prose, and whether to go ahead. Every orderable tier says so explicitly — untested in particular means 'never seen it, try anyway', which the tier name alone does not convey.

how_to_order
string
required

What to do next. Carries the ordering instruction when orderable is true, and tells you not to submit when it is false.

domain
string | null

Canonical registrable domain, or null if the URL has none.

retailer
RetailerCheckRetailer · object | null

Null when Zinc has no catalog row for the domain.

platform
string | null

Detected storefront platform, e.g. 'shopify'.

checkout
RetailerCheckCheckout · object | null

How a customer can pay at this store.

ships_to
string[] | null

Declared destination countries. Null means no claim either way — the order path enforces nothing, so do not read it as 'US only'.

evidence
RetailerCheckEvidence · object | null

What Zinc has actually done at this store.

Deliberately coarse — a boolean and a date. Success rates are a competitive signal.

unsupported_reason
string | null

Error code Zinc would refuse with, matching POST /orders.