In short: give the agent a spend limit before it can check out on Shopify, and get a receipt after. Your agent should not create a checkout or complete an order without a bounded spend boundary and an audit trail. Paybond sits at the tool execution boundary — Harbor verifies the operation and amount before your handler runs.
Spending limits
Harbor verifies operation and amount before checkout runs.
Audit evidence
Signed completion digests bind the tool result to the intent.
Merchant verification
Binding metadata ties agent checkouts to your Shopify shop.
Works with MCP agents
Guard UCP Checkout MCP tools without rewriting your agent stack.
Why not just Shopify?
Shopify APIs create checkouts. They do not enforce per-agent spend limits, per-operation permission checks (capability tokens), or a signed receipt of what ran. Paybond adds that guardrail layer without replacing UCP or Admin.
Creates checkout
- Shopify API alone
- Yes — UCP / Admin / Storefront APIs
- With Paybond
- Yes — same Shopify surfaces, after Harbor authorize
Spending limits
- Shopify API alone
- Merchant rules only; no per-agent Harbor budget
- With Paybond
- Per-call and intent budgets enforced before the tool runs
Audit evidence
- Shopify API alone
- Order history in Shopify Admin
- With Paybond
- Signed evidence digests + settlement receipts
Agent authorization
- Shopify API alone
- API credentials / MCP access
- With Paybond
- Capability token + policy decision at verify time
Settlement receipts
- Shopify API alone
- Shopify payment / order records
- With Paybond
- Evidence evaluation + optional Agent Receipt Standard
| Capability | Shopify API alone | With Paybond |
|---|---|---|
| Creates checkout | Yes — UCP / Admin / Storefront APIs | Yes — same Shopify surfaces, after Harbor authorize |
| Spending limits | Merchant rules only; no per-agent Harbor budget | Per-call and intent budgets enforced before the tool runs |
| Audit evidence | Order history in Shopify Admin | Signed evidence digests + settlement receipts |
| Agent authorization | API credentials / MCP access | Capability token + policy decision at verify time |
| Settlement receipts | Shopify payment / order records | Evidence evaluation + optional Agent Receipt Standard |
How it works
How it works
Agent
Calls commerce.checkout (UCP / MCP / custom tool)
Paybond Guard
Harbor authorize before your handler runs
- Verify spend and operation
- Generate / bind intent
- Issue capability token
Shopify Checkout
Create checkout with binding metadata
Webhook
orders/create or orders/paid funds the intent
Evidence
Submit cost_and_completion after tool success
Settlement
Capture / release per settlement rails
Agent checkout guarded by Paybond: verify spend, create Shopify checkout, fund via webhook, submit evidence, then settle.
1 · Agent
tool call
agent · commerce.checkout
{
"operation": "commerce.checkout",
"requested_spend_cents": 4500
}2 · Checkout
Shopify session
checkout.shopify.com
Order draft · $45.00
2 line items · shipping TBD
3 · Admin
order note
Shopify Admin · Orders
#1042 · Paid
- paybond_intent_id
- int_…
- tenant_id
- ten_…
4 · Receipt
Paybond evidence
paybond · settlement receipt
Evidence verified
cost_cents: 4481 · status: completed
Signed digest
3-minute quickstart
Smoke the sandbox contract with a sandbox intent — no Shopify credentials required:
terminal
paybond login
paybond agent sandbox smoke \
--operation commerce.checkout \
--requested-spend-cents 4500 \
--evidence-preset cost_and_completion \
--format tableOptional policy scaffold: paybond policy init --preset shopping.
When the smoke succeeds you should see:
- ✓ Spend approved
- ✓ Checkout completed
- ✓ Receipt generated
What success looks like
What success looks like
Sandbox checkout · illustrative
- Operation
- commerce.checkout
- Status
- Approved
- Requested
- $45.00
- Captured
- $44.81
- Evidence
- Verified
Wire middleware
Prefer Kit’s instrumentShopifyCheckout helper so binding metadata is injected on every call. Tenant and intent IDs come from the Paybond session binding — never from unauthenticated tool args.
paybond-session.ts
import { Paybond, instrumentShopifyCheckout } from "@paybond/kit";
const paybond = await Paybond.open({ apiKey: process.env.PAYBOND_API_KEY! });
const instrumented = await instrumentShopifyCheckout(paybond, {
policy: "./paybond.policy.yaml",
executeCheckout: async (input) => {
// Call UCP Checkout MCP / storefront with input.checkoutPayload
// (note_attributes already include paybond_intent_id and tenant_id).
return {
status: "completed",
cost_cents: 4500,
order_id: "gid://shopify/Order/123",
shop: "paybond-agent-commerce-dev.myshopify.com",
};
},
});
// After sandbox bind / attach — populate Shopify bindingRef, then bind Harbor:
instrumented.bindingRef.tenantId = tenantId;
instrumented.bindingRef.intentId = intentId;
await instrumented.bind({ intentId, capabilityToken });Binding metadata
Every agent-initiated checkout must write binding metadata into Shopify so the async webhook path can resolve tenant scope.
Binding metadata
Checkout starts
Inject attributes
- paybond_intent_id
- tenant_id
Webhook resolves
Write these into UCP note_attributes (or cart attributes that propagate to orders) so the async funding path can resolve tenant scope without trusting the agent.
Production checklist
Production checklist
- Configure Shopify settlement rails (manual capture when conditional)
- Create and fund an intent for the agent run
- Bind middleware per request with intentId + capabilityToken
- Inject paybond_intent_id and tenant_id into checkout metadata
- Test the orders webhook funding path end-to-end
Works with
Works with
- Shopify
- OpenAI
- Anthropic
- Cloudflare
- MCP
Ready to test?
Related guides
- Configure Shopify settlement — tenant-admin prerequisites (manual capture, shop link)
- Settlement with payment providers — provider touchpoints, webhooks, capture timing