Agents fetch your manifest and still skip your store
In short
A commerce manifest that agents ignore has failed in one of 3 ways: it is not reachable to an anonymous non-browser client, it is reachable but not parseable as the declaration it claims to be, or it parses and disqualifies you by promising capabilities your endpoints cannot honour. Fetch it from outside your own network with no cookies before assuming anything, because a browser hides all 3.
Key takeaways
- Test with an anonymous non-browser client. A browser sends cookies, follows redirects and renders HTML, hiding every failure below.
- A well-known URI is rooted at the top of the path hierarchy — a file under a subdirectory is not one, per RFC 8615.
- HTTP 200 with an HTML content type is the classic silent failure: it looks fine in a browser and parses as nothing.
- One declaration describes exactly one selling entity, because that entity is who the order is placed with.
- The last verdict is capability: a declaration promising in-agent completion your endpoints cannot honour is worse than declaring less.
The file exists, it loads when you open it, and no agent is buying. That is 3 distinct situations wearing one symptom, and they are worth separating before anyone changes the file: the agent never got it, the agent got something it could not parse, or the agent parsed it and decided against you. Only the third is about what the file says.
The reason a browser cannot tell you which is that a browser is the wrong client. It carries your cookies, follows redirects without comment, renders an HTML error page as though it were a page, and is very likely inside your own network. An agent arrives cold from a datacentre address with no session and no patience. What the declaration is supposed to contain is set out in the commerce manifest an agent reads before anything else — this page is about why a correct-looking one still fails.
Fetch it cold, from outside everything you own
- Request the file from a network you do not control, with a command-line client, no cookies and no custom user agent. Capture the full response headers, not just the body.
- Record the status. Anything other than 200 on the first request is the answer — a 401, 403 or 404 ends the investigation here.
- Record the redirect chain. Any hop at all is a finding; a hop to a country-specific storefront is the common one, and it means the agent is being handed a different site.
- Record the content type. It must be a JSON type. A 200 carrying text/html is the failure that looks perfect in a browser.
- Parse the body with a strict parser and nothing else — no browser, no forgiving reader. If it does not parse, no agent will read it, whatever it looks like on screen.
- Repeat from a second network and a second region. A rule that fires only on datacentre address ranges is invisible from an office.
| Observation | Verdict | Owner of the fix |
|---|---|---|
| Non-200, a challenge page, or a timeout from outside | Serving | Edge and bot rules |
| 200, but HTML, a redirect chain, or a body that will not parse | Serving | Web server and routing configuration |
| Parses, but describes 2 selling entities or names endpoints that 404 | Declaration | Whoever generates the file |
| Parses and is internally correct, endpoints answer but fail their handshake | Capability | The team that owns checkout |
| Everything passes and agents still do not transact | Out of scope here | Catalogue data and policy publication |
A bot rule or a login is answering before your file does
The most common serving fault is that something in front of your origin replies instead of it. A challenge page, a rate limit that treats an unknown client as hostile, an authentication wall inherited from a staging configuration, or a geo-redirect that sends every unrecognised visitor to a regional storefront. All 4 return something, so nothing in your monitoring goes red.
Getting the edge policy right for agents is a whole problem of its own and it has its own page — your bot protection is blocking the AI surfaces you are trying to sell through. For this diagnostic the point is narrower: whatever your general policy, the declaration file itself must be unauthenticated, uncached-behind-a-session, and exempt from challenges. It contains nothing worth protecting.
The right bytes under the wrong content type
A file served as text/html, text/plain or application/octet-stream is a file most strict clients will not treat as a declaration, even when the bytes are valid JSON. Static hosting that infers types from extensions is the usual cause: a file with no extension, or an unfamiliar one, gets a default that is wrong.
The related trap is a 200 that is not the file at all. Single-page-application routing frequently answers every unmatched path with the application shell, so a missing declaration returns a beautiful HTML document with a success status. Check the first character of the body, not the status code.
A redirect chain, and the path that is no longer well-known
Redirects are a finding even when they resolve. A hop from the apex to www, or from http to https, is survivable but adds a step where a client may stop. A hop into a locale path is worse, because the agent asked about your store and has been sent to one edition of it. And a hop that lands on a login is a serving failure in disguise.
One file, two selling entities
A declaration names the party an order is placed with — the entity that takes the money, owes the goods and answers the dispute. A file describing 2 brands, or a group and its subsidiaries, leaves an agent unable to say who it is transacting with, and a validator that rejects it is doing you a favour.
This catches groups and multi-brand platforms first: shared warehouse, shared catalogue, shared checkout, 3 legal sellers. The infrastructure is an implementation detail and the selling entity is not, so each entity needs its own declaration on its own domain. It also catches stores whose declaration names one entity while their published terms name another — the consistency question behind publishing returns, shipping and warranty terms an agent can quote.
The endpoints you declared fail their own handshake
This is the verdict teams reach last and should reach second. A declaration is a set of promises that an agent will test: it will call the endpoints named, expect the operations declared, and expect the payment configuration to be honoured. A store that declares in-agent completion and then cannot create a session, or creates one and refuses every credential type it advertised, fails on the first real attempt — inside somebody else's product, in front of a shopper who is not yours.
- Call each declared endpoint yourself, unauthenticated where the protocol says it should be reachable, and confirm it answers as declared rather than merely answering.
- Run one complete purchase end to end against your own declaration, including a completion. A session that can be created and not completed is worse than no declaration.
- Declare only capabilities that exist today. Announcing what is on the roadmap is the same failure as product copy that asserts specifications nobody verified — the generated copy invents specifications.
- Test the unhappy paths too, because an agent will meet them: an item that sells out mid-session, and a charge that fails after confirmation — the agent confirmed the order and the charge failed afterwards.
- Generate the file from your systems of record rather than editing it by hand, so a decommissioned endpoint cannot survive in a declaration for a quarter.
A declaration is not marketing. It is a promise an unfamiliar client will test on its first real purchase, and the only version worth publishing is the one you can already honour.
The file is correct and the specification moved under it
The published agentic-commerce specifications are young and actively changing. Required blocks appear, property names change, and the revision your file names may no longer be one an agent will parse. This is not a defect you can design away, so treat it as maintenance: name the revision explicitly in the file, review it whenever that revision changes, and re-run the 6 checks above at least quarterly.
Two things reduce how often that hurts. Keep the declaration short, because every block you did not need is a block that can become invalid. And put the durable effort into the data underneath rather than the file on top: identifiers that resolve, lifecycle state on every record, and policy expressed as data survive every revision — which is also the difference between a store agents can quote and one they can only find, argued in a published feed or a live tool call.
Generating, validating and monitoring the declaration is small, ordinary AI agents and automation work: a build step that emits it, a scheduled cold fetch that alerts on status, content type or parse failure, and a canary purchase against your own endpoints. If those endpoints are backed by a model of your own — a search or recommendation service sitting behind catalogue reads — where it runs is a separate decision with 4 options, set out in private and on-premises LLM deployment. The rest of this silo sits under agentic commerce and AI shopping assistants, inside our retail and e-commerce practice.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
Our commerce manifest returns 200 in a browser. Why do agents ignore it?
Because a browser is not the client that matters. It sends your cookies, follows redirects silently, is usually inside your own network, and renders an HTML error page as though it were content. Fetch the file from an external network with a command-line client and no cookies, then check the status, the redirect chain, the content type and whether the body parses with a strict JSON parser.
Where does a commerce declaration have to live on the domain?
At a well-known path rooted at the top of the domain's path hierarchy. RFC 8615 reserves the /.well-known/ prefix and states that well-known URIs are rooted at the top of the path: a file under a subdirectory or a locale prefix is not a well-known URI at all. Publishing it beneath a shop path is a common reason a technically valid file is never found.
Can one manifest cover several brands we own?
No. The declaration names the party an order is placed with — the entity that takes payment, owes the goods and answers a dispute — so describing 2 selling entities makes that party ambiguous. Shared catalogue, warehouse and checkout are implementation details; each legal seller needs its own declaration on its own domain.
Should we declare capabilities we are about to build?
No. A declaration is tested on the first real purchase, and a promise of in-agent completion that your endpoints cannot honour produces a failed checkout inside another company's product, in front of a shopper who was never yours. Declare what works today, run a full purchase against your own declaration before publishing, and add capabilities as they ship.
- agentic commerce
- manifest
- discovery
- diagnostics
The work behind this page
Builds from our portfolio that this page draws on.
AI Lease Management
AI-powered commercial real estate lease management for multi-brand operators — automates lease data extraction, obligation tracking, and portfolio intelligence.
Real EstateShortList
An AI recruiting screener that reads every application, scores candidates against the role, and hands recruiters a ranked shortlist with outreach already drafted.
HR & RecruitingRead next
- The commerce manifest: the file an agent reads before anything elseA machine-readable declaration of what your store can do, served at a fixed path. It is not marketing, it carries no prices, and 3 serving conditions decide whether an agent can read it at all.definition
- Your bot protection is blocking the AI surfaces you sell throughThe rule that keeps scrapers off your catalogue is the same rule keeping buying agents off it. Telling the two apart — before you widen anything — is the whole job.diagnostic
- The agent confirmed the order and the charge failed afterwardsAn order exists, the shopper was told it is placed, and no money moved. The cause is almost never the card: it is one of the 4 constraints on the delegated token refusing the charge.diagnostic
- The agent shows one total and your checkout session returns anotherThe shopper saw one number and your server charged another. Replay the call sequence: the agent is nearly always displaying a response that a later call replaced.diagnostic
- The agentic checkout session: a cart your server ownsA server-side basket the merchant owns and an AI agent only renders. Every create, update or complete call returns the merchant's full current state — the property that makes agent buying safe to allow.definition
- The assistant keeps recommending products you stopped sellingA shopping assistant naming products you withdrew is rarely hallucination. It is a stale index, a missing lifecycle field, an unenforced tool call or a tool returning unpublished rows.diagnostic
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation