Тема
Войти Регистрация

API v2: обзор и миграция с AbuseIPDB

Этот API совместим с API AbuseIPDB v2: замените abuseipdb.com на abuseipdb.ru, остальной код не меняется. Пути /api/v2/*, заголовок Key, параметры запросов, конверты ответов и коды ошибок — те же, что у docs.abuseipdb.com.

Раздел «API v2»: Обзор · Проверка IP (CHECK) · Жалобы по IP (REPORTS) · Отправить жалобу (REPORT) · Чёрный список (BLACKLIST) · Проверка подсети (CHECK-BLOCK) · Массовые жалобы (BULK-REPORT) · Удаление жалоб (CLEAR-ADDRESS) · Лимиты · Ошибки · Fail2Ban, CSF, Suricata · FAQ

Что такое API v2

API v2 — программный интерфейс к базе жалоб AbuseIPDB.RU. Через него можно проверить репутацию IP-адреса, получить список жалоб, выгрузить чёрный список, отправить одну или десять тысяч жалоб и посмотреть, какие адреса внутри подсети уже отмечались.

ЧтоАдрес
База API (основная)https://api.abuseipdb.ru/api/v2/
База API (зеркало на апексе)https://abuseipdb.ru/api/v2/
Документацияhttps://abuseipdb.ru/docs/abuse-api и https://docs.abuseipdb.ru/docs/abuse-api
Человеческие страницы/check, /report, /reports, /blacklist, /categories
Состояние APIGET /api/v2/status (без ключа, расширение AbuseIPDB.RU)

Важно: база жалоб у AbuseIPDB.RU — локальная. Оценка abuseConfidenceScore считается по жалобам, полученным нашим сервисом, поэтому для одного и того же адреса она может отличаться от значения на abuseipdb.com. Это нормально: мы не перепродаём чужую базу, а ведём свою.

Миграция с abuseipdb.com за одну минуту

Миграция — это замена домена. Никаких изменений в логике клиента, в форматах тела запроса, в разборе ответа или в обработке ошибок не требуется.

Было (abuseipdb.com)Стало (abuseipdb.ru)
https://api.abuseipdb.com/api/v2/checkhttps://api.abuseipdb.ru/api/v2/check
https://api.abuseipdb.com/api/v2/reportshttps://api.abuseipdb.ru/api/v2/reports
https://api.abuseipdb.com/api/v2/reporthttps://api.abuseipdb.ru/api/v2/report
https://api.abuseipdb.com/api/v2/blacklisthttps://api.abuseipdb.ru/api/v2/blacklist
https://api.abuseipdb.com/api/v2/check-blockhttps://api.abuseipdb.ru/api/v2/check-block
https://api.abuseipdb.com/api/v2/bulk-reporthttps://api.abuseipdb.ru/api/v2/bulk-report
https://api.abuseipdb.com/api/v2/clear-addresshttps://api.abuseipdb.ru/api/v2/clear-address

До и после — одна и та же команда, отличается только домен:

# Было
curl -G https://api.abuseipdb.com/api/v2/check \
  --data-urlencode "ipAddress=8.8.8.8" \
  -d maxAgeInDays=90 \
  -H "Key: YOUR_API_KEY" \
  -H "Accept: application/json"

# Стало: заменили только домен
curl -G https://api.abuseipdb.ru/api/v2/check \
  --data-urlencode "ipAddress=8.8.8.8" \
  -d maxAgeInDays=90 \
  -H "Key: YOUR_API_KEY" \
  -H "Accept: application/json"
Что остаётся неизменнымЧто нужно поменять
Заголовок Key: <ключ>Домен api.abuseipdb.com → api.abuseipdb.ru
Параметры ipAddress, maxAgeInDays, page, perPage, categories, comment, network и т.д.Ключ API (выдаётся в личном кабинете AbuseIPDB.RU)
Конверты {"data":…}, {"meta":…,"data":[…]}, {"errors":[…]}—
Коды 400/401/402/403/404/422/429—
Поведение X-RateLimit-*, Retry-After, X-Generated-At—
Форматы дат ISO 8601 (2026-11-07T02:00:00+00:00)—

Для Fail2Ban миграция — это одна строка в actionban (см. Fail2Ban, CSF, Suricata):

# было: https://api.abuseipdb.com/api/v2/report
# стало: https://api.abuseipdb.ru/api/v2/report

Соответствие путей сайта

AbuseIPDB.comAbuseIPDB.RUПримечание
www.abuseipdb.com/check/{ip}/check/{ip}карточка IP с жалобами
/report/reportформа жалобы
/sitemap (витрина блэклиста)/blacklistплюс 302 с /sitemap
/categories/categoriesсправочник 23 категорий
docs.abuseipdb.comdocs.abuseipdb.ru, /docs/abuse-apiэтот раздел
/fail2ban, /csf, /suricata/docs/abuse-api-fail2banинструкции по интеграциям
/faq/docs/abuse-api-faqвопросы и ответы
/statistics/reportsлента последних жалоб
/bulk-check/checkмассовая проверка через API: /api/v2/check-block
/bulk-report/reportмассовая отправка через API: /api/v2/bulk-report
/tools/subnetcalc, /tools/ip-address-converter/checkкалькулятор подсетей — через /api/v2/check-block

Аутентификация

Каждый запрос должен быть аутентифицирован ключом API. Ключ выдаётся в личном кабинете: https://abuseipdb.ru/dashboard → раздел «API-ключи» (если раздела не видно в вашей учётной записи — напишите на support@abuseipdb.ru). Формат ключа — 80 шестнадцатеричных символов (как у AbuseIPDB), срок действия и отзыв настраиваются там же.

Основной способ — заголовок Key:

curl -G https://api.abuseipdb.ru/api/v2/check \
  --data-urlencode "ipAddress=127.0.0.1" \
  -H "Key: YOUR_OWN_API_KEY" \
  -H "Accept: application/json"

Принимаются и другие способы (расширение AbuseIPDB.RU — старые клиенты и отладка работают без правок):

СпособПримерКомментарий
Заголовок Key-H "Key: YOUR_API_KEY"рекомендуется
Authorization: Bearer-H "Authorization: Bearer YOUR_API_KEY"удобно для современных HTTP-клиентов
Query-параметр?key=YOUR_API_KEYтолько строчными буквами; попадает в логи, поэтому не рекомендуется
Поле формыkey=YOUR_API_KEYдля POST-запросов

Пример на Python:

import requests

API_KEY = "YOUR_OWN_API_KEY"
BASE = "https://api.abuseipdb.ru/api/v2"

def check_ip(ip: str) -> dict:
    response = requests.get(
        f"{BASE}/check",
        params={"ipAddress": ip, "maxAgeInDays": 90},
        headers={"Key": API_KEY, "Accept": "application/json"},
        timeout=15,
    )
    response.raise_for_status()
    return response.json()["data"]

print(check_ip("8.8.8.8"))

Пример на PHP (без внешних зависимостей, чтобы работало на любом хостинге):

<?php
$apiKey = 'YOUR_OWN_API_KEY';
$url = 'https://api.abuseipdb.ru/api/v2/check?' . http_build_query([
    'ipAddress' => '8.8.8.8',
    'maxAgeInDays' => 90,
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Key: ' . $apiKey,
        'Accept: application/json',
    ],
    CURLOPT_TIMEOUT => 15,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);

if ($status !== 200) {
    // {"errors":[{"detail":"…","status":422,"source":{"parameter":"ipAddress"}}]}
    throw new RuntimeException('API v2 error: HTTP ' . $status . ' ' . $body);
}

$data = json_decode($body, true)['data'];
printf("%s: %d%% (%d жалоб)\n", $data['ipAddress'], $data['abuseConfidenceScore'], $data['totalReports']);

Быстрый старт

  1. Получите ключ в личном кабинете: https://abuseipdb.ru/dashboard → «API-ключи» → «Создать ключ».
  2. Проверьте адрес: GET /api/v2/check.
  3. Отправьте тестовую жалобу: POST /api/v2/report с публичным адресом, которым вы владеете (локальные/приватные/служебные адреса отклоняются с 422; повторная жалоба на тот же адрес в течение 15 минут даёт 429).
  4. Заберите блэклист: GET /api/v2/blacklist?confidenceMinimum=90.
  5. Проверьте подсеть: GET /api/v2/check-block?network=192.168.0.0/24.
  6. Для массовой отправки соберите CSV и вызовите POST /api/v2/bulk-report.
# 1. Проверка адреса
curl -sG https://api.abuseipdb.ru/api/v2/check \
  --data-urlencode "ipAddress=8.8.8.8" \
  -d maxAgeInDays=90 -d verbose \
  -H "Key: $API_KEY" -H "Accept: application/json"

# 2. Тестовая жалоба (публичный адрес; локальные/приватные → 422)
curl -s https://api.abuseipdb.ru/api/v2/report \
  --data-urlencode "ip=89.205.125.160" \
  -d categories=18,22 \
  --data-urlencode "comment=SSH login attempts with user root." \
  -H "Key: $API_KEY" -H "Accept: application/json"

Карта эндпоинтов

МетодПутьНазначениеДокументация
GET/api/v2/checkрепутация одного IPCHECK
GET/api/v2/reportsжалобы по одному IP с пагинациейREPORTS
POST/api/v2/reportотправить одну жалобуREPORT
GET/api/v2/blacklistчёрный список, JSON или plaintextBLACKLIST
GET/api/v2/check-blockсводка по подсети CIDRCHECK-BLOCK
POST/api/v2/bulk-reportдо 10 000 жалоб из CSVBULK-REPORT
DELETE/api/v2/clear-addressудалить свои жалобы на адресCLEAR-ADDRESS
GET/api/v2/statusсостояние и счётчики (расширение)Лимиты

Дневные лимиты, заголовки X-RateLimit-* и Retry-After — Лимиты запросов. Конверт ошибок, коды 401/403/422/429 и примеры — Обработка ошибок.

Конверты ответов

API v2 всегда отвечает в формате JSON:API-подобных конвертов, как и AbuseIPDB:

{ "data": { "ipAddress": "8.8.8.8", "abuseConfidenceScore": 0 } }
{ "meta": { "generatedAt": "2026-11-07T02:00:00+00:00" }, "data": [ ] }
{ "errors": [ { "detail": "The max age in days must be between 1 and 365.", "status": 422 } ] }

Блэклист в режиме plaintext отвечает text/plain, по одному IP в строке; отметка свежести приходит в заголовке X-Generated-At.

Безопасность

ПравилоКак выполнено
Только HTTPSHTTP-запросы перенаправляются на HTTPS (302)
Ключ — не в URLРекомендуется заголовок Key; ключ в query-строке попадает в журналы сервера и прокси
Ключ хранится у нас в виде хэшаНа сервере хранится SHA-256 и префикс ключа; сам ключ показывается один раз при создании
Отзыв ключаОтзыв в кабинете; запросы отозванного ключа получают 401
Ограничение по IPДля каждого ключа видно последнее место использования; при компрометации отзовите ключ и создайте новый
ЛогиКлюч не пишется в журналы приложения и не возвращается в ответах
CORSРазрешён (Access-Control-Allow-Origin: *) — это расширение AbuseIPDB.RU; ключ всё равно не должен попадать в публичный JS-код
PIIВ комментариях к жалобам не должно быть персональных данных: комментарии публичны (см. REPORT)

AbuseIPDB.RU никогда не запрашивает ключ API или пароль в письмах поддержки. Если кто-то просит ключ — это фишинг.

Чем AbuseIPDB.RU дополняет AbuseIPDB.com

Расширения помечены явно; всё, что не помечено, ведёт себя как на abuseipdb.com.

ВозможностьСтатус
Ключ API в заголовке Key, конверты и параметры AbuseIPDBсовместимо 1:1
Authorization: Bearer <ключ>расширение RU
GET /api/v2/status без ключа (состояние и счётчики)расширение RU
CORS на всех ответах v2расширение RU (на abuseipdb.com CORS выключен)
GET-алиасы для report, bulk-report, clear-addressрасширение RU (удобно для curl-отладки)
onlyCountries/exceptCountries/ipVersion без подпискирасширение RU (на abuseipdb.com это платные фильтры)
Один общий дневной счётчик на все эндпоинты v2отличие RU: у abuseipdb.com счётчик на каждый эндпоинт отдельный
Локальная база и своя формула abuseConfidenceScoreотличие RU: числа не совпадают с abuseipdb.com для того же IP
Русский интерфейс и документация, поддержка на русскомдоработка RU

Категории жалоб

Категории — те же 23 идентификатора, что у AbuseIPDB; полная таблица с русскими названиями и описаниями — в REPORT и на странице /categories. Кратко: 18 — брутфорс, 22 — SSH, 14 — сканирование портов, 21 — атака на веб-приложение, 15 — взлом.

Что читать дальше

  1. Проверка IP (CHECK) — основной эндпоинт, разбор каждого поля ответа.
  2. Отправить жалобу (REPORT) — категории, дедупликация, тестовые адреса.
  3. Чёрный список (BLACKLIST) — plaintext, фильтры, лимиты тарифа.
  4. Лимиты запросов и Обработка ошибок — обязательны для продакшена.
  5. Fail2Ban, CSF, Suricata — готовая интеграция для сервера.

Версия 2.2.0 · AbuseIPDB.RU · webmaster@abuseipdb.ru · source: docs/ABUSE-API.md