Products
Read and write products in your catalog.
List products
GET/api/v1/products
Scope: products:read. Returns a paginated list.
Query parameters
limit,offset— paginationsearch— fuzzy match on name, SKU, barcodestatus—active|draft|archivedcategory— category idcreatedAfter,createdBefore
curlcurl "https://axisel.com/api/v1/products?status=active&limit=20" \ -H "Authorization: Bearer sk_live_..."
Get a product
GET/api/v1/products/:id
Create a product
POST/api/v1/products
Scope: products:write.
curlcurl -X POST https://axisel.com/api/v1/products \ -H "Authorization: Bearer sk_live_..." \ -H "Content-Type: application/json" \ -d '{ "name": "Cardigan Sweater", "price": 89.00, "sku": "CARD-001", "description": "Wool blend, machine washable.", "stock": 50, "status": "active" }'
Body fields
name(required) — display nameprice,salePrice,costPricesku,barcode,brand,descriptionstock— initial stock (ignored ifvariantsset; totals are computed)variants— array of{ color, size, stock, sku }categoryId— category to assignimages— array of{ url, linkedColor }or plain URL stringsstatus—active|draft|archivedtags— array of strings
Update a product
PUT/api/v1/products/:id
Partial update — only the fields you pass are touched. Variant-level stock changes go through Inventory instead.
Delete a product
DELETE/api/v1/products/:id
Returns 204 No Content on success.
Product object
json{ "id": "67e0...", "name": "Cardigan Sweater", "slug": "cardigan-sweater", "type": "single", "productType": "physical", "sku": "CARD-001", "price": 89, "salePrice": null, "stock": 50, "reserved": 3, "available": 47, "status": "active", "categoryId": "67df...", "images": [{ "url": "https://.../img.jpg", "linkedColor": null }], "variants": [], "tags": ["wool", "winter"], "publishedToMarketplace": true, "isRefundable": true, "createdAt": "2026-05-21T12:30:00.000Z", "updatedAt": "2026-05-21T12:30:00.000Z" }