---
title: "Execute a quote"
method: POST
path: "/quotes/{quoteId}/execute"
tags: ["Cross-Currency Transfers"]
---

# Execute a quote

`POST /quotes/{quoteId}/execute`

Execute a quote by its ID. This endpoint initiates the transfer between
the source and destination accounts.

This endpoint can only be used for quotes with a `source` which is either an internal account,
or has direct pull functionality (e.g. ACH pull with an external account).

Once executed, the quote cannot be cancelled and the transfer will be processed.

## Path parameters

- `quoteId` string, required

## Response `200`

Quote confirmed successfully. The transfer has been initiated and
the quote status has been updated.

- Quote
  - `quoteId` string, required — Unique identifier for this quote
  - `status` 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'EXPIRED', required — Current status of the quote
  - `createdAt` string, date-time, required — When this quote was created
  - `expiresAt` string, date-time, required — When this quote expires (typically 1-5 minutes after creation)
  - `source` union, required
    - object — Source account details
      - `sourceType` 'ACCOUNT', required — Source type identifier
      - `accountId` string, required — Source account identifier
    - object — Fund the quote using a real-time funding source (RTP, SEPA Instant, Spark, Stables, etc.). This will require manual just-in-time funding using `paymentInstructions` in the response. Because quotes expire quickly, this option is only valid for instant payment methods. Do not try to fund a quote with a non-instant payment method (ACH, etc.).
      - `sourceType` 'REALTIME_FUNDING', required — Source type identifier
      - `customerId` string — Source customer ID. If this transaction is being initiated on behalf of a customer, this is required. If customerId is not provided, the quote will be created on behalf of the platform itself.
      - `currency` string, required — Currency code for the funding source. See [Supported Currencies](https://grid.lightspark.com/platform-overview/core-concepts/currencies-and-rails) for the full list of supported fiat and crypto currencies.
  - `destination` union, required
    - object — Destination account details
      - `destinationType` 'ACCOUNT', required — Destination type identifier
      - `accountId` string, required — Destination account identifier
      - `currency` string — Currency code for the destination account
    - object — UMA address destination details
      - `destinationType` 'UMA_ADDRESS', required — Destination type identifier
      - `umaAddress` string, required — UMA address of the recipient
      - `currency` string — Currency code for the destination
      - `counterpartyInformation` object — Information about the recipient, as required by the platform in their configuration.
  - `sendingCurrency` Currency, required
    - `code` string — Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. "BTC" for Bitcoin, "USDC" for USDC, etc.)
    - `name` string — Full name of the currency
    - `symbol` string — Symbol of the currency
    - `decimals` integer — Number of decimal places for the currency
  - `receivingCurrency` Currency, required
    - `code` string — Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. "BTC" for Bitcoin, "USDC" for USDC, etc.)
    - `name` string — Full name of the currency
    - `symbol` string — Symbol of the currency
    - `decimals` integer — Number of decimal places for the currency
  - `totalSendingAmount` integer, required — The total amount that will be sent in the smallest unit of the sending currency (eg. cents).
  - `totalReceivingAmount` integer, required — The total amount that will be received in the smallest unit of the receiving currency (eg. cents).
  - `exchangeRate` number, required — Number of sending currency units per receiving currency unit.
  - `feesIncluded` integer, required — The fees associated with the quote in the smallest unit of the sending currency (eg. cents).
  - `paymentInstructions` PaymentInstructions[] — Payment instructions for executing the payment. This is not required when using an internal account source.
    - `instructionsNotes` string — Additional human-readable instructions for making the payment
    - `isPlatformAccount` boolean — Indicates whether the account is a platform account or a customer account.
    - `accountOrWalletInfo` union, required
      - ClabeAccountInfo
        - `accountType` 'CLABE', required
        - `clabeNumber` string, required — 18-digit CLABE number (Mexican banking standard)
      - UsAccountInfo
        - `accountType` 'US_ACCOUNT', required
        - `accountNumber` string, required — US bank account number
        - `routingNumber` string, required — ACH routing number (9 digits)
        - `accountCategory` 'CHECKING' | 'SAVINGS', required — Type of account (checking or savings)
        - `bankName` string — Name of the bank
      - PixAccountInfo
        - `accountType` 'PIX', required
        - `pixKey` string, required — PIX key for Brazilian instant payments
        - `pixKeyType` 'CPF' | 'CNPJ' | 'EMAIL' | 'PHONE' | 'RANDOM', required — Type of PIX key being used
        - `taxId` string, required — Tax ID of the account holder
      - IbanAccountInfo
        - `accountType` 'IBAN', required
        - `iban` string, required — International Bank Account Number
        - `swiftBic` string, required — SWIFT/BIC code (8 or 11 characters)
      - UpiAccountInfo
        - `accountType` 'UPI', required
        - `vpa` string, required — Virtual Payment Address for UPI payments
      - SparkWalletInfo
        - `accountType` 'SPARK_WALLET', required
        - `address` string, required — Spark wallet address
      - object
        - `accountType` 'LIGHTNING', required
        - `invoice` string, required — Invoice for the payment
      - SolanaWalletInfo
        - `accountType` 'SOLANA_WALLET', required
        - `address` string, required — Solana wallet address
      - TronWalletInfo
        - `accountType` 'TRON_WALLET', required
        - `address` string, required — Tron wallet address
      - PolygonWalletInfo
        - `accountType` 'POLYGON_WALLET', required
        - `address` string, required — Polygon eth wallet address
      - BaseWalletInfo
        - `accountType` 'BASE_WALLET', required
        - `address` string, required — Base eth wallet address
  - `transactionId` string, required — The ID of the transaction created from this quote.
  - `originalQuoteId` string — ID of the quote that is being retried
  - `rateDetails` OutgoingRateDetails — Details about the rate and fees for an outgoing transaction or quote.
    - `counterpartyMultiplier` number, double, required — The underlying multiplier from mSATs to the receiving currency as returned by the counterparty institution.
    - `counterpartyFixedFee` integer, required — The fixed fee charged by the counterparty institution to execute the quote in the smallest unit of the receiving currency (eg. cents).
    - `gridApiMultiplier` number, double, required — The underlying multiplier from the sending currency to mSATS, including variable fees.
    - `gridApiFixedFee` integer, required — The fixed fee charged by the Grid product to execute the quote in the smallest unit of the sending currency (eg. cents).
    - `gridApiVariableFeeRate` number, double, required — The variable fee rate charged by the Grid product to execute the quote as a percentage of the sending currency amount.
    - `gridApiVariableFeeAmount` number, required — The variable fee amount charged by the Grid product to execute the quote in the smallest unit of the sending currency (eg. cents). This is the sending amount times gridApiVariableFeeRate.

