> ## Documentation Index
> Fetch the complete documentation index at: https://bkey.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Deleting & reactivating an account

> Delete a user account, and restore it within 90 days. Deletion requires empty wallets, is reversible for a bounded window, and after that only support can undo it.

<div className="bmoni-spine">
  <span>Lifecycle</span>
  <a data-stage="1" href="/lifecycle#1-create-the-user">User</a>
  <a data-stage="2" href="/lifecycle#2-provision-the-smart-wallet">Wallet</a>
  <a data-stage="3" href="/lifecycle#3-verify-identity-kyc">KYC</a>
  <a data-stage="4" href="/lifecycle#4-activate-the-rail">Rail</a>
  <a data-stage="5" href="/lifecycle#5-fund-the-wallet">Fund</a>
  <a data-stage="6" href="/lifecycle#6-move-money">Move money</a>
</div>

Deleting a user deactivates the account rather than erasing it. For 90 days you can undo it with a single call; after that the account can only be restored by support.

***

## Delete the account

```http theme={null}
DELETE /v1/users/{userId}
x-api-key: <partner key>
```

```json theme={null}
{ "success": true, "message": "User deleted" }
```

**Every wallet must be empty first.** The account cannot be deleted while any wallet holds a balance:

```json theme={null}
{
  "code": "E101",
  "message": "Cannot deactivate account: You have active balances in your wallets. Please empty all wallets before deleting your account.",
  "statusCode": 400
}
```

Move the funds out first — see [Transfers](/api-reference/transfers) to send them to another user, or the withdrawal rail for the currency. Read balances with `GET /v1/users/{userId}/smart-wallets/account/balances`.

<Note>
  A `503` here means the balances could not be verified, not that the account has a balance. Nothing has been deleted — retry.
</Note>

### What deletion actually does

|                            | Effect                                                         |
| -------------------------- | -------------------------------------------------------------- |
| The account                | Deactivated, not erased. Data is retained.                     |
| Every user-scoped endpoint | Starts returning `404` for this user.                          |
| The deletion time          | Recorded, and it is what bounds the reactivation window below. |

Because the account is retained rather than erased, deletion is reversible — but only inside the window.

***

## Reactivate the account

```http theme={null}
POST /v1/users/{userId}/reactivate
x-api-key: <partner key>
```

```json theme={null}
{ "success": true, "message": "User reactivated" }
```

The account becomes active again and every user-scoped endpoint resumes working. Wallets, KYC state and transaction history are as they were — nothing was erased, so nothing has to be rebuilt.

| Condition                           | Response                              |
| ----------------------------------- | ------------------------------------- |
| Deleted **within** the last 90 days | `200` — account restored              |
| Deleted **more than** 90 days ago   | `400` — contact support               |
| Never deleted                       | `200` with `"User is already active"` |
| Unknown user                        | `404`                                 |
| Belongs to a different partner      | `403`                                 |

Past the window:

```json theme={null}
{
  "statusCode": 400,
  "message": "This account was deleted more than 90 days ago and can no longer be reactivated automatically. Please contact support.",
  "error": "Bad Request"
}
```

This is not retryable — surface it to the user as a support handoff rather than an error to try again.

<Note>
  The two `400`s above have different shapes, because they come from different places. The balance error originates upstream and is passed through with its `code` (`E101` for a validation error); the window error is raised by the proxy itself and carries `error` instead. Match on `statusCode` and the endpoint, not on the presence of `code`.
</Note>

<Warning>
  Do not treat deletion as a way to reset a user. Re-creating an account with the same phone number or email after deleting it does **not** produce a fresh account, and does not reactivate the old one. Use `POST /v1/users/{userId}/reactivate` to bring an account back, and only inside the 90 days.
</Warning>

***

## Choosing between delete and reactivate

Reactivation exists for the case where a user changes their mind, or the delete was a mistake. It is not a substitute for the ordinary flow:

* **The user wants to leave** — delete. If they return inside 90 days, reactivate.
* **The user wants a clean slate** — there is no such operation. Deletion retains the account, and the identifiers stay associated with it.
* **You deleted the wrong user** — reactivate immediately. The window is generous, but the sooner the better.

***

## Related

* [The integration lifecycle](/lifecycle) — the six stages an account moves through before it can be deleted
* [Transfers](/api-reference/transfers) — how to empty the wallets deletion requires
* [Integration flow](/api-reference/integration-flow) — request and response shapes for every user-scoped endpoint
