Skip to main content
Watch Address monitors TRON addresses and notifies your server of their transfers - built for wallets you run yourself; both your own addresses and addresses on MPCVault can be registered. When a registered address sends or receives TRX or USDT on-chain, MPCVault POSTs a signed webhook to your configured URL.
  • Monitoring Only - No wallet is created, MPCVault holds no keys, and no assets are moved
  • No Historical Backfill - Only transfers that occur after registration are notified
Watch Address uses the same API token as Sweep, issued by MPCVault - not a token created from the web console. Contact your MPCVault account manager to enable it and configure your webhook URL.

Preparation

You provide:
  • Webhook URL
  • Outbound IPs (if IP allowlisting is enabled)
MPCVault provides:
  • API base URL: https://api.mpcvault.com
  • API token, sent in the x-mtoken header
  • Webhook verification public key (see below)

How It Works

  1. Register each address via AddWatchAddress.
  2. MPCVault sends a signed webhook for every transfer on the address, by lifecycle stage.
  3. Verify the signature, deduplicate, and apply your business logic.

Webhook

Push Rules

  • Both incoming and outgoing transfers are notified; there is no minimum amount
  • Currently monitored assets: TRX and USDT
  • Only successful on-chain transactions are pushed; failed transactions are not
  • Self-transfers (sender and recipient are the same address) are not pushed
  • Each transaction is notified by lifecycle stage: CONFIRMED (19 blocks) then FINALIZED (38 blocks), strictly in order; TRX and USDT use the same thresholds, and TRON does not send REVERTED
Block thresholds are MPCVault’s current operating standard, provided for reference only. They may change with network conditions and do not guarantee irreversibility: only FINALIZED is final. Crediting or releasing funds based on CONFIRMED is your own risk decision - MPCVault is not liable for losses caused by acting before FINALIZED. Apply stricter thresholds per your own risk requirements.

Signature Verification

Request headers:
Verification public key (Ed25519):
The signature covers the raw request body bytes, exactly as received - do not re-serialize the JSON before verifying:

Request Body

Example (USDT incoming):

Idempotency

Each transaction produces two notifications - CONFIRMED then FINALIZED - with the same uuid. If both sender and recipient of one transfer are watched, each side additionally gets its own pair: same unique_id, but different wallet_address, is_send, and uuid. Use uuid + event_type for idempotency - uuid alone would drop the FINALIZED stage, and unique_id alone would drop one side of a watched-to-watched transfer. After verifying and processing a webhook, return HTTP 200 (exactly; the response body is ignored). Any other status or a failed request is retried with exponential backoff, indefinitely - so your endpoint must be idempotent.
  1. Read the raw request body and verify the signature with the public key.
  2. Parse the JSON and check that status is SUCCESS.
  3. Deduplicate by uuid + event_type.
  4. Optionally re-verify the transaction hash, direction, token, and amount via TRON RPC.
  5. Apply your business logic and return HTTP 200.