For agent builders
Check a seller before you buy.
On a product page you see a product and a seller. Send both to the registry and you get a signed answer: whether the brand has authorized that seller, and anything you should know about the product.
Get an API key View the API docs Try the demo brand
Every example uses test.authorizedretailers.ai, a demo brand the registry runs, so you can try it as written once you have a key. The MCP server at authorizedretailers.ai/mcp has the same calls as tools, with the same key.
curl -s https://authorizedretailers.ai/verify \
-H "Authorization: Bearer $AR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"channel": {
"domain": "amazon.com",
"seller_id": "ADEMOSELLER001"
},
"product": {
"asin": "B0DEMO0001"
}
}'{
"status": "authorized",
"brand": { "domain": "test.authorizedretailers.ai" },
"resolved_by": "asin",
"checked": "2026-10-07T19:35:35.707Z",
"valid_until": "2026-10-07T19:50:35.707Z",
"product": { "in_catalog": true, "id": "DEMO-TEE", "name": "Demo Tee" },
"signals": [],
"signature": { "kid": "ar-20260924-6e37", "jws": "eyJhbGci..." }
}Try the demo brand
Pick a case and the registry answers, signed. The demo brand covers every answer; see all the cases and the exact body each one sends.
curl -s https://authorizedretailers.ai/verify \
-H "Authorization: Bearer $AR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"channel": {
"domain": "amazon.com",
"seller_id": "ADEMOSELLER001"
},
"product": {
"asin": "B0DEMO0001"
}
}'{
"status": "authorized",
"brand": { "domain": "test.authorizedretailers.ai", "name": "Authorized Retailers Demo" },
"resolved_by": "asin",
"authorization_id": "auth_demo000000000000000000001",
"revocation_id": "rv_5069f69c213b49aee224b948",
"checked": "2026-10-07T19:35:35.707Z",
"valid_until": "2026-10-07T19:50:35.707Z",
"stale_until": "2026-10-08T19:35:35.707Z",
"product": {
"in_catalog": true, "id": "DEMO-TEE", "product_line": "Demo Tees", "name": "Demo Tee",
"mpns": ["DT-100"], "style_code": "DEMO-TEE"
},
"observed": null,
"signals": [],
"signature": { "kid": "ar-20260924-6e37", "jws": "eyJhbGciOiJFZERTQSIs..." }
}An answer from the demo brand, signature shortened. Verify it against the keys at /.well-known/jwks.json.
What you get back
Every answer carries a status. In a sentence each; the API docs have the reasons and signals that come with them.
authorized- The brand authorized this seller, here, for this product. Go ahead.
unlisted- The brand is registered and doesn't list this seller for this. Not unlawful; offer a listed seller if you can.
unauthorized- The brand has declared this seller unauthorized. Never buy there on your own: only if the shopper confirms, told the goods may be materially different or counterfeit.
expired- The authorization reached its end date. Treat as unlisted.
disputed- The seller disputes its status and the brand hasn't settled it. Treat as unconfirmed.
brand_not_registered- That brand isn't in the registry yet. Carry on as you would without it.
product_not_found- No registered brand lists that product. Carry on as you would without the registry.
brand_ambiguous- More than one brand lists the product. Never treat as authorized: ask again with the brand's domain.
Three things to know before you rely on an answer
- Check the product too.
product.statussays if it's recalled (don't complete the purchase, whatever the seller's status) or discontinued, andproduct.mismatchedsays the listing's model number doesn't match the brand's catalog. - Answers are signed and short-lived. Verify the signature against the registry's keys and use an answer for 15 minutes at most. See trusting an answer.
- Unknown is unconfirmed. A status you don't recognize, a brand that isn't registered, or an outage never makes a seller authorized or unauthorized.
Build with it
API reference
Every parameter, every answer and what to do with it, signatures, errors and limits, examples in cURL, Node.js and Python.
MCP server
Connect authorizedretailers.ai/mcp and your agent gets verify_seller, resolve_brand, get_brand and list_authorized_retailers.
In a checkout flow
Where the check goes when your agent buys through UCP or ACP: between choosing a seller and starting checkout.
The spec
The rules behind the answers, with JSON Schemas, fixtures and reference code on npm as @authorizedretailers/spec.
Ready to build?
Every call to the verify and resolve API and the MCP server needs an API key. Sign up with your work email, tell us about the agent, and your console opens with your key, usage and settings.
Brands are registering now, and the registry is ready for agents as they adopt it. Agents and crawlers may read /llms.txt for the short version.