Products (admin API)
Admin routes of the products module. Every route needs a staff session and the permission named on it; send X-Resolve-Locale: false to receive every locale of a translatable field for editing.
GET /v1/admin/products
Section titled “GET /v1/admin/products”List all products (admin)
Parameters:
brandin query (string, optional).categoryIdin query (string, optional).isFeaturedin query (boolean, optional).pagein query (number, min 1, optional).pageSizein query (number, min 1, max 100, optional).productTypeIdin query (string, optional).searchin query (string, optional).sortByin query (string, optional).
Responses:
200: Products retrieved.401: Unauthorized.403: Insufficient permissions.
POST /v1/admin/products
Section titled “POST /v1/admin/products”Create new product
Request body: CreateProductAdminDto.
Responses:
201: Product created.400: Invalid input.401: Unauthorized.403: Insufficient permissions.
DELETE /v1/admin/products/{id}
Section titled “DELETE /v1/admin/products/{id}”Delete product
Parameters:
idin path (string, required).
Responses:
204: Product deleted.401: Unauthorized.403: Insufficient permissions.404: Product not found.
GET /v1/admin/products/{id}
Section titled “GET /v1/admin/products/{id}”Get product by ID (admin)
Parameters:
idin path (string, required).
Responses:
200: Product retrieved.401: Unauthorized.403: Insufficient permissions.404: Product not found.
PATCH /v1/admin/products/{id}
Section titled “PATCH /v1/admin/products/{id}”Update product
Parameters:
idin path (string, required).
Request body: UpdateProductAdminDto.
Responses:
200: Product updated.400: Invalid input.401: Unauthorized.403: Insufficient permissions.404: Product not found.
PATCH /v1/admin/products/{id}/assets
Section titled “PATCH /v1/admin/products/{id}/assets”Update product assets
Parameters:
idin path (string, required).
Request body: UpdateProductAssetsAdminDto.
Responses:
204: Assets updated.400: Invalid input.401: Unauthorized.403: Insufficient permissions.404: Product not found.
POST /v1/admin/products/{id}/faqs
Section titled “POST /v1/admin/products/{id}/faqs”Create product FAQ
Parameters:
idin path (string, required).
Request body: CreateProductFaqAdminDto.
Responses:
201: FAQ created.400: Invalid input.401: Unauthorized.403: Insufficient permissions.404: Product not found.
DELETE /v1/admin/products/{id}/faqs/{faqId}
Section titled “DELETE /v1/admin/products/{id}/faqs/{faqId}”Delete product FAQ
Parameters:
faqIdin path (string, required).idin path (string, required).
Responses:
204: FAQ deleted.401: Unauthorized.403: Insufficient permissions.404: FAQ not found.
PATCH /v1/admin/products/{id}/faqs/{faqId}
Section titled “PATCH /v1/admin/products/{id}/faqs/{faqId}”Update product FAQ
Parameters:
faqIdin path (string, required).idin path (string, required).
Request body: UpdateProductFaqAdminDto.
Responses:
200: FAQ updated.400: Invalid input.401: Unauthorized.403: Insufficient permissions.404: FAQ not found.
PATCH /v1/admin/products/{id}/restore
Section titled “PATCH /v1/admin/products/{id}/restore”Restore archived product
Parameters:
idin path (string, required).
Responses:
200: Product restored.401: Unauthorized.403: Insufficient permissions.404: Product not found.
PUT /v1/admin/products/{id}/specs
Section titled “PUT /v1/admin/products/{id}/specs”Replace product specifications
Parameters:
idin path (string, required).
Request body: ReplaceProductSpecsAdminDto.
Responses:
200: Specifications replaced.400: Invalid input, duplicate or empty folded key.401: Unauthorized.403: Insufficient permissions.404: Product not found.
GET /v1/admin/products/{id}/stock
Section titled “GET /v1/admin/products/{id}/stock”Stock for every variant of a product
Parameters:
idin path (string, required).
Responses:
200: Stock returned.401: Unauthorized.403: Insufficient permissions.404: Product not found.
POST /v1/admin/products/{id}/variants
Section titled “POST /v1/admin/products/{id}/variants”Create product variant
Parameters:
idin path (string, required).
Request body: CreateProductVariantAdminDto.
Responses:
201: Variant created.400: Invalid input.401: Unauthorized.403: Insufficient permissions.404: Product not found.
DELETE /v1/admin/products/{id}/variants/{variantId}
Section titled “DELETE /v1/admin/products/{id}/variants/{variantId}”Delete product variant
Parameters:
idin path (string, required).variantIdin path (string, required).
Responses:
204: Variant deleted.401: Unauthorized.403: Insufficient permissions.404: Variant not found.409: Cannot delete last variant.
PATCH /v1/admin/products/{id}/variants/{variantId}
Section titled “PATCH /v1/admin/products/{id}/variants/{variantId}”Update product variant
Parameters:
idin path (string, required).variantIdin path (string, required).
Request body: UpdateProductVariantAdminDto.
Responses:
200: Variant updated.400: Invalid input.401: Unauthorized.403: Insufficient permissions.404: Variant not found.
PATCH /v1/admin/products/bulk/prices
Section titled “PATCH /v1/admin/products/bulk/prices”Bulk update variant prices
Request body: BulkUpdatePricesAdminDto.
Responses:
204: Prices updated.400: Invalid input.401: Unauthorized.403: Insufficient permissions.
PATCH /v1/admin/products/bulk/status
Section titled “PATCH /v1/admin/products/bulk/status”Bulk update product statuses
Request body: BulkUpdateStatusAdminDto.
Responses:
204: Statuses updated.400: Invalid input.401: Unauthorized.403: Insufficient permissions.
Schemas
Section titled “Schemas”AssetAssignmentDto
Section titled “AssetAssignmentDto”assetId(string, required).sortOrder(number, min 0, required).isPrimary(boolean, required).
BulkPriceItemDto
Section titled “BulkPriceItemDto”variantId(string, required).price(number, min 0, required).
BulkUpdatePricesAdminDto
Section titled “BulkUpdatePricesAdminDto”items(array of BulkPriceItemDto, required).
BulkUpdateStatusAdminDto
Section titled “BulkUpdateStatusAdminDto”productIds(array of string, required).status(object, required).
CreateProductAdminDto
Section titled “CreateProductAdminDto”name(TranslatableDto, required).slug(string, pattern/^[a-z0-9]+(?:-[a-z0-9]+)*$/, optional).description(OptionalContentTranslatableDto, optional).shortDescription(OptionalContentTranslatableDto, optional).status(object, optional).productTypeId(string, optional).brand(string, optional).tags(array of string, optional).isFeatured(boolean, optional).isDigital(boolean, optional).sortOrder(number, min 0, optional).metaTitle(OptionalContentTranslatableDto, optional).metaDescription(OptionalContentTranslatableDto, optional).categoryIds(array of string, optional).assetIds(array of string, optional).variants(array of CreateProductVariantAdminDto, optional).
CreateProductFaqAdminDto
Section titled “CreateProductFaqAdminDto”question(TranslatableDto, required).answer(TranslatableDto, required).sortOrder(number, min 0, optional).
CreateProductVariantAdminDto
Section titled “CreateProductVariantAdminDto”sku(string, required).price(number, min 0, required).compareAtPrice(number, min 0, optional).costPrice(number, min 0, optional).weight(number, min 0, optional).length(number, min 0, optional).width(number, min 0, optional).height(number, min 0, optional).barcode(string, optional).isDefault(boolean, optional).isActive(boolean, optional).maxDownloads(number, min 1, optional).downloadExpiryDays(number, min 1, optional).licenseKey(string, optional).attributeValueIds(array of string, optional).
OptionalContentTranslatableDto
Section titled “OptionalContentTranslatableDto”default(string, optional).fr(string, optional).en(string, optional).ar(string, optional).
ProductSpecItemAdminDto
Section titled “ProductSpecItemAdminDto”label(TranslatableDto, required).value(TranslatableDto, required).
ReplaceProductSpecsAdminDto
Section titled “ReplaceProductSpecsAdminDto”specs(array of ProductSpecItemAdminDto, required).
TranslatableDto
Section titled “TranslatableDto”default(string, required).fr(string, optional).en(string, optional).ar(string, optional).
UpdateProductAdminDto
Section titled “UpdateProductAdminDto”UpdateProductAssetsAdminDto
Section titled “UpdateProductAssetsAdminDto”assets(array of AssetAssignmentDto, required).