Skip to main content

Deposits

A deposit is an on-chain payment ZaroPay detected to one of your addresses. Always scoped to the authenticated merchant.

List GET /v1/deposits​

Query params:

ParamTypeNotes
statusstringDETECTED, CONFIRMING, CONFIRMED, STUCK, REORG_PENDING, FAILED
statusGroupstringconfirmed · pending (DETECTED+CONFIRMING) · failed (FAILED+STUCK+REORG_PENDING)
chainstringtron
walletIdstring (uuid)Filter by settlement account
qstringSearch over tx_hash, to_address, amount, id (max 120)
page / limitint1–100, default 20

Returns an array of deposit rows + meta, newest first.

Retrieve GET /v1/deposits/:id​

:id is the deposit UUID (404 if not yours).

Deposit fields​

FieldTypeNotes
idstring (uuid)
merchant_idstring (uuid)
deposit_address_idstring (uuid) | null
chain / currencystring
tx_hashstringOn-chain transaction hash
output_indexintLog/output index within the tx
amountstringOn-chain gross received (decimal string, full precision)
amount_unitsstring | nullRaw base units
from_addressstring | nullPayer
to_addressstringYour deposit address
block_numberstring | nullBlock height (bigint, serialized as a decimal string)
confirmationsint
required_confirmationsint
statusstringDeposit status enum
expected_amountstring | nullOrder amount, if any
fee_amountstring | nullThe ZaroPay platform fee charged ("0" when none); null until the deposit has been credited
net_amountstring | nullWhat you receive: the credit net of ZaroPay's platform fee (amount − fee_amount); null until credited. A merchant-paid sweep gas fee (merchant gas mode) is debited separately and is not included. Book this as revenue; fulfil the customer for expected_amount
fiat_net_amountstring | nullFor fiat-priced orders: net_amount converted to the order's currency at the locked quote_rate, rounded to cents; null for USDT orders or until credited
fee_modestring | nullmerchant / client
payment_statestring | nullexact, underpaid, overpaid vs the amount the customer was asked to send; null when nothing was quoted (an open address, or a direct transfer to your settlement wallet)
sourcestringdeposit (paid to a deposit address) or external (a direct transfer to your settlement wallet — credited in full, no fee, no order)
settlement_account_idstring (uuid) | null
api_key_idstring (uuid) | nullWhich key created the originating address
recovered_attimestamp | nullSet only for late-payment recovery (null = on-time)
detected_at / confirmed_attimestamp | null
created_at / updated_attimestamp

Example​

A client fee mode order of 100 USDT at 1%, paid exactly:

{
"success": true,
"message": "Success",
"data": {
"id": "a1b2c3d4-…",
"status": "CONFIRMED",
"tx_hash": "0xabc…",
"amount": "101.000000000000000000",
"expected_amount": "100.000000000000000000",
"fee_mode": "client",
"payment_state": "exact",
"fee_amount": "1",
"net_amount": "100",
"fiat_net_amount": null,
"confirmations": 20,
"required_confirmations": 19,
"confirmed_at": "2026-06-27T10:15:40.000Z"
}
}
Amounts here are un-normalized

On this raw deposit row, amount and expected_amount may appear as full-scale strings (e.g. "100.000000000000000000"); fee_amount and net_amount are clean decimal strings. The webhook payload gives you cleaned-up netAmount / feeAmount / grossAmount / orderAmount strings — prefer those for display and reconciliation.