Documentación API
API WebSocket en tiempo real para monitorear eventos de bloqueo USDT/USDC en redes Tron y Ethereum.
wss://api.usdtbanlist.com/wsPrimeros Pasos
Conéctate al endpoint WebSocket para recibir eventos de bloqueo en tiempo real y consultar información de direcciones.
wss://api.usdtbanlist.com/ws?apiKey=YOUR_API_KEYObtén tu clave API
Go to your Account → Profile to generate an API key, or use @USDTBanBot on Telegram.
Autenticación
Incluye tu clave API en la URL de conexión o envía un mensaje de autenticación después de conectarte.
wss://api.usdtbanlist.com/ws?apiKey=mk_your_api_key_here{
"type": "auth",
"apiKey": "mk_your_api_key_here"
}{
"type": "connected",
"clientId": "client_xxx",
"authenticated": true,
"tier": "free"
}Eventos
Una vez conectado y autenticado, recibirás eventos de bloqueo en tiempo real.
Importante
Los eventos en tiempo real se entregan solo para direcciones en su lista de monitoreo. Agregue direcciones a través de @USDTBanBot (sección Billeteras), Panel de cuenta, Telegram Mini App.
| Tipo de Evento | Descripción | Plan |
|---|---|---|
ban_submitted | Bloqueo pendiente en multisig | Premium |
ban_executed | Dirección bloqueada (confirmado) | Gratis |
unban_submitted | Desbloqueo pendiente en multisig | Premium |
unban_executed | Dirección desbloqueada | Gratis |
destroy_submitted | Quema de fondos pendiente en multisig | Premium |
destroy_executed | Fondos quemados de dirección bloqueada | Gratis |
{
"type": "event",
"event": {
"id": "uuid",
"network": "trx",
"eventType": "ban_executed",
"address": "41...",
"addressBase58": "T...",
"symbol": "USDT",
"txHash": "...",
"blockNumber": 12345678,
"timestamp": "2024-01-15T12:00:00Z",
"amount": "1234.56",
"amountRaw": "1234560000"
}
}Métodos JSON-RPC
Envía solicitudes JSON-RPC 2.0 para consultar datos y gestionar suscripciones.
pingVerificar estado de conexión
{ "jsonrpc": "2.0", "id": 1, "method": "ping" }{ "jsonrpc": "2.0", "id": 1, "result": "pong" }getStatusObtener estado actual de conexión e información de límites
{ "jsonrpc": "2.0", "id": 1, "method": "getStatus" }{
"jsonrpc": "2.0", "id": 1,
"result": {
"tier": "free",
"subscriptions": ["all"],
"rateLimit": { "used": 5, "limit": 10, "windowMs": 60000 }
}
}subscribeSuscribirse a canales de eventos
{
"jsonrpc": "2.0", "id": 1,
"method": "subscribe",
"params": { "channels": ["all"] }
}{ "jsonrpc": "2.0", "id": 1, "result": { "subscribed": ["all"], "total": 1 } }unsubscribeCancelar suscripción de canales
{
"jsonrpc": "2.0", "id": 1,
"method": "unsubscribe",
"params": { "channels": ["eth"] }
}{ "jsonrpc": "2.0", "id": 1, "result": { "unsubscribed": ["eth"], "remaining": 1 } }checkAddressVerificar si una dirección está bloqueada
{
"jsonrpc": "2.0", "id": 1,
"method": "checkAddress",
"params": { "address": "TLJpijVuVyjAtKRahhGTAFkpZxfpzHMtWe" }
}{
"jsonrpc": "2.0", "id": 1,
"result": {
"address": "TLJpijVuVyjAtKRahhGTAFkpZxfpzHMtWe",
"network": "trx",
"isBanned": false,
"usdt_status": "active",
"usdt_balance": "0.00",
"tag": { "type": "Exchange", "tag": "Binance" },
"events": [{ "event_name": "Block", "volume": "1234.56", "symbol": "USDT", "status": "executed" }],
"walletScore": { "totalScore": 45, "riskLevel": "medium" },
"connections": { "totalConnections": 3, "categories": ["Blacklist"] }
}
}amlCheck$1.50AML compliance check for a wallet address — risk score, fund sources breakdown
{
"jsonrpc": "2.0", "id": 1,
"method": "amlCheck",
"params": { "address": "TGpnJAXqxmMoPQhaKcPN3jc6nDYbbiyYCz" }
}{
"jsonrpc": "2.0", "id": 1,
"result": {
"address": "TGpnJAXqxmMoPQhaKcPN3jc6nDYbbiyYCz",
"network": "tron",
"riskScore": 75,
"riskLevel": "high",
"sources": {
"byType": [{ "name": "Cross-chain protocol", "share": 85.2 }, { "name": "Exchange", "share": 14.8 }],
"byName": [{ "name": "Swft Swap", "share": 85.2 }, { "name": "OKX", "share": 14.8 }]
},
"details": {
"directTxCount": 14, "depth": 3, "totalVolume": 225046.97,
"flags": ["risky", "has_risky_sources"], "riskySourcesCount": 9
},
"price": 1.50,
"balanceAfter": 8.50
}
}txCheck$1.50AML compliance check for a transaction — trace fund sources (USDT/USDC only)
{
"jsonrpc": "2.0", "id": 1,
"method": "txCheck",
"params": {
"txHash": "a1b2c3d4e5f6...64_hex_chars",
"direction": 0
}
}
// direction: 0 = Source of Funds (default), 1 = Use of Funds
// Supported: USDT on TRON, USDT/USDC on Ethereum
// Network is auto-detected: 0x-prefix → Ethereum, plain hex → TRON{
"jsonrpc": "2.0", "id": 1,
"result": {
"txHash": "a1b2c3d4...",
"network": "tron",
"direction": 0,
"riskScore": 82,
"riskLevel": "high",
"sources": {
"byType": [{ "name": "Mixing service", "share": 65.3 }, { "name": "Exchange", "share": 34.7 }],
"byName": [{ "name": "Tornado Cash", "share": 65.3 }, { "name": "Binance", "share": 34.7 }]
},
"details": { "timestamp": 1716500000 },
"price": 1.50,
"balanceAfter": 7.00
}
}getAddressInfoObtener información detallada sobre una dirección
{
"jsonrpc": "2.0", "id": 1,
"method": "getAddressInfo",
"params": { "address": "T...", "network": "trx" }
}{
"jsonrpc": "2.0", "id": 1,
"result": {
"address": "T...", "network": "trx",
"info": { "label": "Exchange", "firstSeen": "2023-01-15" },
"cached": true
}
}Límites de Velocidad
| Plan | Solicitudes RPC | Eventos |
|---|---|---|
| Gratis | 10 / minuto | Solo ejecutados |
| Premium | 100 / minuto | Todos los eventos (pendientes + ejecutados) |
Error Codes
Errors follow JSON-RPC 2.0 format with numeric codes.
| Code | Message | Description |
|---|---|---|
-32000 | Rate limit exceeded | Too many requests per minute |
-32003 | Authentication required | Missing or invalid API key |
-32010 | Insufficient balance | Not enough balance for paid method (amlCheck, txCheck) |
-32600 | Invalid request | Malformed JSON-RPC request |
-32601 | Method not found | Unknown method name |
-32602 | Invalid params | Missing or invalid parameters |
-32603 | Internal error | Server-side error |
{
"jsonrpc": "2.0", "id": 1,
"error": {
"code": -32010,
"message": "Insufficient balance",
"data": { "balance": 0, "price": 1.5 }
}
}Ejemplos
const WebSocket = require('ws');
const API_KEY = 'mk_your_api_key';
const ws = new WebSocket(`wss://api.usdtbanlist.com/ws?apiKey=${API_KEY}`);
ws.on('open', () => {
console.log('Connected');
// Subscribe to TRX events
ws.send(JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'subscribe', params: { channels: ['trx'] } }));
// AML check on wallet address (costs $1.50)
ws.send(JSON.stringify({ jsonrpc: '2.0', id: 2, method: 'amlCheck', params: { address: 'T...' } }));
// AML check on transaction hash (costs $1.50)
ws.send(JSON.stringify({ jsonrpc: '2.0', id: 3, method: 'txCheck', params: { txHash: '...64hex...' } }));
});
ws.on('message', (data) => {
const msg = JSON.parse(data);
if (msg.type === 'event') console.log('Ban event:', msg.event.eventType, msg.event.addressBase58);
if (msg.id === 2 && msg.result) console.log('Address AML:', msg.result.riskScore, msg.result.riskLevel);
if (msg.id === 3 && msg.result) console.log('Tx AML:', msg.result.riskScore, msg.result.riskLevel);
});import json, websocket
API_KEY = 'mk_your_api_key'
def on_message(ws, message):
msg = json.loads(message)
if msg.get('type') == 'event':
print(f"Ban: {msg['event']['eventType']} - {msg['event'].get('addressBase58', msg['event']['address'])}")
if msg.get('type') == 'connected' and msg.get('authenticated'):
ws.send(json.dumps({ 'jsonrpc': '2.0', 'id': 1, 'method': 'amlCheck', 'params': {'address': 'T...'} }))
ws = websocket.WebSocketApp(f"wss://api.usdtbanlist.com/ws?apiKey={API_KEY}", on_message=on_message)
ws.run_forever()