Business Flow
Sequence Diagram
The following shows the complete lifecycle of a Payout transaction:Operation Steps
Initiate the payment request
Call the POST /nps/withdraw API, passing the recipient address, amount, chain, and token.
System validation and freezing
The NUSDpay system performs the following validations:
- Whether the balance is sufficient (including fees)
- Whether the chain and token are supported
- Whether the recipient address format is valid
Risk control review
The transaction enters the risk control workflow:
- AML/KYC review: Anti-money laundering and customer identity verification
- Address allowlist check: Whether the recipient address is in the allowlist
- Risk control rule engine: Whether the transaction amount, frequency, etc., trigger risk control rules
On-chain broadcast and confirmation
After the review passes, the system constructs the on-chain transaction and broadcasts it to the blockchain network. After block confirmation, the transaction is complete.
Fund Flow
Balance Model
The merchant wallet balance is divided into two parts:| Type | Description |
|---|---|
| Available balance (available) | Amount that can be used to initiate Payouts or transfers |
| Frozen balance (hold) | Payout / transfer amounts that have been initiated but not yet completed |
| Total balance | Available balance + frozen balance |
Funding Modes
Payout funds come from the merchant’s NUSD wallet balance. Merchants need to ensure that the wallet has sufficient available NUSD balance. There are two ways to fund:- Option 1: Internal transfer — Transfer NUSD from another project wallet of the merchant (such as a Payin wallet) to the Payout wallet
- Option 2: External top-up — The merchant deposits USDT/USDC directly to the Payout wallet address, and the system automatically converts it to NUSD for crediting
Fee Model
NUSDpay Payout supports two fee modes:App-Pays Mode (Merchant Pays the Fee)
The fee is borne by the merchant; the end user receives the full amount.User-Pays Mode (End User Pays the Fee)
The fee is deducted from the payment amount; the amount actually received by the end user is reduced.Fee Description
| Fee Type | Description |
|---|---|
| Service fee rate | Configured per project; supports custom rates |
| Exchange rate | Refers to the real-time market exchange rate (USDC/USDT); the API returns the actual rate |
| Gas fee | Advanced by the platform; already included in the service fee |
The specific fee rates are subject to the contractual agreement. You can obtain the current fee configuration via the Query Platform Fees API.
Transaction Status
Complete status flow of a Payout transaction:| Status | Description |
|---|---|
| Reviewing | Transaction under review |
| Pending | Waiting to be processed (including sub-statuses such as AML review, risk control review, and address allowlist check) |
| Confirming | Broadcast to the chain, waiting for block confirmation |
| Completed | Transaction completed; funds delivered |
| Failed | Transaction failed (includes specific failure reasons) |
Exception Handling
Insufficient Balance
When initiating a Payout, if the available balance is insufficient (including fees), the API will return an error. Please ensure the wallet has sufficient available balance.Risk Control Interception
When a transaction is intercepted by risk control rules, the status changes to Failed, and the frozen funds are automatically released. The Webhook notification contains the specific failure reason. Common interception reasons:- Recipient address is not on the allowlist
- Single transaction amount exceeds the limit
- AML rule triggered
On-Chain Failure
In rare cases, the transaction fails on-chain (e.g., insufficient gas, contract exception). The NUSDpay system will automatically retry or mark the transaction as failed and release the frozen NUSD funds.Webhook Not Received
If Webhook delivery fails (timeout or non-200/201 response), the system automatically retries up to 10 times. We recommend:- Ensure the Webhook endpoint responds within 2 seconds
- Use
request_idfor idempotent handling - Periodically call the Transaction Records API as a reconciliation fallback
Next Steps
Payin Solution
Learn how to receive cryptocurrency deposits from customers.
Transfer Solution
Learn how to use inter-project fund transfers.