---
title: "Execute payout quote"
method: POST
path: "/api/v1/balance/payout/quote/execute"
tags: ["Balance"]
---

# Execute payout quote

`POST /api/v1/balance/payout/quote/execute`

Execute a persisted quote the account authorized with a signature over the `executionContract` that submit returned. Which channel settles it follows from the quote itself.

## Headers

- `x-api-key` string, nullable

## Request body

- ExecutePayoutQuoteRequest — Execute a persisted the banking provider fiat payout quote. Authorized by the smart wallet's ERC-1271 signature over the quote's `executionContract.typedData`.
  - `quoteId` string, required — The `quoteId` the quote was issued under — the same one submit was called with, since submit answers with no id of its own — or the SHA-256 of the quote amount, recipient and idempotency key that the signed typed data names. Both address the same quote. Every id we issue is a bare one of ours: no channel prefix and no provider marker, whichever rail priced it.
  - `signature` ClientSignature, required — Client's answer to a signing request, sent with ``/quote/submit``.
    - `signature` string, required
    - `scheme` 'eip712' | 'eip1271' — How the client's signature over an order payload is produced.
    - `txHash` string, nullable

## Response `200`

Successful Response

- SubmitPayoutQuoteResponse
  - `status` string, required
  - `executionContract` ExecutionContract — Everything the client needs to execute one quote. One format for every channel: crypto routes carry deposit / transaction / order instructions, the banking provider fiat payouts carry the typed data to sign and the arguments that reproduce the quote hash. ``canonical_payload`` pins what was quoted — the provider payload persisted with a crypto route (``/submit`` relays from it, never from client input), or the canonical JSON a the banking provider quote id is hashed from.
    - `mode` 'deposit_address' | 'transaction' | 'order_signature' | 'message_signature', required — How a quoted route gets executed by the client.
    - `depositAddress` string, nullable
    - `depositMemo` string, nullable
    - `depositAmount` string, nullable
    - `depositToken` string, nullable
    - `approval` TokenApproval — ERC-20 allowance the route needs before it can be executed. Present only when the wallet's current allowance is short — the adapters read it on-chain, so a client that already approved gets ``None``.
      - `token` string, required
      - `spender` string, required
      - `amount` string, required
      - `transaction` EvmTransactionRequest, required — An EVM transaction the client signs and broadcasts from its wallet.
        - `chainId` integer, required
        - `to` string, required
        - `data` string, required
        - `value` string
        - `gasLimit` string, nullable
    - `transaction` EvmTransactionRequest — An EVM transaction the client signs and broadcasts from its wallet.
      - `chainId` integer, required
      - `to` string, required
      - `data` string, required
      - `value` string
      - `gasLimit` string, nullable
    - `typedData` Eip712SigningRequest — Typed data the client signs off-chain, plus its pre-computed digest. ``types`` deliberately omits ``EIP712Domain``: ethers v5 rejects it and viem does not need it. ``digest`` is the full EIP-712 hash — an EOA signs it directly, the Base smart wallet signs its replay-safe wrapping and returns the wrapped ERC-1271 bytes.
      - `domain` object, required
      - `types` object, required
      - `primaryType` string, required
      - `message` object, required
      - `digest` string, required
      - `signingScheme` 'eip712' | 'eip1271' — How the client's signature over an order payload is produced.
    - `hashAlgorithm` 'sha256', nullable
    - `canonicalization` 'sorted-json-v1', nullable
    - `hashArguments` PayoutQuoteHashArguments — Typed arguments used to derive a the banking provider payout quote ID.
      - `amount` string, required
      - `recipient` FiatPayoutRecipient, required
        - `rail` 'us' | 'swift', required
        - `type` 'individual' | 'business', required
        - `bankAddress` FiatPayoutAddress, required
          - `addressLine1` string, required
          - `city` string, required
          - `country` string, required
          - `addressLine2` string, nullable
          - `state` string, nullable
          - `postalCode` string, nullable
        - `postalAddress` FiatPayoutAddress, required
          - `addressLine1` string, required
          - `city` string, required
          - `country` string, required
          - `addressLine2` string, nullable
          - `state` string, nullable
          - `postalCode` string, nullable
        - `accountNumber` string, nullable
        - `routingNumber` string, nullable
        - `accountType` 'checking' | 'savings', nullable
        - `iban` string, nullable
        - `bic` string, nullable
        - `bankName` string, nullable
        - `firstName` string, nullable
        - `lastName` string, nullable
        - `legalName` string, nullable
        - `phone` string, nullable
      - `idempotencyKey` string, required
      - `paymentReference` string, nullable
      - `documentIds` string[], nullable
    - `canonicalPayload` union
      - AerodromeSettlementPayload — Canonical Aerodrome path pinned when the pool is quoted.
        - `routes` AerodromeRoutePayload[], required
          - `from` string, required
          - `to` string, required
          - `stable` boolean, required
          - `factory` string, required
        - `amount_in` string, required
        - `amount_out_min` string, required
        - `recipient` string, required
        - `token` string, required
        - `chain_id` integer, required
        - `tick_spacing` integer, nullable
      - LifiSettlementPayload — Canonical LiFi transaction and approval inputs.
        - `transaction` EvmTransactionRequest, required — An EVM transaction the client signs and broadcasts from its wallet.
          - `chainId` integer, required
          - `to` string, required
          - `data` string, required
          - `value` string
          - `gasLimit` string, nullable
        - `spender` string, required
        - `token` string, required
        - `amount` string, required
      - CowSwapSettlementPayload — Canonical CoW order and relay metadata.
        - `order` CowOrder, required — The order the trader signs and the order book stores. Built verbatim from what ``POST /quote`` returned (plus the receiver) — the backend never recomputes CoW's fee or price math.
          - `sellToken` string, required
          - `buyToken` string, required
          - `receiver` string, required
          - `sellAmount` string, required
          - `buyAmount` string, required
          - `validTo` integer, required
          - `appData` string, required
          - `feeAmount` string
          - `kind` 'sell' | 'buy' — Which side of the order is fixed.
          - `partiallyFillable` boolean
          - `sellTokenBalance` 'erc20' | 'external' | 'internal' — Where the tokens are sourced from / delivered to.
          - `buyTokenBalance` 'erc20' | 'external' | 'internal' — Where the tokens are sourced from / delivered to.
        - `chain_id` integer, required
        - `owner` string, required
        - `quote_id` integer, nullable
        - `sell_amount_total` string, required
      - AlignSettlementPayload — Canonical Align destination selected at quote time.
        - `destination_address` string, required
      - string
    - `requiresExecution` boolean, required

## Other responses

- `422` — Validation Error

## Changes

- **2026-08-27** `7ed1b58c5607` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/hevn-inc/apis/hevn-api/changes/api/v1/balance/payout/quote/execute/post.md)

---

[API](https://skmtc.dev/hevn-inc/apis/hevn-api.md) · [All operations](https://skmtc.dev/hevn-inc/apis/hevn-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/hevn-inc/hevn-api/revisions/7ed1b58c5607/schema)
