Skip to main content
This guide walks through sending a cross-border fiat payment from one currency to another — e.g. USD → MYR. The flow is: quote, execute, track.

Flow overview

Prerequisites

  • An API key (sk_live_… / sk_test_…) for an account whose KYB covers the corridor.
  • A recipient with a fiat (bank) payment method in the destination currency. Save its recipientId.

Step 1: Get a quote

Fetch the best available rate for your currency pair. Pass recipientId so the quote accounts for the recipient’s payment method:
Keep the quoteId (to poll status) and the opaque protocol route token (to pin this route at execution). Execute before expiresAt.

Step 2: Execute the payout

Re-send the corridor and amount, plus the routeProtocol token from the quote. Some corridors require a supporting document — pass it as supportingDocumentKey when needed (corridor requirements surface in GET /recipients/requirements).
The response includes the transactionId and initial status. The payout begins processing immediately — there’s no separate “create” then “execute” step.

Step 3: Track status

Poll the status endpoint with your quoteId, or subscribe to webhooks (recommended):
A Payout is settled internally through a collection leg and a disbursement leg, so it moves through several steps: initiated → compliance_cleared → instructions_sent → collected → converting → settling → delivered (terminal: delivered or failed). For production, subscribe to payout.status.updated instead of polling — see the Webhooks guide.