Перейти к содержимому

Справочник по API

API для борьбы с фродом

Браузерный SDK для идентификации, подписанные вебхуки для событий в реальном времени и Server API только для чтения для истории. Всё необходимое, чтобы остановить мошенничество на уровне устройства.

SDK@tracio/sdk

Идентифицируйте посетителя в браузере с помощью клиентского SDK. Возвращает стабильный ID посетителя и вердикт по ботам без обращения к серверу. Публичный ключ безопасно размещать в клиентском коде.

Запрос

import { Tracio } from '@tracio/sdk'
const tracio = Tracio.init({ publicKey: '5ca175fc...' })
const result = await tracio.getResult()

Ответ

{
"visitorId": "X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y",
"bot": {
"detected": false,
"confidence": 2,
"reasons": []
}
}
POST/webhook/tracio

TRACIO доставляет подписанное событие на ваш эндпоинт при каждой идентификации. Проверьте заголовок X-Tracio-Signature, затем действуйте на основе плоского JSON-пейлоада. Это push-поверхность: опрашивать её не нужно. Если визит всё же нужно прочитать постфактум, Server API отвечает по requestId.

Запрос

POST /webhook/tracio HTTP/1.1
Host: your-server.com
Content-Type: application/json
X-Tracio-Payload-Version: 2
X-Tracio-Event-Type: identification
X-Tracio-Signature: t=1710432000,v1=5257a869e7ecebed...

Ответ

{
"version": 2,
"event": "identification",
"eventId": "9c1f4b2e-7d3a-4f18-8b6c-2e5a71d0c4f9:primary",
"requestId": "9c1f4b2e-7d3a-4f18-8b6c-2e5a71d0c4f9",
"phase": "primary",
"visitorId": "X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y",
"timestamp": "2026-03-12T16:00:00Z",
"bot": { "result": "human", "score": 2 },
"identification": { "confidence": 0.95, "incognito": false },
"network": { "vpn": false, "proxy": false, "tor": false, "datacenter": false },
"decision": { "action": "real", "riskScore": 4 }
}
GET/.well-known/webhook-keys

Получите публичные ключи Ed25519 платформы, которыми проверяются доставки вебхуков. Этот маршрут не требует аутентификации и кэшируется на пять минут. Поле kid в заголовке подписи указывает, какой ключ использовать.

Запрос

curl https://api.tracio.ai/.well-known/webhook-keys

Ответ

{
"keys": [
{
"kid": "k1",
"alg": "Ed25519",
"publicKey": "MCowBQYDK2VwAyEA9tR2v1kQ..."
}
]
}
GET/v1/visitors/{visitorId}

Читайте историю посетителя из Server API со своим секретным ключом. Доступно с тарифа Pro. Окно ограничивается вашим тарифом, а фактически выданное окно возвращается в meta. Обеспечивает запросы права на доступ к данным по GDPR.

Запрос

# Server API — available on the Pro plan and above
curl "https://api.tracio.ai/v1/visitors/X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y" \
-H "Authorization: Bearer tracio_sk_XXXX...XXXX"

Ответ

{
"visitorId": "X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y",
"firstSeenAt": "2026-03-01T08:11:00Z",
"lastSeenAt": "2026-03-16T14:22:01Z",
"visits": 12,
"incognitoVisits": 1,
"uniqueIps": 4,
"uniqueCountries": 2,
"risk": { "maxRiskScore": 63, "lastDecision": "real" },
"network": {
"vpnSeen": false,
"proxySeen": false,
"torSeen": false,
"datacenterSeen": true
},
"meta": {
"plan": "pro",
"retentionDays": 30,
"from": "2026-02-14T00:00:00Z",
"to": "2026-03-16T14:30:00Z"
}
}

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

TRACIO использует три учётных данных, по одному на каждую поверхность: публичный ключ для браузерного SDK, секретный ключ (tracio_sk_…), передаваемый как Authorization: Bearer, для Server API и HMAC-секрет для проверки доставок вебхуков. Секретный ключ создаётся в дашборде, показывается один раз и никогда не должен попадать в браузер — Server API намеренно не возвращает CORS-заголовки.

# Client SDK — public key (safe to ship in the browser)
Tracio.init({ publicKey: '5ca175fc...' })
# Server API — secret key, created in the dashboard and shown once
Authorization: Bearer tracio_sk_XXXX...XXXX
# Webhook verification — HMAC-SHA256 over "<t>.<rawBody>"
X-Tracio-Signature: t=<unix>,v1=<hmac_sha256_hex>

Ограничения частоты

Лимиты действуют на рабочее пространство. Вызовы Server API считаются отдельно от идентификаций, поэтому чтение собственной истории никогда не тратит оплаченную квоту. Каждый ответ несёт X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset, а при 429 — ещё и Retry-After. В тариф Free Server API не входит.

ПланЧастота Server APIServer API в деньЭндпоинты вебхуковОкно запроса
FreeНе входитНе входит07 days
Pro10 req/s10,000530 days
Business50 req/s100,0002090 days
Enterprise200 req/sБезлимит100365 days

Коды ошибок

Каждая ошибка возвращается в одной и той же оболочке: объект error со строковым кодом, понятным человеку сообщением и requestId неудачного вызова.

400Bad RequestНекорректные параметры запроса, неподдерживаемое окно или идентификатор, который не является корректным ID посетителя.
401UnauthorizedОтсутствующие или неверные учётные данные — публичный ключ (SDK), секретный ключ (Server API) или подпись вебхука.
402Upgrade RequiredВаш тариф не включает доступ к Server API. Он начинается с тарифа Pro.
404Not FoundПосетитель или сессия с таким идентификатором не найдены в окне запроса вашего тарифа.
405Method Not AllowedServer API работает только на чтение. Каждый маршрут отвечает на GET и ни на что другое.
429Rate LimitedСлишком много запросов в секунду или исчерпана дневная квота. Проверьте заголовок Retry-After и лимиты вашего тарифа.
500Internal ErrorОшибка сервера. Повторите с экспоненциальной задержкой. Если проблема сохраняется, обратитесь в поддержку с requestId.
503Service UnavailableAPI временно не может ответить. Повторите с экспоненциальной задержкой.

Формат ответа об ошибке

{
"error": {
"code": "rate_limited",
"message": "too many requests",
"requestId": "8f14e45fceea167a5a36dedd"
}
}

Начните разработку

Получите ключ API и сделайте первый запрос на идентификацию менее чем за 5 минут.