Update a product
Updates the product. All fields are optional; omitted fields are left unchanged.
The cross_sells field uses replace semantics: omit the field entirely to leave
cross-sells unchanged, send [] to clear all, or send a list to replace entirely.
Mutation endpoints return the base product shape — default_price,
representative_price, and prices_count are omitted; use GET to retrieve them.
Authorizations
A merchant secret key (sk_…) sent as Authorization: Bearer <key>.
Headers
A unique key that makes retries safe: the same key with the same request body returns the original response instead of repeating the operation.
255Path Parameters
The product id (prod_…).
Body
Product name.
Product description.
Set to false to archive the product.
Image URLs. Schemes javascript:, data:, and vbscript: are rejected.
Custom key-value metadata. Max 50 keys; keys up to 40 characters; values up to 500 characters.
Unit displayed at checkout (e.g. seat, hour, license).
Product kind.
digital, physical, service, donation, other Cross-sell recommendations. Omit to leave unchanged; send [] to clear; send a list to replace entirely.
Response
The updated product.
Product id (prod_…).
product true for live mode, false for test mode.
The product's default price (price_…), or null if none is set.
Unit displayed at checkout.
digital, physical, service, donation, other Unix epoch seconds.
Unix epoch seconds.
Inline-expanded default price. Present on GET and list responses; omitted on mutation endpoints (create, update, set_default_price).
Display-only fallback populated when no default is set but exactly one price exists. Present on GET and list responses; omitted on mutation endpoints. Must not be treated as the assigned default.
Total number of prices on this product. Present on GET and list responses; omitted on mutation endpoints.

