> For the complete documentation index, see [llms.txt](https://noiho.gitbook.io/noiho/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://noiho.gitbook.io/noiho/developers/api-consumers/quotes-and-orders.md).

# Quotes and durable order creation

Sign exact quote terms and create one recoverable order with a stable idempotency key.

POST /v1/quotes accepts direction, amountAtomic and userAddress. For unwrap, also supply xmrAddress. Do not supply xmrAddress for wrap. The server validates the Monero address checksum and network.

```json
{"direction":"wrap","amountAtomic":"100000000000","userAddress":"0xYOUR_EOA_ADDRESS","slippageBps":50}
```

Replace example addresses with valid addresses. All XMR and XMRn amounts are decimal strings with 12 atomic decimals. Here, 100000000000 means 0.1 XMR. Use integer arithmetic, never floating point. slippageBps defaults to 50 and accepts 0–1000.

Quotes last five minutes. Sign the exact returned authorizationMessage with personal\_sign. It binds the deployment, direction, amount, minimum output, destination and expiry. Review those terms before requesting the signature.

> **Warning: A quote does not guarantee execution**
>
> Quotes are indicative and do not reserve liquidity. Wrap checks available LP token liquidity. Unwrap does not verify or reserve LP wallet liquidity. liquidityChecked: false and executionGuaranteed: false are limitations, not successful checks. gasEstimate: null does not mean zero gas.

Wrap minimum output applies during LP selection. Worse terms wait instead of silently reducing the signed floor. Changed wrap helper fees conflict with creation. Unwrap spread is the difference between tokens supplied and XMR requested, not a helper fee.

POST /v1/orders requires Idempotency-Key and the signed quote body. The key contains 8–128 letters, numbers or characters from .\_:-. Persist the quote, signature and key before submission.

```json
{"quoteId":"QUOTE_UUID","signature":"0xPERSONAL_SIGN_SIGNATURE"}
```

| Situation                                | Result                                 | Client action                                            |
| ---------------------------------------- | -------------------------------------- | -------------------------------------------------------- |
| Same key and body                        | The same durable order                 | Keep the returned orderId.                               |
| Changed body with an existing key        | 409 conflict                           | Do not replace an uncertain order with a new payment.    |
| Concurrent creation still pending        | 202 with a stable order ID             | Reconcile that order; reuse the original identity.       |
| Unused quote expired                     | 410                                    | Request and review a new quote before creating an order. |
| Accepted order replay after quote expiry | The existing order remains recoverable | Reuse the original key and body.                         |

> **Warning: Quote expiry is not transaction expiry**
>
> A quote cannot create a second order under another key. Expiry does not revoke an accepted deposit address. Unsigned transaction payloads have no on-chain quote-expiry guard. Review current terms again before signing a delayed transaction.
