Get the current merchant TRC-20 deposit address
Read-only: returns the merchant's current active TRC-20 deposit address used for incoming USDT collateral (merchant operational balance top-up — payouts, withdrawals and commissions; players pay traders' requisites in PayIn deals, NOT this address). `tenant_id` / `merchant_id` in the request are advisory — with HMAC authentication the scope always resolves from the signed token. Returns `404 Not Found` (problem+json) when no address has been provisioned yet.
/api/v1/p2p/merchant/wallet/deposit-addressRead-only: returns the merchant's current active TRC-20 deposit
address used for incoming USDT collateral (merchant operational
balance top-up — payouts, withdrawals and commissions; players pay
traders' requisites in PayIn deals, NOT this address).
tenant_id / merchant_id in the request are advisory — with HMAC
authentication the scope always resolves from the signed token.
Returns 404 Not Found (problem+json) when no address has been
provisioned yet.
Authorization
MerchantToken MerchantSignature 64-character hex public merchant token assigned during onboarding.
In: header
Stripe-style HMAC-SHA256 signature.
Format: t=<unix_seconds>,v1=<hex_hmac_sha256>
where hex_hmac = HMAC-SHA256(webhook_secret, "<unix_seconds>.<raw_body>").
Replay window: 5 minutes (60s future drift tolerated).
In: header
Response Body
application/json
application/problem+json
application/problem+json
curl -X GET "https://example.com/api/v1/p2p/merchant/wallet/deposit-address"{ "trc20_address": "TYHCiW3XN5sP9cWJ5T4Dfs9Y18h46t9w1a"}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "instance": "../dictionary", "errors": [ { "field": "amount", "message": "must be greater than 0", "code": "POSITIVE_REQUIRED" } ]}{ "type": "about:blank", "title": "Not Found", "status": 404, "detail": "deposit address not provisioned yet — POST /wallet/deposit-address to generate one", "instance": "/api/v1/p2p/merchant/wallet/deposit-address"}Withdraw USDT to a TRC-20 address POST
Initiates a USDT withdrawal to the supplied TRC-20 address. The synchronous `status` is COMPLETED (auto-approved: on-chain tx broadcast) or PENDING_MANUAL (admin approval queue — MANUAL_ONLY policy or amount above the effective auto limit). Insufficient balance is a failed precondition → HTTP 400 (not 402). Idempotency is guaranteed server-side (deterministic key over merchant + address + amount + current fee).
Provision (or rotate) the merchant TRC-20 deposit address POST
Generates (first call) or rotates (repeated calls) the merchant's TRC-20 deposit address for incoming USDT collateral. The scope is resolved from the authenticated merchant context (canonical path, no `merchant_id` in path). Atomically claims the next BIP44 derivation index, derives the address via tron-wallet-api and persists the address + index to the merchant row. Rotation semantics: the new address immediately replaces the old one on the merchant row, while every previously issued address stays forever in the platform's eternal block-polling set — USDT sent to a superseded address is still detected and credited. Legacy admin-impersonation alias: `POST /api/v1/p2p/merchants/{merchant_id}/deposit-address`.