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
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.
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 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.
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"
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"
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 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
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.
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