Monitor USDT / USDC Payments via JSON-RPC
Use BlockVectra JSON-RPC to monitor incoming USDT and USDC transfers via eth_getLogs polling, with live WebSocket subscriptions available on supported chains.
Supported Chains
Per-chain capabilities are published at GET /v1/chains.
| Chain | Supported delivery |
|---|---|
| Arbitrum One | HTTP polling (eth_getLogs) |
| Base | HTTP polling (eth_getLogs) |
| BNB Smart Chain | HTTP polling (eth_getLogs) |
| Ethereum | HTTP polling (eth_getLogs) |
| HyperEVM | HTTP polling (eth_getLogs) |
| Polygon | HTTP polling (eth_getLogs) |
| Robinhood Chain | HTTP polling & WebSocket |
Three Steps to Accept Payments
1. Obtain an API key
Create an API key via programmatic sign-up using an Ethereum wallet signature, or sign in to the console to generate one.
2. Poll Transfer events
Construct an eth_getLogs filter with the token contract address, Transfer topic0, and your 32-byte zero-padded recipient address. Advance your cursor in batches up to the chain's maximum block range limit (typically 1,000 blocks). See the Transfer event filter guide and cursor polling guide.
3. Confirm depth and credit payment
Query up to safe_head = current_head - CONFIRMATION_DEPTH to safeguard against chain reorganizations. Check that log.removed is not true, and enforce idempotency on (transactionHash, logIndex) before crediting user balances. See the reorg handling guide and deduplication guide.
eth_getLogs Request Example
Standard JSON-RPC request matching the stablecoin payments guide:
curl -s -X POST https://api.blockvectra.com/v1/bsc_mainnet \
-H "content-type: application/json" \
-H "x-api-key: $BLOCKVECTRA_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getLogs",
"params": [
{
"address": "0x55d398326f99059fF775485246999027B3197955",
"fromBlock": "0x28a0000",
"toBlock": "0x28a03e7",
"topics": [
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
null,
"0x000000000000000000000000<your-receiving-address>"
]
}
]
}'Pricing & Billing Rules
eth_getLogs method weight: 30 CU ($3.00 per 1,000,000 requests).
Requests rejected by the service (such as block range exceeded or rate limited) are not billed (billed: false). See the billing rules guide or view the full pricing table.