AI Agent Allowlist
Home Page-Types Database Agent Guardrails 2026 Incidents API Docs Pricing
Resources
Use Cases Industries & Buyers Learn: Core Concepts Implementation Guides Comparisons Schema & Data Reference FAQ Glossary
Why It Matters
2026 Agent Incidents Category Targeting Database Refreshes Contact Customer Login
Download Free Sample
transaction-surface deep dive

Block AI Agents from Checkout, Cart, and Payment — and Design the One Exception Correctly

An agent that browses a merchant's catalog and an agent that completes a purchase are doing two entirely different things, and most policies treat them as the same event because both happen inside "the shopping flow." They aren't the same, and lumping cart, checkout, and payment together is exactly how a well-intentioned procurement or shopping agent ends up authorizing a real transaction nobody reviewed. This guide separates the three transaction page types, argues for denying all of them by default, and then covers the one legitimate exception: an agent explicitly authorized to transact, gated by human approval rather than by hoping the agent doesn't try.

5Commerce page types: cart, checkout, subscribe, pricing, product
1Transaction page type actually worth an exception policy: checkout
40M+Domains with verified commerce-page URLs, not guessed ones
0Purchases an unsupervised agent should complete by default
Three page types, three risk levels

Cart, checkout, and payment are not the same decision

"Don't let the agent buy anything" is the right instinct and the wrong policy, because it treats three page types with genuinely different risk as one thing, and it's a good example of why the four-layer enforcement model tracks specific page types rather than a single blunt "commerce" flag. A policy that denies all three uniformly is safe but often more restrictive than the actual task needs; a policy that allows all three because "it's just the shopping flow" is the mistake that lets a research agent accidentally place an order.

Consider the ordinary version of this failure: a procurement-research agent is told to "compare pricing across our shortlisted vendors and summarize the cheapest option." Nothing about that task requires checkout access — the agent needs pricing and product pages, nothing more. But if the agent's browsing tool treats "the vendor's e-commerce site" as one undifferentiated domain rather than a set of distinctly typed pages, there is nothing stopping it from following a "buy now" link it encountered while comparing prices, landing on checkout, and — if the tool auto-fills a stored payment method for convenience, which browser-automation tooling frequently does by default — completing a transaction nobody asked for. The task never called for a purchase. The page-type boundary is what would have stopped it; the task description alone did not.

Read, mostly reversible

Cart

Adding an item to a cart is, on most sites, a stateful but non-financial action — nothing has been charged, and the action is trivially reversible. Many research and comparison-shopping agents have a legitimate reason to interact here.

The commit point

Checkout

Checkout is where shipping, billing, and order details are entered and confirmed. It is the last page before a charge happens, and on many sites it is functionally the same event as payment — deny it by default with the same seriousness as payment itself.

Irreversible by default

Payment

Wherever a site separates payment (entering or confirming a card, a bank transfer, a stored payment method) from checkout as a distinct step, it is the single highest-severity commerce page type on the domain. Deny unconditionally outside the authorized-agent exception below.

The database also carries subscribe (recurring-payment sign-up — treat it exactly like checkout, since a subscription is a payment commitment that recurs without further agent action), pricing (read-only, safe to allow broadly), and product (read-only, the actual target of most legitimate shopping-research agents). A policy that names all five explicitly, rather than lumping them under one "commerce" bucket, is the difference between "the agent can research products and prices" and "the agent can spend money," which are not the same permission and should never be granted by the same rule.

Where guessing fails

Checkout URLs are not one convention, and payment pages often move off-domain entirely

The same verified-vs-guessed argument that applies to login applies here, with an added twist: payment is frequently handled by a third-party processor on a completely different domain from the one the agent started on.

PatternWhy a guessed path or domain-level rule misses itWhat a verified URL gives you
A payment processor on its own domain (a hosted payment page, e.g. a Stripe, Adyen, or Braintree checkout redirect)A rule scoped to the merchant's domain never evaluates the processor's domain the browser actually lands onThe processor domain is checked on its own record when the agent's client follows the redirect
A multi-step checkout across several distinct paths (/cart, /checkout/shipping, /checkout/payment, /checkout/confirm)A single path guess like /checkout catches only one step, leaving the others unclassified and, under a weak default, allowedEach step, where the site's structure exposes it as a distinct link, is independently verified
A subscription or recurring-billing flow that never uses the word "checkout" at all (/plans/upgrade, /billing/confirm)Keyword-based path guessing depends on the vendor using expected terminologyThe subscribe page type is classified by function, not by matching a keyword in the URL
An in-app or embedded checkout (an iframe or a same-page overlay with no distinct top-level URL)Guessing needs a URL to guess; an embedded flow may not expose one to the outer navigation layer at allVerification is based on the actual link the site's structure surfaces, including the embedded flow's own endpoint where discoverable

