BigCommerce REST API Development
Before writing code
Fetch live docs:
- Fetch
https://docs.bigcommerce.com/developer/api-reference/rest/admin/management/abandoned-carts for REST API overview
- Web-search
site:developer.bigcommerce.com rest-management for Management API reference
- Web-search
bigcommerce api v3 rate limits pagination for rate limit details
API Architecture
Two API Versions
| 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.
Base URL
https://api.bigcommerce.com/stores/{store_hash}/v3/
The store_hash is found in the API Path when creating credentials.
Authentication
API Account Tokens
For server-to-server requests:
X-Auth-Token: {access_token}
Content-Type: application/json
Accept: application/json
OAuth Tokens
For apps using the OAuth flow — same header format, token obtained during installation.
Scopes
Tokens have scopes that control access:
store_v2_products / store_v2_products_read_only
store_v2_orders / store_v2_orders_read_only
store_v2_customers / store_v2_customers_read_only
store_v2_content, store_v2_marketing, store_v2_information
store_themes_manage, store_cart, store_checkout
Key V3 Endpoints
Catalog
| 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 |
Orders (V2 — legacy but current)
| 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 |
Customers
| 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 |
Other Key Endpoints
| 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 |
Pagination
V3 Pagination
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
}
}
}
V2 Pagination
Uses Link header with rel="next" and rel="previous".
Filtering
V3 Query Parameters
id:in=1,2,3 — filter by multiple IDs
name:like=Widget%25 — partial name match
date_modified:min=2024-01-01 — date range
include=images,variants — include sub-resources
sort=name / sort=-date_created — sort ascending/descending
include_fields=name,price — select specific fields
exclude_fields=description — exclude specific fields
Rate Limiting
Default Limits
Typically 450 requests per 30-second window (varies by plan):
- Standard: 150 requests/30s
- Plus: 200 requests/30s
- Pro: 400 requests/30s
- Enterprise: 450+ requests/30s
Headers
X-Rate-Limit-Requests-Left — remaining requests in window
X-Rate-Limit-Time-Reset-Ms — ms until window resets
X-Rate-Limit-Requests-Quota — total requests allowed
- HTTP 429 when exceeded — retry after reset
Best Practices for Rate Limits
- Check
X-Rate-Limit-Requests-Left before batches
- Implement exponential backoff on 429 responses
- Use batch endpoints where available
- Cache responses that don't change frequently
Batch Operations
Some V3 endpoints support batch operations:
- POST
/v3/catalog/products — create multiple products (array)
- PUT
/v3/catalog/products — update multiple products (array)
- DELETE
/v3/catalog/products?id:in=1,2,3 — delete multiple
Error Handling
Response Format
{
"status": 422,
"title": "Unprocessable Entity",
"type": "https://docs.bigcommerce.com/developer/api-reference/rest/overview",
"errors": {
"name": "Product name is required"
}
}
Common Status Codes
| 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 |
Best Practices
- Use V3 for all new development — V2 only where V3 equivalent doesn't exist
- Include
Accept: application/json and Content-Type: application/json headers
- Use
include to fetch sub-resources in one request (avoid N+1)
- Use
include_fields / exclude_fields to minimize response size
- Implement rate limit handling with exponential backoff
- Use batch endpoints for bulk operations
- Cache read-heavy data that changes infrequently
- Handle 429 responses gracefully — don't retry immediately
Fetch the BigCommerce REST API reference for exact endpoint paths, query parameters, request/response schemas, and current rate limits before implementing.
1---2name: bc-api-rest3description: 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.4---56# BigCommerce REST API Development78## Before writing code910**Fetch live docs**:111. Fetch `https://docs.bigcommerce.com/developer/api-reference/rest/admin/management/abandoned-carts` for REST API overview122. Web-search `site:developer.bigcommerce.com rest-management` for Management API reference133. Web-search `bigcommerce api v3 rate limits pagination` for rate limit details1415## API Architecture1617### Two API Versions1819| Version | Base URL | Notes |20|---------|----------|-------|21| V2 | `/stores/{hash}/v2/` | Legacy — orders, some customer endpoints |22| V3 | `/stores/{hash}/v3/` | Modern — most resources, JSON:API-like |2324V3 is preferred for all new development. V2 is still required for some resources that haven't been migrated.2526### Base URL2728`https://api.bigcommerce.com/stores/{store_hash}/v3/`2930The `store_hash` is found in the API Path when creating credentials.3132## Authentication3334### API Account Tokens3536For server-to-server requests:37```38X-Auth-Token: {access_token}39Content-Type: application/json40Accept: application/json41```4243### OAuth Tokens4445For apps using the OAuth flow — same header format, token obtained during installation.4647### Scopes4849Tokens have scopes that control access:50- `store_v2_products` / `store_v2_products_read_only`51- `store_v2_orders` / `store_v2_orders_read_only`52- `store_v2_customers` / `store_v2_customers_read_only`53- `store_v2_content`, `store_v2_marketing`, `store_v2_information`54- `store_themes_manage`, `store_cart`, `store_checkout`5556## Key V3 Endpoints5758### Catalog5960| Endpoint | Methods | Description |61|----------|---------|-------------|62| `/v3/catalog/products` | GET, POST, PUT, DELETE | Products CRUD |63| `/v3/catalog/products/{id}/variants` | GET, POST, PUT, DELETE | Product variants |64| `/v3/catalog/products/{id}/images` | GET, POST, PUT, DELETE | Product images |65| `/v3/catalog/categories` | GET, POST, PUT, DELETE | Categories |66| `/v3/catalog/brands` | GET, POST, PUT, DELETE | Brands |67| `/v3/catalog/products/channel-assignments` | GET, PUT | Channel product assignments |6869### Orders (V2 — legacy but current)7071| Endpoint | Methods | Description |72|----------|---------|-------------|73| `/v2/orders` | GET, POST, PUT | Orders |74| `/v2/orders/{id}/products` | GET | Order line items |75| `/v2/orders/{id}/shipments` | GET, POST, PUT | Shipments |76| `/v2/orders/{id}/shipping_addresses` | GET | Shipping addresses |7778### Customers7980| Endpoint | Methods | Description |81|----------|---------|-------------|82| `/v3/customers` | GET, POST, PUT, DELETE | Customers CRUD |83| `/v3/customers/addresses` | GET, POST, PUT, DELETE | Customer addresses |84| `/v3/customers/attribute-values` | GET, PUT, DELETE | Customer attributes |8586### Other Key Endpoints8788| Endpoint | Description |89|----------|-------------|90| `/v3/channels` | Storefronts/channels |91| `/v3/carts` | Server-side cart |92| `/v3/checkouts` | Server-side checkout |93| `/v3/payments` | Payment processing |94| `/v3/content/widgets` | Widgets |95| `/v3/themes` | Theme management |96| `/v3/hooks` | Webhooks |97| `/v3/storefront/api-token` | Storefront API tokens |9899## Pagination100101### V3 Pagination102103Query parameters:104- `page` — page number (default 1)105- `limit` — items per page (default 50, max 250)106107Response includes `meta.pagination`:108```json109{110 "data": [...],111 "meta": {112 "pagination": {113 "total": 250,114 "count": 50,115 "per_page": 50,116 "current_page": 1,117 "total_pages": 5118 }119 }120}121```122123### V2 Pagination124125Uses `Link` header with `rel="next"` and `rel="previous"`.126127## Filtering128129### V3 Query Parameters130131- `id:in=1,2,3` — filter by multiple IDs132- `name:like=Widget%25` — partial name match133- `date_modified:min=2024-01-01` — date range134- `include=images,variants` — include sub-resources135- `sort=name` / `sort=-date_created` — sort ascending/descending136- `include_fields=name,price` — select specific fields137- `exclude_fields=description` — exclude specific fields138139## Rate Limiting140141### Default Limits142143Typically 450 requests per 30-second window (varies by plan):144- Standard: 150 requests/30s145- Plus: 200 requests/30s146- Pro: 400 requests/30s147- Enterprise: 450+ requests/30s148149### Headers150151- `X-Rate-Limit-Requests-Left` — remaining requests in window152- `X-Rate-Limit-Time-Reset-Ms` — ms until window resets153- `X-Rate-Limit-Requests-Quota` — total requests allowed154- HTTP 429 when exceeded — retry after reset155156### Best Practices for Rate Limits157158- Check `X-Rate-Limit-Requests-Left` before batches159- Implement exponential backoff on 429 responses160- Use batch endpoints where available161- Cache responses that don't change frequently162163## Batch Operations164165Some V3 endpoints support batch operations:166- POST `/v3/catalog/products` — create multiple products (array)167- PUT `/v3/catalog/products` — update multiple products (array)168- DELETE `/v3/catalog/products?id:in=1,2,3` — delete multiple169170## Error Handling171172### Response Format173174```json175{176 "status": 422,177 "title": "Unprocessable Entity",178 "type": "https://docs.bigcommerce.com/developer/api-reference/rest/overview",179 "errors": {180 "name": "Product name is required"181 }182}183```184185### Common Status Codes186187| Code | Meaning |188|------|---------|189| 200 | Success |190| 201 | Created |191| 204 | No Content (successful delete) |192| 400 | Bad Request (invalid parameters) |193| 401 | Unauthorized (invalid token) |194| 403 | Forbidden (insufficient scope) |195| 404 | Not Found |196| 409 | Conflict (duplicate resource) |197| 422 | Unprocessable Entity (validation error) |198| 429 | Rate Limited |199| 500 | Internal Server Error |200201## Best Practices202203- Use V3 for all new development — V2 only where V3 equivalent doesn't exist204- Include `Accept: application/json` and `Content-Type: application/json` headers205- Use `include` to fetch sub-resources in one request (avoid N+1)206- Use `include_fields` / `exclude_fields` to minimize response size207- Implement rate limit handling with exponential backoff208- Use batch endpoints for bulk operations209- Cache read-heavy data that changes infrequently210- Handle 429 responses gracefully — don't retry immediately211212Fetch the BigCommerce REST API reference for exact endpoint paths, query parameters, request/response schemas, and current rate limits before implementing.