bigcommerce-commerce/skills/bc-api-graphql/SKILL.md
Use the BigCommerce GraphQL Storefront API — queries, mutations, authentication tokens, customer impersonation, cart operations, and schema exploration. Use when building storefront features that need client-side data fetching.
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins bc-api-graphqlInstall 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/storefront/graphql for GraphQL overviewsite:developer.bigcommerce.com graphql storefront api reference for schema referencebigcommerce graphql storefront token for token creationA client-side GraphQL API designed for storefront applications:
https://{store_domain}/graphql| Feature | GraphQL Storefront | REST API | |---------|-------------------|----------| | Audience | Frontend/browser | Backend/server | | Auth | Storefront token | API account token | | Data shape | Client-defined | Server-defined | | Rate limits | Complexity-based | Request count | | Mutations | Cart, checkout, login | Full CRUD |
Create via REST API:
POST /v3/storefront/api-token
{
"channel_id": 1,
"expires_at": 1893456000,
"allowed_cors_origins": ["https://my-storefront.com"]
}
Returns a token to use as Authorization: Bearer {token} header.
For accessing customer-specific data (addresses, orders, wishlists):
POST /v3/storefront/api-token-customer-impersonation
{
"channel_id": 1,
"expires_at": 1893456000
}
Combine with X-Bc-Customer-Id header for customer-specific queries.
In Stencil themes, the GraphQL token is available automatically:
{{inject 'graphQLToken' settings.storefront_api.token}} in templates/api/storefront/graphql-token endpointquery Products($first: Int, $after: String) {
site {
products(first: $first, after: $after) {
edges {
node {
entityId
name
path
prices {
price { value currencyCode }
salePrice { value currencyCode }
}
defaultImage {
url(width: 500)
altText
}
}
}
pageInfo { hasNextPage endCursor }
}
}
}
query Product($productId: Int!) {
site {
product(entityId: $productId) {
entityId
name
description
prices { price { value currencyCode } }
images { edges { node { url(width: 800) altText } } }
productOptions { edges { node { entityId displayName } } }
variants { edges { node { entityId sku } } }
}
}
}
query Categories {
site {
categoryTree {
entityId
name
path
children { entityId name path }
}
}
}
query Cart {
site {
cart {
entityId
lineItems {
physicalItems {
entityId
name
quantity
listPrice { value currencyCode }
}
}
amount { value currencyCode }
}
}
}
query Customer {
customer {
entityId
firstName
lastName
email
addresses { edges { node { address1 city } } }
}
}
mutation AddToCart($cartId: String!, $lineItems: [CartLineItemInput!]!) {
cart {
addCartLineItems(input: {
cartEntityId: $cartId
data: { lineItems: $lineItems }
}) {
cart { entityId }
}
}
}
mutation CreateCart($lineItems: [CartLineItemInput!]!) {
cart {
createCart(input: { lineItems: $lineItems }) {
cart { entityId }
}
}
}
mutation Login($email: String!, $password: String!) {
login(email: $email, password: $password) {
result
customer { entityId firstName }
}
}
Uses Relay-style cursor pagination:
first: N — number of itemsafter: "cursor" — cursor from pageInfo.endCursorpageInfo { hasNextPage endCursor } — pagination metadataGraphQL queries have complexity limits instead of request-count rate limits:
first arguments to limit resultsSELECT * mentalityfirst + after) for large collectionserrors array of the GraphQL responseFetch the BigCommerce GraphQL Storefront API reference for the current schema, available queries/mutations, and authentication patterns 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.