PRODUCTION

pfpulse.tech API

Решение капч Яндекса и генерация Android-отпечатков — через REST API. Два HTTP-запроса для капч (create + result), один GET для fingerprints. Разворачивать ничего не нужно.

SmartCaptcha
98.5%
точность · 80-120 мс
PazlCaptcha
99.4%
exact match · 17 мс
TextCaptcha
97.8%
OCR · ~1 с · бесплатно

Аутентификация

API поддерживает два способа авторизации. Для внешних интеграций используйте API-ключ:

Заголовок X-API-Key (рекомендуемый)
curl -X POST https://pfpulse.tech/captcha/create \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"SmartCaptcha","click":"...","task":"..."}'
Query-параметр (альтернативный)
curl -X POST "https://pfpulse.tech/captcha/create?key=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"SmartCaptcha","click":"...","task":"..."}'

API-ключ создаётся в личном кабинете. Для Fingerprint API — дополнительно нужна привязка IP (whitelist).

Серверы

API доступен через два маршрута. Оба принимают одинаковые ключи и запросы — разница только в сетевом маршруте.

Мировой
https://pfpulse.tech

Оптимальный маршрут для клиентов вне РФ.

Россия
https://api.pfpulse.tech

Прямой маршрут для клиентов из России. Используйте если pfpulse.tech недоступен.

Выбор сервера доступен в конструкторе запроса в личном кабинете. Для капч замените домен в URL: api.pfpulse.tech/captcha/create вместо pfpulse.tech/captcha/create.

Quickstart

SmartCaptcha — два запроса:

# 1) создаём задачу
curl -X POST https://pfpulse.tech/captcha/create \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type":  "SmartCaptcha",
    "click": "<base64 PNG/JPG — картинка с иконками>",
    "task":  "<base64 PNG/JPG — целевые силуэты>"
  }'
# ← {"task_id": "9051d4b4-…", "status": "pending"}

# 2) забираем результат
curl -X POST https://pfpulse.tech/captcha/result \
  -H "Content-Type: application/json" \
  -d '{"task_id": "9051d4b4-…"}'
# ← {"status": "ready", "solution": "coordinates:x=34.7,y=108.0;…", "solve_time_ms": 87}

PazlCaptcha:

curl -X POST https://pfpulse.tech/captcha/create \
  -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"type": "PazlCaptcha", "image": "<base64 PNG>", "task": "[10,24,5,9,8,...]"}'
# result → {"solution": "14"} — номер шага слайдера

TextCaptcha:

curl -X POST https://pfpulse.tech/captcha/create \
  -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"type": "TextCaptcha", "task": "<base64 PNG/JPG>"}'
# result → {"solution": "молоко дерево"} — 2 слова

Fingerprint:

curl "https://pfpulse.tech/api/v1/fingerprint/generate?browser=chrome" \
  -H "X-API-Key: YOUR_KEY"
# ← JSON ~375KB с полным отпечатком устройства

SmartCaptcha

PRODUCTION

Яндекс-капча с силуэтами: на click-картинке — 5-7 иконок, на task-картинке — те, что нужно кликнуть (слева-направо). Решение = координаты кликов в правильном порядке.

Запрос

{
  "type":  "SmartCaptcha",
  "click": "<base64 PNG/JPG>",   // картинка с иконками
  "task":  "<base64 PNG/JPG>",   // целевые силуэты
  "coord_space": "native"       // optional: "native" (default) | "css300"
}

coord_space: native — пиксели исходной картинки; css300 — нормированные в 300×300 (для CSS-виджета).

Ответ

"solution": "coordinates:x=34.7,y=108.0;x=234.3,y=72.3;x=72.5,y=62.6;..."

Пары (x,y) через ; — в порядке силуэтов на task-картинке. Рекомендуем human-like задержки 100-300 мс между кликами.

PazlCaptcha

PRODUCTION

Пазл/калейдоскоп-капча: картинка разбита на сетку, строки сдвинуты swap-операциями. Слайдер снизу контролирует количество swap'ов. Решение = номер правильного шага слайдера.

Запрос — два формата

V2 (рекомендуемый)
{
  "type":  "PazlCaptcha",
  "image": "<base64 PNG>",       // картинка паззла
  "task":  "[10,24,5,9,8,...]"   // JSON-массив swap-индексов
}

image — из JS-стейта imageSrc, в base64. task — массив из JS-стейта, чётная длина. Регекспы: imageSrc:"(https://[^"]+)", task:"(\[[\d,]+\])".

