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 (ACCOUNT) or an address on another chain (CHAIN_ADDRESS). A CHAIN_ADDRESS quote sends USDB and commits to a minimumReceivingAmount; Grid prices the conversion again at execution and fails the action with PRICE_MOVED rather than send for less.
If the agent’s defaultExecutionMode is APPROVAL_REQUIRED, or the quote amount exceeds the agent’s approvalThresholds, 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 another EMBEDDED_WALLET on the platform (ACCOUNT), or an address on another chain (CHAIN_ADDRESS).
A CHAIN_ADDRESS quote sends USDB and requires lockedCurrencySide SENDING: it commits to the USDB amount, the destination, and a minimumReceivingAmount. Grid prices the conversion again when the quote executes, after any approval, and sends only if the destination still receives at least that minimum. Otherwise the action fails with PRICE_MOVED and no funds move.
Source account details
- Account
- Real-time Funding
Destination of an agent quote.
- Account
- Chain Address
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.
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. Present for quotes to a CHAIN_ADDRESS destination: totalReceivingAmount is an estimate, and the quote executes only if a fresh price at execution still delivers at least this amount. Otherwise the action fails with PRICE_MOVED.
990000