API ReferenceSubscriptions

Keep a subscription

Stop a scheduled cancellation so the subscription keeps renewing.

Use this endpoint to undo a cancellation scheduled for the end of the period. The subscription must still be active, still be scheduled to cancel, and its current period must not have ended. Check keep_subscription in the capabilities response first: a provider that cannot undo a scheduled cancellation reports it there. PayPal subscriptions and Razorpay trials scheduled to cancel at period end were already cancelled with the provider, so they can't be kept.

POST
/v2/subscriptions/{productSubscription}/actions/keep

Authorization

AuthorizationBearer <token>

Provide your SellApp API key as a bearer token.

In: header

Path Parameters

productSubscription*integer

The productSubscription path parameter.

Header Parameters

Idempotency-Key?string

A caller-generated key, unique per store and subscription lifecycle request. Sending it here is the same as sending idempotency_key in the body.

Lengthlength <= 128
X-STORE?string

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/subscriptions/55/actions/keep" \  -H "X-STORE: launch-lab" \  -H "Content-Type: application/json" \  -d '{}'
{
  "data": {
    "id": 101,
    "product_subscription_id": 55,
    "subscription_id": "sub_1QwertyExample",
    "action": "keep_subscription",
    "status": "confirmed",
    "provider": "stripe",
    "proration_order_id": null,
    "error": null,
    "customer_message": null,
    "confirmed_at": "2026-07-03T12:00:00.000000Z",
    "failed_at": null,
    "created_at": "2026-07-03T12:00:00.000000Z",
    "updated_at": "2026-07-03T12:00:00.000000Z"
  },
  "message": "Subscription will no longer be cancelled at the end of the current period."
}
{
  "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"
}