Products API
Create, read, update, and delete products.
Overview
The Products API lets you manage your product catalog programmatically. All endpoints are under /api/admin/products.
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /api/admin/products | List products with pagination, search, and filters |
POST | /api/admin/products | Create a new product |
GET | /api/admin/products/[id] | Get a single product with variants and images |
PUT | /api/admin/products/[id] | Update a product |
DELETE | /api/admin/products/[id] | Delete a product |
Query parameters
The list endpoint supports these query parameters:
searchβ search by name, SKU, vendor, or tagsstatusβ filter by status (ACTIVE, DRAFT, ARCHIVED)typeβ filter by product typestorefrontβ filter by storefront assignmentpageandlimitβ pagination
Storefront Products API
The public-facing products API at /api/products returns only active, published products. It's used by the storefront to render product listing and detail pages.
Example: create a product
curl https://yourdomain.com/api/admin/products \
-X POST \
-H "Authorization: Bearer kat_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Solitaire Engagement Ring",
"slug": "solitaire-engagement-ring",
"description": "1.0 ct round brilliant in 18k white gold",
"status": "ACTIVE",
"price": 4800.00,
"compareAtPrice": 5400.00,
"sku": "ENG-SOL-100-18W",
"vendor": "House",
"tags": ["engagement", "solitaire", "diamond"],
"variants": [
{ "title": "Size 5", "sku": "ENG-SOL-100-18W-5", "price": 4800.00, "stock": 1 },
{ "title": "Size 6", "sku": "ENG-SOL-100-18W-6", "price": 4800.00, "stock": 1 },
{ "title": "Size 7", "sku": "ENG-SOL-100-18W-7", "price": 4800.00, "stock": 1 }
]
}'Response shape
{
"id": "prod_01HX1A...",
"slug": "solitaire-engagement-ring",
"name": "Solitaire Engagement Ring",
"status": "ACTIVE",
"price": "4800.00",
"currency": "USD",
"createdAt": "2026-04-23T18:31:09.412Z",
"variants": [ /* ... */ ],
"images": [],
"seo": { "title": null, "description": null }
}Example: JavaScript / TypeScript
const res = await fetch("https://yourdomain.com/api/admin/products?status=ACTIVE&limit=50", {
headers: { Authorization: `Bearer ${process.env.KATURA_API_KEY}` },
});
const { data, pagination } = await res.json();
console.log(`Page ${pagination.page} of ${pagination.totalPages}`);Bulk operations
For catalog migrations and recurring imports, use the bulk endpoint:
POST /api/admin/products/bulkβ array of up to 500 products per call. Returns per-row success/error.POST /api/admin/products/importβ CSV upload via multipart form. Returns a job ID; poll/api/admin/jobs/[id]for status.
