A valid request URL is required to generate request examples{
"id": "<string>",
"object": "product",
"merchant_id": "<string>",
"name": "<string>",
"description": "<string>",
"active": true,
"images": [
"<string>"
],
"metadata": {},
"livemode": true,
"default_price_id": "<string>",
"unit_label": "<string>",
"product_kind": "digital",
"cross_sells": [
{
"price_id": "<string>",
"intent": "standard"
}
],
"created_at": 123,
"updated_at": 123,
"default_price": {
"id": "<string>",
"object": "price",
"product_id": "<string>",
"merchant_id": "<string>",
"unit_amount": 123,
"currency": "<string>",
"type": "one_time",
"active": true,
"nickname": "<string>",
"metadata": {},
"livemode": true,
"created_at": 123,
"updated_at": 123,
"recurring": {
"interval": "day",
"interval_count": 123,
"usage_type": "licensed"
}
},
"representative_price": {
"id": "<string>",
"object": "price",
"product_id": "<string>",
"merchant_id": "<string>",
"unit_amount": 123,
"currency": "<string>",
"type": "one_time",
"active": true,
"nickname": "<string>",
"metadata": {},
"livemode": true,
"created_at": 123,
"updated_at": 123,
"recurring": {
"interval": "day",
"interval_count": 123,
"usage_type": "licensed"
}
},
"prices_count": 123
}{
"error": {
"code": "INVALID_REQUEST",
"message": "invalid request body"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "PRODUCT_NOT_FOUND",
"message": "product not found"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}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.
A valid request URL is required to generate request examples{
"id": "<string>",
"object": "product",
"merchant_id": "<string>",
"name": "<string>",
"description": "<string>",
"active": true,
"images": [
"<string>"
],
"metadata": {},
"livemode": true,
"default_price_id": "<string>",
"unit_label": "<string>",
"product_kind": "digital",
"cross_sells": [
{
"price_id": "<string>",
"intent": "standard"
}
],
"created_at": 123,
"updated_at": 123,
"default_price": {
"id": "<string>",
"object": "price",
"product_id": "<string>",
"merchant_id": "<string>",
"unit_amount": 123,
"currency": "<string>",
"type": "one_time",
"active": true,
"nickname": "<string>",
"metadata": {},
"livemode": true,
"created_at": 123,
"updated_at": 123,
"recurring": {
"interval": "day",
"interval_count": 123,
"usage_type": "licensed"
}
},
"representative_price": {
"id": "<string>",
"object": "price",
"product_id": "<string>",
"merchant_id": "<string>",
"unit_amount": 123,
"currency": "<string>",
"type": "one_time",
"active": true,
"nickname": "<string>",
"metadata": {},
"livemode": true,
"created_at": 123,
"updated_at": 123,
"recurring": {
"interval": "day",
"interval_count": 123,
"usage_type": "licensed"
}
},
"prices_count": 123
}{
"error": {
"code": "INVALID_REQUEST",
"message": "invalid request body"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "PRODUCT_NOT_FOUND",
"message": "product not found"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Authorizations
A merchant secret key (sk_…) sent as Authorization: Bearer <key>.
Headers
Merchant ID when an authorized Platform acts for a connected Merchant. Omit when authenticating directly as that Merchant.
^mer_[0-9A-Za-z]{14}$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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
Response
The updated product.
Product id (prod_…).
product ID of the account that owns the product (mer_…).
Product name.
Product description.
false when the product is archived.
Image URLs for the product.
Custom key-value pairs for your use.
Show child attributes
Show child attributes
true for live mode, false for test mode.
The product's default price (price_…), or null if none is set.
Unit displayed at checkout.
The kind of product, used to suggest checkout defaults. The fields a buyer completes are set on the payment link.
digital, physical, service, donation, other Cross-sell recommendations attached to the product, up to 10.
Show child attributes
Show child attributes
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).
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
Total number of prices on this product. Present on GET and list responses; omitted on mutation endpoints.

