Skip to content

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

EndpointMethod
/api/admin/catalog/productsPOST

Request body

FieldTypeRequiredNotes
skustringyesUnique product SKU. Slug-validated.
attribute_family_idintegeryesExisting attribute family ID.
typestringyesOne of simple, virtual, downloadable, grouped, bundle, configurable, booking.
super_attributesobjectconditionalRequired 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

HTTPDetail
401Unauthenticated.
403You do not have permission to manage products. — the token lacks catalog.products.create
422The sku field is required.
422The sku has already been taken.
422Product type "nope" is not supported by this API. Allowed types: simple, virtual, downloadable, grouped, bundle, configurable, booking.
422The 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).

Released under the MIT License.