dist/cursor/acp-agentic-commerce/skills/acp-checkout-rest/SKILL.md
Implement the ACP REST checkout API — create, update, retrieve, complete, and cancel checkout sessions. Use when building merchant-side checkout endpoints, handling the checkout session state machine, or integrating with AI agent checkout flows.
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins acp-checkout-restInstall 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:
https://developers.openai.com/commerce/specs/checkout/ for the canonical checkout specificationsite:github.com agentic-commerce-protocol spec openapi checkout for the latest OpenAPI YAMLhttps://developers.openai.com/commerce/guides/key-concepts/ for data model detailssite:docs.stripe.com agentic-commerce protocol specification for Stripe's merchant-side reference| Operation | Method | Path | Success |
|-----------|--------|------|---------|
| Create | POST | /checkout_sessions | 201 |
| Update | POST | /checkout_sessions/{id} | 200 |
| Retrieve | GET | /checkout_sessions/{id} | 200 |
| Complete | POST | /checkout_sessions/{id}/complete | 200 |
| Cancel | POST | /checkout_sessions/{id}/cancel | 200 |
not_ready_for_payment → ready_for_payment → completed
| | |
+──────────────────────+→ canceled ←────+
|
in_progress
|
authentication_required
The five core status enum values are: not_ready_for_payment, ready_for_payment, completed, canceled, in_progress. Note that authentication_required is a transitional/conditional state (returned during 3DS flows), not one of the five core status values.
The merchant controls status transitions. The agent reads the status and reacts.
Authorization: Bearer <token> — REQUIREDAPI-Version: YYYY-MM-DD — REQUIREDIdempotency-Key: <UUID> — REQUIRED on all POSTContent-Type: application/jsonid + quantity (sent by agent in create/update)items_base_amount, items_discount, subtotal, discount, fulfillment, tax, fee, totalAll amounts are integers in minor currency units (cents). $19.99 = 1999. Floating-point is prohibited.
The messages[] array allows merchant-to-agent communication:
The links[] array provides actionable URLs with spec-defined link types:
terms_of_use — Merchant terms of use pageprivacy_policy — Merchant privacy policy pageseller_shop_policies — Merchant shop policies pagenot_ready_for_payment or ready_for_paymentcompleted status + order detailsauthentication_required + authentication challengetype, code, message, paramparam (JSONPath) to indicate which field caused the errorFetch the OpenAPI spec for exact request/response schemas, field types, and all possible error codes 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.