Skip to main content
A transfer has two steps. First, create a quote that fixes the payout and funding amounts. Then, create the transfer from that quote. Your merchant is always the transfer principal.

Before you start

  • Add the payout destination in the dashboard and copy its recipient_id.
  • Complete Tier 2 business verification and receive approval for USD banking before quoting a USD bank payout.
  • Choose one funding method: your Yara balance, an NGN bank transfer, or a supported stablecoin and network.
  • Keep a unique X-Idempotency-Key for each request. Reuse the same key when retrying that request.

Step 1 — Quote the transfer

The destination amount and funding source are separate. This example pays 100 USD and collects the funds by NGN bank transfer.
Use one of these funding sources:
Bank funding supports NGN. Crypto funding supports USDC or USDT on an enabled network. Use the exact asset and network returned by the API. USD bank payouts support US bank accounts over ACH or wire and international bank accounts over SWIFT. The recipient determines the payout rail. Your transfer request does not include a customer or an on-behalf-of identity.

Quote response

The quote fixes one funding method, the required source amount, the rate, fees, and expiry. You cannot change the funding method when creating the transfer.

Step 2 — Create the transfer

Balance-funded transfers reserve immediately and return RESERVED. Bank- and crypto-funded transfers return AWAITING_MERCHANT_FUNDING with transfer-specific instructions.

Bank funding instructions

If funding has no bank account or crypto address yet, Yara is retrying instruction provisioning. Poll the funding endpoint:
Yara selects the configured banking partner. You do not select the provider. Always use the exact bank details returned for that transfer.

Fund safely

  • Use only the account, address, reference, asset, and network returned for this transfer.
  • Never reuse instructions from another transfer.
  • Send funds before expires_at.
  • Do not infer a match from the amount and payment time. Yara uses the unique bank order or crypto address to map the receipt to one transfer.
Bank and crypto funding must both match required_amount exactly. Any underpayment or overpayment is recorded as REQUIRES_REVIEW; Yara sends transfer.funding.flagged and does not automatically credit, reserve, or refund the payment. This prevents a payer who sends less than instructed from consuming your existing merchant balance. An exact payment credits the quoted net USD value and drives reservation of the transfer’s fixed debit. Only one exact payment can credit a funding intent. A later exact provider transaction is retained for audit, flagged, and cannot credit your balance again. If an exact payment arrives after expires_at, Yara credits it to your general merchant balance but does not revive or reserve the expired transfer. Each accepted or flagged provider payment appears in funding_receipts on the transfer:
Provider routing data, internal ledger references, and webhook payloads are not returned.

Track the transfer

Listen for webhooks, or fetch the transfer by its id:
Listen for transfer.submitted, transfer.succeeded, transfer.failed, and transfer.requires_review. A timeout does not mean the payout failed. Yara reconciles its original provider request and does not blindly create another payout.
If a request times out, retry it with the same X-Idempotency-Key. A new key creates a new request.
Quotes and funding instructions expire. Request a new quote instead of paying expired instructions.