BigCommerce REST API Development
Before writing code
Fetch live docs:
- Fetch
https://developer.bigcommerce.com/docs/rest 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://developer.bigcommerce.com/api-docs/getting-started/api-status-codes",
"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---5
6# BigCommerce REST API Development
7
8## Before writing code
9
10**Fetch live docs**:
111. Fetch `https://developer.bigcommerce.com/docs/rest` for REST API overview
122. Web-search `site:developer.bigcommerce.com rest-management` for Management API reference
133. Web-search `bigcommerce api v3 rate limits pagination` for rate limit details
14
15## API Architecture
16
17### Two API Versions
18
19| 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 |
23
24V3 is preferred for all new development. V2 is still required for some resources that haven't been migrated.
25
26### Base URL
27
28`https://api.bigcommerce.com/stores/{store_hash}/v3/`
29
30The `store_hash` is found in the API Path when creating credentials.
31
32## Authentication
33
34### API Account Tokens
35
36For server-to-server requests:
37```
38X-Auth-Token: {access_token}
39Content-Type: application/json
40Accept: application/json
41```
42
43### OAuth Tokens
44
45For apps using the OAuth flow — same header format, token obtained during installation.
46
47### Scopes
48
49Tokens 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`
55
56## Key V3 Endpoints
57
58### Catalog
59
60| 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 |
68
69### Orders (V2 — legacy but current)
70
71| 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 |
77
78### Customers
79
80| 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 |
85
86### Other Key Endpoints
87
88| 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 |
98
99## Pagination
100
101### V3 Pagination
102
103Query parameters:
104- `page` — page number (default 1)
105- `limit` — items per page (default 50, max 250)
106
107Response includes `meta.pagination`:
108```json
109{
110 "data": [...],
111 "meta": {
112 "pagination": {
113 "total": 250,
114 "count": 50,
115 "per_page": 50,
116 "current_page": 1,
117 "total_pages": 5
118 }
119 }
120}
121```
122
123### V2 Pagination
124
125Uses `Link` header with `rel="next"` and `rel="previous"`.
126
127## Filtering
128
129### V3 Query Parameters
130
131- `id:in=1,2,3` — filter by multiple IDs
132- `name:like=Widget%25` — partial name match
133- `date_modified:min=2024-01-01` — date range
134- `include=images,variants` — include sub-resources
135- `sort=name` / `sort=-date_created` — sort ascending/descending
136- `include_fields=name,price` — select specific fields
137- `exclude_fields=description` — exclude specific fields
138
139## Rate Limiting
140
141### Default Limits
142
143Typically 450 requests per 30-second window (varies by plan):
144- Standard: 150 requests/30s
145- Plus: 200 requests/30s
146- Pro: 400 requests/30s
147- Enterprise: 450+ requests/30s
148
149### Headers
150
151- `X-Rate-Limit-Requests-Left` — remaining requests in window
152- `X-Rate-Limit-Time-Reset-Ms` — ms until window resets
153- `X-Rate-Limit-Requests-Quota` — total requests allowed
154- HTTP 429 when exceeded — retry after reset
155
156### Best Practices for Rate Limits
157
158- Check `X-Rate-Limit-Requests-Left` before batches
159- Implement exponential backoff on 429 responses
160- Use batch endpoints where available
161- Cache responses that don't change frequently
162
163## Batch Operations
164
165Some 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 multiple
169
170## Error Handling
171
172### Response Format
173
174```json
175{
176 "status": 422,
177 "title": "Unprocessable Entity",
178 "type": "https://developer.bigcommerce.com/api-docs/getting-started/api-status-codes",
179 "errors": {
180 "name": "Product name is required"
181 }
182}
183```
184
185### Common Status Codes
186
187| 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 |
200
201## Best Practices
202
203- Use V3 for all new development — V2 only where V3 equivalent doesn't exist
204- Include `Accept: application/json` and `Content-Type: application/json` headers
205- Use `include` to fetch sub-resources in one request (avoid N+1)
206- Use `include_fields` / `exclude_fields` to minimize response size
207- Implement rate limit handling with exponential backoff
208- Use batch endpoints for bulk operations
209- Cache read-heavy data that changes infrequently
210- Handle 429 responses gracefully — don't retry immediately
211
212Fetch the BigCommerce REST API reference for exact endpoint paths, query parameters, request/response schemas, and current rate limits before implementing.