# Execute a Binding Quote

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

Carries out one of the user's binding quotes on chain, exactly as it was signed.

## Overview

- The quote must be the user's, `attested`, and have time left to be mined (at least 12 seconds on chain `1`, 3 on chain `56`). The user's eligibility and the asset are checked again, then what the chain says (below) — before anything is signed. A refusal there marks the quote `failed`.
- **A wallet Aurea signs for** (custodial): signed and sent at once; `201` with the operation `submitted` or `completed` — or `failed`, when a transaction reverted (`failureCode`, for example `TOKENIZED_ASSETS_PRICE_MOVED`).
- **A wallet its owner signs for** (non-custodial or MPC): `201` with the operation `attested` and its `steps` — an exact approval of the payment, when the allowance does not cover it, then the trade (`purpose` `approve_reset`, `approve`, `mint` for a buy, `redeem` for a sale). Sign each step's `txHashToSign` and send the signatures to [Send Signatures](https://docs.aureahub.com/docs/tok-operation-broadcast.md) before `signingExpiresAt` (the quote's expiry, less the time to be mined). Such a wallet needs a long quote (`409` `TOKENIZED_ASSETS_QUOTE_TOO_SHORT`); use a [limit order](https://docs.aureahub.com/docs/tok-limit-order.md) otherwise. See [Who Signs](https://docs.aureahub.com/docs/guide-tokenized-assets.md).
- Takes an `Idempotency-Key`; with one, a refusal after the first signature leaves the key unusable (`409` `IDEMPOTENCY_OUTCOME_UNKNOWN`): read the operation, and retry with a new key. 10 a minute. User token and the tenant signature ([Calling the Routes](https://docs.aureahub.com/docs/guide-tokenized-assets.md)); for `user`, `owner`, `tenantadmin` and `signer`, for themselves (another role: `403`).

## Errors

Besides [the answers every tokenized assets route can give](https://docs.aureahub.com/docs/guide-tokenized-assets.md) (no valid token or signature, the module not set up or not switched on, a field that does not fit):

| Status | details.code | When |
| --- | --- | --- |
| 403 | — | The caller's role may not call it (`Your role does not have permission to perform this action.`). |
| 404 | TOKENIZED_ASSETS_QUOTE_NOT_FOUND | `There is no such quote of yours in this environment.` |
| 409 | TOKENIZED_ASSETS_QUOTE_NOT_EXECUTABLE | `This quote cannot be executed: it is not waiting to be.` (`details.status`, and `details.operationId` once executed); `This quote is being executed already.` |
| 409 | TOKENIZED_ASSETS_QUOTE_EXPIRED | `This quote has expired, or has too little time left to be carried out. Ask for a new one.` |
| 404 | TOKENIZED_ASSETS_ASSET_NOT_OFFERED | Your tenant does not offer the asset (any more). |
| 403 | TOKENIZED_ASSETS_… (eligibility) | The user's eligibility is read again: `COUNTRY_EXCLUDED`, `US_PERSON`, `NOT_APPROPRIATE`, `PROFESSIONAL_ONLY`, `PROSPECTUS_EXPIRED` or `ELIGIBILITY_INCOMPLETE` ([Binding Quote](https://docs.aureahub.com/docs/tok-quote-create.md)). |
| 409 | TOKENIZED_ASSETS_WALLET_NOT_REGISTERED | `The wallet that would hold the tokens is not registered for trading.` |
| 409 | TOKENIZED_ASSETS_WALLET_ACCOUNT_MISMATCH | `The quote was signed for another account than the wallet's: it cannot be used.` |
| 409 | TOKENIZED_ASSETS_WALLET_NOT_SIGNABLE | Nobody Aurea can have sign for the wallet the way it needs (`The registered wallet is not one the Hub signs for.`, `Nobody can sign for this wallet.`). |
| 409 | TOKENIZED_ASSETS_QUOTE_TOO_SHORT | `A wallet its owner signs for needs a long quote or a limit order: this quote does not last long enough to be signed.` (`details.duration`). |
| 409 | TOKENIZED_ASSETS_EXECUTION_UNAVAILABLE | `This operation is not available in this environment and chain.` — in the test environment, always today. |
| 503 | TOKENIZED_ASSETS_PROVIDER_UNEXPECTED_RESPONSE | The quote's signed terms cannot be carried out; the quote is `failed`. |
| 503 | TOKENIZED_ASSETS_CHAIN_UNAVAILABLE | `The chain cannot be reached for this tenant at the moment.` (`details.chainId`). |
| 409 | TOKENIZED_ASSETS_QUOTE_ALREADY_USED | `This quote has been used already.` |
| 409 | TOKENIZED_ASSETS_ASSET_NOT_ACCEPTED | `This asset cannot be traded at the moment.` |
| 409 | TOKENIZED_ASSETS_ASSET_PAUSED | `Trading in this asset is paused.` |
| 409 | TOKENIZED_ASSETS_QUOTE_EXPIRED | The chain's time is past the quote's. |
| 409 | TOKENIZED_ASSETS_MARKET_CLOSED | `The market is closed: try again when it opens.` |
| 409 | TOKENIZED_ASSETS_PRICE_OUT_OF_BOUNDS | `The price is outside the range the market accepts now. Ask for a new quote.` |
| 409 | TOKENIZED_ASSETS_WALLET_BLOCKED | `The wallet cannot hold or move this asset.` (a blocklist, sanctions). |
| 400 | TOKENIZED_ASSETS_ORDER_TOO_SMALL | `The amount is below the least the market takes for this operation.` |
| 409 | TOKENIZED_ASSETS_INSUFFICIENT_BALANCE | `The wallet does not hold enough to carry out this operation.` |
| 423 | TENANT_FROZEN, USER_FROZEN, ACCOUNT_FROZEN, WALLET_FROZEN | Something is frozen ([Freezes](https://docs.aureahub.com/docs/guide-freezes.md)); `503` `FREEZE_STATUS_UNREAD` when that cannot be read. |
| 403 / 423 / 503 | POLICY_… | Institutional tenants only: the tenant's policy refuses ([Policy Sets](https://docs.aureahub.com/docs/guide-policy-sets.md)); nothing is held for approval on these routes. |
| 503 | TOKENIZED_ASSETS_SIGNING_FAILED | Aurea could not sign for the wallet (`The wallet could not sign this operation.`); the operation is `failed`. |
| 400 | TOKENIZED_ASSETS_BROADCAST_REFUSED | The node refused the first transaction (`details.reason`: `insufficient_gas`, `nonce_conflict`, `reverted`, `rejected`); a server-signed operation is then `failed`. |

## Endpoint

### `POST /v1/tokenized-assets/quotes/{quoteId}/execute`

Authentication: bearer token required.

Carries out one of the user's binding quotes.

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `quoteId` | string | yes | A UUID. |

**Headers**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `Idempotency-Key` | string | no | Optional — required for a tenant on the institutional security profile (`400` `IDEMPOTENCY_KEY_REQUIRED` without it). Up to 255 letters, digits, - or _. The same key with the same request answers with the first answer (`idempotency-replayed: true`) instead of running it again; see [Idempotency](https://docs.aureahub.com/docs/idempotency.md) |

**Request body**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `isTestnet` | boolean | no | `true` for the test environment; `false` (the default) for production. |

**Responses**

`201` To Sign

```json
{
  "operationId": "5f0c2a7e-91d4-4b8e-a3c6-7d2e18b94f05",
  "kind": "trade",
  "status": "attested",
  "isTestnet": false,
  "symbol": "AAPLon",
  "chainId": 1,
  "side": "buy",
  "unit": "token",
  "tokenAmount": "2",
  "valueUsd": "508.62",
  "paymentToken": "USDC",
  "paymentAmount": "508.62",
  "wallet": "own",
  "signer": "client",
  "quoteId": "8b1e4f23-6c0a-4d7e-9f35-2a8c1b7e6d40",
  "order": null,
  "steps": [
    {
      "stepIndex": 0,
      "purpose": "approve",
      "txHashToSign": "0x6b1f…c4e2",
      "to": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "data": "0x095ea7b3…",
      "value": "0",
      "chainId": 1,
      "nonce": 41,
      "gasLimit": "65000",
      "maxFeePerGas": "31000000000",
      "maxPriorityFeePerGas": "1500000000"
    },
    {
      "stepIndex": 1,
      "purpose": "mint",
      "txHashToSign": "0x9e41…07bd",
      "to": "0x2c1d…9a07",
      "data": "0x…",
      "value": "0",
      "chainId": 1,
      "nonce": 42,
      "gasLimit": "700000",
      "maxFeePerGas": "31000000000",
      "maxPriorityFeePerGas": "1500000000"
    }
  ],
  "signingExpiresAt": "2026-10-07T15:07:50.000Z",
  "txHashes": [],
  "received": null,
  "failureCode": null,
  "createdAt": "2026-10-07T15:03:02.000Z",
  "updatedAt": "2026-10-07T15:03:02.000Z"
}
```

`201` Signed by Aurea

```json
{
  "operationId": "d41a6c2e-0b7f-4e95-8a13-5c9d2e7f1b60",
  "kind": "trade",
  "status": "completed",
  "isTestnet": false,
  "symbol": "AAPLon",
  "chainId": 1,
  "side": "sell",
  "unit": "token",
  "tokenAmount": "1.5",
  "valueUsd": "381.46",
  "paymentToken": "USDC",
  "paymentAmount": "381.46",
  "wallet": "own",
  "signer": "server",
  "quoteId": "77e2b0c9-1d4a-4f3e-8b65-0a9c2d7e3f18",
  "order": null,
  "steps": [],
  "signingExpiresAt": null,
  "txHashes": [
    "0xa1c2…3d4e",
    "0xb2d3…4e5f"
  ],
  "received": null,
  "failureCode": null,
  "createdAt": "2026-10-07T15:03:02.000Z",
  "updatedAt": "2026-10-07T15:03:19.000Z"
}
```

`409` Too Short

```json
{
  "statusCode": 409,
  "error": "ConflictError",
  "message": "A wallet its owner signs for needs a long quote or a limit order: this quote does not last long enough to be signed.",
  "details": {
    "code": "TOKENIZED_ASSETS_QUOTE_TOO_SHORT",
    "duration": "short"
  }
}
```

[Contact us for details](https://www.aureahub.com/contact).

---

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