Rederive
Un veredicto de cribado debe seguir siendo explicable meses después de emitirse: un auditor, un regulador o su propio equipo de cumplimiento pueden preguntar por qué se aceptó o se rechazó a un cliente. Las reglas y las etiquetas cambian con el tiempo, así que volver a ejecutar la verificación hoy respondería a otra pregunta. Rederive responde a la correcta: reproduce el veredicto con la versión del ruleset y la instantánea de etiquetas con las que se emitió, y devuelve la puntuación que tenía, no la que daría el ruleset de hoy.
Funciona porque cada veredicto queda fijado a una versión del ruleset, una instantánea de etiquetas y una altura de la cadena (vea El pin) y conserva los hallazgos de los que se derivó.
Solicitud
POST /v1/verdicts/{verdict_id}/rederive con el scope checks:read. verdict_id es el verdict_id de una verificación completada.
| Campo | Obligatorio | Descripción |
|---|---|---|
as_of | no | Una fecha y hora ISO 8601 con desfase. Solo metadatos de auditoría: se devuelve tal cual y nunca cambia el resultado. No puede ser anterior al momento en que se emitió el veredicto ni estar más de cinco minutos en el futuro. Si se omite, se usa el momento de la llamada. |
El cuerpo es opcional. Los campos desconocidos se rechazan.
Rederive es gratuito: no registra consumo, no mueve la cuota ni el saldo, no consulta ninguna fuente de datos de terceros y no tiene efectos secundarios, por lo que no necesita Idempotency-Key. Está limitado a 20 solicitudes por minuto por cuenta, entre todas sus claves; vea Límites de solicitudes y cuotas.
- 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"])
Respuesta
La respuesta usa el sobre de éxito habitual; la reproducción está en data.
| Campo | Descripción |
|---|---|
verdict_id | El veredicto que se reprodujo. |
as_of | El as_of que envió, devuelto tal cual, o el momento de la llamada. |
rederived_at | Cuándo se ejecutó esta reproducción. |
pinned | ruleset_version, label_snapshot_id y chain_height: las coordenadas con las que se emitió el veredicto y las que usó esta reproducción. |
score, band | La puntuación derivada de los hallazgos almacenados con el ruleset fijado, y su nivel. El mismo significado que en la verificación; vea Puntuación y nivel de riesgo. |
recommended_action | La acción a la que corresponde el nivel: accept para low, manual_review para medium, reject para high y severe. |
analysis_depth, partial, partial_reasons, degraded_sources, coverage_limitations, exposureIndexLag, provider_fallback | La integridad del veredicto tal como quedó fijada, devuelta exactamente como se almacenó; vea Qué tan completo es el veredicto. Una reproducción no consulta a terceros, así que no puede ni eliminar ni añadir un motivo. |
findings | Todos los hallazgos almacenados, incluidos los avisos que no tienen peso. |
exposure | La exposición del veredicto. |
findings_digest | El SHA-256, en hexadecimal, de la forma canónica (RFC 8785) del conjunto de hallazgos. Dos reproducciones del mismo veredicto devuelven el mismo resumen. |
label_watermark | Si las pruebas de las etiquetas siguen vigentes; vea más abajo. |
evidence_report | Si el informe de evidencias sigue coincidiendo con su hash registrado; vea más abajo. null cuando el veredicto nunca tuvo informe. |
Marca de agua de etiquetas
Cada hallazgo que se apoya en una etiqueta registra la fuente y el enlace de la fuente con los que se leyó. La reproducción busca de nuevo cada una de esas etiquetas en la instantánea de etiquetas del veredicto y confirma que sigue resolviéndose a una fila con la misma fuente, la misma URL de fuente y el mismo proveedor.
| Campo | Descripción |
|---|---|
verified | true cuando todos los hallazgos de etiqueta comprobados se resuelven sin cambios. |
checked | Cuántos hallazgos de etiqueta se reprodujeron contra el historial de etiquetas. Los hallazgos que se apoyan en una entrada de un registro curado no son etiquetas y no se cuentan. |
discrepancies | Una entrada por cada hallazgo que no se resolvió: su rule_id y un reason, uno de label_missing, not_live_at_watermark, provenance_mismatch o watermark_not_pinned. |
Comprobación del informe
Cuando el veredicto tiene un informe de evidencias, evidence_report incluye report_id, payload_hash_registered (el hash registrado cuando se entregó por primera vez el enlace del informe), payload_hash_rederived (el hash del informe reconstruido ahora, en la versión del payload con la que se registró) y matches. Un informe emitido antes de un cambio posterior en el formato sigue coincidiendo. matches: false significa que el veredicto almacenado y el informe registrado han divergido, y debe comunicarse a soporte.
Cómo usarlo
- Guarde
verdict_idjunto con su registro de decisión, al lado del pin, para poder reproducirlo cuando se lo pidan. - Conserve
findings_digestsi necesita demostrar más tarde que el conjunto de hallazgos no ha cambiado. - Una reproducción devuelve la puntuación que el veredicto tenía en su momento. Para verificar la dirección con las reglas de hoy, ejecute una verificación nueva; vea Verificaciones de dirección.
Errores esperados
| Estado | Código | Cuándo |
|---|---|---|
400 | VALIDATION_ERROR | Un verdict_id mal formado, o un as_of que no es una fecha y hora ISO 8601 con desfase, es anterior al veredicto o está en el futuro. |
403 | SCOPE_ERROR | La clave no tiene el scope checks:read. |
404 | NOT_FOUND | No existe ningún veredicto con este id para su cuenta y entorno. Una verificación que aún no se ha completado responde exactamente igual que un id desconocido. |
429 | RATE_LIMIT_EXCEEDED | Más de 20 reproducciones en un minuto. Reintente tras Retry-After. |