curl --request POST \
--url https://api.fanvue.com/v1/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/cancel \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/cancel"
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>'
}
};
fetch('https://api.fanvue.com/v1/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/cancel', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"uuid": "5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
"status": "active",
"cancelAtPeriodEnd": true,
"expiresAt": "2026-07-19T08:30:00.000Z"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}Cancel a creator's checkout-link subscription at the period end
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.
curl --request POST \
--url https://api.fanvue.com/v1/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/cancel \
--header 'Authorization: Bearer <token>' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>'import requests
url = "https://api.fanvue.com/v1/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/cancel"
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>'
}
};
fetch('https://api.fanvue.com/v1/creators/{creatorUserUuid}/checkout-links/subscriptions/{uuid}/cancel', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"uuid": "5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
"status": "active",
"cancelAtPeriodEnd": true,
"expiresAt": "2026-07-19T08:30:00.000Z"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}write:creator— Modify creator profiles, settings, and creator-specific data.
Authorizations
OAuth 2.0 access token, presented as a JWT bearer token in the Authorization header. Obtain a token via the authorization-code flow; the scopes granted to the token determine which operations it may call.
Headers
API version to use for the request
"2025-06-26"
Path Parameters
Fanvue subscription identifier.
Response
Subscription set to cancel at the period end
Fanvue's unique subscription identifier.
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.
active, expired True when the subscription is set to end (not renew) at its period end.
End of the current paid period: when access ends, or the next renewal date.
Was this page helpful?