Большинство антифрод API продают 'чёрный ящик'. Отправляешь данные, получаешь вердикт. Что засчиталось, какой сигнал перевесил score, во что обходится ложное срабатывание, всё за семью печатями. WHOX устроен иначе. Сигналы документированы, latency опубликована, формат ответа стабилен, free tier позволяет прогнать тысячу запросов и сравнить с собственным логом подтверждённых хороших и плохих сессий. Эта страница про то, что API решает на техническом уровне: извлечение fingerprint, детекция анонимайзеров, поведенческий анализ, диагностика утечек. И про то, где он не подходит. Интеграция занимает около получаса, если backend-роут под привязку вердикта уже существует.
Архитектура без маркетинга
API разнесён по двум границам не случайно. Браузерный SDK собирает fingerprint-материал. Canvas, WebGL, WebGPU, audio context, шрифты, JA4 / TLS-рукопожатия, поведенческие сигналы. И постит на ваш бэкенд, не напрямую в WHOX. Бэкенд уже отправляет payload на /api/v1/fp/ingest с серверным API-ключом.
Причин две. Первая: браузерный ключ всплывёт в DevTools через минуту после релиза, серверный ключ не покидает вашу инфраструктуру. Вторая: вердикт нужен в момент, когда бэкенд решает совершить операцию. Создать аккаунт, провести оплату, опубликовать комментарий. Привязка вердикта к существующей trust-границе означает, что результат приходит туда, где он реально нужен. Не в боковой канал, который никто не читает. Это та же логика, по которой кардиомонитор стоит в операционной, а не на ресепшене.
req_id от ingest позволяет получить полный результат позже либо стримить промежуточные сигналы через SSE. Для глубоких сканирований (DNS-утечка, WebRTC, реальный IP) время растягивается до нескольких секунд. SSE удерживает пользователя на progress bar, а не на повисшем спиннере.
Что приходит в ответе и почему именно так
Базовый ответ содержит trust score (0-100), разбивку по категориям и объект флагов. Score намеренно не бинарный. Бинарный 'хороший/плохой' заставлял бы всех клиентов жить с одним порогом, а правильная отсечка для платёжного процессинга и для системы комментариев отличается на порядки. Разбивка по категориям позволяет взвешивать сигналы под себя: антифрод фокусируется на анонимайзерах, abuse-команды смотрят на поведение и консистентность.
Флаги это булевые факты под капотом score: datacenter IP, признаки автоматизации, headless, эвристики на residential proxy. Их стоит логировать. За две-три недели трафика собирается собственный ground truth, и веса score можно пересчитать под наблюдаемую конверсию.
Отдельно fp_digest. Стабильный хеш, по которому можно ловить 'то же устройство, другая сессия' без хранения исходного fingerprint. Большинство клиентов сохраняют digest плюс флаги, остальное выбрасывают. Сырой отпечаток никогда не покидает пайплайн обработки WHOX. Это упрощает вашу же историю про data retention, когда придёт аудит.
Бюджет latency, куда уходят 50 миллисекунд
Заявленный таргет это sub-50ms p95 для быстрого пути: /ingest плюс /result по тёплому кешу. За кулисами бюджет раскладывается примерно так. 4-8 мс на TLS и гео-роутинг до ближайшего edge. 6-12 мс на ingest-to-result через внутреннюю очередь WHOX. 10-25 мс на извлечение сигналов и скоринг. Остальное ваш сетевой egress.
Две вещи легко выводят из этого окна. Холодный ingest из редкого региона может выскочить до 80-120 мс, когда поблизости нет тёплой ноды. Edge-присутствие помогает, маршрутизация ISP пользователя помогает сильнее.
Второй проблемный кейс это deep-scan, /fp/deep. DNS-резолвинг, перебор WebRTC-кандидатов, проба реального IP завязаны на сеть пользователя, не на нашу. Работа идёт в его доме, не в нашем. Эти запросы стабильно занимают 1.5-4 секунды. Не ставьте deep-scan на критический путь чекаута. Используйте его на регистрации, на первом логине с нового устройства, на подозрительных поведенческих сигналах. Там, где можно показать UI 'проверяем' без потери конверсии. Большинство клиентов запускают deep-scan один раз на пару устройство+отпечаток и кешируют вердикт на сессию.
Что мы храним и что нет
Сырой fingerprint-материал обрабатывается в памяти и выбрасывается после цикла ответа. Остаются: digest, score, флаги, timestamp. Логи стираются через тридцать дней, если клиент не вынул их раньше через API.
Кросс-клиентского профилирования нет. Пространство ваших req_id принадлежит только вам. Один и тот же браузер у двух клиентов WHOX выглядит как два несвязанных digest. Это не маркетинговая поза, это структурное решение. GDPR и российский 152-ФЗ относятся к персистентным кросс-сайт идентификаторам как к персональным данным, и связываться с этой регуляторной нагрузкой не хочется.
Цена честная: WHOX не скажет 'это устройство вчера выглядело подозрительно у клиента X'. Threat-intelligence потребители, которым нужна такая возможность, идут к другому классу продуктов. Data clearinghouses, коммерческие feed'ы вроде MaxMind. WHOX строится вокруг сигналов одного клиента, а не пулинга репутации. Если фрод-петля действительно требует кросс-тенант данных, гибридные сетапы давно стандарт: WHOX на per-session fingerprint, отдельный reputation feed на кросс-тенант слой.
Где этот API не подойдёт
Три случая, когда WHOX это не тот инструмент.
Первый: card-not-present фрод на больших объёмах. Там играют вендоры, которые ингестят весь контекст покупки (корзина, история биллинга, BIN) и крутят отдельный risk score под эту узкую задачу. На своём поле они переиграют любой fingerprint API общего назначения. Сигнальная смесь принципиально другая.
Второй: KYC и AML. Там нужны сканирование документов, биометрический liveness check, проверки против санкционных списков. WHOX отвечает на вопрос 'это похоже на живого человека в живом браузере', но не на 'кто этот человек'.
Третий: ранние эксперименты с трафиком в десятки регистраций в день. Free tier покроет, но затраты на интеграцию (backend-роут, мониторинг, калибровка под ваши данные) одинаковы для десяти и десяти миллионов регистраций. Если вы на ранней стадии, хватит самописной IP-репутации против бесплатного DNSBL плюс базового списка разрешённых User-Agent. Тратьте человеко-неделю на интеграцию когда фрод-потери начнут перевешивать стоимость этой недели. Математика неудобная, но честная: API дешёвый, интеграция это и есть реальная цена.