---
title: "Uncancel Subscription"
method: POST
path: "/api/v1/subscriptions/{id}/uncancel"
tags: ["Subscriptions"]
---

# Uncancel Subscription

`POST /api/v1/subscriptions/{id}/uncancel`

Reverses a scheduled subscription cancellation. The subscription must be in `cancellation_scheduled` status. This will restore the subscription to its previous status (typically `active` or `trialing`) and reschedule any billing runs that were aborted. For paid subscriptions, a valid payment method is required.

## Path parameters

- `id` string, required

## Response `200`

Successful response

- object
  - `subscription` union, required
    - object
      - `id` string, required
      - `createdAt` integer, required — Epoch milliseconds.
      - `updatedAt` integer, required — Epoch milliseconds.
      - `livemode` boolean, required
      - `startDate` integer, required — Epoch milliseconds.
      - `customerId` string, required
      - `organizationId` string, required
      - `status` 'trialing' | 'active' | 'past_due' | 'unpaid' | 'cancellation_scheduled' | 'incomplete' | 'incomplete_expired' | 'canceled' | 'paused', required
      - `defaultPaymentMethodId` string, nullable, required
      - `backupPaymentMethodId` string, nullable, required
      - `trialEnd` integer, nullable — Epoch milliseconds.
      - `currentBillingPeriodStart` integer, nullable — Epoch milliseconds.
      - `currentBillingPeriodEnd` integer, nullable — Epoch milliseconds.
      - `metadata` Metadata — JSON object
      - `canceledAt` integer, nullable — Epoch milliseconds.
      - `cancelScheduledAt` integer, nullable — Epoch milliseconds.
      - `cancellationReason` string, nullable, required
      - `replacedBySubscriptionId` string, nullable, required
      - `isFreePlan` boolean, nullable, required
      - `doNotCharge` boolean, nullable, required
      - `priceId` string, required
      - `runBillingAtPeriodStart` boolean, nullable, required
      - `interval` 'day' | 'week' | 'month' | 'year', required
      - `intervalCount` integer, required — A positive integer
      - `billingCycleAnchorDate` integer, nullable — Epoch milliseconds.
      - `name` string, nullable, required
      - `renews` true, required
      - `pricingModelId` string, required
      - `current` boolean, required — Whether the subscription is current (statuses "active", "trialing", "past_due", or "cancellation_scheduled")
    - object
      - `id` string, required
      - `createdAt` integer, required — Epoch milliseconds.
      - `updatedAt` integer, required — Epoch milliseconds.
      - `livemode` boolean, required
      - `startDate` integer, required — Epoch milliseconds.
      - `customerId` string, required
      - `organizationId` string, required
      - `status` 'active' | 'canceled' | 'credit_trial', required
      - `defaultPaymentMethodId` string, nullable, required
      - `backupPaymentMethodId` string, nullable, required
      - `trialEnd` unknown, required
      - `currentBillingPeriodStart` unknown, required
      - `currentBillingPeriodEnd` unknown, required
      - `metadata` Metadata — JSON object
      - `canceledAt` integer, nullable — Epoch milliseconds.
      - `cancelScheduledAt` integer, nullable — Epoch milliseconds.
      - `cancellationReason` string, nullable, required
      - `replacedBySubscriptionId` string, nullable, required
      - `isFreePlan` boolean, nullable, required
      - `doNotCharge` boolean, nullable, required
      - `priceId` string, required
      - `runBillingAtPeriodStart` boolean, nullable, required
      - `interval` unknown, required
      - `intervalCount` unknown, required
      - `billingCycleAnchorDate` unknown, required
      - `name` string, nullable, required
      - `renews` false, required
      - `pricingModelId` string, required
      - `current` boolean, required — Whether the subscription is current (statuses "active", "trialing", "past_due", "cancellation_scheduled", or "credit_trial")

## Other responses

- `400` — Invalid input data
- `401` — Authorization not provided
- `403` — Insufficient access
- `500` — Internal server error

## Changes

- **2026-01-11** `599bbd902d65` — 6 info
  - response property `subscription/oneOf[#/components/schemas/NonRenewingSubscriptionRecord]/priceId` list-of-types was narrowed by removing types `null` from media type `application/json` of response `200`
  - response property `subscription/oneOf[#/components/schemas/StandardSubscriptionRecord]/priceId` list-of-types was narrowed by removing types `null` from media type `application/json` of response `200`
  - added the required property `subscription/oneOf[#/components/schemas/NonRenewingSubscriptionRecord]/doNotCharge` to the response with the `200` status
  - added the required property `subscription/oneOf[#/components/schemas/NonRenewingSubscriptionRecord]/pricingModelId` to the response with the `200` status
  - …2 more
- **2025-12-08** `d53efdb1a902` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/flowglad/apis/flowglad-api/changes/api/v1/subscriptions/:id/uncancel/post.md)

---

[API](https://skmtc.dev/flowglad/apis/flowglad-api.md) · [All operations](https://skmtc.dev/flowglad/apis/flowglad-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/flowglad/flowglad-api/revisions/06c4dd78e137/schema)
