---
title: "Create a catalog product (step 1 — all 7 types)"
method: POST
path: "/catalog/products"
tags: ["Admin Catalog: Products"]
---

# Create a catalog product (step 1 — all 7 types)

`POST /catalog/products`

## Request

- Base URL: `http://localhost:8000/api/admin`
- URL: `http://localhost:8000/api/admin/catalog/products`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/bagisto/apis/bagisto-admin-api/docs/catalog/products/post.ts> (a function with typed inputs; its response is checked against the schema)

Mirrors the Bagisto admin Create-Product wizard step 1: only sku + attribute_family_id + type are submitted (plus super_attributes when type=configurable). Name, description, price, inventories, etc. are added in the step-2 update endpoint (Phase 5.9). Accepts type ∈ {simple, virtual, downloadable, grouped, bundle, configurable, booking}. For type=configurable, super_attributes is required and must be a non-empty map of attribute code (or id) → option_ids — the core repository generates the full Cartesian-product of variants. For booking, the 5 sub-types (default/appointment/event/rental/table) are configured during step-2 update. Returns the full AdminCatalogProduct detail payload — most fields will be null because only sku/type/family are populated yet. Fires catalog.product.create.before and catalog.product.create.after.

## Request body

- object
  - `sku` string, required
  - `attribute_family_id` integer, required
  - `type` 'simple' | 'virtual' | 'downloadable' | 'grouped' | 'bundle' | 'configurable' | 'booking'
  - `super_attributes` object: Required when type=configurable. Map of attribute code (or id) to non-empty list of option_ids.

## Response `201`

Product created. Returns the full AdminCatalogProduct payload (most fields null at this point — step 2 update populates them).

## Other responses

- `400`: Invalid input
- `401`: Missing or invalid admin token.
- `403`: Admin role lacks catalog.products.create.
- `422`: Validation failed (missing sku / family / unsupported type / duplicate sku / invalid slug / unknown family / missing or invalid super_attributes for configurable).

---

[API](https://skmtc.dev/bagisto/apis/bagisto-admin-api.md) - [All operations](https://skmtc.dev/bagisto/apis/bagisto-admin-api/llms.txt) - [OpenAPI document](https://skmtc.dev/bagisto/apis/bagisto-admin-api/revisions/3198f11be70f?raw)
