dist/codex/acp-agentic-commerce/skills/acp-orders-webhooks/SKILL.md
Implement ACP order lifecycle management and webhook event delivery. Use when building order creation, status tracking, fulfillment updates, post-purchase adjustments, and HMAC-signed webhook emission.
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins acp-orders-webhooksInstall 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 orders for the orders RFChttps://developers.openai.com/commerce/guides/key-concepts/ for order lifecycle detailssite:github.com agentic-commerce-protocol examples orders for order webhook examplessite:docs.stripe.com agentic-commerce webhook for Stripe webhook guidanceAfter checkout completion, the order moves through these statuses:
created → confirmed → manual_review → processing → shipped → delivered
| | | | | |
+─────────+────────────+──────────────+────────────+──────────+→ canceled
7 statuses:
created — Order placed, payment capturedconfirmed — Merchant acknowledged the ordermanual_review — Requires human review (fraud, compliance)processing — Being prepared for fulfillmentshipped — Handed to carrier (physical) or access granted (digital)delivered — Buyer received the goodscanceled — Order canceled at any stageMerchants emit two event types to the agent platform:
order_created — Fired after successful checkout completionorder_updated — Fired on any order status change or updateEach webhook event contains:
All webhook events MUST be signed:
Merchant-Signature (or as specified in the latest spec)ACP supports adjustments after order creation:
| Type | Description |
|------|-------------|
| refund | Full refund |
| partial_refund | Partial amount refund |
| store_credit | Refund as store credit |
| return | Buyer returns goods |
| exchange | Swap for different item |
| cancellation | Order cancellation |
| dispute | Buyer disputes charge |
| chargeback | PSP-initiated chargeback |
Each adjustment has its own status: pending, completed, failed.
The order contains:
id — Unique order identifiercheckout_session_id — Links back to the checkout sessionpermalink_url — Buyer-facing order pageorder_created immediately after payment captureorder_updated for every status transitionFetch the orders RFC and webhook examples from the GitHub repo for exact event shapes, signature format, and 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.