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

# Cancel Subscription

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

## Path parameters

- `id` string, required

## Request body

- object
  - `cancellation` union, required
    - object
      - `timing` 'at_end_of_current_billing_period', required
    - object
      - `timing` 'immediately', 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
      - `scheduledAdjustmentAt` integer, nullable — Epoch milliseconds.
      - `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
      - `scheduledAdjustmentAt` integer, nullable — Epoch milliseconds.
      - `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

---

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