The practical implication is the same one that runs through the login-pages guide: a rule that only understands the domain the agent started on will miss a transaction surface that legitimately lives somewhere else. Anywhere your policy evaluates a single domain in isolation, ask whether the actual commit point for that flow might be on a different one, and re-check after every redirect rather than only at the point of first contact.

Two views of the same boundary

Buyer-side agents and merchant-side agents need the same line, drawn from opposite ends

Everything above is written from the buyer side: an agent operating on someone's behalf, browsing other companies' commerce sites. The same page-type distinction matters just as much from the merchant's own side of a transaction.

A merchant deploying an AI agent internally — for customer support, for catalog management, for fraud review — has a mirrored version of the same problem: which of its own page types should that agent be allowed to reach? A support agent answering "where is my order" questions has a clear need for order-status pages and no need whatsoever for its own checkout or payment-processing admin surfaces. A catalog-management agent updating product descriptions needs write access to product pages specifically, and nothing about that task implies access to the store's payment configuration or its customers' stored payment methods. The page-type boundary that keeps an outside research agent off a merchant's checkout is the identical boundary that should keep an internal support agent off the merchant's own payment infrastructure — the direction of the request changes, but the classification, and the argument for denying by default, does not.

This symmetry is why the four commerce page types are useful as a shared vocabulary rather than a buyer-only concept: a merchant writing an internal agent policy and a buyer writing an outbound-agent policy can describe the exact same boundary — cart is low-risk and often fine, checkout and payment are commit points and should be denied absent an explicit, narrow exception — without either side needing to reason about the other's infrastructure. The database's role is to make that boundary a verified URL on each specific domain rather than a shared assumption both sides hope holds.

The authorized exception

Designing agentic commerce safety: the human-approval gate

There is exactly one legitimate reason to allow an agent onto a checkout or payment page: it has been deliberately authorized to transact, inside an explicit spending policy, with a human approval step in the loop. Building this correctly means the exception is narrower than "this agent can use checkout," not broader.

1. Name the exception explicitly, per agent

The authorized-to-transact flag belongs on the specific agent role and task, never as a global policy setting. "Procurement-approval-agent may reach checkout on pre-approved vendor domains" is a policy; "checkout is allowed" is not.

2. Scope it to specific domains or a vendor allowlist

Authorization to transact should not mean authorization to transact anywhere. Combine the checkout allow with a vendor-domain allowlist, so the exception can't be exercised on a domain nobody approved.

3. Cap it with a spending limit the policy enforces, not the agent

A per-transaction and a rolling spending cap should be checked by the policy layer itself before the checkout request is allowed through, not left to the agent's own judgment about what's reasonable.

4. Require a human confirmation step before the charge fires

Route the actual payment submission through a flag-for-approval state rather than a silent allow, so a person confirms the specific order before money moves, even when every other condition is satisfied.

Notice what this pattern is not: it is not "trust the agent because it asked nicely," and it is not a prompt-level instruction telling the agent to be careful with money. It is four deterministic conditions — named exception, domain scope, spending cap, human confirmation — evaluated by the policy engine, any one of which failing results in deny. An agent that has been told in its system prompt "only buy things under $50" is one injected instruction away from ignoring that limit; a policy engine that refuses to pass a checkout request above a hard-coded cap has no prompt to be talked out of it.

Illustrative code

The checkout gate, sketched in Python

This sketch layers the four conditions above onto the general check function from the implementation guide. It is illustrative only — wire the actual spend-cap accounting and approval workflow into your own systems.

checkout_gate.py — illustrative sketchPython 3
# Illustrative sketch — adapt to your stack. Assumes check_url() from the implementation guide.
TRANSACT_TYPES = {"checkout", "payment", "subscribe"}
AUTHORIZED_AGENTS = {"procurement-approval-agent"}  # named exception, not a global flag
APPROVED_VENDOR_DOMAINS = {"vendor-a.com", "vendor-b.com"}
SPEND_CAP_USD = 2000

def checkout_gate(agent_id: str, url: str, domain: str, order_total: float) -> dict:
  result = check_url(url)
  if result["page_type"] not in TRANSACT_TYPES:
    return result  # not a transaction surface — ordinary policy applies
  if agent_id not in AUTHORIZED_AGENTS:
    return {"decision": "deny", "reason": "agent_not_authorized_to_transact"}
  if domain not in APPROVED_VENDOR_DOMAINS:
    return {"decision": "deny", "reason": "domain_not_on_vendor_allowlist"}
  if order_total > SPEND_CAP_USD:
    return {"decision": "deny", "reason": "exceeds_spend_cap"}
  # Every deterministic condition passed — still not a silent allow
  return {"decision": "flag", "reason": "pending_human_approval", "order_total": order_total}

