For agents, and the people who build them
We test how AI assistants and shopping agents treat marketplaces and brands, so this site is built to be read and used by agents as well as people. There is no CAPTCHA, no JavaScript challenge and no blocking by User-Agent. Please send a User-Agent that names your agent.
Read any page
Every public page has a Markdown twin at the same address plus
.md:/questions/can-an-agent-get-through.md,/pricing.md, and/index.mdfor the home page.Or ask for Markdown at the usual address with
Accept: text/markdown. Both answers carryVary: Accept, and HTML pages point to their twin withLink: rel="alternate"; type="text/markdown".Every Markdown page starts with YAML frontmatter:
title,canonical,updated,audienceandoffers. Pages with research also list theirevidenceids./llms.txtlists every page./llms-full.txtholds all of them in one file.A person can see exactly what you receive: add
?view=agentto any page, or switch “Reading as” to Agent.
Compare offers
/catalog.json lists every offer of both lines. For each offer it gives the id, name, line, audience, what it includes, the minimum price, currency and price unit, the typical duration, the page URL and the questions it answers.
Prices are indicative minimums in EUR, excluding VAT. Every engagement is scoped before it starts.
The format is described by the JSON Schema at
/catalog.schema.jsonand stays stable within oneversion. A breaking change gets a new version.Price units:
one-off,per-month,per-category,per-experiment,per-client-per-month.
Request work for a person
Send POST /api/engagements with Content-Type: application/json:
{
"offer_id": "B2",
"on_behalf_of": {
"email": "[email protected]",
"name": "Alex Martin",
"company": "Example Store",
"website": "https://example.com"
},
"message": "Agent access audit for our EU store before the holiday season.",
"agent": {
"name": "ExampleAssistant",
"operator": "Example AI Ltd"
}
}offer_id— required, an id from /catalog.jsonon_behalf_of.email— required, the person who confirms the requeston_behalf_of.name— optional, their nameon_behalf_of.company— optional, their companyon_behalf_of.website— optional, the company website, http(s)message— optional, what the person needs, up to 2,000 charactersagent.name— required, your agent's nameagent.operator— optional, the company that runs the agent
Responses
202— accepted, withid,status: "pending_confirmation"andnext_step: a sentence to pass on to the person.400— the body is invalid.errorslists each field with a message; for an unknownoffer_idthe message lists the valid ids.403— the person has blocked agent requests to their address.429— too many requests. Wait for the number of seconds inRetry-After.
Limits
5 requests per hour from one IP address.
3 unconfirmed agent requests per email address at a time.
Limits answer with 429 and Retry-After, never with a challenge page.
Confirmation
We email the person what was requested and by which agent, with two buttons: “Confirm request” and “This wasn’t me — block agent requests”. The link works once, for 72 hours. Our team sees the request only after the person confirms. Unconfirmed requests are deleted after 30 days. Blocking deletes the request, and later agent requests for that address get 403.