Update a product
Update a product's details.
Update a product's details. Use an API key with the listing ability or OAuth with products:write. The account needs the matching store permission, and the product must be in the selected store.
To prevent overwriting a newer dashboard or API change, send expected_updated_at with the exact updated_at value from the product you last retrieved. A stale snapshot is rejected with a validation error.
Provide your SellApp API key as a bearer token.
In: header
Path Parameters
The product path parameter.
Header Parameters
Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://sell.app/api/v2/products/120" \ -H "X-STORE: launch-lab" \ -H "Content-Type: application/json" \ -d '{ "title": "Design kit", "description": "Templates for your next project.", "visibility": "HIDDEN", "expected_updated_at": "2026-08-30T12:00:00.000000Z" }'{
"data": {
"id": 120,
"title": "Design kit",
"slug": "founder-memo-circle",
"description": "Templates for your next project.",
"images": [
{
"path": "store/1/listings/NM6TBKIMzpFJq1MKTV24oMJ1W4UrKCo7NS98nt4K.png",
"metadata": {
"size": 39289,
"filename": "NM6TBKIMzpFJq1MKTV24oMJ1W4UrKCo7NS98nt4K",
"extension": "png",
"mime_type": "image/png"
}
},
{
"path": "store/1/listings/ov6XMb68tRr80zl7sqfN1or7xfqqH5WbZygDEQ8X.png",
"metadata": {
"size": 422373,
"filename": "ov6XMb68tRr80zl7sqfN1or7xfqqH5WbZygDEQ8X",
"extension": "png",
"mime_type": "image/png"
}
}
],
"order": 1,
"visibility": "HIDDEN",
"delivery_text": "Thanks for your purchase. Your download is ready.",
"additional_information": [
{
"required": true,
"key": "3aecffd000e00e2211e94558007ffc37",
"type": "checkbox",
"label": "Do you agree to the purchase terms?"
}
],
"other_settings": {
"faq": [
{
"answer": "Yes. Adapt the included templates to your project.",
"question": "Can I use these templates for my own project?"
}
],
"video_url": "https://example.com/launch-lab/product-tour",
"redirect_url": "https://example.com/post-launch?customer_email=[customer_email]&order_id=[order_id]",
"product_title": "Project Launch Kit",
"product_description": "Plan, test, and launch your next project."
},
"deleted_at": null,
"created_at": "2024-01-09T22:56:49.000000Z",
"updated_at": "2026-08-30T12:00:01.000000Z",
"store_id": 1,
"category_id": null,
"section_id": null,
"section_order": null,
"is_discoverable": true,
"variants": [
{
"id": 4321,
"title": "Monthly membership"
}
],
"url": "https://launch-lab.sell.app/product/founder-memo-circle"
}
}{
"type": "invalid_request_error",
"code": "bad_request",
"message": "The request could not be understood.",
"status": 400,
"param": null,
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#bad-request"
}{
"type": "authentication_error",
"code": "unauthenticated",
"message": "Unauthenticated.",
"status": 401,
"param": null,
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#unauthenticated"
}{
"type": "authorization_error",
"code": "forbidden",
"message": "This action is unauthorized.",
"status": 403,
"param": null,
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#forbidden"
}{
"type": "not_found_error",
"code": "resource_not_found",
"message": "Not Found.",
"status": 404,
"param": null,
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#resource-not-found"
}{
"type": "validation_error",
"code": "validation_failed",
"message": "The selected product variant id is invalid.",
"status": 422,
"param": "product_variant_id",
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#validation-failed",
"errors": {
"product_variant_id": [
"The selected product variant id is invalid."
]
}
}{
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Too Many Attempts.",
"status": 429,
"param": null,
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#rate-limit-exceeded"
}{
"type": "api_error",
"code": "api_error",
"message": "Server Error",
"status": 500,
"param": null,
"request_id": "01992a65-e064-71ba-b38f-902b7966a6be",
"docs_url": "https://sell.app/docs/api/errors#api-error"
}