bigcommerce-commerce/skills/bc-api-rest/SKILL.md
Use BigCommerce REST APIs — V2 and V3 endpoints, authentication, rate limiting, pagination, filtering, batch operations, and error handling. Use when integrating with BigCommerce data via REST API.
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins bc-api-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://developer.bigcommerce.com/docs/rest for REST API overviewsite:developer.bigcommerce.com rest-management for Management API referencebigcommerce api v3 rate limits pagination for rate limit details| Version | Base URL | Notes |
|---------|----------|-------|
| V2 | /stores/{hash}/v2/ | Legacy — orders, some customer endpoints |
| V3 | /stores/{hash}/v3/ | Modern — most resources, JSON:API-like |
V3 is preferred for all new development. V2 is still required for some resources that haven't been migrated.
https://api.bigcommerce.com/stores/{store_hash}/v3/
The store_hash is found in the API Path when creating credentials.
For server-to-server requests:
X-Auth-Token: {access_token}
Content-Type: application/json
Accept: application/json
For apps using the OAuth flow — same header format, token obtained during installation.
Tokens have scopes that control access:
store_v2_products / store_v2_products_read_onlystore_v2_orders / store_v2_orders_read_onlystore_v2_customers / store_v2_customers_read_onlystore_v2_content, store_v2_marketing, store_v2_informationstore_themes_manage, store_cart, store_checkout| Endpoint | Methods | Description |
|----------|---------|-------------|
| /v3/catalog/products | GET, POST, PUT, DELETE | Products CRUD |
| /v3/catalog/products/{id}/variants | GET, POST, PUT, DELETE | Product variants |
| /v3/catalog/products/{id}/images | GET, POST, PUT, DELETE | Product images |
| /v3/catalog/categories | GET, POST, PUT, DELETE | Categories |
| /v3/catalog/brands | GET, POST, PUT, DELETE | Brands |
| /v3/catalog/products/channel-assignments | GET, PUT | Channel product assignments |
| Endpoint | Methods | Description |
|----------|---------|-------------|
| /v2/orders | GET, POST, PUT | Orders |
| /v2/orders/{id}/products | GET | Order line items |
| /v2/orders/{id}/shipments | GET, POST, PUT | Shipments |
| /v2/orders/{id}/shipping_addresses | GET | Shipping addresses |
| Endpoint | Methods | Description |
|----------|---------|-------------|
| /v3/customers | GET, POST, PUT, DELETE | Customers CRUD |
| /v3/customers/addresses | GET, POST, PUT, DELETE | Customer addresses |
| /v3/customers/attribute-values | GET, PUT, DELETE | Customer attributes |
| Endpoint | Description |
|----------|-------------|
| /v3/channels | Storefronts/channels |
| /v3/carts | Server-side cart |
| /v3/checkouts | Server-side checkout |
| /v3/payments | Payment processing |
| /v3/content/widgets | Widgets |
| /v3/themes | Theme management |
| /v3/hooks | Webhooks |
| /v3/storefront/api-token | Storefront API tokens |
Query parameters:
page — page number (default 1)limit — items per page (default 50, max 250)Response includes meta.pagination:
{
"data": [...],
"meta": {
"pagination": {
"total": 250,
"count": 50,
"per_page": 50,
"current_page": 1,
"total_pages": 5
}
}
}
Uses Link header with rel="next" and rel="previous".
id:in=1,2,3 — filter by multiple IDsname:like=Widget%25 — partial name matchdate_modified:min=2024-01-01 — date rangeinclude=images,variants — include sub-resourcessort=name / sort=-date_created — sort ascending/descendinginclude_fields=name,price — select specific fieldsexclude_fields=description — exclude specific fieldsTypically 450 requests per 30-second window (varies by plan):
X-Rate-Limit-Requests-Left — remaining requests in windowX-Rate-Limit-Time-Reset-Ms — ms until window resetsX-Rate-Limit-Requests-Quota — total requests allowedX-Rate-Limit-Requests-Left before batchesSome V3 endpoints support batch operations:
/v3/catalog/products — create multiple products (array)/v3/catalog/products — update multiple products (array)/v3/catalog/products?id:in=1,2,3 — delete multiple{
"status": 422,
"title": "Unprocessable Entity",
"type": "https://developer.bigcommerce.com/api-docs/getting-started/api-status-codes",
"errors": {
"name": "Product name is required"
}
}
| Code | Meaning | |------|---------| | 200 | Success | | 201 | Created | | 204 | No Content (successful delete) | | 400 | Bad Request (invalid parameters) | | 401 | Unauthorized (invalid token) | | 403 | Forbidden (insufficient scope) | | 404 | Not Found | | 409 | Conflict (duplicate resource) | | 422 | Unprocessable Entity (validation error) | | 429 | Rate Limited | | 500 | Internal Server Error |
Accept: application/json and Content-Type: application/json headersinclude to fetch sub-resources in one request (avoid N+1)include_fields / exclude_fields to minimize response sizeFetch the BigCommerce REST API reference for exact endpoint paths, query parameters, request/response schemas, and current rate limits 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.