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 |
| Состояние API | GET /api/v2/status (без ключа, расширение AbuseIPDB.RU) |
Важно: база жалоб у AbuseIPDB.RU — локальная. Оценка
abuseConfidenceScoreсчитается по жалобам, полученным нашим сервисом, поэтому для одного и того же адреса она может отличаться от значения на abuseipdb.com. Это нормально: мы не перепродаём чужую базу, а ведём свою.
Миграция с abuseipdb.com за одну минуту
Миграция — это замена домена. Никаких изменений в логике клиента, в форматах тела запроса, в разборе ответа или в обработке ошибок не требуется.
| Было (abuseipdb.com) | Стало (abuseipdb.ru) |
|---|---|
https://api.abuseipdb.com/api/v2/check | https://api.abuseipdb.ru/api/v2/check |
https://api.abuseipdb.com/api/v2/reports | https://api.abuseipdb.ru/api/v2/reports |
https://api.abuseipdb.com/api/v2/report | https://api.abuseipdb.ru/api/v2/report |
https://api.abuseipdb.com/api/v2/blacklist | https://api.abuseipdb.ru/api/v2/blacklist |
https://api.abuseipdb.com/api/v2/check-block | https://api.abuseipdb.ru/api/v2/check-block |
https://api.abuseipdb.com/api/v2/bulk-report | https://api.abuseipdb.ru/api/v2/bulk-report |
https://api.abuseipdb.com/api/v2/clear-address | https://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.com | AbuseIPDB.RU | Примечание |
|---|---|---|
www.abuseipdb.com/check/{ip} | /check/{ip} | карточка IP с жалобами |
/report | /report | форма жалобы |
/sitemap (витрина блэклиста) | /blacklist | плюс 302 с /sitemap |
/categories | /categories | справочник 23 категорий |
docs.abuseipdb.com | docs.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']);
Быстрый старт
- Получите ключ в личном кабинете:
https://abuseipdb.ru/dashboard→ «API-ключи» → «Создать ключ». - Проверьте адрес:
GET /api/v2/check. - Отправьте тестовую жалобу:
POST /api/v2/reportс публичным адресом, которым вы владеете (локальные/приватные/служебные адреса отклоняются с422; повторная жалоба на тот же адрес в течение 15 минут даёт429). - Заберите блэклист:
GET /api/v2/blacklist?confidenceMinimum=90. - Проверьте подсеть:
GET /api/v2/check-block?network=192.168.0.0/24. - Для массовой отправки соберите 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 | репутация одного IP | CHECK |
GET | /api/v2/reports | жалобы по одному IP с пагинацией | REPORTS |
POST | /api/v2/report | отправить одну жалобу | REPORT |
GET | /api/v2/blacklist | чёрный список, JSON или plaintext | BLACKLIST |
GET | /api/v2/check-block | сводка по подсети CIDR | CHECK-BLOCK |
POST | /api/v2/bulk-report | до 10 000 жалоб из CSV | BULK-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.
Безопасность
| Правило | Как выполнено |
|---|---|
| Только HTTPS | HTTP-запросы перенаправляются на 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 — взлом.
Что читать дальше
- Проверка IP (CHECK) — основной эндпоинт, разбор каждого поля ответа.
- Отправить жалобу (REPORT) — категории, дедупликация, тестовые адреса.
- Чёрный список (BLACKLIST) — plaintext, фильтры, лимиты тарифа.
- Лимиты запросов и Обработка ошибок — обязательны для продакшена.
- Fail2Ban, CSF, Suricata — готовая интеграция для сервера.
Версия 2.2.0 · AbuseIPDB.RU · webmaster@abuseipdb.ru · source: docs/ABUSE-API.md