Rederive
Вердикт скринінгу має залишатися поясненим через місяці після видачі: аудитор, регулятор чи ваша команда комплаєнсу можуть запитати, чому клієнта прийняли або відмовили. Правила й мітки змінюються з часом, тож повторна перевірка сьогодні дала б відповідь на інше запитання. Rederive відповідає на правильне: він відтворює вердикт за версією набору правил і знімком міток, з якими його видано, і повертає ту оцінку, яку він мав, а не ту, яку дав би сьогоднішній набір правил.
Це працює, бо кожен вердикт закріплено за версією набору правил, знімком міток і висотою ланцюга (див. pin) і він зберігає знахідки, з яких його виведено.
Запит
POST /v1/verdicts/{verdict_id}/rederive зі scope checks:read. verdict_id — це verdict_id завершеної перевірки.
| Поле | Обов'язкове | Опис |
|---|---|---|
as_of | ні | Дата й час ISO 8601 зі зміщенням. Лише метадані для аудиту: повертається в відповіді й ніколи не змінює результат. Не може бути раніше за момент видачі вердикту й більш ніж на п'ять хвилин у майбутньому. Якщо не вказано, використовується час виклику. |
Тіло необов'язкове. Невідомі поля відхиляються.
Rederive безкоштовний: він не записує використання, не змінює ліміт чи баланс, не звертається до сторонніх джерел даних і не має побічних ефектів, тому Idempotency-Key не потрібен. Обмеження — 20 запитів на хвилину на обліковий запис, з усіх його ключів разом; див. Обмеження частоти запитів і ліміти.
- curl
- Node.js
- Python
curl -s -X POST https://api.leeri.ai/v1/verdicts/$VERDICT_ID/rederive \
-H "Authorization: Bearer $LEERI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"as_of":"2026-10-27T12:00:00Z"}'
const response = await fetch(`https://api.leeri.ai/v1/verdicts/${verdictId}/rederive`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.LEERI_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ as_of: '2026-10-27T12:00:00Z' }),
});
const { data } = await response.json();
console.log(data.score, data.band, data.findings_digest, data.label_watermark.verified);
import os
import requests
response = requests.post(
f"https://api.leeri.ai/v1/verdicts/{verdict_id}/rederive",
headers={"Authorization": f"Bearer {os.environ['LEERI_API_KEY']}"},
json={"as_of": "2026-10-27T12:00:00Z"},
timeout=30,
)
data = response.json()["data"]
print(data["score"], data["band"], data["findings_digest"], data["label_watermark"]["verified"])
Відповідь
Відповідь має звичайний конверт успіху; відтворення міститься в data.
| Поле | Опис |
|---|---|
verdict_id | Вердикт, який відтворено. |
as_of | Надіслане вами as_of, повернене назад, або час виклику. |
rederived_at | Коли виконано це відтворення. |
pinned | ruleset_version, label_snapshot_id і chain_height: координати, за якими вердикт видано, і ті, які використало це відтворення. |
score, band | Оцінка, виведена зі збережених знахідок за закріпленим набором правил, і її рівень. Те саме значення, що й у перевірці; див. Оцінка і рівень ризику. |
recommended_action | Дія, що відповідає рівню: accept для low, manual_review для medium, reject для high і severe. |
analysis_depth, partial, partial_reasons, degraded_sources, coverage_limitations, exposureIndexLag, provider_fallback | Повнота вердикту в закріпленому вигляді, повернена точно як збережено; див. Наскільки повний вердикт. Відтворення не звертається до сторонніх джерел, тож не може ні зняти, ні додати причину. |
findings | Кожна збережена знахідка, зокрема попередження, що не мають ваги. |
exposure | Експозиція вердикту. |
findings_digest | SHA-256 у шістнадцятковому записі від канонічної форми (RFC 8785) набору знахідок. Два відтворення одного вердикту повертають той самий дайджест. |
label_watermark | Чи досі підтверджуються докази міток; див. нижче. |
evidence_report | Чи досі доказовий звіт збігається зі своїм зареєстрованим хешем; див. нижче. null, якщо вердикт ніколи не мав звіту. |
Водяний знак міток
Кожна знахідка, що спирається на мітку, записує джерело й посилання на джерело, з якими її прочитано. Відтворення знову шукає кожну з цих міток у знімку міток вердикту й підтверджує, що вона й досі розв'язується в рядок із тими самими джерелом, URL джерела та провайдером.
| Поле | Опис |
|---|---|
verified | true, коли кожна перевірена знахідка за міткою розв'язується без змін. |
checked | Скільки знахідок за мітками відтворено щодо історії міток. Знахідки, що спираються на запис довідкового реєстру, не є мітками й не враховуються. |
discrepancies | По одному запису на кожну знахідку, що не розв'язалася: її rule_id і reason, одне з label_missing, not_live_at_watermark, provenance_mismatch чи watermark_not_pinned. |
Перевірка звіту
Коли вердикт має доказовий звіт, evidence_report містить report_id, payload_hash_registered (хеш, зареєстрований, коли посилання на звіт вперше було видано), payload_hash_rederived (хеш звіту, відновленого зараз у версії корисного навантаження, з якою його зареєстровано) і matches. Звіт, виданий до пізнішої зміни формату звіту, усе одно збігається. matches: false означає, що збережений вердикт і зареєстрований звіт розійшлися, і про це слід повідомити підтримку.
Як користуватися
- Зберігайте
verdict_idу записі про рішення поруч із pin, щоб відтворити вердикт, коли про це попросять. - Зберігайте
findings_digest, якщо потрібно згодом довести, що набір знахідок не змінювався. - Відтворення повертає оцінку, яку вердикт мав на той час. Щоб перевірити адресу за сьогоднішніми правилами, виконайте нову перевірку; див. Перевірки адрес.
Очікувані помилки
| Статус | Код | Коли |
|---|---|---|
400 | VALIDATION_ERROR | Неправильний verdict_id або as_of, що не є датою й часом ISO 8601 зі зміщенням, раніший за вердикт чи в майбутньому. |
403 | SCOPE_ERROR | У ключа немає scope checks:read. |
404 | NOT_FOUND | Вердикту з таким ідентифікатором немає для вашого облікового запису й середовища. Перевірка, що ще не завершилася, відповідає так само, як невідомий ідентифікатор. |
429 | RATE_LIMIT_EXCEEDED | Більше 20 відтворень за хвилину. Повторіть після Retry-After. |