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.

Request
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"
    }
  }'
Answer trimmed to the key fields
{
  "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.

Request
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"
    }
  }'
ResponseSigned
{
  "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.status says if it's recalled (don't complete the purchase, whatever the seller's status) or discontinued, and product.mismatched says 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.

Each row is one request to POST /verify. Press Run to send it from the page behind, or copy the body into your own call.

Ask aboutSend (the request body)You get
An Amazon seller{"channel":{"domain":"amazon.com","seller_id":"ADEMOSELLER001"},"product":{"asin":"B0DEMO0001"}}authorized, found by ASIN
A Walmart seller, by UPC{"channel":{"domain":"walmart.com","seller_id":"900000001"},"product":{"gtin":"200000001018"}}authorized, found by UPC
A web store, for a buyer in the US{"channel":{"domain":"demo-store.authorizedretailers.ai"},"territory":"US","product":{"gtin":"200000001018"}}authorized for Demo Tees
An eBay seller{"channel":{"domain":"ebay.com","seller_id":"demo-seasonal-seller"},"product":{"gtin":"200000001018"}}authorized, with an end date
An Amazon seller the brand hasn't listed{"channel":{"domain":"amazon.com","seller_id":"ADEMOSELLER999"},"product":{"asin":"B0DEMO0001"}}unlisted
An Amazon seller the brand has declared unauthorized{"channel":{"domain":"amazon.com","seller_id":"ADEMOSELLER666"},"product":{"asin":"B0DEMO0001"}}unauthorized, with declaration_id: don't buy
A product the brand sells only itself{"channel":{"domain":"amazon.com","seller_id":"ADEMOSELLER001"},"product":{"asin":"B0DEMO0002"}}unlisted, product_excluded
A recalled product{"channel":{"domain":"amazon.com","seller_id":"ADEMOSELLER001"},"product":{"asin":"B0DEMO0003"}}authorized, with product.status recalled: tell the shopper, don't buy
A product made for the EU, on amazon.com{"channel":{"domain":"amazon.com","seller_id":"ADEMOSELLER001"},"product":{"asin":"B0DEMO0004"}}unlisted, product_not_for_region
A listing showing another model number{"channel":{"domain":"amazon.com","seller_id":"ADEMOSELLER001"},"product":{"asin":"B0DEMO0001","mpn":"DT-999"}}authorized, with product.mismatched and a warning signal
A product no registered brand lists{"channel":{"domain":"amazon.com","seller_id":"ADEMOSELLER001"},"product":{"gtin":"200000009991"}}product_not_found

The same cases, with code in three languages, are in the API reference.

Sign in

Which best describes you?

Get an API key

The verify and resolve calls and the MCP server need an API key. Tell us about your agent and we'll email you a sign-in link, then you'll set up an authenticator app. We ask so we know who is using the registry.

Tick this if you only have a personal address. We'll email you to talk it through, and no key is made until we have.

Already signed up? Sign in.