Create a transfer quote
Generate a quote for a cross-currency transfer on behalf of the authenticated agent’s customer. Accounts referenced in the request must belong to the agent’s customer. Requires the CREATE_QUOTES permission in the agent’s policy.
The destination is another embedded wallet or one of the customer’s Spark addresses saved with POST /agents/me/external-accounts (ACCOUNT), an address on another chain (CHAIN_ADDRESS), or a BOLT11 Lightning invoice (LIGHTNING_INVOICE). Grid answers DESTINATION_NOT_ALLOWED for a Spark address that was refused, or is held for review, on any of the customer’s records of it, under either prefix and including removed ones. A CHAIN_ADDRESS quote sends USDB. Grid pays the chain itself at a locked rate, so the amount the recipient receives is fixed when the quote is created and equals the quote’s minimumReceivingAmount. A LIGHTNING_INVOICE quote debits the source wallet and pays exactly the invoice’s amount, which it locks on the receiving side in satoshis, through the platform’s Lightning invoice quote (POST /quotes).
If the agent’s defaultExecutionMode is APPROVAL_REQUIRED, or the quote amount exceeds the agent’s approvalThresholds or the approvalThreshold of the spending pool the agent belongs to, the resulting transaction will require explicit approval before funds move.
Authorizations
Bearer token authentication for agent-scoped endpoints. The token is the accessToken returned when redeeming a device code via POST /agents/device-codes/redeem. Agent credentials are user-scoped: all requests are automatically bound to the agent's associated customer and subject to the agent's policy.
Headers
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.
255"<uuid>"
Body
A transfer quote requested by an agent. The source is an EMBEDDED_WALLET internal account of the agent's customer. The destination is either an ACCOUNT: another EMBEDDED_WALLET on the platform, or one of the customer's active SPARK_WALLET external accounts in the source's currency; an address on another chain (CHAIN_ADDRESS); or a BOLT11 Lightning invoice (LIGHTNING_INVOICE).
A CHAIN_ADDRESS quote sends USDB. With lockedCurrencySide SENDING it commits to the USDB amount; with RECEIVING it commits to exactly the amount the destination receives, in the smallest unit of the destination's currency, and the fees are added to the USDB sent. Grid pays the chain itself at a locked rate, so the amount the destination receives is fixed when the quote is created and returned as minimumReceivingAmount. When Grid cannot deliver a RECEIVING amount exactly, it refuses the quote with 400 EXACT_AMOUNT_UNAVAILABLE.
A LIGHTNING_INVOICE quote debits the source wallet and pays exactly the invoice's amount. Its lockedCurrencySide must be RECEIVING and its lockedCurrencyAmount the invoice's amount in satoshis; the fees are added to the amount debited. It is the platform's own Lightning invoice quote (see POST /quotes), so the same invoice rules and the one-live-quote rule apply: another quote for an invoice is refused with 409 INVOICE_ALREADY_USED while an earlier one can still be executed, except a repeat of the same request with the same Idempotency-Key.
Source account details
- Account
- Real-time Funding
Destination of an agent quote.
- Account
- Chain Address
- Lightning Invoice
The side of the quote which should be locked and specified in the lockedCurrencyAmount. For example, if I want to send exactly $5 MXN from my wallet, I would set this to "sending", and the lockedCurrencyAmount to 500 (in cents). If I want the receiver to receive exactly $10 USD, I would set this to "receiving" and the lockedCurrencyAmount to 10000 (in cents).
SENDING, RECEIVING The amount to send/receive in the smallest unit of the locked currency (eg. cents). See lockedCurrencySide for more information.
x <= 90000000000000001000
Response
Transfer quote created successfully
A quote created by an agent. For a CHAIN_ADDRESS destination, the quote's destination names the external account Grid recorded for the address, and destinationChainAddress names the address itself. For a LIGHTNING_INVOICE destination, destination names the external account Grid recorded for the invoice, and destinationLightningInvoice names the invoice itself.
Unique identifier for this quote
"Quote:019542f5-b3e7-1d02-0000-000000000006"
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.
PENDING, PENDING_AUTHORIZATION, PROCESSING, COMPLETED, FAILED, EXPIRED "PENDING"
When this quote was created
"2025-10-03T12:00:00Z"
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.
"2025-10-03T12:05:00Z"
Source account details
- Account
- Real-time Funding
Destination account details
- Account
- UMA Address
Currency for the sending amount
Currency for the receiving amount
The total amount that will be sent in the smallest unit of the sending currency (eg. cents).
123010
The total amount that will be received in the smallest unit of the receiving currency (eg. cents).
1000
Number of sending currency units per receiving currency unit. The rate is fee-exclusive: Grid deducts feesIncluded from totalSendingAmount first, then converts the remainder at this rate to reach totalReceivingAmount.
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.
x >= 010
The ID of the transaction created from this quote.
"Transaction:019542f5-b3e7-1d02-0000-000000000005"
The portion of feesIncluded collected by the platform (platform-configured transaction fees), in the smallest unit of the sending currency. 0 when the platform has no applicable fee configured. Already included in feesIncluded. May be omitted from payloads produced before platform fees existed.
x >= 05
Payment instructions for executing the payment. This is not required when using an internal account source.
Additional information about the counterparty, if available and required by the platform in their configuration.
Details about the rate and fees for the transaction.
The purpose of payment the quote was created with. Present only when the quote request set purposeOfPayment.
GIFT, SELF, GOODS_OR_SERVICES, EDUCATION, HEALTH_OR_MEDICAL, REAL_ESTATE_PURCHASE, TAX_PAYMENT, LOAN_PAYMENT, UTILITY_BILL, DONATION, TRAVEL, FAMILY_SUPPORT, SALARY_PAYMENT, EXPORTED_GOODS_PREPAYMENT, EXPORTED_GOODS_POSTPAYMENT, SERVICE_CHARGES, OFFICE_EXPENSES, DELIVERY_FEES, HOTEL_ACCOMMODATION, COMMISSION_ON_GOODS, COMMISSION_ON_SERVICES, ACCOUNTING_SERVICES, EXHIBITION_SERVICES, OTHER IDs of the supporting documents attached to the payment behind this quote, as passed in documentIds on POST /quotes. Present only when the quote was created with documentIds. Grid returns such a quote only after it has attached every document. Call GET /payment-documents/{paymentDocumentId} for each document's details, such as its documentType and its ATTACHED status.
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).
Smallest amount the recipient receives, in the smallest unit of receivingCurrency, for a quote to a CHAIN_ADDRESS destination. Grid pays the chain itself at a locked rate, so this equals totalReceivingAmount. Null for a quote whose destination is not CHAIN_ADDRESS.
1000
The Spark address this quote pays, when its destination is one of the customer's SPARK_WALLET external accounts.
"spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu"
The chain, address and stablecoin this quote pays, when it was created with a CHAIN_ADDRESS destination.
The invoice this quote pays, when it was created with a LIGHTNING_INVOICE destination.