Skip to main content
Granular endpoints are designed for low-latency changes between complete snapshots. They look up one caller-owned ID inside its parent scope and write only the affected rows. They do not rebuild or compare the complete catalog.

Create a product

Creation endpoints require Idempotency-Key.
The returned product exposes its price directly. There is no SKU field.

Update one product

PATCH uses merge semantics. Omitted fields remain unchanged. Explicit null clears nullable fields such as description and image_url. Supplying modifier_group_ids replaces that product’s complete group relationship list. Supplying restrictions: [] or price_overrides: [] clears those rules.

Categories

Use /categories to list and create categories, then /categories/{category_id} to retrieve, patch, or delete one category. A category still containing products or bundles cannot be deleted and returns 409 catalog_resource_in_use.

Modifier groups and modifiers

Groups live under /modifier_groups. Individual modifiers live under /modifier_groups/{modifier_group_id}/modifiers, which means the same modifier ID may be reused in another group.
Modifiers support the same disabled, out_of_stock, restrictions, and price_overrides fields as products. A modifier group attached to a product cannot be deleted until the relationship is removed from that product.

Bundles

Bundles reference public product_ids, never SKUs. When lines is present in a bundle PATCH, it atomically replaces only that bundle’s lines.
Bundles support the same disabled, out_of_stock, restrictions, and price_overrides fields. Products referenced by bundle lines cannot be deleted until those references are removed.

Pagination and errors

Collection endpoints accept limit, starting_after, and ending_before and return the standard { "object": "list", "data": [], "has_more": false, "url": "…" } envelope. See Pagination, Errors, and Idempotency.