/.well-known/agent-offers.json
Open spec, draft 2026-11-01
One small file where a store states whether it pays agents (or their builders) for sales, on what terms, and whether agents must tell the shopper. It is a declaration, not a contract.
Rules
- JSON over HTTPS at
/.well-known/agent-offers.json. No auth and no bot wall. - Versioned by date (
YYYY-MM-DD). This draft is2026-11-01. Readers ignore unknown fields. - No publisher IDs, tracking parameters, secrets or per-agent deals. A store with private per-agent rates says
pays_agents: truewith no rate. pays_agents: falseis a useful statement in itself. A missing file means unknown, never “does not pay”.
Example
{
"$schema": "https://www.arcreport.ai/schemas/agent-offers/2026-11-01.json",
"version": "2026-11-01",
"updated": "2026-11-01",
"pays_agents": true,
"offers": [
{
"type": "affiliate",
"networks": [
"awin",
"impact"
],
"rate": {
"kind": "percent",
"min": 3,
"max": 8,
"currency": null
},
"eligible": {
"scope": "all",
"exclude": [
"gift-cards"
],
"markets": [
"US",
"GB"
]
},
"attribution": {
"method": "network_link",
"window_days": 30
},
"agent_eligible": "yes",
"terms_url": "https://shop.example/affiliates"
}
],
"disclosure": {
"required": true,
"text_url": "https://shop.example/affiliates#disclosure"
},
"contact": "https://shop.example/contact"
}JSON Schema (draft-07): https://www.arcreport.ai/schemas/agent-offers/2026-11-01.json
Fields
| Field | Required | Meaning |
|---|---|---|
| version | MUST | Spec version date (YYYY-MM-DD). Readers ignore unknown fields. |
| updated | MUST | Date the store last changed its declaration. |
| pays_agents | MUST | true, false or "unknown". false is a useful statement: "we pay no agent commission". |
| offers[] | if pays_agents is true | One entry per program. |
| offers[].type | MUST | affiliate (paid through a network), direct_offer (store pays agent builders directly), platform_fee (store pays the platform; informational). |
| offers[].networks[] | SHOULD | Lower-case network ids: awin, impact, cj, rakuten, partnerize, skimlinks, sovrn, crossmint, other. |
| offers[].rate | SHOULD | kind: percent or flat. min/max give a range; an exact rate is min = max. currency applies to flat. A store MAY omit the rate and still say pays_agents: true. |
| offers[].eligible | MAY | scope: all or some. include/exclude take category slugs. markets take ISO 3166 codes. |
| offers[].attribution | MAY | method: network_link, coupon, api_param or ucp_extension. window_days. |
| offers[].agent_eligible | SHOULD | yes, no or unspecified: whether agent-initiated purchases qualify. Many programs exclude automated traffic, so this field matters most. |
| disclosure.required | MUST if pays_agents is true | Whether the store requires agents to tell the shopper. ARC recommends true. |
| disclosure.text_url | MAY | The store's suggested disclosure wording. |
| contact | MAY | A URL for questions about the declaration. |
Inside a UCP profile
A store with a UCP profile at /.well-known/ucp can carry the same declaration as a third-party extension. Same JSON body, two homes. The ai.arcreport.* name is a placeholder: if the UCP maintainers want it under dev.ucp.*, ARC hands it over.
{
"ai.arcreport.shopping.agent_offers": [
{
"version": "2026-11-01",
"spec": "https://www.arcreport.ai/incentives/spec",
"schema": "https://www.arcreport.ai/schemas/agent-offers/2026-11-01.json",
"extends": "dev.ucp.shopping.checkout"
}
]
}Status and neutrality
- Draft. ARC does not read these files yet and has no validator endpoint yet.
- Published under CC-BY-4.0. ARC runs no registry of rates, sells no placement and does not rank stores by rate.
- A declaration is labelled “declared by store” and never changes a measured score.
- ARC never earns commissions. ARC holds no affiliate accounts, publisher IDs or network logins, and the links ARC publishes carry no tracking parameters.