Create a product
Creates a new product. Supports nested variants with prices and option types.
Option types and values are auto-created if they don’t exist. Prices are upserted by currency. Stock items are upserted by stock location.
Required scope: write_products (for API-key authentication).
Authorizations
Secret API key for admin access
JWT token for admin user authentication
Headers
Bearer token for admin authentication
Body
"Premium T-Shirt"
Identities the record has in external systems, keyed by system: the same { system: external_id } map the Admin API renders, so what you read can be sent straight back. Systems you do not name keep the reference they have. A list of { system, external_id } entries is accepted too.
Rich text HTML. Reads come back as this (plain text) plus description_html.
The values listed are the built-in ones; extensions may add more.
draft, active, archived The product type this product is created from (pt_...). Its option types and categories seed onto the product and its custom field definitions drive the product form. Editing the type later never rewrites existing products.
The delivery profile deciding how this product ships (fp_...); null falls back to the store default.
Manual collections this product belongs to. Automatic collections are kept as they are, since their rules decide membership.
Shorthand for a simple (no-options) product: per-currency prices that forward to the product's sole variant. For products with options, set prices per variant under variants instead. Don't pass both.
Custom field values, each validated against its definition.
Media written with the product. Entries with id update an existing asset; entries with signed_id attach a fresh upload; an external video needs only its URL.
Downloadable files written with the product. Each entry carries a signed_id (an upload to private storage) or a provider_type (a provider-backed asset), and attaches to the default variant unless variant_id is given. An id updates that asset in place, so replaying the list does not duplicate it; removal uses the nested digital assets endpoint.
Every purchasable attribute (sku, prices, stock, weight, dimensions) lives on variants. An entry without options upserts onto the default variant of a simple product; pass id to update an existing variant.
Response
product created
The values listed are the built-in ones; extensions may add more.
draft, active, archived, proposed, rejected 
