dist/codex/bigcommerce-commerce/skills/bc-webhooks/SKILL.md
Implement BigCommerce webhooks — event topics, webhook management, payload handling, verification, retry logic, and event-driven architecture. Use when building real-time integrations that react to store events.
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins bc-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:
https://developer.bigcommerce.com/docs/integrations/webhooks for webhooks guidesite:developer.bigcommerce.com webhooks events reference for event topicsbigcommerce webhook payload format for payload structureWhen events occur in a BigCommerce store, HTTP POST requests are sent to your endpoint:
POST /v3/hooksPOST /v3/hooks
{
"scope": "store/order/created",
"destination": "https://your-app.com/webhooks/orders",
"is_active": true,
"headers": {
"X-Custom-Header": "my-verification-value"
}
}
GET /v3/hooks — returns all registered webhooks.
PUT /v3/hooks/{id} — update destination, scope, or active status.
DELETE /v3/hooks/{id} — remove a webhook.
| Topic | When |
|-------|------|
| store/order/created | New order placed |
| store/order/updated | Order modified |
| store/order/archived | Order archived |
| store/order/statusUpdated | Order status changed |
| store/order/message/created | Order message added |
| store/order/refund/created | Refund issued |
| Topic | When |
|-------|------|
| store/product/created | New product created |
| store/product/updated | Product modified |
| store/product/deleted | Product deleted |
| store/product/inventory/updated | Stock level changed |
| store/product/inventory/order/updated | Inventory changed due to order |
| Topic | When |
|-------|------|
| store/customer/created | New customer registered |
| store/customer/updated | Customer profile modified |
| store/customer/deleted | Customer deleted |
| store/customer/address/created | Address added |
| store/customer/address/updated | Address modified |
| Topic | When |
|-------|------|
| store/cart/created | New cart created |
| store/cart/updated | Cart modified |
| store/cart/deleted | Cart deleted |
| store/cart/converted | Cart converted to order |
| store/cart/abandoned | Cart abandoned |
| store/cart/lineItem/* | Line item changes |
| Topic | When |
|-------|------|
| store/shipment/created | Shipment created |
| store/shipment/updated | Shipment modified |
| store/subscriber/created | Newsletter subscriber added |
| store/category/created | Category created |
| store/category/updated | Category modified |
| store/sku/created | SKU created |
| store/sku/updated | SKU modified |
| store/app/uninstalled | App uninstalled |
{
"scope": "store/order/created",
"store_id": "1234567",
"data": {
"type": "order",
"id": 5678
},
"hash": "abc123def456...",
"created_at": 1706140800,
"producer": "stores/{store_hash}"
}
scope — the event topicstore_id — the store's numeric IDdata.type — resource typedata.id — resource ID (use to fetch full details via API)hash — unique event hash for deduplicationcreated_at — Unix timestampWebhook payloads contain only the resource ID, not the full resource. You must make a follow-up REST API call to fetch the complete data:
// Webhook says: order 5678 was created
// Fetch full order: GET /v2/orders/5678
is_active set to false when deactivatedhash for idempotency)Include custom headers in webhook registration for basic verification:
{
"headers": {
"X-Webhook-Secret": "my-secret-value"
}
}
Verify the header value in your handler to confirm the request is from BigCommerce.
hash field for idempotency (deduplication)Fetch the BigCommerce webhooks documentation for the complete list of event topics, payload formats, and retry behavior 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.