Billing
Cancel the plan at the end of the period
Sets the subscription to end with the period already paid for.
POST
/user/billing/cancelTL;DR
| Question | Answer |
|---|---|
| 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.
| Field | Type | Required | Description |
|---|---|---|---|
reason | string | no | Why 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
| Status | Meaning | Body |
|---|---|---|
| 200 | The account's plan after the change. | BillingState |
| 400 | The body is not valid. | ErrorResponse |
| 401 | Not signed in. | ErrorResponse |
| 403 | The request came from an origin that may not make changes. | ErrorResponse |
| 409 | There is no paid plan to cancel, or it is already set to end. | ErrorResponse |
| 429 | Too many requests. | ErrorResponse |
| 502 | Stripe could not complete the request. | ErrorResponse |
| 503 | Billing is not set up on this server. | ErrorResponse |
Response body
A 200 answer has the type BillingState.
| Field | Type | Required | Description |
|---|---|---|---|
plan | "free" | "pro" | yes | The plan the account gets right now. It is the free plan whenever the subscription is not paying, whatever plan was bought. |
status | string | yes | Stripe's status for the subscription (active, trialing, past_due, canceled, unpaid, incomplete, and so on), or none when the account never started one. |
currentPeriodEnd | integer | null | yes | When the period paid for ends, in milliseconds since the epoch, or null when there is no subscription. |
cancelAtPeriodEnd | boolean | yes | True while the subscription is scheduled to end at the close of the period already paid for. |
hasCustomer | boolean | yes | True once the account has billing details at Stripe, which is when the billing portal can be opened. |
See also
| Doc | Why |
|---|---|
| API reference | Every endpoint, and the error envelope |
| Schemas | Every request and response type |
| Tool reference | The operations as callable tools |