# Agent purchase policy

> Agent purchase policy: Liability is the open question in agent commerce, and it is a policy decision rather than a technical one.

- Source: /checks/agent-purchase
- Site: AgenticWebScore
- Language: English

---
Liability is the open question in agent commerce, and it is a policy decision rather than a technical one: a site that accepts an agent purchase has to decide who carries the cost when the agent is wrong, and publish that decision where an agent can read it.

| Property | Value |
| --- | --- |
| Check id | `agent-purchase` |
| Dimension | Commerce Protocols (15%) |
| Tier | Recommended — pool 20 pts |
| Weight inside tier | 2 |
| Impact | High |
| Maturity | Draft — A published specification that is not yet ratified. |
| Conditional | Yes — scored only on commercial sites |
| Publishing skill | `agent-purchase-policy` |
| Standards | — |

## What is measured

Conditional: reported n/a unless the scanner has already detected a commercial signal (Product/Offer JSON-LD, add-to-cart or buy-now copy, a cart/checkout link). It reads the policy pages it already holds (/ai-policy, /agent-policy, /terms, /agentic-commerce, /ai) and passes when one page carries a sentence that pairs an agent word with a purchase word — purchase, order, checkout or refund — and grants it to agents. It classifies each such sentence first: a sentence that reads as a prohibition, such as "AI agents must never purchase products", is a refusal and is reported as a partial (warn), never as a pass, because the site did not grant the permission this check measures. A page with only one of the two words does not count, and if no page carries both the check fails outright.

## Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

```bash
DOMAIN=shop.example.com
for p in /ai-policy /agent-policy /terms; do printf '%s: ' "$p"; curl -sL "https://$DOMAIN$p" | sed 's/<[^>]*>/ /g' | grep -Eio 'agent|purchase|order|checkout|refund' | sort -u | tr '\n' ' '; echo; done
```

## The fix

This is the artifact to ship. It is the complete change, not a description of one.

```html
<!-- /agent-policy : served as HTML at https://shop.example.com/agent-policy -->
<article>
  <h1>Agent policy</h1>
  <h2>Agent-initiated purchases</h2>
  <p>Autonomous agents may search the catalogue and create orders on this site. Accepted
    authorisation: an AP2 mandate signed with the user's passkey, or an ACP shared payment token
    issued for this merchant. Card numbers typed by an agent are never accepted.</p>
  <h2>Liability</h2>
  <p>An order created with a valid mandate is binding on the user who signed it; the agent operator
    is responsible for staying inside <code>scope_amount_max</code>. Orders without a valid mandate
    are cancelled and refunded in full.</p>
  <h2>Spending limits</h2>
  <p>Default ceiling 2,000 USD per order and 10,000 USD per 30 days; write to
    <a href="mailto:agents@shop.example.com">agents@shop.example.com</a> to raise it.</p>
  <h2>Refunds and shipping</h2>
  <p>14-day free returns; see <a href="/returns">/returns</a> for the machine-readable policy.</p>
</article>
```

> The agent word and the purchase word must appear in the visible text of the same page, so a heading-only mention or a bare link to a PDF does not register.

## Related checks

| Check | Tier | Impact | Same skill |
| --- | --- | --- | --- |
| `product-schema` — Product/catalog schema | Essential | Critical | — |
| `payment-protocols` — Agent payment standard support (AP2/ACP/x402/UCP) | Recommended | High | — |
| `ucp-manifest` — UCP manifest (/.well-known/ucp) | Emerging | Medium | — |
| `returns` — Return and shipping terms machine-readable | Recommended | Medium | — |
| `agent-analytics` — Agent traffic measurement | Emerging | Low | — |
| `inventory-freshness` — Inventory and price freshness | Recommended | High | — |
| `seller-identity` — Seller identity declared | Recommended | Medium | — |
| `shipping-costs` — Shipping cost and delivery declared | Recommended | High | — |
