Backorders
Backorders let customers purchase products that are currently out of stock, up to a configurable limit per location. When backorders are enabled, BigCommerce tracks backordered quantities separately from on-hand inventory, giving you visibility into fulfillment obligations and the ability to set limits on how many units can be backordered.
This guide covers the API endpoints, GraphQL fields, Stencil context variables, and events involved in creating, adjusting, querying, and displaying backorders across the product detail page, cart, checkout, and order confirmation.
Backorder messaging applies to physical products. Digital products cannot be backordered — the inventory service reports them as unavailable for backorder regardless of their backorder_limit setting.
Tracking backorders in orders
Use the V2 Orders API to include backordered quantities when creating or updating an order. The quantity_backordered field tracks how many units of a line item are backordered.
PUT /stores/{store_hash}/v2/orders/{order_id}
You can also supply quantity_backordered when sending a POST request to create an order. The field is returned in the response when the order has backordered items.
Orders also return two related fields:
Error response for unavailable quantities
If a customer attempts to order more than the available stock plus the backorder limit, the API returns a 409 error with details about the constraint:
Adjusting backorder inventory
Use the V3 Inventory Adjustments endpoints to set or modify the qty_backordered value for items at specific locations.
Absolute adjustments
Set backorder quantities to exact values.
PUT /stores/{store_hash}/v3/inventory/adjustments/absolute
Relative adjustments
Increment or decrement backorder quantities relative to their current values.
POST /stores/{store_hash}/v3/inventory/adjustments/relative
Configuring backorder limits
Use the V3 Inventory endpoints to read current backorder levels and set the backorder_limit for items at a location.
Get inventory at a location
GET /stores/{store_hash}/v3/inventory/locations/{location_id}/items
Get inventory across all locations
GET /stores/{store_hash}/v3/inventory/items
Update backorder limit
PUT /stores/{store_hash}/v3/inventory/locations/{location_id}/items
backorder_limit accepts an integer or null. A null value means the item has no backorder limit — it can be backordered in unlimited quantity.
The available_to_sell value returned by the inventory endpoints reflects backorder capacity: available_to_sell = total_inventory_onhand - safety_stock + backorder_limit.
Backorder display settings
Backorder messaging introduces store-level display settings that control which backorder information is shown to shoppers — for example, whether the product detail page shows a backorder availability prompt, and what text that prompt uses. Read and update these settings with the V3 Settings API.
All display settings default to false (or, for the two message strings, a default value). Enable the ones you want shoppers to see; storefronts don’t display backorder messaging until you do.
GET /stores/{store_hash}/v3/settings/inventory
PUT /stores/{store_hash}/v3/settings/inventory
Only include the fields you want to change — omitted fields keep their current values. If the store’s backorder feature isn’t enabled, these fields are omitted from the response entirely. Backorders are enabled through the store control panel under Settings › Inventory.
Backorder messaging on the storefront
The Storefront GraphQL API (at {store_domain}/graphql) exposes the same display settings, plus backorder quantities and messages on products, variants, cart line items, and orders. These fields require a valid storefront token.
Display settings
Query path: site.settings.inventory
Use these booleans to decide which backorder UI elements to render. They mirror the merchant display settings above.
Product and variant inventory
Cart line items
cart requires the cart’s entityId — without it, site.cart resolves to null:
Orders
OrderFilterInput requires entityId (the order ID) — for a guest order, it also requires cartEntityId (the ID of the cart the order was placed from) to prove access to the order:
Backorder messaging on the Storefront REST cart and checkout APIs
Both the Storefront Cart API and the Storefront Checkout API return a stockPosition object on physical and digital line items, but only when explicitly requested — it is not returned by default. Since digital products cannot be backordered, stockPosition is only meaningful for physical items.
Storefront Cart API
Request stock position data with include=lineItems.physicalItems.stockPosition:
GET /carts/{cart_id}?include=lineItems.physicalItems.stockPosition
Storefront Checkout API
Request stock position data with include=cart.lineItems.physicalItems.stockPosition:
GET /checkouts/{checkout_id}?include=cart.lineItems.physicalItems.stockPosition
Like all Checkout API requests, this runs in the context of an active storefront session (same-origin cookie-based auth), not a bare bearer token — see Same-origin CORS authentication.
Stencil theme development
For Stencil theme developers, backorder messaging adds context variables to the product detail page, cart, and order templates.
Product detail page context variables
These {{inject}} variables push backorder data into jsContext on the product detail page:
In add-to-cart.html, the {{#unless product.available_to_sell}} guard prevents the “Sold Out” alert from displaying when a product has backorder capacity — the Add to Cart button stays enabled even when on-hand stock is zero.
Cart context
Cart templates receive an inventory_settings object and a per-item stock_position:
Where these variables are consumed
For the underlying Handlebars template markup and JavaScript call sites, see the public Cornerstone repository:
Catalyst reference implementation
Catalyst, BigCommerce’s headless storefront reference built on Next.js, has full backorder support. Use these files as working examples of how to consume the GraphQL fields documented above.
Product detail page
Cart
Product cards
GraphQL fragments
Querying backorder data with Admin GraphQL
Use the Admin GraphQL API to query inventory data including backorder fields at the product and variant level.
Webhooks
Subscribe to this webhook event to monitor backorder activity.
Stock level changed
Fires when a product or variant stock level changes at a location — including when backordered quantity changes:
See Inventory and location events for the full list of related webhook events.