Skip to main content
Every payout is funded by its own settlement. Once a payout reaches PENDING_PAYMENT it carries a payment instruction — where to send money, how much, and by when.

The instruction

The same instruction is also returned inline on the payout as payment_instruction, so GET /v1/payouts/{id} is usually enough on its own — and it rides along on the webhook payload, so the payout.pending_payment event alone gives you everything the sender needs.
Read the address off the instruction every time. Do not cache it against a beneficiary or reuse one from an earlier payout — the amount is what lets us attribute a payment to the right payout, and paying a stale address puts money against the wrong instruction or none at all.

The two rails

account_unique is a receiving address belonging to your account, on the chain you chose with settlement_network (TRON or BSC).Payments wait for network confirmations before the payout advances. The threshold is set by the chain, not by us — TRC-20 and BEP-20 clear in about a minute in normal conditions. confirmations_received on the inflow tracks progress.

How your payment is matched

We poll for incoming payments continuously and match each one to an open instruction on the receiving account and the amount together. Amount is part of the key, not a sanity check on it. Two payouts can legitimately be open against the same receiving address at the same time, and the address alone cannot say which one a payment is for. We pick the best fit — the largest expected_amount that the payment covers.
If two open instructions tie exactly on expected_amount, the payment is genuinely ambiguous and we refuse to guess. It is left unapplied and raised to our operations team. A delayed payout is always preferable to crediting the wrong one — so send distinguishable amounts, or wait for one instruction to clear before opening another on the same rail.
Each payment is recorded exactly once, keyed on the transaction hash or bank session ID. A provider that notifies us twice cannot produce a double credit.

Wrong amounts

The payout does not advance. An underpayment does not cover any open instruction, so it is flagged (is_underpaid: true on the inflow) and held for our operations team.The payout stays in PENDING_PAYMENT and is never expired while it holds your money, even past expires_at. Contact support to top up or return it.
The payout proceeds normally. The excess is recorded as overpayment_amount on the inflow.If the payout later fails, the overpayment comes back with the refund — you are refunded what actually arrived, not what was expected.
If the instruction already lapsed and the payout is EXPIRED, there is no open instruction to match against. The payment is held for our operations team and returned to you.This is the case to avoid: check expires_at before releasing funds, not after.

Inspecting settlements

Your settlements are readable as inflows, with inflows:read.
An inflow with is_matched: false has arrived but is not yet attributed to a payout — either it is still confirming, or it needs manual attribution.
Payer identity is never returned. The sending address or account behind a settlement is the payer’s PII and is not part of the merchant-facing contract; reconcile on payout_id, amount, and created_at instead.

Dispatch to the beneficiary

Once your settlement confirms, we dispatch to the local processor. Every attempt is its own immutable record — a retry never overwrites a failed attempt.
A failed attempt with retries remaining is not a failed payout. The payout only reaches FAILED once attempts are exhausted — three by default. Read attempt_number and failure_code here when you need to explain to a customer why something took two tries. Outflows need the outflows:read scope.