# Quote 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)

Fix the rate of a desk order for about a minute: a stablecoin to a bank account (to_bank), or local currency from a bank to a stablecoin (from_bank).

## Overview

- Give `fromAmount` or `toAmount`, not both. The direction follows the assets: a stablecoin as `fromAsset` is `to_bank`, a desk currency as `fromAsset` is `from_bank`.
- The quote holds until `quoteExpiresAt`: confirm it before then ([Confirm an Order](https://docs.aureahub.com/docs/desk-confirm.md)), otherwise `409` `BANK_RAMP_QUOTE_EXPIRED` and a new quote.
- The desk's own refusals answer `422`: `BANK_RAMP_AMOUNT_BELOW_MINIMUM`, `BANK_RAMP_AMOUNT_ABOVE_MAXIMUM` or `BANK_RAMP_NOT_OFFERED`.
- The answer is the order in `prepared`.

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/quotes`

Authentication: bearer token required.

Quotes a desk order; the rate holds for about a minute. 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).

**Request body**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `fromAsset` | string | yes | What the user gives |
| `toAsset` | string | yes | What the user receives |
| `fromAmount` | string | no | How much the user gives |
| `toAmount` | string | no | How much the user receives |
| `isTestnet` | boolean | no | `true` for the sandbox; `false` or omitted for production |

**Responses**

`201` Quoted

```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": null,
  "status": "prepared",
  "failureCode": null,
  "proofRejectedReason": null,
  "refundStatus": null,
  "expiresAt": null,
  "createdAt": "2026-10-23T09:00:00.000Z",
  "updatedAt": "2026-10-23T09:00:00.000Z"
}
```

`403` Not verified

```json
{
  "statusCode": 403,
  "error": "ForbiddenError",
  "message": "The user's verification with the bank ramp is not complete.",
  "details": {
    "code": "BANK_RAMP_KYC_REQUIRED"
  }
}
```

`422` Past the limit

```json
{
  "statusCode": 422,
  "error": "ValidationError",
  "message": "This would take this user KES past its limit of 300000.00 in 24 hours (290000.00 used).",
  "details": {
    "code": "BANK_RAMP_LIMIT_EXCEEDED",
    "asset": "KES"
  }
}
```

---

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