Skip to main content
The Admin Products API gives you full control over the product catalog. Use it to create new products, update existing ones, search and filter across all catalog entries — including soft-deleted items — and perform soft-deletes that preserve order history without exposing discontinued items to customers. All write operations require an active admin session and a CSRF token.
All endpoints under /admin/products require an authenticated session with the ADMIN or SUPER_ADMIN role. Always call GET /auth/csrf-token first and pass the returned token in the x-csrf-token header for every POST, PATCH, and DELETE request.

List Products

Retrieve a paginated list of products from the admin catalog view. Unlike the public catalog endpoint, this view lets you filter by deleted status, search across all products regardless of active variant availability, and sort by any supported field.

Query Parameters

integer
default:"1"
Page number (1-based).
integer
default:"20"
Number of results per page. Accepted range: 1–100.
Free-text search across product name, brand, and description.
string
Filter by exact brand name (trimmed). Maximum 255 characters.
string
default:"-created_at"
Sort field. Prefix with - for descending order. Accepted values: name, -name, created_at, -created_at, updated_at, -updated_at.
string
default:"false"
Pass "true" to include soft-deleted products in the response. Must be the string "true" or "false".
Pass include_deleted=true when auditing removed catalog items — for example, when reconciling order history against products that are no longer actively sold.

Response

Returns a paginated envelope with a data array of product summaries and a meta pagination object.
boolean
Always true on a 200 response.
array
Array of product summary objects.
object
Pagination metadata.

Create Product

Create a new product in the catalog. Only name is required; provide a slug to control the URL path or let the API auto-generate one from the name. A 409 is returned if the slug already exists.

Request Body

string
required
Product display name. Between 1 and 255 characters.
string
URL slug for the product. Must match ^[a-z0-9]+(?:-[a-z0-9]+)*$ and be unique. Auto-generated from name if omitted. Maximum 255 characters.
string
Long-form product description. Maximum 10,000 characters. Optional.
string
Brand name. Maximum 255 characters. Optional.

Example

201 Response

Error Responses


Get Product

Fetch the full admin projection of a product by its public ID. Pass include_deleted_variants=true to include any soft-deleted variants in the response.

Path Parameters

string
required
The product’s public ID, prefixed prd_.

Query Parameters

string
default:"false"
Pass "true" to include soft-deleted variants in the variants array. Must be the string "true" or "false".

Response

Returns the full ProductDetail object including images (ordered by display_order) and variants (all statuses when include_deleted_variants=true).

Update Product

Partially update a product’s fields. Only the fields you supply are modified. Pass null for description or brand to explicitly clear those values.

Path Parameters

string
required
The product’s public ID, prefixed prd_.

Request Body

At least one field is required.
string
Updated display name. Between 1 and 255 characters.
string
Updated URL slug. Must match ^[a-z0-9]+(?:-[a-z0-9]+)*$. Returns 409 on conflict.
string | null
Updated description. Pass null to clear the existing value.
string | null
Updated brand. Pass null to clear the existing value.

Example


Delete Product

Soft-delete a product and all of its variants. The product is immediately hidden from all customer-facing endpoints but remains in the database with deleted_at set. Returns 204 No Content on success.

Path Parameters

string
required
The product’s public ID, prefixed prd_.

Example

Soft-deleted products — and all their variants — are hidden from customers but are permanently retained in the database. This ensures that historical order line items continue to reference the correct product name, slug, and brand without data loss.

Error Responses