Recognize the agent order. Keep the evidence. A channel tells you an order came from an agent. Enruta tells you which agent, for whom and under which policy, and gives you a record for refunds, disputes and audits.
The order and the customer. Enruta adds the evidence.
Orders and fulfillment
You hold the order and the customer. Enruta adds the agent’s identity, the mandate and the record.
What you gain on the order
agent_id,mandate_refandpolicy_versionlabels, also written into your PSP;adjustments[]that execute; a dispute packet; a reconciliation slice; a risk signal you did not have to take on the agent’s word; the money splitWhat you check
The mandate and the agent’s identity. Whether the purchase is what the person meant was decided by the user’s policy before the mandate existed
Interfaces
The Accept middleware; a hosted storefront;
verify_record; the sellers API (orders, verify, adjustments, reversals, fulfillments, dispute packets and deliveries, reconciliation, PSP connections, conformance, domains); the seller consoleBilled by
No plan: 0.1% + $0.03 a successful payment, at least $0.05; the sandbox is free. Accept is free permanently.
Accept and Storefront are live.
Accept
LiveFreepermanently
Recognize agent orders, verify the mandate, keep a record, run the conformance check, confirm fulfillment
Storefront
Live0.1% + $0.03a successful payment
At least $0.05, at most $0.50
Hosted UCP endpoint and ACP shim, payment by mandate or PSP token, reversal write-back, dispute packets, the merchant slice of the weekly reconciliation
One edge deployment, four things on every request.
Cloudflare Workers, Vercel Edge, Fastly Compute, Hono or Node 22. Zero dependencies, Apache-2.0. Without a seller key it labels; with one it reports and you get a record.
Web Bot Auth signatures, verified with the key from the agent’s own directory; UCP signatures (Shopify’s Signed tier), verified with the key the agent’s profile publishes; the
UCP-Agentfingerprint table, known agent user agents, MCP bodiesWhat you see:
X-Enruta-Agent-Verified: true,X-Enruta-Agent-Profile: https://…,X-Enruta-Agent-Platform: anthropicap2.checkout_mandateagainst Enruta’s keys: signature,payeeequals your domain, expiry, checkout referenceWhat you see:
X-Enruta-Mandate-Valid: trueThe order carries the agent, the mandate, the policy version and the principal for your PSP metadata, your order attributes and your risk engine
What you see:
X-Enruta-Agent,X-Enruta-Mandate,X-Enruta-Policy-Version,X-Enruta-PrincipalCompleted orders are reported with your seller key; you get labels, a risk signal and your own sealed record chained to the buyer’s
What you see:
X-Enruta-Record: rec_…
import { createAccept, toFetchHandler } from "@enruta/accept";
const accept = createAccept({
domain: "shop.example",
sellerKey: env.ENRUTA_SELLER_KEY,
});
export default {
fetch: toFetchHandler(accept, { origin: "https://origin.shop.example" }),
};An invalid mandate is passed through labelled X-Enruta-Mandate-Valid: false so your own AP2 check decides; set enforce: true to answer 402 instead.
No protocol surface of your own? Enruta hosts one for your catalog.
A hosted UCP endpoint and ACP shim at shop.enruta.ai, or on your own domain through a proxy. It reads your catalog, takes payment by Enruta mandate or PSP token, and reports every order to you.
Refunds, disputes and the week’s books, with evidence.
Report it (
POST /v0/sellers/adjustments), let the order webhook carry it, or let your PSP’s own refund webhook do it through a PSP connection; Enruta decides and executes the reversal on the buyer’s side and hands you the same adjustment in the UCP, ACP, Adyen and Shopify shapesOne call produces the dispute packet: login id, device, IP, the mandate, the approval chain, the authorization, plus a one-page PDF; Enruta can deliver it into Stripe, Shopify, Adyen, Klarna, Chargeflow or Justt
Your slice of the reconciliation: the order, the mandate, the rail’s authorization and settlement, every adjustment, on one line
GET /v0/sellers/reconciliation?period=Your PSP fee and where it went, each line marked as actual or estimate with its source
enruta validate <endpoint>runs the suite locally; a hosted run earns a signed badge you can embedorder_shippedorPOST /v0/sellers/fulfillmentsmoves the buyer’s settlement record and confirms the outcome
Agent labels and refunds, inside the PSP you connect.
Enruta writes the agent labels into Stripe, Braintree or PayPal after the order. Adyen, Checkout.com and Worldpay take them only when the payment is created, so Enruta links the payment reference instead. Stripe runs today; the other adapters are complete and run once your account at that PSP is connected. If you complete checkout only on your own page, the agent hands the person the link and Enruta records the order.
Run the middleware today, or open a storefront.
A few companies, agent builders and merchants are shaping the first records with us. If your agents pay, or you sell to agents, write to us.