# Confirm a Desk Order

> Coming soon, upon request — this feature is turned on for your tenant by the Aurea team. [Contact us](https://www.aureahub.com/contact)

Confirm a quoted desk order before its quote expires.

## Overview

- **to_bank**: name the `beneficiary` bank account (`name`, `bankName`, `accountNumber`, `branch`); the stablecoin is reserved on the user's balance (`409` `BANK_RAMP_ORDER_BALANCE_LOW` when it does not cover it).
- **The user's passkey.** A `to_bank` order is confirmed with the user's passkey step-up for `bank_ramp.payout`, in the `x-aurea-step-up` header ([Passkeys & Step-Up](https://docs.aureahub.com/docs/guide-passkeys.md) › Where It Is Asked): without it `403` `STEP_UP_REQUIRED`, with one that is not for this action `403` `STEP_UP_INVALID`. The same `Idempotency-Key` after an answer needs none.
- `409` `BANK_RAMP_PAYOUTS_HELD_RECONCILIATION`: a `to_bank` order while your tenant's payouts in that environment are held for a reconciliation of the bank ramp's ledger — try again later.
- `409` `BANK_RAMP_QUOTE_EXPIRED` past `quoteExpiresAt` (quote again), `BANK_RAMP_ORDER_NOT_PREPARED` for an order not waiting to be confirmed; `422` `BANK_RAMP_LIMIT_EXCEEDED` or `BANK_RAMP_VELOCITY_EXCEEDED` past your tenant's 24-hour limits; `423` when your tenant or the user is frozen.
- **from_bank**: the answer's `funding` says the account to pay, the **reference** to write on the payment, the amount and the `deadline`. The user pays from their bank, then you upload the receipt ([Upload a Proof](https://docs.aureahub.com/docs/desk-proof-upload.md)).

Called with the user's access token, in one environment (`isTestnet`). See [Bank Ramp: Desk Orders](https://docs.aureahub.com/docs/guide-bank-desk.md).

## Endpoint

### `POST /v1/ramp/bank/customer/desk/orders/{id}/confirm`

Authentication: bearer token required.

Confirms a quoted desk order. Send an Idempotency-Key header: the same key with the same body answers with the first answer, with the response header idempotency-replayed: true (see Idempotency).

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string (uuid) | yes | The record's `id` |

**Query parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `isTestnet` | boolean | no | `true` for the sandbox; `false` or omitted for production |

**Request body**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `beneficiary` | object | no | to_bank only: `name`, `bankName`, `accountNumber` (up to 200, 200 and 64 characters), `branch` (optional) |

**Responses**

`200` Funding

```json
{
  "id": "2b4d6f8a-0c1e-4a3c-9e5b-7d9f1b3d5f62",
  "environment": "production",
  "direction": "from_bank",
  "fromAsset": "MWK",
  "fromAmount": "500000",
  "toAsset": "USDT",
  "toAmount": "281.15",
  "rate": "1778.41",
  "quoteExpiresAt": "2026-10-23T09:01:00.000Z",
  "beneficiary": null,
  "funding": {
    "bankName": "Example Bank Malawi",
    "accountName": "Your Company Ltd",
    "accountNumber": "1002003004",
    "reference": "AUR-7K2Q9M",
    "amount": "500000",
    "asset": "MWK",
    "deadline": "2026-10-24T09:00:00.000Z"
  },
  "status": "awaiting_funds",
  "failureCode": null,
  "proofRejectedReason": null,
  "refundStatus": null,
  "expiresAt": "2026-10-24T09:00:00.000Z",
  "createdAt": "2026-10-23T09:00:00.000Z",
  "updatedAt": "2026-10-23T09:00:02.000Z"
}
```

`409` Quote expired

```json
{
  "statusCode": 409,
  "error": "ConflictError",
  "message": "The quote has expired: ask for a new one",
  "details": {
    "code": "BANK_RAMP_QUOTE_EXPIRED"
  }
}
```

---

Web version: https://docs.aureahub.com/#desk-confirm
