Skip to main content
POST
/
api
/
rfq
/
execute-batch
Execute a batch of payouts
curl --request POST \
  --url https://api.example.com/api/rfq/execute-batch \
  --header 'Authorization: <authorization>'
{
  "success": true,
  "data": {
    "rows": [
      { "idx": 0, "status": "accepted", "transactionId": "8b1a4c1d-…", "quoteId": "4c2b7e8f-…" },
      { "idx": 1, "status": "failed", "errorCode": "RECIPIENT_NOT_FOUND", "retryable": false },
      { "idx": 2, "status": "accepted", "transactionId": "4f9e5f15-…", "quoteId": "1c84203c-…" }
    ]
  }
}
Batched POST /rfq/execute. Rows share fromCurrency. Partial failure is per-row — walk data.rows, retry retryable: true.
Scope payouts:write · rate-limited

Headers

Authorization
string
required
API key.
Idempotency-Key
string
Optional envelope-level dedup. Per-row dedup uses items[].idempotency_key.

Request body

Batch is exact-output by design. Each row’s targetAmount is what the recipient receives; the engine sizes the source spend. items[].amount is accepted on the wire but informational only — targetAmount drives quoting.
fromCurrency
string
required
Shared source currency.
onrampProtocol
string
required
Opaque onramp route token. Pins every row to the same onramp route.
userPaymentMethodId
string
required
Shared funding source.
items
object[]
required
Non-empty array of payouts.

Response

Always { "success": true, "data": { "rows": [...], "items": [...] } }. Use rowsitems is a deprecation alias.
rows
object[]
One entry per input row, in the same order.
items
object[]
Deprecation alias for rows. Same shape, same order, same contents — kept for one major-version of backward compatibility. New code should read rows.
{
  "success": true,
  "data": {
    "rows": [
      { "idx": 0, "status": "accepted", "transactionId": "8b1a4c1d-…", "quoteId": "4c2b7e8f-…" },
      { "idx": 1, "status": "failed", "errorCode": "RECIPIENT_NOT_FOUND", "retryable": false },
      { "idx": 2, "status": "accepted", "transactionId": "4f9e5f15-…", "quoteId": "1c84203c-…" }
    ]
  }
}
HTTP status is 200 even when some rows fail — data.rows[].status is the source of truth.