The Sellers Commerce Open API is a RESTful interface with lightweight JSON requests and responses. It gives your systems read and write access to orders, products, employees and returns, and it is the supported way to integrate an ERP, a WMS or a BI tool with the platform.
Three things are true of every call and are not repeated on each endpoint: authentication is a single header, collection endpoints accept OData query options, and JSON responses are wrapped in a standard envelope.
You need three values from your account team: the API base URL for your environment, your API key, and your shared secret. Keys are scoped to one account — every request resolves to that account automatically, so you never pass an account identifier for your own data.
Throughout this reference the base URL is written {{baseUrl}}.
Send the key and secret as a single colon-joined Authorization header. There is no token exchange, no expiry and no refresh step.
Authorization: <apiKey>:<sharedSecret>
Content-Type: application/json
A missing, malformed or unrecognised header returns 401 Unauthorized with envelope status 777. Treat the pair as a password: send it only over HTTPS, and never put it in a query string or a URL that might be logged.
The ShipStation, ShipWorks and T-HUB endpoints implement the scheme those products require, not the header above. Everything else on this page uses the standard header.
JSON responses are wrapped in a three-field envelope. Read StatusCode — it is the API's own code and is more specific than the HTTP status.
{
"Results": { ... } | [ ... ] | null,
"ResponseMessage": "OK",
"StatusCode": 100
}
Endpoints whose path segment begins In_, and all fulfilment-connector endpoints, return their payload directly with no wrapper. Parse those against the documented model, not against Results.
Endpoints marked OData accept OData v3 query options. Use them to keep responses small — most collection endpoints return the full authorised set when unfiltered.
# One order by number
GET {{baseUrl}}/api/order/get?$filter=OrderNumber eq '100242'
# Orders in a date window
GET {{baseUrl}}/api/order/get?$filter=OrderPlacedDate gt datetime'2026-01-01T00:00:00'
and OrderPlacedDate lt datetime'2026-02-01T00:00:00'
# Page through a large set
GET {{baseUrl}}/api/employee/get?$top=100&$skip=200&$orderby=EmployeeId
Supported: $filter, $orderby, $top, $skip, $select, $expand, $inlinecount. URL-encode the value — a literal space and a single quote both need escaping in practice.
Every module below has its own Postman button that downloads a ready-to-import Collection v2.1 file for that module alone. Import it, fill in three collection variables, and every request is runnable.
| Variable | Set to |
|---|---|
| baseUrl | The API host for your environment, no trailing slash |
| apiKey | Your API key |
| sharedSecret | Your shared secret |
Collection-level auth is pre-wired to send Authorization: {{apiKey}}:{{sharedSecret}} on every request, so credentials are set once rather than per request.
| Code | Meaning | HTTP |
|---|---|---|
| 100 | Success | 200 |
| 101 | Failure — understood but not processed | 200 / 500 |
| 429 | Too many requests | 409 |
| 454 | Category not found | 404 |
| 464 | Product not found | 404 |
| 474 | Order not found | 404 |
| 484 | Shopper not found | 404 |
| 555 | No records found for the requested resource | 404 |
| 777 | Unauthorized | 401 |
Returned in ResponseMessage by the write endpoints.
| Code | Meaning |
|---|---|
| 20 | Processed successfully |
| 21 | Account does not exist |
| 22 | User does not exist |
| 23 | Product not found |
| 24 | Order does not exist |
| 25 | SKU not present on this order |
| 26 | Invalid quantity |
| 27 | Payment data already exists for this order |
| 28 | Order already captured |
| 29 | Processing failed |
| 30 | Invalid data provided |
| 31 | Category does not exist |
| 32 | Parent category does not exist |
| 33 | Already exists for this request |
| 34 | Invalid SKU data |
| 35 | Brand and first-level category do not match |
| 36 | Category insertion failed |
| 37 | Identity node not found |
| 38 | User not found for the given identity |
| 39 | Invalid or inactive request |
| 40 | Required parameter was null |
| 41 | Unable to resolve a valid account |
| 400 | Malformed URL or parameters |
| 404 | No record found |
Every coded value the API accepts or returns. Send the numeric value; the description is shown so you can label it in your own system.