---
title: "Cancel the subscription"
method: POST
path: "/api/v1/subscription/cancel"
tags: ["Subscription"]
---

# Cancel the subscription

`POST /api/v1/subscription/cancel`

## Request

- Base URL: `https://www.poster.ly`
- URL: `https://www.poster.ly/api/v1/subscription/cancel`
- Auth: HTTP bearer

Cancel the authenticated user posterly subscription. A `reason` from the fixed catalog is required, matching the dashboard flow. By default an active or trialing plan cancels at the end of the current period. A past due or unpaid plan always ends now, and the unpaid renewal is dropped. Pass `immediate: true` to end an active plan now. Requires the `billing:write` scope. Bypasses the API add-on paywall.

## Request body

- CancelSubscriptionRequest
  - `reason` 'too_expensive' | 'not_using' | 'missing_features' | 'technical_issues' | 'switching_service' | 'temporary_break' | 'other', required: Why the user is cancelling. Required; ask the user before calling.
  - `feedback` string: Optional free-text detail from the user.
  - `immediate` boolean: Cancel immediately instead of at period end.

## Response `200`

Subscription cancellation applied.

- CancelSubscriptionResponse
  - `success` true, required
  - `immediate` boolean, required
  - `canceled_at` string, date-time, nullable
  - `cancel_at_period_end` boolean, required

## Other responses

- `400`: Validation error
- `401`: Invalid or missing API key
- `403`: Request is authenticated but not allowed
- `404`: Resource not found
- `429`: Too many requests

---

[API](https://skmtc.dev/poster/apis/posterly-api.md) · [All operations](https://skmtc.dev/poster/apis/posterly-api/llms.txt) · [OpenAPI document](https://skmtc.dev/poster/apis/posterly-api/revisions/60be02a61f95?raw)
