---
title: "Retry an incomplete payment"
method: POST
path: "/quotes/{quoteId}/retry"
tags: ["Cross-Currency Transfers"]
---

# Retry an incomplete payment

`POST /quotes/{quoteId}/retry`

In the case where a customer is debited but the Lightning payment fails to complete, integrators can retry the payment using this endpoint.

Payments retried with this endpoint will debit from the sender and deliver to the recipient the same amount as the original quote.
As the Grid API does not persist customer PII, retries need to start with a lookup request to retrieve the original quote's recipient counter party data requirements then pass that sender information in the request body.
Before calling this endpoint, you should reach out to the Lightspark team to investigate the underlying issue.  As part of resolution, they'll update the transaction to the appropriate state.  The quote / transaction to retry must be in a `FAILED` or `REFUNDED` state.

## Path parameters

- `quoteId` string, required

## Request body

- object
  - `lookupId` string, required — Unique identifier for the prior receiver uma address lookup request.
  - `senderCustomerInfo` object — Key-value pairs of information about the sender which was requested by the counterparty (recipient) institution. Any fields specified in `requiredPayerDataFields` from the response of the `/receiver/{receiverUmaAddress}` (lookupUma) endpoint MUST be provided here if they were requested. If the counterparty (recipient) institution did not request any information, this field can be omitted.

## Response `201`

Quote created successfully. The response includes payment instructions
that the client can use to execute the payment through their banking provider.

- 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
      - PaymentClabeAccountInfo
        - `accountType` 'CLABE', required
        - `clabeNumber` string, required — 18-digit CLABE number (Mexican banking standard)
      - PaymentUsAccountInfo
        - `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
      - PaymentPixAccountInfo
        - `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
      - PaymentIbanAccountInfo
        - `accountType` 'IBAN', required
        - `iban` string, required — International Bank Account Number
        - `swiftBic` string, required — SWIFT/BIC code (8 or 11 characters)
      - PaymentFboAccountInfo
        - `accountType` 'FBO', required
        - `paymentUrl` string, uri, required — The URL to make a request to in order to confirm payment
        - `paymentMethod` 'POST' | 'GET', required — The HTTP method to use for confirming the payment
      - PaymentUpiAccountInfo
        - `accountType` 'UPI', required
        - `vpa` string, required — Virtual Payment Address for UPI payments
      - PaymentSparkWalletInfo
        - `accountType` 'SPARK_WALLET', required
        - `address` string, required — Spark wallet address
      - PaymentLightningInvoiceInfo
        - `accountType` 'CLABE' | 'US_ACCOUNT' | 'PIX' | 'IBAN' | 'FBO' | 'UPI' | 'NGN_ACCOUNT' | 'SPARK_WALLET' | 'LIGHTNING' | 'SOLANA_WALLET' | 'TRON_WALLET' | 'POLYGON_WALLET' | 'BASE_WALLET', required — Type of account or wallet information
      - PaymentSolanaWalletInfo
        - `accountType` 'SOLANA_WALLET', required
        - `address` string, required — Solana wallet address
      - PaymentTronWalletInfo
        - `accountType` 'TRON_WALLET', required
        - `address` string, required — Tron wallet address
      - PaymentPolygonWalletInfo
        - `accountType` 'POLYGON_WALLET', required
        - `address` string, required — Polygon eth wallet address
      - PaymentBaseWalletInfo
        - `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 - Missing or invalid parameters
- `401` — Unauthorized
- `422` — Unprocessable Entity - Additional counterparty information required, or the payment cannot be completed for another reason.

## Changes

- **2026-01-24** `881b41b3aa77` — 1 breaking
  - the response property `source/oneOf[#/components/schemas/QuoteRealtimeFundingSource]/customerId` became optional for the status `201`

[Change history](https://skmtc.dev/lightsparkdev/apis/grid-api/changes/quotes/:quoteId/retry/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/881b41b3aa77/schema)
