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

MethodPathDescription
GET/api/admin/productsList products with pagination, search, and filters
POST/api/admin/productsCreate 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 tags
  • status β€” filter by status (ACTIVE, DRAFT, ARCHIVED)
  • type β€” filter by product type
  • storefront β€” filter by storefront assignment
  • page and limit β€” 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.

Was this article helpful?

Products API β€” CRUD Operations & Endpoints | K99