Skip to content
Connect an agent
Billing

Cancel the plan at the end of the period

Sets the subscription to end with the period already paid for.

POST/user/billing/cancel

TL;DR

QuestionAnswer
What does it do?Cancel the plan at the end of the period.
What does it take?A JSON body of type CancelBody.
What does it return?Status 200 with a body of type BillingState.
What can go wrong?400 the body is not valid; 401 not signed in; 403 the request came from an origin that may not make changes; 409 there is no paid plan to cancel, or it is already set to end; 429 too many requests; 502 stripe could not complete the request; 503 billing is not set up on this server. Every failure uses the one error envelope.

What it does

Sets the subscription to end with the period already paid for. Pro stays until then. The optional reason is sent to Stripe as the cancellation's comment and is not stored by Plotwork. 409 when there is no paid plan or it is already set to end.

Request body

The body has the type CancelBody.

FieldTypeRequiredDescription
reasonstringnoWhy the person is cancelling, in their own words. Optional. Sent to Stripe as the cancellation comment; Plotwork does not store it. at most 500 characters.

Responses

StatusMeaningBody
200The account's plan after the change.BillingState
400The body is not valid.ErrorResponse
401Not signed in.ErrorResponse
403The request came from an origin that may not make changes.ErrorResponse
409There is no paid plan to cancel, or it is already set to end.ErrorResponse
429Too many requests.ErrorResponse
502Stripe could not complete the request.ErrorResponse
503Billing is not set up on this server.ErrorResponse

Response body

A 200 answer has the type BillingState.

FieldTypeRequiredDescription
plan"free" | "pro"yesThe plan the account gets right now. It is the free plan whenever the subscription is not paying, whatever plan was bought.
statusstringyesStripe's status for the subscription (active, trialing, past_due, canceled, unpaid, incomplete, and so on), or none when the account never started one.
currentPeriodEndinteger | nullyesWhen the period paid for ends, in milliseconds since the epoch, or null when there is no subscription.
cancelAtPeriodEndbooleanyesTrue while the subscription is scheduled to end at the close of the period already paid for.
hasCustomerbooleanyesTrue once the account has billing details at Stripe, which is when the billing portal can be opened.

See also

DocWhy
API referenceEvery endpoint, and the error envelope
SchemasEvery request and response type
Tool referenceThe operations as callable tools