Документация

Добавьте агент на страницу регистрации, вызовите один эндпоинт с сервера и действуйте по решению.

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

1. Добавьте агент на страницу регистрации

Он собирает сигналы устройства и кладёт короткоживущий токен посетителя в скрытое поле attrelix_visitor каждой формы на странице. Для single-page-приложений есть window.attrelix.token().

<script src="https://attrelix.com/v1.js?v=0bbe74b52d" data-key="pk_live_…" async></script>

// single-page apps: wait for the token before you submit
const visitor = await window.attrelix.token();

2. Проверьте регистрацию с сервера

Отправьте почту, IP клиента и токен посетителя с секретным ключом. Необязательно: external_id (id вашего пользователя), user_agent и card_fingerprint (например, card.fingerprint из Stripe).

curl https://attrelix.com/v1/check \
  -H "Authorization: Bearer $ATTRELIX_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"email":"jdoe+7@gmail.com","ip":"203.0.113.9","visitor":"vt1.…"}'
# Python
r = requests.post("https://attrelix.com/v1/check", timeout=3,
    headers={"Authorization": f"Bearer {SECRET}"},
    json={"email": email, "ip": ip, "visitor": form["attrelix_visitor"]})
decision = r.json().get("decision", "allow") if r.ok else "allow"

3. Действуйте по решению

allow: выдайте бесплатные кредиты. review: попросите то, что стоит ферме денег — карту, номер телефона, — или выдайте меньше кредитов. block: откажите в аккаунте или кредитах. Если вызов не удался, пропускайте: никогда не блокируйте настоящих пользователей из-за нас.

Ключи и токены

  • Публичный ключ (pk_live_…): публичен по задумке. Он стоит на вашей странице и умеет только собирать сигналы — с источников, разрешённых в панели.
  • Секретный ключ (sk_live_…): только на сервере. Запускает проверки и читает результаты. Мы храним лишь его хеш: скопируйте ключ при создании.
  • Токен посетителя: подписан нами, действует 15 минут и для одной проверки, привязан к вашему проекту. Повторно использованный токен или токен из другой сети, чем у регистрации, повышает оценку.

POST /v1/check

Тело запроса (JSON). Передайте хотя бы одно из полей email, ip или visitor.

emailАдрес, который ввёл пользователь.
ipIP клиента в запросе регистрации (не IP вашего сервера).
visitorЗначение attrelix_visitor из формы.
user_agentЗаголовок User-Agent запроса регистрации.
external_idВаш id аккаунта, если он уже существует.
card_fingerprintОтпечаток карты, если карту добавляют при регистрации.

Ответ

decision — allow, review или block. score от 0 до 100: сумма баллов причин с ограничением сверху. У каждой причины стабильный код, который можно логировать или показывать.

{
  "id": "chk_3fJ8kQ2mN7pX1aZb",
  "decision": "block",
  "score": 100,
  "reasons": [
    { "code": "linked_accounts_10", "points": 45, "detail": "14" },
    { "code": "alias_of_existing", "points": 30, "detail": "3 variants of jdoe@gmail.com" },
    { "code": "datacenter_ip", "points": 25, "detail": "aws" }
  ],
  "email":   { "normalized": "jdoe@gmail.com", "disposable": false, "relay": false, "mx": "yes", … },
  "network": { "ip": "3.88.0.1", "type": "datacenter", "provider": "aws", "signups_24h": 2 },
  "device":  { "id": "dev_9c1e…", "token": "valid", "browser": "Firefox 144", "flags": ["canvas_noise"] },
  "linked":  { "accounts": 14, "by_device": 12, "by_card": 0, "cluster": "cl_7q2f…" },
  "latency_ms": 38
}

Ошибки

Ошибки возвращаются в JSON: {"error": code, "message": text}.

401ключ не передан, неизвестен, отозван или не того типа (ключ pk_ на /v1/check).
400тело не JSON или в нём нет ни email, ни ip, ни visitor.
402месячные проверки тарифа израсходованы.
403агент запущен на источнике, который вы не разрешили.
429слишком много запросов с одного адреса.

Оценка

Баллы суммируются, максимум 100. По умолчанию: проверка от 50, блокировка от 80 — оба порога настраиваются. Одноразовый ящик сам по себе ведёт к проверке; ни один отдельный сигнал устройства или сети — нет.

КодБаллыЗначение
invalid_email+50Некорректный адрес
disposable_email+50Одноразовый почтовый домен
no_mx+35Домен не может принимать почту
alias_of_existing+30Другое написание уже известного ящика
relay_email+10Адрес сервиса пересылки
plus_tag+5Метка + или точки Gmail
tor_exit+35Выходной узел Tor
datacenter_ip+25Адрес дата-центра или облака
vpn_ip+20Адрес VPN
ip_signups_24h+103+ аккаунта с этого IP за 24 ч
ip_signups_24h_high+2510+ аккаунтов с этого IP за 24 ч
subnet_burst+1510+ аккаунтов из этой подсети за 1 ч
automation_webdriver+40Автоматизация через WebDriver
headless_browser+40Headless-браузер
automation_cdp+10Автоматизация через протокол DevTools (Puppeteer, Playwright)
antidetect_browser+15Антидетект-браузер (несколько маскировок сразу)
headless_viewport+15Окно без панели и вкладок браузера
webgl_os_mismatch+25Видеокарта принадлежит другой операционной системе
memory_cpu_mismatch+10Число ядер и объём памяти не согласуются
no_human_interaction+30Отправлено мгновенно, без ввода, движения мыши и касаний
instant_signup+25Заполнено и отправлено в течение секунды после загрузки страницы
os_mismatch+20Операционная система противоречит сама себе
browser_mismatch+20Браузер противоречит своему user agent
fonts_mismatch+15Шрифты не совпадают с заявленной системой
canvas_noise+15Случайный отпечаток canvas
software_renderer+15Программная графика (виртуальная машина или headless)
zero_window+15Окно без размеров
permissions_mismatch+15Противоречивые состояния разрешений
no_plugins+10Десктопный Chrome без плагинов
no_languages+10Браузер без языков
utc_timezone+5Часы в UTC
token_missing0–100Нет токена посетителя (агент не загрузился или заблокирован)
token_invalid+30Поддельный или чужой токен посетителя
token_replayed+35Токен посетителя уже использован
token_expired+10Токен посетителя истёк
token_ip_mismatch+8Токен собран в другой сети
token_ua_mismatch+15Токен собран другим браузером
linked_accounts+15Связан с другими аккаунтами
linked_accounts_3+30Связан с 3+ аккаунтами
linked_accounts_10+45Связан с 10+ аккаунтами
shared_card+30Карта используется другим аккаунтом
device_burst+155+ проверок с этого устройства за 1 ч

Источники данных

Одноразовые домены: проект disposable-email-domains (CC0) и disposable/disposable-email-domains (MIT), обновление ежедневно. Диапазоны дата-центров: опубликованные списки AWS, Google Cloud, Oracle Cloud, DigitalOcean и Linode. Tor: список выходных узлов Tor Project, обновление каждый час.

Сейчас: 98,644 одноразовых доменов и 21,665 диапазонов.