API для бизнеса
Проверка адресов и транзакций из ваших систем: запросы, ответы, учёт вызовов и коды ошибок.
Доступ
Базовый адрес: https://api.arbiter-pro.ru/api/v1/b2b. Ключ создаётся в личном кабинете в разделе «API-ключи» и передаётся в заголовке X-API-Key. Ключ целиком показывается один раз.
Доступ к API входит в тарифы «Про» (10 000 вызовов в месяц) и «Бизнес» (100 000 вызовов в месяц), подробнее на странице «Тарифы».
Описание в формате OpenAPI 3.0 для генерации клиента и импорта в Postman: openapi.yaml.
Что списывается
| Действие | Вызовы API | Проверки |
|---|---|---|
| Новая проверка адреса | 1 | 1 |
| Проверка адреса из сохранённого результата (24 часа) | 1 | 0 |
| Проверка транзакции | 1 | 1 за обе стороны; 0, если обе уже проверялись |
| Получение результата по id | 1 | 0 |
| Запрос с ошибкой | 1 | 0 |
| Остаток лимитов и использование (quota, usage) | 0 | 0 |
Лимит запросов в минуту задаётся для каждого ключа и показан в кабинете. Там же статистика по ключам и месяцам с выгрузкой в CSV.
Запросы
| Метод | Адрес | Назначение |
|---|---|---|
| POST | /checks | Проверить адрес. Поля: address, network (TRC20, ERC20, BSC20) |
| GET | /checks/{id} | Получить проверку адреса |
| POST | /tx-checks | Проверить транзакцию. Поля: tx_hash, network (необязательно) |
| GET | /tx-checks/{id} | Получить проверку транзакции |
| GET | /quota | Остаток проверок, заключений и вызовов API |
| GET | /usage?months=6 | Использование по ключам и месяцам |
Ответ приходит сразу. Пока status равен pending или processing, проверка идёт и оценки нет: повторяйте GET /checks/{id} или GET /tx-checks/{id} раз в несколько секунд. Обычно результат готов за две минуты, максимум за 20. Решение о переводе принимайте только при status = completed или cached. Косая черта в конце адреса не ставится. Успешный ответ приходит в поле data, ошибка в поле error.
Проверка адреса
curl -X POST https://api.arbiter-pro.ru/api/v1/b2b/checks \
-H "X-API-Key: ваш_ключ" \
-H "Content-Type: application/json" \
-d '{"address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", "network": "TRC20"}' {
"data": {
"id": "6f0c1d1e-3b0a-4a51-9c35-0d3f6a2f6c11",
"address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"network": "TRC20",
"status": "completed",
"risk_score": 32,
"risk_level": "medium",
"categories": [
{"name": "counterparty_concentration", "weight": 0.4}
],
"exposure": [
{"category": "exchange", "title": "Биржа", "share": 0.557,
"direct_share": 0.557, "entities": ["Binance", "Bybit"], "evidence": false}
],
"cached": false,
"quota_consumed": true,
"created_at": "2026-10-05T09:14:02Z",
"completed_at": "2026-10-05T09:14:11Z"
}
}risk_score: от 0 до 100; risk_level: low (0-25), medium (26-50), high (51-75), critical (76-100). categories: сигналы риска с весами. exposure: контрагенты с долями в обороте; evidence = true: строка основана на официальном включении в санкционный список.
Проверка транзакции
curl -X POST https://api.arbiter-pro.ru/api/v1/b2b/tx-checks \
-H "X-API-Key: ваш_ключ" \
-H "Content-Type: application/json" \
-d '{"tx_hash": "7871f20fb4d49cab07a2de28cbd359212329dc5f384edc5f95d5a7bef93a7447"}' {
"data": {
"id": "0b6f6a4e-7a57-4f0b-8f0e-3a1c2a9d7e52",
"tx_hash": "7871f20fb4d49cab07a2de28cbd359212329dc5f384edc5f95d5a7bef93a7447",
"network": "TRC20",
"status": "completed",
"risk_score": 32,
"risk_level": "medium",
"from_address": "TQrY8tryqsYVCYS3MFbtffiPp2ccyn4STm",
"to_address": "TBFR8S4BudY28FJQJHw2uLxVxB2epJCXuW",
"asset": "USDT",
"amount": "8015.399555",
"tx_time": "2026-10-05T12:34:33Z",
"transfers": [
{"from": "TQrY8tryqsYVCYS3MFbtffiPp2ccyn4STm",
"to": "TBFR8S4BudY28FJQJHw2uLxVxB2epJCXuW",
"asset": "USDT", "token": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"amount": "8015.399555"}
],
"from": {"…": "полная проверка адреса отправителя"},
"to": {"…": "полная проверка адреса получателя"},
"quota_consumed": true
}
}Оцениваются отправитель и получатель основного перевода, risk_score транзакции равен худшей из двух оценок. Сеть можно не указывать: хеш ищется в TRON, Ethereum и BNB Smart Chain.
Уведомления на ваш сервер
Чтобы не опрашивать GET, укажите адрес своего сервера в кабинете: раздел «API-ключи», блок «Уведомления на ваш сервер». Когда проверка готова, на этот адрес приходит POST с результатом.
| Событие | Когда |
|---|---|
| check.completed | Проверка адреса готова (status = completed или cached) |
| check.failed | Проверка адреса не удалась, лимит не списан |
| tx_check.completed | Проверка транзакции готова |
| tx_check.failed | Проверка транзакции не удалась, лимит не списан |
| watch.risk_raised | Уровень риска кошелька из раздела «Наблюдение» вырос |
| ping | Проверочное событие из кабинета |
POST https://example.ru/aml/webhook
Content-Type: application/json
X-Webhook-Event: check.completed
X-Webhook-Id: 3d5e1c2a-8f0b-4c7e-9a61-2b4f0e7d9c13
X-Webhook-Signature: t=1792400000,v1=5f0c…e81a
{
"id": "3d5e1c2a-8f0b-4c7e-9a61-2b4f0e7d9c13",
"event": "check.completed",
"created_at": "2026-10-19T12:01:00Z",
"data": {
"check_id": "6f0c1d1e-3b0a-4a51-9c35-0d3f6a2f6c11",
"address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"network": "TRC20",
"status": "completed",
"risk_score": 32,
"risk_level": "medium",
"completed_at": "2026-10-19T12:01:00Z"
}
}Заголовок X-Webhook-Signature имеет вид t=время,v1=подпись. Подпись считается как HMAC-SHA256 от строки «время.тело запроса» на секрете из кабинета, в hex. Проверяйте её по сырому телу запроса до разбора JSON, запросы старше пяти минут отклоняйте.
Ответ 2xx означает, что событие доставлено, иначе повтор через 1, 5 и 30 минут, 2, 6, 12 и 24 часа, всего 8 попыток. X-Webhook-Id одинаков во всех попытках одного события, по нему отбрасывайте дубли. Редиректы не выполняются, адрес должен быть https и не во внутренней сети.
Стороны проверенной транзакции проверяются как обычные адреса, по ним тоже приходит check.completed.
import hmac, hashlib, time
def verify(secret: str, header: str, body: bytes) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
if abs(time.time() - int(parts["t"])) > 300:
return False
signed = parts["t"].encode() + b"." + body
expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, parts["v1"])Ошибки
{
"error": {
"code": "QUOTA_EXHAUSTED",
"message": "API call allowance exhausted or not included in the plan",
"request_id": "c2a1…"
}
}| HTTP | Код | Причина |
|---|---|---|
| 400 | INVALID_INPUT | Неверные данные, либо транзакция не подтверждена, не исполнена сетью или не переводит средств. Проверка не списывается. |
| 401 | UNAUTHORIZED | Ключ не передан, неверен или отозван. |
| 402 | QUOTA_EXHAUSTED | Исчерпаны проверки или вызовы API, либо тариф не включает API. |
| 403 | FORBIDDEN | Проверка принадлежит другой учётной записи. |
| 404 | NOT_FOUND | Проверка или транзакция не найдена. |
| 422 | HTTP_ERROR | Не заполнено обязательное поле или неверный формат значения. |
| 429 | RATE_LIMITED | Превышен лимит запросов ключа в минуту. |
| 502 | AML_PROVIDER_ERROR | Источник данных блокчейна недоступен. Повторите запрос, проверка не списывается. |
Вопросы по подключению: info@arbiter-pro.ru. В обращении укажите request_id из ответа.

ARBITER PRO