## Other responses

- `400` — Bad request - Invalid quote ID or quote cannot be confirmed
- `401` — Unauthorized
- `404` — Quote not found
- `409` — Conflict - Quote already confirmed, expired, or in invalid state
- `500` — Internal service error

## Changes

- **2026-01-28** `d1490309094a` — 1 info
  - removed `subschema #1` from the `paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #5: FBO Account]/` response property `allOf` list for the response status `200`
- **2026-01-28** `60af1189794c` — 1 breaking, 1 info
  - the `paymentInstructions/items/accountOrWalletInfo` response's property type/format changed from ``/`` to `object`/`` for status `200`
  - added the required property `paymentInstructions/items/accountOrWalletInfo/accountType` to the response with the `200` status
- **2026-01-24** `36c697116132` — 1 breaking, 1 info
  - the `paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #8: Lightning Invoice]/` response's property type/format changed from ``/`` to `object`/`` for status `200`
  - removed `#/components/schemas/PaymentAccountOrWalletInfo` from the `paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #8: Lightning Invoice]/` response property `allOf` list for the response status `200`
- **2026-01-24** `881b41b3aa77` — 1 breaking
  - the response property `source/oneOf[#/components/schemas/QuoteRealtimeFundingSource]/customerId` became optional for the status `200`

[Change history](https://skmtc.dev/lightsparkdev/apis/grid-api/changes/quotes/:quoteId/execute/post.md)

---

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