Skip to main content
POST
cURL

Authorizations

Authorization
string
header
required

API token authentication using format <api token id>:<api client secret>

Headers

Idempotency-Key
string

A unique identifier for the request. If the same key is sent multiple times, the server will return the same response as the first request.

Example:

"<uuid>"

Grid-Wallet-Signature
string

Full Grid wallet signature over the payloadToSign returned in the quote's paymentInstructions[].accountOrWalletInfo entry, produced with the session private key of a verified authentication credential on the source Embedded Wallet. Required when the quote's source is an internal account of type EMBEDDED_WALLET; ignored for other source types.

Path Parameters

quoteId
string
required

The unique identifier of the quote to execute

Body

application/json

Optional body for executing a quote. Only needed to request a specific Strong Customer Authentication factor (scaFactor) for the challenge this call issues; omit the body entirely otherwise.

scaFactor
enum<string>

Optional preferred factor for the Strong Customer Authentication challenge this call issues. Only relevant for customers in a region where SCA is required (e.g. EU); ignored otherwise. Valid values for a per-transaction challenge are SMS_OTP (default) and PASSKEYTOTP cannot carry the required dynamic linking and is rejected here. Omit to default to SMS_OTP.

Available options:
SMS_OTP,
TOTP,
PASSKEY

Response

Quote processed. The outcome depends on whether SCA applies to the customer (currently EU customers):

  • No SCA required: the transfer is initiated and the quote status advances (PROCESSING / COMPLETED).

  • SCA required: the transfer is not initiated yet. The quote is returned with status PENDING_AUTHORIZATION and an scaChallenge; release the transfer by authorizing the quote you already hold — POST /quotes/{quoteId}/authorize (re-calling execute returns 409). A pre-funded send is a single challenge, so one authorization releases it. The challenge (and its SMS code / passkey assertion) only comes into existence once this call initiates the transfer, so the proof is always supplied on the follow-up authorize, never inline on this call. If an SMS code lapses, re-send it via POST /quotes/{quoteId}/authorize/resend.

id
string
required

Unique identifier for this quote

Example:

"Quote:019542f5-b3e7-1d02-0000-000000000006"

status
enum<string>
required

Current status of the quote. PENDING_AUTHORIZATION occurs only for customers in a region where Strong Customer Authentication is required (e.g. EU): the quote carries an scaChallenge that must be authorized before execution, and for realtime-funding sources paymentInstructions are withheld until it is satisfied.

Available options:
PENDING,
PENDING_AUTHORIZATION,
PROCESSING,
COMPLETED,
FAILED,
EXPIRED
Example:

"PENDING"

createdAt
string<date-time>
required

When this quote was created

Example:

"2025-10-03T12:00:00Z"

expiresAt
string<date-time>
required

Absolute UTC timestamp when the rate locked in this quote becomes invalid and the quote can no longer be executed. The window depends on the rail and corridor: instant rails (Lightning, Spark, USDC on Solana/Base/Polygon, RTP, SEPA Instant) typically expire in 1–5 minutes; corridors with longer settlement guarantees may have longer windows. Always rely on this timestamp rather than assuming a fixed window.

Example:

"2025-10-03T12:05:00Z"

source
Account · object
required

Source account details

destination
Account · object
required

Destination account details

sendingCurrency
object
required

Currency for the sending amount

receivingCurrency
object
required

Currency for the receiving amount

totalSendingAmount
integer<int64>
required

The total amount that will be sent in the smallest unit of the sending currency (eg. cents).

Example:

123010

totalReceivingAmount
integer<int64>
required

The total amount that will be received in the smallest unit of the receiving currency (eg. cents).

Example:

1000

exchangeRate
number
required

Number of sending currency units per receiving currency unit.

feesIncluded
integer<int64>
required

The fees associated with the quote in the smallest unit of the sending currency (eg. cents). Note: this value may fluctuate between quotes — some underlying fee components are defined in the receiving currency, so their equivalent in the sending currency moves with the FX rate. The fees shown here are locked only for the lifetime of this quote.

Required range: x >= 0
Example:

10

transactionId
string
required

The ID of the transaction created from this quote.

Example:

"Transaction:019542f5-b3e7-1d02-0000-000000000005"

paymentInstructions
object[]

Payment instructions for executing the payment. This is not required when using an internal account source.

Example:
remittanceInformation
string

Free-form information about the payment that travels with it to the recipient, as provided on the quote request. The field this populates depends on the payment rail: for ACH it populates the Addenda record, for FedNow and RTP it populates the remittanceInformation field, and for wires it populates the OBI (Originator to Beneficiary Information) / beneficiary information.

Maximum string length: 80
Example:

"12345"

counterpartyInformation
object

Additional information about the counterparty, if available and required by the platform in their configuration.

Example:
rateDetails
object

Details about the rate and fees for the transaction.

scaChallenge
object
read-only

Present only while status is PENDING_AUTHORIZATION: the Strong Customer Authentication challenge to satisfy before this quote can be executed (or, for realtime-funding sources, before paymentInstructions are issued). Omitted for customers outside SCA-regulated regions (non-EU).