V1 (Capsola-совместимый)
{
  "type":  "PazlCaptcha",
  "task":  "<base64 полной HTML-страницы капчи>"
}

Сервер сам парсит HTML, скачивает картинку и решает.

Ответ

"solution": "14"   // шаг слайдера (0..max, где max = len(task)/2)

Применение: кнопка «→» N раз, или drag ползунка в позицию N/max.

TextCaptcha

PRODUCTION БЕСПЛАТНО

Текстовая капча Яндекса — два искажённых русских слова на картинке. Точность 97.8%, решение ~1 с. Бесплатно на период тестирования.

Запрос

{
  "type":  "TextCaptcha",
  "task":  "<base64 PNG/JPG — картинка с текстом>"
}

Ответ

"solution": "молоко дерево"   // 2 русских слова через пробел

Тарифы на капчи и Fingerprint — на отдельной странице

payments Смотреть тарифы

Формат ответа

Все эндпоинты — JSON.

POST /captcha/create

{ "task_id": "9051d4b4-...", "status": "pending" }

POST /captcha/result

// Готово
{ "task_id": "...", "status": "ready", "solution": "...", "solve_time_ms": 87 }

// Ещё решается
{ "task_id": "...", "status": "pending" }

// Ошибка
{ "task_id": "...", "status": "error", "error": "причина" }

Коды ошибок

HTTP 400 — плохой запрос
  • Неизвестный type
  • Нет обязательных полей (SmartCaptcha: click+task, PazlCaptcha: image+task)
  • Битая картинка / не base64 / <100 байт / >200 КБ
HTTP 200 + status: "error"
  • "no detections" — не нашли элементы (шумная картинка)
  • "counter mismatch" — внутренняя несогласованность
  • "timeout" — не уложились в SLA

При ошибке запросите новую капчу — retry той же картинкой не поможет.

HTTP 404 — task_id не найден

TTL задачи истёк (120 сек) или неверный ID.

Polling

  1. POST /captcha/createtask_id
  2. Ждёте 1-2 сек (solve обычно <200 мс, но буфер на сеть)
  3. POST /captcha/result с {"task_id": "..."}
  4. "pending" — повторить через 2-5 сек
  5. "ready" — забирайте solution
  6. "error" — запросите новую капчу
  7. TTL задачи — 120 сек

Лимиты и SLA

Latency
create → result: p50 <200 мс · p99 <600 мс
Throughput
~2000 solve/min, масштабируется горизонтально
Task TTL
120 сек от /create
Max image
200 КБ (PNG/JPG base64)

Fingerprint API

PRODUCTION

Генерация Android-отпечатков из базы 457 реальных устройств. Canvas, WebGL, AudioContext, сенсоры, шрифты — снятые с настоящих телефонов. Подписка по req/min, привязка IP.

Эндпоинт

GET /api/v1/fingerprint/generate
  -H "X-API-Key: YOUR_KEY"

Параметры

browser — см. версии ниже (default: chrome)

profilev1 (default) или v2

version — фильтр по версии браузера (для v2)

perfectCanvastrue для perfect canvas хешей

Ответ

// ~375KB JSON
{
  "ua": "Mozilla/5.0 ... Chrome/147.0...",
  "canvas": "0cd58ae4...",
  "webgl": { ... },
  "audio": { ... },
  "battery": { ... },
  "sensor": { ... },
  "plugins": [ ... ],
  "fonts": [ ... ],
  "perfectcanvas": { ... }  // если perfectCanvas=true
}

V1 и V2

Два профиля генерации на выбор.

V1 — стабильная

9 браузеров, Chrome 146, проверенные отпечатки.

chrome yandex samsung opera edge atom mi huawei honor
curl "https://pfpulse.tech/api/v1/fingerprint/generate?browser=chrome&profile=v1" \
  -H "X-API-Key: YOUR_KEY"
V2 — новая, мульти-версии

6 браузеров, Chrome 145-147, дифференциация YaBrowser/YaApp, фильтр по версиям.

chrome 145-147 yandex 25.12, 26.3 yaapp 25.12, 26.3 samsung 28-30 opera 95-97 edge 145-146
curl "https://pfpulse.tech/api/v1/fingerprint/generate?browser=yaapp&version=26.3&profile=v2" \
  -H "X-API-Key: YOUR_KEY"

Legacy API режим

Поддерживаем совместимый формат для клиентов, которые используют стороннюю API-схему (поля status: 1/0, response). Документация legacy-режима — по запросу.