Payin (collection/acquiring) is the capability for merchants to receive cryptocurrency payments from end users through NUSDpay. After integrating the Payin API, NUSDpay generates a dedicated deposit address for the merchant, which the merchant provides to end users. After the user pays, the funds are credited to the merchant wallet in NUSD after exchange rate conversion.

Business Flow

Sequence Diagram

Payin sequence diagram

Operation Steps

1

Get the deposit address

The merchant calls the Get Deposit Address API to obtain a dedicated deposit address. The deposit address is fixed for a given merchant on a given chain.
2

Display to end users

The merchant displays the deposit address and amount on its own payment page (or integrates the Checkout Cashier to provide a ready-made H5 payment page).
3

End user pays

The end user transfers supported tokens such as USDT or USDC to the address from their own wallet.
4

Automatic crediting

After the NUSDpay system detects the on-chain transaction, it waits for sufficient block confirmations, then credits the merchant wallet in NUSD after exchange rate conversion.Credit amount calculation:
Actual credited (NUSD) = Deposit amount (USDT/USDC) × Exchange rate - Service fee
5

Webhook notification

After crediting is complete, the system pushes a Deposit Callback event to the merchant containing the transaction hash, amount, token, and other complete information.

Crediting Rules

Supported Tokens

Use Get Supported Tokens to query the currently supported deposit tokens. Main supported tokens:
  • USDT: Ethereum, Tron, Arbitrum, Polygon, BSC, Base
  • USDC: Ethereum, Arbitrum, Polygon, BSC, Base

Pricing and Conversion

USDT, USDC, and other tokens deposited by end users are uniformly converted to NUSD and credited to the merchant wallet:
Actual credited (NUSD) = Deposit amount (USDT/USDC) × Exchange rate - Service fee
ParameterDescription
Deposit amountThe original amount of the end user’s on-chain transfer
Exchange rateThe real-time exchange rate of the deposit token against NUSD
Service feeCalculated based on the Payin fee rate configured for the project
The actual exchange rate and service fee for each transaction can be queried in the deposit record and are also returned via the Webhook callback.

Confirmation Time

Block confirmation times vary by chain:
ChainEstimated Confirmation TimeNotes
Ethereum~2 minutesRequires sufficient block confirmations
Tron~1 minute
Arbitrum / Polygon / BSC / Base~30 secondsL2 chains confirm faster

Deposit Status

StatusDescription
PendingTransaction detected, awaiting block confirmation
ConfirmingAwaiting on-chain confirmation
CompletedConfirmation completed, funds credited
FailedProcessing failed

Exceptions

Wrong Token Deposit

If an end user sends an unsupported token to the deposit address (e.g., the platform only supports USDT but the user transfers ETH), the deposit will not be credited automatically. The merchant can submit a mistaken deposit refund application through the Ticket System in the admin console.

Small Deposits

Extremely small deposits (such as a few cents) will be credited normally. If you need to filter out small deposits, handle this at the business layer.

Deposit Not Credited

If the end user has initiated a transfer but the merchant has not received a Webhook notification:
  1. Confirm whether the transaction is on-chain (query via a blockchain explorer)
  2. Confirm whether the Webhook endpoint is responding properly
  3. Call the Transaction Records API to query proactively

Next Steps

Payout Solution

Learn how to initiate payments to external addresses.

Webhook Configuration

Configure Webhooks to receive transaction notifications.