Cancel, resume, or reschedule a subscription
Schedule a cancellation, undo one, or move the next billing date.
Three write operations on an existing subscription: schedule a cancellation, undo one, or change when it next bills.
None of them apply to one-time purchases.
Cancel a subscription
/api/v1/subscriptions/{id}/cancel/No request body. Cancellation is scheduled, not immediate: it takes effect at the end of the current billing period, and the subscription stays usable until then. The status moves to pending_cancellation and becomes cancelled when the period actually ends.
Status: 200 OK
{ "message": "Subscription will be cancelled at the end of the current billing period." }So the buyer keeps what they have already paid for, and no future renewal is charged. Past payments are not refunded.
A scheduled cancellation can be undone at any point before the period ends — see Resume below.
Resume a subscription
/api/v1/subscriptions/{id}/resume/No request body. Undoes a scheduled cancellation and returns the subscription to active. A subscription that is already active is returned unchanged rather than erroring, so this is safe to call without checking the status first.
Status: 200 OK
{ "message": "Subscription resumed." }Resume only reverses a scheduled cancellation. Once the period has ended and the status is cancelled, there is nothing to resume — create a new subscription instead.
Move the next billing date
/api/v1/subscriptions/update-billing-cycle/This is a collection-level action — the subscription id goes in the body, not the path. One-time purchases cannot be rescheduled.
| Field | Type | Required | Constraints |
|---|---|---|---|
subscription_id | string (UUID) | Yes | Must belong to the seller |
next_billing_cycle | date (YYYY-MM-DD) | Yes | Today or future |
{
"subscription_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"next_billing_cycle": "2026-09-01"
}Status: 200 OK
{ "message": "Billing cycle updated." }What the buyer sees
All three operations move the subscription between statuses, and each transition emits a subscription.status_changed webhook.
Errors
The 400s for both operations are listed under Errors → Managing a subscription.