Документация API
WebSocket API реального времени для мониторинга событий бана USDT/USDC в сетях Tron и Ethereum.
Начало работы
Подключитесь к WebSocket-эндпоинту для получения событий бана в реальном времени и запроса информации об адресах.
wss://api.usdtbanlist.com/ws?apiKey=YOUR_API_KEYПолучите API ключ
Откройте @USDTBanBot в Telegram, перейдите в Профиль → API Key для генерации ключа.
Аутентификация
Добавьте API ключ в URL подключения или отправьте auth-сообщение после подключения.
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" // or "premium"
}События
После подключения и аутентификации вы будете получать события бана в реальном времени.
| Тип события | Описание | Тариф |
|---|---|---|
ban_submitted | Бан ожидает подтверждения в мультисиге | Премиум |
ban_executed | Адрес забанен (подтверждено) | Бесплатно |
unban_submitted | Разбан ожидает подтверждения в мультисиге | Премиум |
unban_executed | Адрес разбанен | Бесплатно |
destroy_submitted | Сжигание средств ожидает подтверждения в мультисиге | Премиум |
destroy_executed | Средства сожжены с забаненного адреса | Бесплатно |
{
"type": "event",
"event": {
"id": "uuid",
"network": "trx", // "trx" or "eth"
"eventType": "ban_executed",
"address": "41...", // hex format
"addressBase58": "T...", // TRX only
"symbol": "USDT",
"txHash": "...",
"blockNumber": 12345678,
"timestamp": "2024-01-15T12:00:00Z",
"amount": "1234.56", // balance at event time
"amountRaw": "1234560000"
}
}Методы JSON-RPC
Отправляйте JSON-RPC 2.0 запросы для получения данных и управления подписками.
pingПроверка состояния соединения
{
"jsonrpc": "2.0",
"id": 1,
"method": "ping"
}{
"jsonrpc": "2.0",
"id": 1,
"result": "pong"
}getStatusПолучение текущего статуса подключения и информации о лимитах
{
"jsonrpc": "2.0",
"id": 1,
"method": "getStatus"
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tier": "free",
"subscriptions": ["all"],
"rateLimit": {
"used": 5,
"limit": 10,
"windowMs": 60000
}
}
}subscribeПодписка на каналы событий
{
"jsonrpc": "2.0",
"id": 1,
"method": "subscribe",
"params": {
"channels": ["all"] // "all", "eth", "trx", or address
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"subscribed": ["all"],
"total": 1
}
}unsubscribeОтписка от каналов
{
"jsonrpc": "2.0",
"id": 1,
"method": "unsubscribe",
"params": {
"channels": ["eth"] // empty array to unsubscribe all
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"unsubscribed": ["eth"],
"remaining": 1
}
}checkAddressПроверка, забанен ли адрес
{
"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",
"usdc_status": "active",
"usdt_balance": "0.00",
"usdc_balance": "0.00",
"tag": { "type": "GasFree", "tag": "GasFree" },
"events": [{ "event_name": "UnBlock", "volume": "0.00", "symbol": "USDT", "status": "executed" }],
"walletScore": { "totalScore": 45, "riskLevel": "medium" },
"connections": { "totalConnections": 0, "categories": [] },
"formattedText": "..."
}
}getAddressInfoПолучение подробной информации об адресе
{
"jsonrpc": "2.0",
"id": 1,
"method": "getAddressInfo",
"params": {
"address": "TLJpijVuVyjAtKRahhGTAFkpZxfpzHMtWe",
"network": "trx"
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"address": "TLJpijVuVyjAtKRahhGTAFkpZxfpzHMtWe",
"network": "trx",
"info": {
"label": "Exchange Wallet",
"firstSeen": "2023-01-15T10:00:00Z",
"lastSeen": "2024-01-10T15:30:00Z"
},
"cached": true
}
}Лимиты запросов
| Тариф | RPC запросы | События |
|---|---|---|
| Бесплатно | 10 / минуту | Только исполненные |
| Премиум | 100 / минуту | Все события (ожидающие + исполненные) |
При превышении лимита запросов вы получите ответ с ошибкой:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32000,
"message": "Rate limit exceeded"
}
}Примеры
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'] }
}));
});
ws.on('message', (data) => {
const msg = JSON.parse(data);
if (msg.type === 'event') {
console.log('Ban event:', msg.event.eventType, msg.event.address);
}
if (msg.jsonrpc) {
console.log('RPC response:', msg);
}
});
ws.on('error', console.error);import json
import websocket
API_KEY = 'mk_your_api_key'
def on_message(ws, message):
msg = json.loads(message)
if msg.get('type') == 'event':
event = msg['event']
print(f"Ban event: {event['eventType']} - {event['address']}")
if msg.get('type') == 'connected' and msg.get('authenticated'):
# Subscribe to all events
ws.send(json.dumps({
'jsonrpc': '2.0',
'id': 1,
'method': 'subscribe',
'params': {'channels': ['all']}
}))
def on_error(ws, error):
print(f"Error: {error}")
ws = websocket.WebSocketApp(
f"wss://api.usdtbanlist.com/ws?apiKey={API_KEY}",
on_message=on_message,
on_error=on_error
)
ws.run_forever()