Перейти к содержимому Реклама на AFF.TOP от 50 000 посетителей в месяц из поиска · $3000 за 3 месяца Написать @dumay Реклама на сайте 📣 Ваша реклама здесь от 50 000 посетителей в месяц из поиска $3000за 3 месяца Написать @dumay Реклама на сайте 🚀 Ваша реклама здесь от 50 000 посетителей в месяц из поиска $3000за 3 месяца Написать @dumay
🔌

ПУБЛИЧНЫЙ API

Подключай к боту, сервису или таблице. GET-запросы, без ключей, ответ в JSON.

📊 1,739 жалоб в базе ⚡ Без ключей · Бесплатно
📡 Интерактивная документация (OpenAPI / Swagger UI) →
⚡ Quickstart — за 30 секунд
1. Запрос (curl / terminal)
curl https://aff.top/api/check/mostbet
2. Ответ (200 OK, JSON)
{
  "found": true,
  "username": "mostbet",
  "reports_count": 23,
  "categories": ["gambling"]
}
💡 found: false = username чист ИЛИ ещё не проверялся — это не гарантия
Base URL
https://aff.top

Все запросы — GET, без авторизации. Формат ответа — JSON. Без ключей, без rate-limits на чтение.

GET

/api/check/{username}

— проверить спамера

Проверяет, есть ли username в базе. Передай с @ или без — работает в обоих случаях. Если найден — вернёт статистику и связанные компании.

Параметры пути

Параметр Тип Описание
username string Telegram username. Знак @ необязателен.
Пример запроса curl
curl https://aff.top/api/check/spammer_username
200 — найден
{
  "found": true,
  "username": "spammer_username",
  "reports_count": 23,
  "confidence_max": 75,
  "first_seen": "2026-01-15T10:23:00Z",
  "last_seen": "2026-03-10T18:41:00Z",
  "categories": ["gambling", "crypto"],
  "companies": ["Mostbet", "1xBet"],
  "url": "https://aff.top/reports?q=spammer_username"
}
404 — не найден
{
  "found": false,
  "username": "clean_user",
  "reports_count": 0
}
GET

/api/companies

— рейтинг компаний

Компании по числу жалоб. Есть пагинация и фильтр по slug.

Query параметры

Параметр Тип По умолчанию Описание
limit integer 50 Записей на страницу. Макс. 200.
page integer 1 Номер страницы.
slug string — Фильтр по конкретной компании.
Примеры
curl "https://aff.top/api/companies?limit=10&page=1"
curl "https://aff.top/api/companies?slug=mostbet"
200 OK
{
  "data": [
    {
      "id": 1,
      "name": "Mostbet",
      "slug": "mostbet",
      "reports_count": 142,
      "url": "https://aff.top/company/mostbet"
    },
    ...
  ],
  "total": 8029,
  "page": 1,
  "pages": 161
}
GET

/api/spammers

— список спамеров

Спамеры с известным username. Можно фильтровать по категории или искать конкретный аккаунт.

Query параметры

Параметр Тип По умолчанию Описание
limit integer 50 Записей на страницу. Макс. 200.
username string — Поиск конкретного пользователя.
category string — Фильтр по категории: gambling crypto nutra traffic affiliate job adult forex tools payments infobiz other
Примеры
curl "https://aff.top/api/spammers?limit=20"
curl "https://aff.top/api/spammers?category=gambling"
curl "https://aff.top/api/spammers?username=someuser"
200 OK
{
  "data": [
    {
      "username": "spammer123",
      "reports_count": 14,
      "last_seen": "2026-03-10T18:41:00Z",
      "category": "gambling",
      "url": "https://aff.top/reports?q=spammer123"
    },
    ...
  ],
  "total": 187
}
GET

/api/search

— live-поиск

Поиск по компаниям и спамерам одновременно. Возвращает оба типа результатов.

Query параметры

ПараметрТипОписание
qstringПоисковый запрос (мин. 2 символа). Компания, @username или домен.
Пример
curl "https://aff.top/api/search?q=mostbet"
200 OK
{
  "companies": [
    {"name": "Mostbet", "url": "/company/mostbet", "count": 142, "cat": "gambling"}
  ],
  "spammers": [
    {"username": "mostbet_agent", "url": "/reports?q=mostbet_agent", "count": 5}
  ]
}
GET

/api/company/{slug}

— проверить компанию

Подробная информация о компании: категория, тренд за неделю, алиасы, ссылки на бейдж и карточку.

Параметры пути

ПараметрТипОписание
slugstringSlug или название компании.
Пример
curl https://aff.top/api/company/mostbet
200 OK
{
  "found": true,
  "name": "Mostbet",
  "slug": "mostbet",
  "category": "gambling",
  "reports_count": 142,
  "week_trend": 12.5,
  "last_7_days": 9,
  "aliases": ["мосбет", "mostbet.com"],
  "badge_url": "/api/badge/mostbet.svg",
  "card_url": "/card/mostbet",
  "url": "/company/mostbet"
}
GET

/api/widget/{slug}

— данные для виджета

Компактные данные для встраиваемых виджетов: тренд, график за 7 дней, ссылки на бейдж и embed-виджет.

Параметры пути

