Restore a promotion
Restore a soft-deleted promotion retained for order history.
Only promotions retained because historical phases are referenced can be restored. Send the complete current promotion definition and a new ordered phases array. Historical soft-deleted phases stay deleted and are never reactivated. Fully orphaned promotions are permanently purged during deletion and return 404 afterward.
Provide your SellApp API key as a bearer token.
In: header
Path Parameters
The promotion 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.
Request Body
application/json
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 POST "https://sell.app/api/v2/promotions/0/restore" \ -H "X-STORE: launch-lab" \ -H "Content-Type: application/json" \ -d '{ "name": "Ship Week", "status": "active", "starts_at": "2026-08-01T00:00:00Z", "ends_at": "2026-08-08T00:00:00Z", "priority": 1, "is_stackable": false, "max_redemptions": 500, "phases": [ { "discount_type": "percentage", "discount_value": "20", "ends_at": "2026-08-04T00:00:00Z", "max_redemptions": 200, "minimum_amount": "10" }, { "discount_type": "fixed", "discount_value": "5", "ends_at": null, "max_redemptions": null, "minimum_amount": "25" } ] }'{
"data": {
"name": "Ship Week",
"status": "active",
"starts_at": "2026-08-01T00:00:00Z",
"ends_at": "2026-08-08T00:00:00Z",
"priority": 1,
"is_stackable": false,
"max_redemptions": 500,
"phases": [
{
"discount_type": "percentage",
"discount_value": "20",
"ends_at": "2026-08-04T00:00:00Z",
"max_redemptions": 200,
"minimum_amount": "10",
"id": 101,
"promotion_id": 1,
"sort_order": 1
},
{
"discount_type": "fixed",
"discount_value": "5",
"ends_at": null,
"max_redemptions": null,
"minimum_amount": "25",
"id": 102,
"promotion_id": 1,
"sort_order": 2
}
],
"id": 1,
"created_at": "2026-08-30T12:00:01.000000Z",
"updated_at": "2026-08-30T12:00:01.000000Z",
"deleted_at": null
}
}{
"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"
}