Commerce Admin REST API Reference
Overview
Section titled “Overview”The Commerce Admin REST API exposes catalog, order, and customer management through HTTP endpoints. All endpoints require authentication and return JSON responses.
Base URL
Section titled “Base URL”`https://{site-domain}/episerverapi/commerce/`Authentication
Section titled “Authentication”All requests require a Bearer token in the Authorization header.
`Authorization: Bearer {access_token}`Obtain tokens via the /episerverapi/token endpoint using client credentials.
Catalog endpoints
Section titled “Catalog endpoints”GET /catalog/entries
Section titled “GET /catalog/entries”Returns catalog entries with optional filtering.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
top | int | No | Number of records to return (default: 50) |
skip | int | No | Number of records to skip |
catalogName | string | No | Filter by catalog name |
nodeCode | string | No | Filter by parent node code |
Response: 200 OK
{ "totalCount": 150, "entries": [ { "code": "SHIRT-001", "name": "Classic Oxford Shirt", "catalogName": "Fashion", "metaClassName": "FashionProduct" } ]}GET /catalog/entries/{code}
Section titled “GET /catalog/entries/{code}”Returns a single entry by code.
Path parameters
| Name | Type | Description |
|---|---|---|
code | string | Catalog entry code |
Response: 200 OK or 404 Not Found
POST /catalog/entries
Section titled “POST /catalog/entries”Creates a new catalog entry.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
code | string | Yes | Unique entry code |
name | string | Yes | Display name |
catalogName | string | Yes | Parent catalog name |
metaClassName | string | Yes | Content type name |
entryType | string | Yes | Product, Variation, Package, Bundle |
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", accessToken);
var entry = new
{
code = "SHIRT-002",
name = "Slim Fit Shirt",
catalogName = "Fashion",
metaClassName = "FashionProduct",
entryType = "Product"
};
var response = await client.PostAsJsonAsync(
"https://mysite.com/episerverapi/commerce/catalog/entries",
entry); PUT /catalog/entries/{code}
Section titled “PUT /catalog/entries/{code}”Updates an existing catalog entry.
Response codes
| Code | Description |
|---|---|
200 | Updated successfully |
404 | Entry not found |
400 | Validation error |
DELETE /catalog/entries/{code}
Section titled “DELETE /catalog/entries/{code}”Deletes a catalog entry.
Response codes
| Code | Description |
|---|---|
200 | Deleted successfully |
404 | Entry not found |
Order endpoints
Section titled “Order endpoints”GET /orders
Section titled “GET /orders”Returns orders with optional filtering.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
top | int | No | Number of records to return |
skip | int | No | Number of records to skip |
modifiedFrom | DateTime | No | Filter by modification date |
status | string | No | Filter by order status |
Response: 200 OK
GET /orders/{id}
Section titled “GET /orders/{id}”Returns a single order by ID.
Path parameters
| Name | Type | Description |
|---|---|---|
id | int | Order group ID |
Response: 200 OK or 404 Not Found
PUT /orders/{id}/status
Section titled “PUT /orders/{id}/status”Updates the status of an order.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
status | string | Yes | New order status |
var statusUpdate = new { status = "Completed" };
var response = await client.PutAsJsonAsync(
$"https://mysite.com/episerverapi/commerce/orders/{orderId}/status",
statusUpdate); Customer endpoints
Section titled “Customer endpoints”GET /customers/contacts
Section titled “GET /customers/contacts”Returns customer contacts with optional search.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
top | int | No | Number of records to return |
skip | int | No | Number of records to skip |
search | string | No | Search by name or email |
GET /customers/contacts/{id}
Section titled “GET /customers/contacts/{id}”Returns a single customer contact.
POST /customers/contacts
Section titled “POST /customers/contacts”Creates a new customer contact.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
firstName | string | Yes | First name |
lastName | string | Yes | Last name |
email | string | Yes | Email address |
GET /customers/organizations
Section titled “GET /customers/organizations”Returns organizations.
POST /customers/organizations
Section titled “POST /customers/organizations”Creates a new organization.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Organization name |
Error responses
Section titled “Error responses”All error responses follow a consistent format:
{ "statusCode": 400, "message": "Validation failed", "errors": [ { "field": "code", "message": "Entry code is required." } ]}HTTP status codes
Section titled “HTTP status codes”| Code | Description |
|---|---|
200 | Success |
201 | Created |
400 | Bad request — validation errors |
401 | Unauthorized — missing or invalid token |
403 | Forbidden — insufficient permissions |
404 | Not found |
409 | Conflict — duplicate entry code |
500 | Internal server error |
Rate limiting
Section titled “Rate limiting”| Limit | Value |
|---|---|
| Requests per minute | 600 |
Max page size (top) | 100 |