ПараметрТипОписание
slugstringSlug компании.
200 OK
{
  "found": true,
  "name": "Mostbet",
  "slug": "mostbet",
  "reports_count": 142,
  "trend": "+12.5%",
  "trend_direction": "up",
  "last_7_days": [3, 1, 0, 2, 1, 0, 2],
  "top_category": "gambling",
  "badge_url": "/api/badge/mostbet.svg",
  "embed_url": "/embed/counter-dark/mostbet",
  "page_url": "/company/mostbet"
}
POST

/api/fingerprint/match

— матч отпечатка против библиотеки

Принимает набор сигналов (JA4 TLS, canvas hash, WebGL renderer, audio hash и др.) и возвращает известный профиль — браузер/антидетект/бот/HTTP-клиент. Полезно для автоматизированных антифрод-пайплайнов: один POST даёт verdict + confidence.

Endpoint stateless — наблюдения в библиотеку не попадают. Результат кэшируется на 5 минут. Видны только публичные профили (trust: canonical, community, либо crowdsource с ≥50 подтверждений). Открытый каталог: /tools/fingerprint/library.

Тело запроса

Поле Тип Описание
signals object Ключ → значение сигнала. Поддерживаемые ключи: ja4, ja3, ja4_t, webgl_renderer, canvas_geom, canvas_text, audio, fonts_hash, akamai_h2.

Лимиты

60 запросов в минуту с одного IP. Размер тела — до 20 сигналов, каждый до 255 символов.

Пример запроса curl
curl -X POST https://aff.top/api/fingerprint/match \
  -H "Content-Type: application/json" \
  -d '{"signals": {"ja4": "t13d1516h2_8daaf6152771_02713d6af862"}}'
200 — профиль найден
{
  "match": {
    "profile": {
      "id": 42,
      "label": "Chrome 147 / Macos",
      "kind": "browser",
      "name": "Chrome",
      "os_family": "macos",
      "trust_level": "community",
      "observations": 342
    },
    "confidence": 0.87,
    "verdict": "high",
    "matched_signals": ["ja4"],
    "unmatched_signals": [],
    "top_candidates": [...]
  },
  "cached": true
}
200 — не найден
{
  "match": {
    "profile": null,
    "verdict": "unknown",
    "confidence": 0,
    "matched_signals": [],
    "top_candidates": []
  },
  "cached": false
}
Пример клиента Python
import requests

r = requests.post(
    "https://aff.top/api/fingerprint/match",
    json={"signals": {
        "ja4": "t13d1516h2_8daaf6152771_02713d6af862",
        "webgl_renderer": "ANGLE (Apple, Apple M2)",
    }}
)
data = r.json()
if data["match"]["profile"]:
    print(f"{data['match']['profile']['label']} — {data['match']['verdict']}")
else:
    print("unknown browser")

Verdict levels

  • high — confidence ≥ 0.75. Совпадение достоверное, можно доверять решению.
  • medium — confidence 0.45..0.74. Вероятно, но проверьте дополнительные сигналы.
  • low — есть совпадения, но confidence низкий. Не используйте для автоматических решений.
  • unknown — ни один сигнал не матчится в публичной части библиотеки.

🏷️ Виджеты и бейджи

GET /api/badge/{slug}.svg — SVG-бейдж для сайта
<img src="https://aff.top/api/badge/mostbet.svg" alt="aff.top badge">
GET /api/card/{slug}.svg — SVG-карточка с деталями
GET /embed/{style}/{slug} — iframe-виджет
Стили: badge, counter-dark, counter-light, banner-dark, banner-light
<iframe src="https://aff.top/embed/counter-dark/mostbet" width="200" height="60"></iframe>

🛡️ API защиты чатов

GET /api/chat/{username}/status — статус чата (активен ли бот, статистика)
GET /api/chat/{username}/badge.svg — SVG-бейдж защиты чата
GET /api/detection-rules — правила детекции спама в JSON (публичная прозрачность)

💡 Примеры использования

Telegram бот на Python

import requests

def is_spammer(username):
    r = requests.get(
        f"https://aff.top/api/check/{username}"
    )
    data = r.json()
    return data.get("found", False)

# В хэндлере нового участника:
if is_spammer(new_member.username):
    await bot.ban_chat_member(chat_id, new_member.id)

JavaScript / Node.js

async function checkSpammer(username) {
  const res = await fetch(
    `https://aff.top/api/check/${username}`
  );
  const data = await res.json();
  return {
    isSpammer: data.found,
    reports: data.reports_count,
    companies: data.companies ?? [],
  };
}

PHP

function checkSpammer(string $username): bool {
    $response = file_get_contents(
        "https://aff.top/api/check/{$username}"
    );
    $data = json_decode($response, true);
    return $data['found'] ?? false;
}

Google Sheets / Apps Script

function CHECK_SPAM(username) {
  const url = "https://aff.top/api/check/"
    + username.replace("@", "");
  const r = UrlFetchApp.fetch(url);
  const d = JSON.parse(r.getContentText());
  return d.found ? d.reports_count : 0;
}

📋 Ограничения и заметки

🔓 Открытые данные

Данные открыты для исследователей, разработчиков и аналитиков.

📡
RSS Feed
/rss/all
📊
CSV дамп
Еженедельно
📋
Все компании
/companies

Получил спам — перешли боту, добавим в базу

📩 Написать @SPAMpartnersBOT