SUQODocs
User GuideAPI ReferenceSDKs

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

POST
/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

POST
/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

POST
/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.

FieldTypeRequiredConstraints
subscription_idstring (UUID)YesMust belong to the seller
next_billing_cycledate (YYYY-MM-DD)YesToday 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.

On this page