GuidesПред-проверить перевод

Пред-проверить перевод

Проверить перевод через POST /evaluate до создания операции — узнать allow/queue/block, причину и сработавшие политики, ничего не меняя.

Перед тем как создавать перевод, можно спросить Policy Engine: «пройдёт ли это?» — не создавая ничего и не резервируя средства. evaluate возвращает тот же вердикт allow / queue / block с причиной и списком сработавших политик. Удобно для пред-флайт проверок в UI и автоматизации. Про сам движок — на странице Policy Engine.

Шаг 1. Отправьте запрос на оценку

POST /api/v1/evaluate — это топ-левел эндпоинт (не внутри /vaults/{code}). Он ничего не создаёт — только считает вердикт.

curl -X POST "[BASE_URL]/api/v1/evaluate" \
  -H "Authorization: Bearer $V3_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "transfer",
    "vaultId": "VAULT_ID",
    "userId": "USER_ID",
    "asset": "usdt",
    "amount": "1350.00",
    "toAddress": "TQ2m...p4rX"
  }'

Обязателен asset; tokenCode опционален. Остальные поля тела приведены для примера — точную схему сверьте со Справочником API на странице evaluate. vaultId — это id Vault'а, а не его code.

Шаг 2. Прочитайте решение

В ответе — вердикт и объяснение:

{
  "decision": "block",
  "reason": "AMOUNT_EXCEEDED",
  "policyId": "...",
  "policyCode": "otc-daily-limit",
  "trace": [
    { "policyCode": "otc-daily-limit", "policyName": "OTC daily limit", "effect": "block" }
  ]
}
  • decisionallow, queue или block.
  • reason — машиночитаемая причина (например, AMOUNT_EXCEEDED).
  • trace — список сработавших политик с их effect.

Как использовать вердикт: allow — можно сразу создавать перевод; queue — перевод потребует подтверждения, можно предупредить об этом заранее; block — показать причину и не дать отправить.

Шаг 3. Как движок принимает решение

evaluate работает по принципу deny-overrides:

  1. Собираются все политики пользователя в Vault'е (через членства в группах).
  2. Остаются включённые политики с типом действия, равным запрошенному.
  3. Проверяется применимость (дерево условий; пустое — «применима всегда»).
  4. Если хотя бы одна политика блокирует — итог block.

Тот же расчёт выполняется и при создании перевода — но там он сопровождается побочными эффектами (резерв, заявка). evaluate же безопасен для повторных вызовов. Подробнее — на странице Policy Engine.

Что дальше