Catalog Product — Create (step 1)
Creates a new catalog product — mirrors the Bagisto admin Create-Product wizard step 1. Only the bare-minimum fields are accepted at this step; everything else (name, description, price, inventories, images, variants, booking slots, etc.) is added through the Update endpoint.
Configurable products are created in a single call here, unlike the admin panel's two-screen flow: pass super_attributes with the create and the store generates the full cartesian product of variants from the option ids you supply.
Endpoint
| Endpoint | Method |
|---|---|
/api/admin/catalog/products | POST |
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
sku | string | yes | Unique product SKU. Slug-validated. |
attribute_family_id | integer | yes | Existing attribute family ID. |
type | string | yes | One of simple, virtual, downloadable, grouped, bundle, configurable, booking. |
super_attributes | object | conditional | Required when type=configurable. Map of attribute code (or id) → non-empty list of option ids. e.g. { "color": [1, 2], "size": [6, 7] }. |
For every type except configurable, the body is just sku + attribute_family_id + type. Configurable additionally requires super_attributes.
Booking products
type=booking creates the parent booking product. The 5 sub-types (default / appointment / event / rental / table) and their slots or tickets are configured during the Update call.
Response
201 Created, returning the same 55-key payload as Product Detail — not a slim confirmation object. The examples on this page are trimmed to the fields that carry a value; everything else comes back null because only sku, type, and attribute_family_id exist yet.
For configurable, the generated variants are already populated, so you can read each variant id straight out of the create response when filling in per-variant pricing.
Errors
| HTTP | Detail |
|---|---|
401 | Unauthenticated. |
403 | You do not have permission to manage products. — the token lacks catalog.products.create |
422 | The sku field is required. |
422 | The sku has already been taken. |
422 | Product type "nope" is not supported by this API. Allowed types: simple, virtual, downloadable, grouped, bundle, configurable, booking. |
422 | The super_attributes field is required when type=configurable. … |
Validation stops at the first failure, so a body with two problems reports only one.
After Creating
The product exists but is unusable — it has no name, no price, and status: null, so it will not appear on the storefront. Follow with PUT /api/admin/catalog/products/{id} to populate the rest; see Update for the per-type structure payloads (variants, bundle options, links, booking slots and tickets).

