dist/codex/acp-agentic-commerce/skills/acp-payment-handlers/SKILL.md
Implement ACP payment handlers — pluggable payment method specifications including tokenized cards, seller-backed methods (gift cards, points, store credit), and handler negotiation. Use when adding payment methods or building custom payment handler support.
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins acp-payment-handlersInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Fetch live docs:
site:github.com agentic-commerce-protocol rfcs payment_handlers for the payment handlers RFCsite:github.com agentic-commerce-protocol rfcs seller_backed for seller-backed payment handler RFChttps://developers.openai.com/commerce/specs/payment/ for payment data structuressite:docs.stripe.com agentic-commerce payment handler for Stripe's handler implementationPayment handlers are pluggable specifications that define how a particular payment method works within ACP. Each PSP or merchant publishes handler specs, and agents/merchants negotiate which handlers they mutually support.
This inverts the traditional integration model — instead of hardcoding payment methods into the protocol, handlers are discoverable and composable.
Each handler has a reverse-DNS name and version:
dev.acp.tokenized.card — Tokenized credit/debit cards (Stripe SPT)dev.acp.seller_backed.saved_card — Pre-stored cards on merchantdev.acp.seller_backed.gift_card — Gift cards with number/PINdev.acp.seller_backed.points — Loyalty/rewards pointsdev.acp.seller_backed.store_credit — Account balance/store creditEach payment handler spec defines:
id — Unique instance identifier within the sessionname — Specification name in reverse-DNS format (e.g., dev.acp.tokenized.card)version — Spec versionspec — URL to the handler specificationrequires_delegate_payment — Whether the agent must call /delegate_payment (true for tokenized cards)requires_pci_compliance — Whether PCI DSS scope is affectedpsp — Which PSP processes this handlerconfig_schema — JSON Schema for merchant configurationinstrument_schemas — JSON Schema(s) for the payment instrument data the agent sendsThe primary handler — uses Stripe's delegated payment:
completerequires_delegate_payment: trueThese bypass the PSP — the merchant directly manages the payment:
requires_delegate_payment: falserequires_pci_compliance: false (except saved cards)During capability negotiation:
capabilities.payment.handlers[]When completing a checkout, the agent provides:
handler_id — Which handler is being usedinstrument — type + credential (shape defined by handler's instrument schema)billing_addressFetch the payment handlers RFC and instrument schemas from the GitHub repo for exact field definitions before implementing.
development
Build with Spree's headless Next.js storefront — the official `spree/storefront` repo (Next.js 16 App Router with Server Actions and Turbopack, React 19 Server Components, Tailwind CSS 4, TypeScript 5, `@spree/sdk`, Sentry), server-only auth (httpOnly JWT cookies + publishable key), MeiliSearch faceted catalog, one-page checkout with Apple/Google Pay/Klarna/Affirm/SEPA, multi-region market routing, GA4 + JSON-LD SEO, and Vercel/Docker deployment. Use when forking or customizing the storefront, or evaluating headless adoption.
tools
Build Spree extensions as Rails engines — gem scaffolding, `bin/rails g spree:extension`, mounting routes/migrations/assets, the modern `prepend` decorator pattern (`*_decorator.rb` with `self.prepended(base)`), generators (`spree:model_decorator`, `spree:controller_decorator`), the four customization surfaces in preference order (Events > Webhooks > Dependencies > Decorators), Spree::Dependencies for swapping service objects, gem release/versioning, and the deprecated Deface engine. Use when building a reusable Spree extension or adding non-trivial customization to an app.
development
Build with Spree's event bus and Webhooks 2.0 — `Spree::Events` publication, `Spree::Subscriber` DSL with `subscribes_to` and `on`, wildcard matching, lifecycle events (`{model}.created/.updated/.deleted` via `publishes_lifecycle_events`), the canonical event catalog (order.*, payment.*, shipment.*, product.*), Webhooks 2.0 endpoints, HMAC-SHA256 signing (`X-Spree-Webhook-Signature`), exponential-backoff retries, and Sidekiq job orchestration. Use when wiring event-driven business logic, building webhook consumers, or replacing ActiveSupport callback chains.
tools
Cross-cutting Spree development patterns — the customization preference hierarchy (Events > Webhooks > Dependencies > Decorators), `Spree::Dependencies` service-object swapping, the `_decorator.rb` + `prepend` + `self.prepended` idiom, idempotent subscribers and webhook receivers, multi-store scoping discipline, prefixed IDs, calculator polymorphism (shipping/promotion/tax share the base), service-object composition with `dry-monads` or simple results, why to avoid `class_eval` reopening and Deface, and Spree-on-Rails idioms (Hotwire/Turbo Stimulus, ActiveStorage, Action Cable, Sidekiq). Use when designing the architecture of a Spree extension or solving cross-cutting concerns.