Create Product
POST/api/products
Create a new product.
products:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token.
Required fields: sku (unique), type Product types: standard, bundle, kit, matrix Weight units: kg, lb, oz, g Dimension units: cm, in, mm, ft
For bundle/kit products, components[] is required and must contain at least one component (each entry has id and quantity). Saving a bundle or kit with an empty components array (or without providing one when creating, or when changing type to bundle/kit) returns a 422 validation error on the components field.
For matrix products (parent), include variations[] with sku and attributes.
Optional field: mpn (string, max 255, nullable) — manufacturer part number.
Optional field: hts_code (string, max 255, nullable) — Harmonized Tariff Schedule code.
Returns 422 validation error if SKU already exists or other validation fails.
Note (pricing tiers): When sending suppliers[].pricing[] entries with operation: updateOrCreate (or omitted), price is required and must be a numeric value >= 0 and < 100000. To remove a tier, send operation: "delete". Sending price: null will return a 422 validation error on suppliers.{i}.pricing.{j}.price.
Lot tracking fields (optional):
is_lot_tracked(boolean, nullable) — enable batch/lot tracking for this product.lot_tracking_method(string, nullable) — required whenis_lot_trackedis true. Allowed values:fifo(First-In, First-Out),fefo(First-Expiry, First-Out).
Stock unit of measure (optional):
stock_uom_id(integer, nullable) — id of a row inunits_of_measure. When omitted, the product is auto-assignedEACHas its stock UoM on create. PickKG,L, etc. for bulk weight or volume products so quantities, purchase orders, sales orders, and stock takes use the correct unit from day one.
Requires permission: products.create
Also accepts expiration_offset_months (integer 0-120, nullable) — the product's default FBA-inbound shelf-life estimate in months; blank uses the app default (10). Responses include it too.
Request
Responses
- 201
- 401
- 403
- 422
- 429
Created
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Unprocessable Entity
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.