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

Score API

POST /api/v1/score — submitRun, поля запроса/ответа, тарификация, коды ошибок, идемпотентность.

Score API — публичный контракт

Единая точка входа: submitRunexecutereturn result. Доступ только по API-ключу, анализы тарифицируются кредитами по сети.

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

Все запросы требуют заголовок X-API-Key: wx_... (API-ключ тенанта). Ключ хранится на платформе только как argon2-хэш, глобальный индекс даёт O(1) lookup, доступность по ключу — до 300 rps.

POST /api/v1/score

curl -X POST https://score.example.com/api/v1/score \
  -H "X-API-Key: wx_live_…" \
  -H "Idempotency-Key: 6f9619ff-8b86-d011-b42d-00c04fc964ff" \
  -H "Content-Type: application/json" \
  -d '{
    "address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
    "network": "tron",
    "context": "gambling_deposit",
    "options": {"timeout_ms": 5000}
  }'

Поля запроса

ПолеТипОбязательностьОписание
addressstringдаАдрес кошелька (формат валидируется по сети)
networkstringдаСеть: ethereum, bnb, tron, bitcoin
contextstringнетКонтекст анализа (например gambling_deposit) — влияет на интерпретацию правил
optionsobjectнетОпции прогона: timeout_ms и др.

Ответ (успех)

{
  "request_id": "b3c1…",
  "address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
  "network": "tron",
  "score": 72,
  "risk_level": "medium",
  "confidence": 0.86,
  "flags": ["counterparty_concentration"],
  "features": { "graph.pagerank": 0.333, "graph.fan_out_top1_share": 1.0 },
  "credits_spent": 3,
  "cached": false
}
ПолеОписание
request_idUUID прогона — трассировка в ledger кредитов и аудите
scoreИтоговый балл 0–100 (scorecard, детерминирован)
risk_levelУровень риска: low / medium / high
confidenceУверенность результата 0–1 (снижается при неполных данных — см. Скоринг-модель)
flagsЧеловекочитаемый список сработавших правил (объяснимость)
featuresВектор рассчитанных признаков, включая graph.*
credits_spentФактически списанные кредиты за этот прогон
cachedtrue, если результат вернут по идемпотентному ключу без повторного списания

Тарификация по сетям

СетьКредитов за скоринг
Ethereum1
BNB Chain1
TRON3
Bitcoin3

Механика: hold при постановке → settle при успехе → refund при ошибке (см. Биллинг). Запрос без достаточного баланса отклоняется до начала работы.

Идемпотентность

Заголовок Idempotency-Key гарантирует, что повторная отправка того же запроса (ретрай, дубль из очереди) возвращает тот же результат без повторного списания кредитов:

  • одинаковый Idempotency-Key + одинаковый payload → тот же request_id, cached: true, списания нет;
  • одинаковый ключ с другим payload → ошибка 422 (IDEMPOTENCY_CONFLICT).

Возврат кэша при идемпотентном ключе — бесплатен (0 кредитов): кредиты снимаются только за реальный новый анализ.

Коды ошибок

HTTPКодПричина
400INVALID_REQUESTНевалидный формат адреса или payload
401UNAUTHORIZEDНет/неверен X-API-Key
403FORBIDDENКлюч отозван / tenant заблокирован
404TENANT_NOT_FOUNDТенант/программа не найдены
422IDEMPOTENCY_CONFLICTКлюч идемпотентности переиспользован с другим payload
429RATE_LIMITEDПревышен rate limit тенанта
500INTERNAL_ERRORВнутренняя ошибка
503PROVIDER_UNAVAILABLEНедоступен внешний провайдер данных (TronGrid и т.п.)

Маппинг биллинга на ошибки: INSUFFICIENT_CREDITS — запрос отклонён до начала работы (баланс не зарезервирован); ошибка исполнения после hold → полный refund, клиент не платит за неуспешный скоринг.