TL;DR
BigCommerce APIs let you manage products, orders, customers, and store operations programmatically. Authenticate with API tokens for server-side integrations or OAuth for marketplace apps, call REST endpoints at api.bigcommerce.com, and use webhooks for real-time updates. Use Apidog to save API calls, validate responses, and share collections with your team.
Introduction
BigCommerce powers over 60,000 online stores. Common integration tasks include inventory synchronization, order processing, customer management, and payment handling.
BigCommerce provides three API types:
- Storefront API for headless commerce experiences
- Management API for backend operations
- Payments API for transactions
Most integrations use the Management API to manage products, orders, customers, and store operations.
This guide focuses on the implementation work most integrations need: authentication, products, orders, customers, webhooks, and API testing.
By the end, you will be able to:
- Set up BigCommerce authentication
- Manage products, variants, and inventory
- Process orders and customer data
- Configure webhooks for real-time events
- Test and document integrations with Apidog
Authentication: Get access to a store
Choose the authentication method based on your integration type.
Method 1: API tokens for custom integrations
Use an API token when a script or service connects to a single store.
- Open the BigCommerce store admin.
- Go to Settings → API Accounts → Create API Account.
- Choose V3/V2 API Token.
- Select only the scopes your integration needs, such as Products, Orders, or Customers.
- Save the credentials securely.
You receive:
- Store URL:
mystore.mybigcommerce.com - Access token:
abc123def456... - Client ID:
abc123... - Client secret:
xyz789...
Make a test request:
curl -X GET "https://api.bigcommerce.com/stores/{store-hash}/v3/catalog/products" \
-H "X-Auth-Token: {access-token}" \
-H "Content-Type: application/json" \
-H "Accept: application/json"
Replace {store-hash} with your store hash. It appears in the API URL after /stores/ and is also visible in the store admin URL.
Method 2: OAuth for marketplace apps
Use OAuth when building an app that merchants install through the BigCommerce marketplace.
The OAuth flow is:
- A merchant clicks Install.
- BigCommerce redirects to your callback URL with an authorization code.
- Your server exchanges the code for an access token.
- Store the token and store hash for future API requests.
Exchange the authorization code:
const response = await fetch('https://login.bigcommerce.com/oauth2/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
client_id: process.env.BC_CLIENT_ID,
client_secret: process.env.BC_CLIENT_SECRET,
redirect_uri: 'https://yourapp.com/auth/callback',
grant_type: 'authorization_code',
code: authCode,
scope: 'store_v2_default store_v3_products'
})
})
const { access_token, context } = await response.json()
// Use access_token for API calls.
// context contains the store_hash.
Use the returned token in Management API requests:
curl -X GET "https://api.bigcommerce.com/stores/{store-hash}/v3/catalog/products" \
-H "X-Auth-Token: {access-token}" \
-H "Content-Type: application/json"
Products and catalog management
Use the V3 Catalog API to manage products, variants, categories, and brands.
List products
GET https://api.bigcommerce.com/stores/{store-hash}/v3/catalog/products
X-Auth-Token: {token}
Accept: application/json
Example response:
{
"data": [
{
"id": 174,
"name": "Plain T-Shirt",
"type": "physical",
"sku": "PLAIN-T",
"price": 29.99,
"sale_price": 24.99,
"inventory_level": 150,
"inventory_tracking": "product",
"is_visible": true,
"categories": [23, 45],
"brand_id": 12
}
],
"meta": {
"pagination": {
"total": 500,
"count": 50,
"page": 1,
"per_page": 50
}
}
}
Create a product
POST https://api.bigcommerce.com/stores/{store-hash}/v3/catalog/products
X-Auth-Token: {token}
Content-Type: application/json
{
"name": "Premium Hoodie",
"type": "physical",
"sku": "HOODIE-PREM",
"price": 79.99,
"description": "Premium cotton blend hoodie",
"weight": 1.5,
"width": 20,
"height": 28,
"depth": 2,
"inventory_level": 100,
"inventory_tracking": "product",
"is_visible": true,
"categories": [23]
}
Update product variants
Products with options such as size and color use variants. Each variant can have its own SKU, price, and inventory level.
PUT https://api.bigcommerce.com/stores/{store-hash}/v3/catalog/products/{product-id}/variants/{variant-id}
X-Auth-Token: {token}
Content-Type: application/json
{
"sku": "HOODIE-PREM-BLK-M",
"price": 79.99,
"inventory_level": 50,
"option_values": [
{
"option_display_name": "Color",
"label": "Black"
},
{
"option_display_name": "Size",
"label": "Medium"
}
]
}
Manage inventory
Update inventory for a product:
PUT https://api.bigcommerce.com/stores/{store-hash}/v3/catalog/products/{product-id}
X-Auth-Token: {token}
Content-Type: application/json
{
"inventory_level": 75
}
Or update inventory for a specific variant:
PUT https://api.bigcommerce.com/stores/{store-hash}/v3/catalog/products/{product-id}/variants/{variant-id}
X-Auth-Token: {token}
Content-Type: application/json
{
"inventory_level": 25
}
Orders and fulfillment
Use the Orders V2 API to retrieve orders, update statuses, and create shipments.
List orders
GET https://api.bigcommerce.com/stores/{store-hash}/v2/orders
X-Auth-Token: {token}
Accept: application/json
Example response:
[
{
"id": 115,
"status": "Awaiting Fulfillment",
"status_id": 11,
"customer_id": 45,
"date_created": "2026-03-24T10:30:00+00:00",
"subtotal_ex_tax": 149.99,
"total_inc_tax": 162.49,
"items_total": 2,
"items_shipped": 0,
"shipping_address": {
"first_name": "John",
"last_name": "Doe",
"street_1": "123 Main St",
"city": "Austin",
"state": "Texas",
"zip": "78701",
"country": "United States"
}
}
]
Get order details and line items
Get an order:
GET https://api.bigcommerce.com/stores/{store-hash}/v2/orders/{order-id}
X-Auth-Token: {token}
Get the products in that order:
GET https://api.bigcommerce.com/stores/{store-hash}/v2/orders/{order-id}/products
X-Auth-Token: {token}
Update an order status
PUT https://api.bigcommerce.com/stores/{store-hash}/v2/orders/{order-id}
X-Auth-Token: {token}
Content-Type: application/json
{
"status_id": 12
}
Common status IDs:
-
0: Incomplete -
11: Awaiting Fulfillment -
12: Completed -
5: Cancelled -
4: Refunded
Create a shipment
Create a shipment after your fulfillment system processes the order:
POST https://api.bigcommerce.com/stores/{store-hash}/v2/orders/{order-id}/shipments
X-Auth-Token: {token}
Content-Type: application/json
{
"tracking_number": "1Z999AA10123456784",
"carrier": "UPS",
"shipping_method": "UPS Ground",
"items": [
{
"order_product_id": 234,
"quantity": 1
}
]
}
Customers and segmentation
Use the Customers V3 API for customer profiles, addresses, and customer groups.
List customers
GET https://api.bigcommerce.com/stores/{store-hash}/v3/customers
X-Auth-Token: {token}
Accept: application/json
Example response:
{
"data": [
{
"id": 45,
"email": "john.doe@example.com",
"first_name": "John",
"last_name": "Doe",
"company": "Acme Corp",
"phone": "512-555-1234",
"customer_group_id": 1,
"notes": "VIP customer",
"tax_exempt_category": "",
"date_created": "2025-11-15T09:30:00+00:00",
"date_modified": "2026-03-20T14:22:00+00:00"
}
]
}
Create a customer
POST https://api.bigcommerce.com/stores/{store-hash}/v3/customers
X-Auth-Token: {token}
Content-Type: application/json
{
"email": "jane.smith@example.com",
"first_name": "Jane",
"last_name": "Smith",
"phone": "512-555-5678",
"customer_group_id": 2
}
Update a customer
PUT https://api.bigcommerce.com/stores/{store-hash}/v3/customers/{customer-id}
X-Auth-Token: {token}
Content-Type: application/json
{
"notes": "Repeat customer - priority support",
"customer_group_id": 3
}
Webhooks for real-time updates
Webhooks notify your application when store events occur. They let you react to events without polling the API.
Create a webhook
POST https://api.bigcommerce.com/stores/{store-hash}/v3/hooks
X-Auth-Token: {token}
Content-Type: application/json
{
"scope": "store/order/created",
"destination": "https://yourapp.com/webhooks/orders",
"is_active": true
}
Common webhook scopes:
-
store/order/created: New order placed -
store/order/updated: Order status changed -
store/order/archived: Order archived -
store/product/created: Product added -
store/product/updated: Product modified -
store/product/deleted: Product removed -
store/customer/created: New customer -
store/inventory/updated: Stock changed
Verify webhook signatures
BigCommerce signs webhooks so you can verify that incoming requests are legitimate.
import crypto from 'crypto'
function verifyWebhook(payload, signature, secret) {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex')
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
)
}
app.post('/webhooks/orders', (req, res) => {
const signature = req.headers['x-bc-webhook-signature']
const payload = JSON.stringify(req.body)
if (!verifyWebhook(payload, signature, process.env.BC_CLIENT_SECRET)) {
return res.status(401).send('Invalid signature')
}
// Process the webhook event.
console.log('Order created:', req.body.data.id)
res.status(200).send('OK')
})
Testing BigCommerce APIs with Apidog
BigCommerce requests require consistent headers, authentication, and response validation. Save requests in Apidog collections so your team can test the same flows against staging and production stores.
1. Create store environments
Create an environment for each store so requests use variables instead of hard-coded credentials.
# Production Store
STORE_HASH: abc123
ACCESS_TOKEN: xyz789
BASE_URL: https://api.bigcommerce.com/stores/abc123
# Staging Store
STORE_HASH: staging456
ACCESS_TOKEN: staging_token
BASE_URL: https://api.bigcommerce.com/stores/staging456
Use the BASE_URL variable in your requests:
GET {{BASE_URL}}/v3/catalog/products
X-Auth-Token: {{ACCESS_TOKEN}}
Accept: application/json
2. Add pre-request scripts
Add authentication headers automatically:
pm.request.headers.add({
key: 'X-Auth-Token',
value: pm.environment.get('ACCESS_TOKEN')
})
pm.request.headers.add({
key: 'Accept',
value: 'application/json'
})
3. Validate API responses
Add tests that verify required product fields and pagination metadata:
pm.test('Products have required fields', () => {
const response = pm.response.json()
response.data.forEach(product => {
pm.expect(product).to.have.property('id')
pm.expect(product).to.have.property('name')
pm.expect(product).to.have.property('price')
pm.expect(product.price).to.be.above(0)
})
})
pm.test('Pagination works', () => {
const response = pm.response.json()
pm.expect(response.meta.pagination).to.have.property('total')
pm.expect(response.meta.pagination.page).to.eql(1)
})
Common errors and fixes
401 Unauthorized
Cause: The access token is missing or invalid.
Fix:
- Verify that the
X-Auth-Tokenheader is present. - Confirm that the token has not been revoked.
- Check that the API account has the required scopes.
403 Forbidden
Cause: The token is valid but does not have the required scope.
Fix:
- Review API account permissions.
- Add the missing Products, Orders, Customers, or other scope.
- Generate a new token with expanded permissions.
404 Not Found
Cause: The endpoint is incorrect or the resource does not exist.
Fix:
- Verify the store hash.
- Check whether the endpoint uses
v2orv3. - Confirm that the resource ID exists.
429 Too Many Requests
Cause: You exceeded the endpoint rate limit.
BigCommerce allows different limits per endpoint. Products allow 10,000 requests per hour, while Orders allow 30,000 requests per hour. Check the X-Rate-Limit-Remaining response header and add backoff handling.
async function callWithBackoff(fn, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fn()
if (response.status === 429) {
const retryAfter = response.headers.get('X-Rate-Limit-Reset')
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000))
} else {
return response
}
}
}
422 Unprocessable Entity
Cause: A validation error exists in the request body.
Check the response body for field-level details:
{
"errors": {
"price": "Price must be greater than zero",
"sku": "SKU already exists"
}
}
Alternatives and comparisons
| Feature | BigCommerce | Shopify | WooCommerce |
|---|---|---|---|
| API versioning | V2 and V3 | REST and GraphQL | REST |
| Rate limits | 10K–30K/hour | 2/min (leaky bucket) | Depends on hosting |
| Webhooks | Yes | Yes | Yes (plugin) |
| GraphQL | No | Yes | No |
| SDK quality | Good | Excellent | PHP only |
| Multi-store | Yes | No | No |
BigCommerce’s V3 API is more consistent than Shopify’s fragmented approach, while Shopify’s GraphQL API provides more flexibility for complex queries.
Real-world use cases
Multi-channel inventory sync
A brand selling through BigCommerce, Amazon, and physical stores can use the Products API to synchronize inventory levels across channels and reduce overselling. Test inventory update requests before each deployment.
Order automation
A subscription box company can use order webhooks to trigger fulfillment when orders are created. Its integration can create warehouse pick lists and update shipment tracking through the Orders API.
Customer segmentation
An e-commerce site can use the Customers API to group buyers based on purchase history. A scheduled job can add VIP customers to a group with exclusive pricing.
Conclusion
You now have the core implementation patterns for a BigCommerce integration:
- Use API tokens for single-store integrations and OAuth for marketplace apps.
- Use the V3 Catalog API for products and variants.
- Use the V2 Orders API for order processing and fulfillment.
- Use the V3 Customers API for customer data.
- Use webhooks for real-time store events.
- Save and validate requests with Apidog before deploying changes.
Next steps:
- Create an API account in your BigCommerce store.
- Make a request to list products.
- Create an order webhook.
- Save the requests in an Apidog collection.
- Build and test your integration against a staging store.
FAQ
What is the difference between V2 and V3 APIs?
V3 is the newer and more consistent API. Use it for products, categories, brands, and customers. V2 handles orders, which have not been migrated yet. Most integrations use both versions.
How do I get my store hash?
Your store hash appears in the BigCommerce admin URL:
https://store-abc123.mybigcommerce.com/manage
In this example, abc123 is the store hash. It is also available in API account settings.
Can I use the API on a trial store?
Yes. BigCommerce trial stores have full API access, making them useful for development and testing before going live.
What is the rate limit for API calls?
Limits depend on the endpoint. Products allow 10,000 requests per hour, while Orders allow 30,000 requests per hour. Check X-Rate-Limit-Remaining in API responses to monitor the current limit.
How do I handle pagination?
Use the page and limit query parameters. The default limit is 50. Check meta.pagination in each response and continue until you fetch every page.
let allProducts = []
let page = 1
while (true) {
const response = await fetch(
`${baseUrl}/v3/catalog/products?page=${page}&limit=100`,
{ headers: { 'X-Auth-Token': token } }
)
const data = await response.json()
allProducts.push(...data.data)
if (page >= data.meta.pagination.total_pages) break
page++
}
Can I upload product images through the API?
Yes. Use the product images endpoint:
POST https://api.bigcommerce.com/stores/{store-hash}/v3/catalog/products/{product-id}/images
Content-Type: application/json
{
"image_url": "https://example.com/image.jpg",
"is_thumbnail": true
}
How do I handle currency and multiple stores?
BigCommerce stores have a base currency. Multi-currency is handled at the storefront level rather than through the API. For multiple stores, create separate API accounts and use separate environments in Apidog.
What happens if my webhook endpoint is down?
BigCommerce retries failed webhooks with exponential backoff. After five failures over 24 hours, BigCommerce disables the webhook. Monitor webhook endpoints and alert on failures.

Top comments (0)