Settlement & Reconciliation
How 3PAY settles transactions, tracks balances, and supports reconciliation.
Settlement & Reconciliation
3PAY settles on-chain and maintains an off-chain ledger for balance tracking and fee accounting.
Deposit Settlement
- Customer sends USDT → payment detected on-chain
- Deposit fee deducted (tiered per merchant)
- Net amount credited to merchant balance atomically
- Webhook fires
Withdrawal Settlement
- Withdrawal request created (API or dashboard)
- Auto-approved or queued for merchant approval
- On approval: flat fee deducted, on-chain transfer executed
- Webhook fires with final status
Merchants approve their own withdrawals. Admin has no withdrawal management ability.
Transaction Statuses
Deposits
| Status | Meaning |
|---|---|
initiated | Awaiting payment |
amount confirmed | Payment detected, sweeping to merchant wallet |
confirmed | Funds credited |
expired | Invoice expired |
cancelled | Cancelled before payment |
Withdrawals
| Status | Meaning |
|---|---|
pending | Awaiting merchant approval |
completed | Executed on-chain |
rejected | Rejected by merchant |
failed | Blockchain execution failed (balance restored) |
Payouts (Dashboard)
| Status | Meaning |
|---|---|
completed | Executed after OTP |
failed | Blockchain failed (balance restored) |
Balance Model
| Field | Description |
|---|---|
totalAmt | Available balance |
pendingAmt | Locked for pending withdrawals |
- Deposits add to
totalAmt - Withdrawals atomically move from
totalAmttopendingAmt - Approval sends from
pendingAmton-chain - Rejection/failure restores to
totalAmt
All balance operations are atomic — no race conditions.
Fees
Deposits
Tiered per merchant (or legacy percentage). Fee payer configurable via depositFeePayer.
| Network | Minimum Fee |
|---|---|
| TRC20 | 1 USDT |
| ERC20 | 1.50 USDT |
Withdrawals
| Network | Fee |
|---|---|
| TRC20 | 2 USDT flat |
| ERC20 | 2–2.5 USDT flat |
Fee payer configurable via withdrawalFeePayer. Gas costs included.
Fee Sweep
Accumulated deposit fees swept to admin wallet weekly (Saturday cron). No merchant action required.
Reconciliation
Use the on-chain transaction hash as source of truth.
GET /api/v1/public/transaction/list?status=confirmed&sortBy=confirmedAt&sortOrder=desc
Match against your records using transactionId, blockchainTxHash, amount, fee, netAmount.
Cross-reference on-chain:
- Ethereum:
https://etherscan.io/tx/{hash} - Tron:
https://tronscan.org/#/transaction/{hash}
The dashboard also supports Excel export for offline reconciliation.
Only count confirmed/completed transactions for accounting.
Updated 26 days ago