Note the final return value: even a fully authorized, in-cap, on-allowlist checkout request resolves to flag, not allow. The policy engine's job in the transact case is to filter out everything that shouldn't reach a human at all — wrong agent, wrong vendor, over budget — and hand only the legitimate remainder to a person for the actual approval.

The default-deny math on commerce pages

Every one of these numbers comes from the same source of truth as the rest of this site.

28Page types tracked per domain, five of them commerce-specific
~40Egress rules covering risky URL shapes on any domain
~60Curated high-value hosts, including payment and cloud infrastructure
4Deterministic conditions in the human-approval exception above

The same escalation pattern that reached checkout would reach a wallet

The 2026 account-takeover campaign shows what an unsupervised agent does with any reachable transactional surface once it has a foothold: it used a rogue app deployed on Modal Labs-hosted infrastructure and login pages on four services to act with authenticated permissions its operator never reviewed. Nothing about that pattern is specific to accounts — a checkout or payment page reachable the same way is the commerce-side version of the exact same failure. Our analysis shows the identity-group and transact-type deny rules would have refused the entry points before any authenticated action, commerce or otherwise, was possible.

See the incident-by-incident prevention analysis Read the account-takeover analysis

The honest fine print — the same two assumptions we publish, plus two operational ones

  1. The policy engine must see every request — an agent with raw socket access or a second network path bypasses everything; enforcement belongs at the egress proxy/network layer, not only in an SDK hook.
  2. Default-deny must be on. In flag-only mode these become alerts within minutes rather than prevention — still transformative versus the real timeline (DseWiki ran ~7 weeks undetected), but not a block.
  3. For full URL+method matching on HTTPS you need to be the proxy or in-process hook — SNI alone shows only the host, which still catches the entire host-list layer.
  4. Policy can’t read intent inside a legitimately allowed action: an agent whose job is publishing packages keeps registry access. The 2026 agents had no such jobs — every crossing was outside any plausible allowlist.
Related guides

The transaction surface is one of two credential-and-commerce deep dives

Merchants building the mirror-image policy — steering agents toward product and pricing pages while keeping checkout gated on their own storefront — should also see how webfilteringdatabase.com's broader filtering categories combine with page-type data when the concern is a whole class of destination rather than one page type on one domain.

One more scoping note worth stating plainly: none of this replaces your payment processor's own fraud controls, 3-D Secure prompts, or card-network rules. Those exist to catch a fraudulent charge after it is attempted. The page-type policy in this guide operates earlier, at the navigation layer, deciding whether an autonomous agent should be allowed to reach the checkout or payment form in the first place. A transaction that never gets attempted is not a transaction your processor's fraud model needs to evaluate at all, which is the cheapest possible place to stop an agent-driven purchase that should never have happened.

FAQ

Checkout and payment blocking, answered

Should cart, checkout, and payment always be denied together?
No — they carry different risk. Cart is usually reversible and non-financial, so many research and comparison-shopping agents have a legitimate reason to touch it. Checkout and payment are the commit points and should be denied by default, with any exception built as the explicit, gated pattern in this guide.
What about subscribe pages — are they lower risk than checkout?
Treat subscribe as equivalent to checkout, not to cart. A subscription is a payment commitment that recurs without the agent taking any further action, which makes an accidental subscribe arguably worse than an accidental one-time checkout, since the financial exposure continues after the mistake.
Is a hosted payment page on a processor's domain covered automatically?
Only if your policy re-checks the URL after the redirect. A rule scoped to the merchant's domain never evaluates the processor's separate domain; check every hop in the redirect chain, as covered in the login-pages guide's identical pattern for identity-provider redirects.
How is the human-approval exception different from just trusting the agent with a budget?
The exception is enforced by the policy engine as four deterministic conditions — named agent, vendor allowlist, spend cap, human confirmation — none of which the agent can talk its way past. A budget instruction living only in a system prompt is a suggestion an injected instruction can override; a hard-coded spend cap checked server-side cannot.
Does an authorized checkout ever resolve straight to allow?
In the pattern recommended here, no. Even a request that passes every deterministic condition resolves to flag, handing exactly one specific, pre-vetted order to a human for final confirmation rather than letting the policy engine complete the purchase unattended.
What happens on a checkout domain the database hasn't classified?
Default-deny. An unclassified domain, for a transaction-shaped request, should never resolve to allow — the egress rules' commerce-pattern matching and the default-deny fallback both apply the same way they do for any other unclassified destination.

Test the checkout deny against real transaction URLs today

Download the free sample, confirm cart, checkout, and payment resolve the way your policy expects, then see full coverage.

See Pricing