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:
| Param | Type | Notes |
|---|---|---|
status | string | DETECTED, CONFIRMING, CONFIRMED, STUCK, REORG_PENDING, FAILED |
statusGroup | string | confirmed · pending (DETECTED+CONFIRMING) · failed (FAILED+STUCK+REORG_PENDING) |
chain | string | tron |
walletId | string (uuid) | Filter by settlement account |
q | string | Search over tx_hash, to_address, amount, id (max 120) |
page / limit | int | 1–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
| Field | Type | Notes |
|---|---|---|
id | string (uuid) | |
merchant_id | string (uuid) | |
deposit_address_id | string (uuid) | null | |
chain / currency | string | |
tx_hash | string | On-chain transaction hash |
output_index | int | Log/output index within the tx |
amount | string | On-chain gross received (decimal string, full precision) |
amount_units | string | null | Raw base units |
from_address | string | null | Payer |
to_address | string | Your deposit address |
block_number | string | null | Block height (bigint, serialized as a decimal string) |
confirmations | int | |
required_confirmations | int | |
status | string | Deposit status enum |
expected_amount | string | null | Order amount, if any |
fee_amount | string | null | The ZaroPay platform fee charged ("0" when none); null until the deposit has been credited |
net_amount | string | null | What 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_amount | string | null | For 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_mode | string | null | merchant / client |
payment_state | string | null | exact, 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) |
source | string | deposit (paid to a deposit address) or external (a direct transfer to your settlement wallet — credited in full, no fee, no order) |
settlement_account_id | string (uuid) | null | |
api_key_id | string (uuid) | null | Which key created the originating address |
recovered_at | timestamp | null | Set only for late-payment recovery (null = on-time) |
detected_at / confirmed_at | timestamp | null | |
created_at / updated_at | timestamp |
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.