Документация
Добавьте агент на страницу регистрации, вызовите один эндпоинт с сервера и действуйте по решению.
Быстрый старт
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.
| Адрес, который ввёл пользователь. | |
| ip | IP клиента в запросе регистрации (не 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 | +10 | 3+ аккаунта с этого IP за 24 ч |
| ip_signups_24h_high | +25 | 10+ аккаунтов с этого IP за 24 ч |
| subnet_burst | +15 | 10+ аккаунтов из этой подсети за 1 ч |
| automation_webdriver | +40 | Автоматизация через WebDriver |
| headless_browser | +40 | Headless-браузер |
| 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_missing | 0–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 | +15 | 5+ проверок с этого устройства за 1 ч |
Источники данных
Одноразовые домены: проект disposable-email-domains (CC0) и disposable/disposable-email-domains (MIT), обновление ежедневно. Диапазоны дата-центров: опубликованные списки AWS, Google Cloud, Oracle Cloud, DigitalOcean и Linode. Tor: список выходных узлов Tor Project, обновление каждый час.
Сейчас: 98,644 одноразовых доменов и 21,665 диапазонов.