Update a product variant
Update a product variant's details.
Update a product variant's details.
To update inventory directly, you may pass stock at the top level. It is treated as an alias for deliverable.data.stock when the nested value is not present.
Updates require a token with the listing ability. Send the last updated_at you read as expected_updated_at to avoid overwriting someone else's edit. If the variant has changed since then, the API returns 422 and leaves it unchanged. The compatibility PUT method accepts the same partial request as PATCH.
Authorization
bearerAuth storeAuth Provide your SellApp API key as a bearer token.
In: header
Select the SellApp store for this API request.
In: header
Path Parameters
The product path parameter.
The variant path parameter.
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
curl -X PATCH "https://sell.app/api/v2/products/120/variants/4321" \ -H "Content-Type: application/json" \ -d '{ "title": "Monthly membership plus", "description": "One annotated operating memo and a monthly founder discussion." }'{
"data": {
"id": 4321,
"product_id": 120,
"title": "Monthly membership plus",
"description": "One annotated operating memo and a monthly founder discussion.",
"deliverable": {
"types": [
"MANUAL"
],
"data": {
"stock": null,
"comment": "We will send your reading-room invitation.",
"removeDuplicate": false,
"parsingMode": "COMMA"
}
},
"pricing": {
"humble": false,
"frequency": {
"value": 1,
"interval": "MONTH"
},
"type": "SINGLE_PAYMENT",
"price": {
"price": "1999",
"currency": "USD"
}
},
"minimum_purchase_quantity": 1,
"maximum_purchase_quantity": null,
"bulk_discount": [],
"payment_methods": [
"STRIPE"
],
"other_settings": {
"quantity_increments": 0,
"discord_data_required": false,
"discord_kick_on_expire": true,
"community_servers": []
},
"order": 1,
"created_at": "2026-08-30T12:00:01.000000Z",
"updated_at": "2026-08-30T12:00:01.000000Z",
"deleted_at": null,
"product": {
"additional_information": []
}
}
}{
"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"
}