Skip to main content

Withdrawal & Cancellation

Overview​

Lumio accepts withdrawal declarations for plans and paid extension purchases, and cancellation declarations for plan and paid extension subscriptions. The public withdrawal and cancellation forms work without signing in. A signed-in member can select a contract from every channel they may manage. The options are grouped by channel, and the forms also offer Other contract for a free-text reference. The forms share the legal layout.

Each submission is stored with its receipt time before any Stripe operation. The confirmation shows a short case reference and the Europe/Berlin receipt time; a receipt is sent to the address entered on the form. Repeating a submission with the same client_request_id returns the original declaration. The ID is bound to that declaration: reused for another channel, contract, kind or sender it is refused with IDEMPOTENCY_KEY_REUSED and returns no receipt. The entered receipt address is stored on the declaration, not on the user's profile.

Withdrawal​

/withdraw collects the declarant's name, email address and contract. A signed-in member may select an eligible plan or extension purchase from any manageable channel. The form has a review step that repeats the entries before submission. A signed-out declaration needs a contract description and Turnstile verification. Signed-in withdrawals, including Other contract, do not use Turnstile. Every withdrawal remains open for an operator to review. A refund, when due, is issued by hand in Stripe; submitting the form does not refund a payment automatically.

The signed-in contract list includes extension purchases within 14 days of the purchase, or up to 12 months and 14 days without a recorded waiver. The plan is listed within 14 days of its recorded waiver; without a recorded waiver it is always listed, because Lumio does not store the plan's start date. The operator checks the deadline when handling the declaration. Other contract remains available even when no listed contract qualifies.

Cancellation​

/cancel is the confirmation page: choose a plan or extension subscription from any manageable channel, or describe another contract, then choose ordinary or extraordinary cancellation, the requested effective time, and the receipt address. An extraordinary cancellation needs a reason. Signed-out and signed-in Other contract submissions use the public form and Turnstile. Already cancelled subscriptions cannot be selected again.

An ordinary signed-in subscription cancellation records the declaration and asks Stripe to cancel at period end. If Stripe is unavailable, the receipt still succeeds and a background worker retries for seven days; the declaration remains open for operator follow-up if retries do not succeed. An extraordinary request and every signed-out cancellation wait in the operator queue without an automatic Stripe change. The paid subscription remains active until Stripe applies the cancellation. The receipt of an ordinary signed-in cancellation is sent after the Stripe call and names the date the contract ends; only when that date is unknown (Stripe unavailable, or a signed-out declaration) does it say the contract ends at the end of the current paid period.

Operator handling​

The admin declaration queue lists open cases first. Operators can match a public declaration to a plan or extension purchase, mark a case processed or rejected, record a manually issued refund reference, and extend its retention for a legal hold. The queue covers all accounts and requires admin-scoped permissions.

API and audit​

REST endpoints and GraphQL twins are listed in the REST API and GraphQL API. Withdrawal and cancellation declarations, operator decisions, matching and retention extensions write audit events. A public declaration has system scope because there is no authenticated user or account; an authenticated declaration uses its account or user scope.