Track payouts.
Paste your USDC payout wallet (the same one you put into the gateway settings or payment-link generator) to see every settlement land on-chain. No login, no API key — payouts are public on the block explorer.
Check your payout wallet
Pick the network your wallet receives on (Polygon by default for USDC), paste the wallet address, and we'll open it on the right block explorer.
Every settlement, on-chain.
- Incoming USDC transfers — each customer order shows up as a separate transfer to your wallet.
- Sender address — the temporary tracking address Risksless used to forward the funds.
- Tx hash & timestamp — verifiable, immutable, and final.
- Balance — your running USDC total in real time.
callback URL when you mint the tracking address — Risksless will GET your URL with the settlement details the moment payment confirms. See the API docs.
What arrives at your URL.
When the tracking address receives funds and the required confirmations clear, we GET your callback URL with these query params. Persist them — this is your source of truth.
GEThttps://yoursite.com/webhook?order=42 # your own query params pass through &address_in=0x8f2a91c84e3d… # the tracking address &address_out=0xYourWallet &value_coin=99.00 # amount received in the coin denomination &coin=usdc &txid_in=0x9af2c1… # customer → address_in &txid_out=0xbc77d2… # address_in → your wallet &confirmations=3
Return 2xx within 10 seconds or the callback will be retried. Always verify address_out matches the wallet you expected — it protects against replay or misrouting.
Correlate orders on your side.
Because tracking is event-driven, you own the status table. Two patterns work well.
Pattern 1 — Query-string correlation
// When creating the tracking address, embed your order ID in the callback URL const callback = encodeURIComponent(`https://yoursite.com/webhook?order=${orderId}`); const res = await fetch( `https://api.risksless.com/control/wallet.php?address=${payoutWallet}&callback=${callback}` ); const { address_in } = await res.json(); // Store (orderId, address_in) so you can mark the order paid when the callback fires.
Pattern 2 — address_in as the key
// Index orders by address_in directly — the callback always includes it app.get('/webhook', (req, res) => { const { address_in, value_coin, coin, txid_out } = req.query; const order = db.orders.findOne({ address_in }); if (!order) return res.status(404).send('unknown'); order.markSettled({ amount: value_coin, coin, txHash: txid_out }); res.status(200).send('ok'); });
Callback not arriving?
Common causes: your callback URL isn't publicly reachable, it returned non-2xx, or it wasn't URL-encoded when passed to /control/wallet.php. WhatsApp support can pull a specific address_in and confirm whether it saw a payment and what it tried to call back.