---
title: "Withdraw from the contract (consumers)"
method: POST
path: "/v1/billing/withdraw"
tags: ["Billing"]
---

# Withdraw from the contract (consumers)

`POST /v1/billing/withdraw`

## Request

- Base URL: `https://api.briefgate.dev`
- URL: `https://api.briefgate.dev/v1/billing/withdraw`
- Auth: HTTP bearer

Records the customer's withdrawal and cancels the subscription immediately. A withdrawal is a statement the customer makes, not a request we grant, so it is recorded even outside the 14 days — `within_window` says whether it was late. A reason is optional by law and is never required. The refund amount is computed automatically from what Stripe actually charged and returned in `refund`; the Stripe refund itself is still issued by hand, to the original payment method, within 14 days.

## Request body

- object
  - `reason` string

## Response `202`

Withdrawal recorded

- object
  - `id` string
  - `within_window` boolean
  - `subscription_canceled` boolean
  - `withdrawal_waived` boolean
  - `refund` object: What is owed back, computed from what Stripe actually charged.
    - `amount_paid_cents` integer
    - `period_days` integer
    - `days_used` integer
    - `unused_sms_credit_cents` integer
    - `refund_cents` integer
    - `needs_review` boolean: True if Stripe could not be read and this figure is a 0-filled placeholder needing a manual check.
  - `message` string

## Other responses

- `400`: No paid subscription to withdraw from
- `401`: Missing or invalid API key

---

[API](https://skmtc.dev/briefgate/apis/briefgate-api.md) · [All operations](https://skmtc.dev/briefgate/apis/briefgate-api/llms.txt) · [OpenAPI document](https://skmtc.dev/briefgate/apis/briefgate-api/revisions/b21afed4748b?raw)
