---
title: "Cancel a creator's checkout-link subscription at the period end"
method: POST
path: "/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/cancel"
---

# Cancel a creator's checkout-link subscription at the period end

`POST /creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/cancel`

## Request

- Base URL: `https://api.fanvue.com`
- URL: `https://api.fanvue.com/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/cancel`
- Auth: OAuth 2
  - Authorization code: `https://auth.fanvue.com/oauth2/auth`
  - Token URL: `https://auth.fanvue.com/oauth2/token` scopes: `write:creator`

Stop the specified subscription from renewing. The fan keeps access until `expiresAt` — the response's `status` stays `active` with `cancelAtPeriodEnd: true` — and the subscription then ends without a further charge. Emits the `checkout_link.subscription.cancel_at_period_end_changed` webhook. Returns 400 if the subscription is already set to cancel, and 404 if it does not exist, has ended, or does not belong to this creator.

Cancelling a subscription in payment retry — a failed renewal Fanvue is still reattempting — stops further charge attempts immediately. The response then reflects the already-ended access (`status: expired`), and no webhook is emitted: the `checkout_link.subscription.deactivated` event already fired when the failed renewal ended the subscription.

## Path parameters

- `creatorUserUuid` string, uuid, required
- `uuid` string, uuid, required: Fanvue subscription identifier.

## Headers

- `X-Fanvue-API-Version` string, required

## Response `200`

Subscription set to cancel at the period end

- object
  - `uuid` string, required: Fanvue's unique subscription identifier.
  - `status` 'active' | 'expired', required: Access state of the subscription, matching the `checkout_link.subscription.*` webhooks: `active` means the fan currently has access (including subscriptions scheduled to cancel at the period end — check `cancelAtPeriodEnd`), `expired` means access has ended. Revoke access only on `expired`.
  - `cancelAtPeriodEnd` boolean, required: True when the subscription is set to end (not renew) at its period end.
  - `expiresAt` string, date-time, required: End of the current paid period: when access ends, or the next renewal date.

## Other responses

- `400`: Bad Request - API version not supported OR validation failed OR invalid UUID
- `401`: Unauthorized Response
- `403`: Unauthorized Response
- `404`: Not Found Response
- `410`: API version no longer supported (sunset)
- `429`: Too many requests - rate limit exceeded

## Changes

- **2026-08-30** `dce5621fe589`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/fanvue/apis/fanvue-api/changes/creators/:creatorUserUuid/checkout-links/subscriptions/:uuid/cancel/post.md)

---

[API](https://skmtc.dev/fanvue/apis/fanvue-api.md) - [All operations](https://skmtc.dev/fanvue/apis/fanvue-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fanvue/apis/fanvue-api/revisions/966260af2770?raw)
