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

# One-off bank deposit status

> POST /v1/bank/deposit/status - follow a one-off bank deposit to settlement.

Returns where a one-off bank deposit stands. Poll it, or take the webhook - see
[Webhooks](/webhooks).

<Note>
  Needs the **bank permission** on your API key.
</Note>

## Request

<ParamField body="id" type="string" required>
  The deposit id from [POST /v1/bank/deposit](/api-reference/bank-deposit).
</ParamField>

## Response

<ResponseField name="id" type="string">
  The deposit id, echoed back.
</ResponseField>

<ResponseField name="status" type="string">
  One of `awaiting_funds`, `received`, `converting`, `settled`, `returned`,
  `expired`. See [Statuses](/transactions/statuses).
</ResponseField>

<ResponseField name="fiatAmount" type="string">
  What actually arrived, once received. Compare it with what you asked for - a
  user can send a different amount and it still settles.
</ResponseField>

<ResponseField name="cryptoAmount" type="string">
  What was delivered to the wallet, once settled.
</ResponseField>

<ResponseField name="cryptoCurrency" type="string">
  Which asset was delivered. Read it rather than assuming USDC.
</ResponseField>

<ResponseField name="settlementTxHash" type="string">
  The on-chain transaction that delivered the stablecoin.
</ResponseField>

<ResponseField name="reason" type="string">
  Present on `returned`: why the money went back.
</ResponseField>

<ResponseField name="updatedAt" type="string">
  ISO 8601 of the last change.
</ResponseField>

<Warning>
  **`expired` does not mean money was lost.** Details stop accepting new payments at
  `expiresAt`, but a transfer already in flight still settles and moves the deposit
  to `received`. Do not tell a user their payment failed on `expired` alone.
</Warning>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "$RHEON_API/v1/bank/deposit/status" \
    -H "Authorization: Bearer $RHEON_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "id": "bdp_3a71f0c9e4" }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "bdp_3a71f0c9e4",
    "status": "settled",
    "fiatAmount": "500.00",
    "cryptoAmount": "537.21",
    "cryptoCurrency": "USDC",
    "settlementTxHash": "0x11ae...90d2",
    "updatedAt": "2026-09-02T18:22:04Z"
  }
  ```
</ResponseExample>

## Errors

| HTTP | `code`              | When                                         |
| ---- | ------------------- | -------------------------------------------- |
| 400  | `invalid_request`   | `id` missing or malformed.                   |
| 401  | `unauthorized`      | Missing, malformed, or unknown API key.      |
| 403  | `permission_denied` | Your key does not carry the bank permission. |
| 404  | `not_found`         | No such deposit under your key.              |
| 429  | `rate_limited`      | Over your key's rate limit.                  |
| 502  | `upstream_error`    | The banking partner is unavailable.          |
| 500  | `internal`          | Unexpected server error.                     |
