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
- Crypto
- Bank transfer
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 largestexpected_amount that the payment covers.
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
You send less than expected
You send less than expected
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.You send more than expected
You send more than expected
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.You pay after expiry
You pay after expiry
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, withinflows:read.
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.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.