Revisión manual
Cuando el motor no decide solo, el caso cae en una cola para revisión humana. Estos endpoints existen para que puedas operar esa cola desde tu propio sistema en vez de desde el dashboard de Belfort.
Abrir el detalle de un caso descifra PII y audita el acceso. No lo uses para listar.
El flujo normal es reclamar el caso, resolverlo y —si tu política lo exige— pasar por un segundo par de ojos.
Consultar la cola de revisión
GET /v1/review/queue
Requiere una API key secreta (belfort_{env}_sk_…) con scope review:read.
Los casos que esperan decisión humana, por cursor.
Parámetros
scope query |
string |
status query |
|
priority query |
|
mine query |
boolean |
limit query |
Tamaño de página (1–100). |
startingAfter query |
nextCursor de la página anterior. Excluyente con endingBefore. |
endingBefore query |
previousCursor de la página actual. Excluyente con startingAfter. |
includeTotal query |
Calcula totalCount. Cuesta un COUNT(*) sobre el filtro entero, así que está apagado por defecto: pídelo solo cuando vayas a enseñar el total. |
tenantId query |
|
applicationId query |
Respuestas
200 Successful Response — ListEnvelope_ReviewQueueItem_
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
data |
sí | ReviewQueueItem[] |
|
hasMore |
sí | boolean |
true si quedan resultados después de esta página. |
limit |
sí | integer |
El límite realmente aplicado (puede ser menor al pedido). |
nextCursor |
no | string | null |
Pásalo como startingAfter para la siguiente página. |
object |
no | "list" |
|
previousCursor |
no | string | null |
Pásalo como endingBefore para la página anterior. |
totalCount |
no | integer | null |
Total de coincidencias. Solo se calcula si pides includeTotal=true — es un COUNT(*) sobre el filtro entero y no se cobra a quien no lo necesita. |
Resumen de la cola
GET /v1/review/queue/summary
Requiere una API key secreta (belfort_{env}_sk_…) con scope review:read.
Conteo por estado. Es lo que quieres para un panel: no te trae los casos.
Parámetros
scope query |
string |
tenantId query |
|
applicationId query |
Respuestas
200 Successful Response — ReviewQueueSummary
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
closed |
no | integer |
|
escalated |
no | integer |
|
inProgress |
no | integer |
|
open |
no | integer |
|
resolved |
no | integer |
|
total |
no | integer |
Consultar un caso
GET /v1/review/cases/{case_id}
Requiere una API key secreta (belfort_{env}_sk_…) con scope review:read.
Todo lo que el revisor necesita: PII descifrada, media accesible y la cronología. Cada consulta descifra y se audita — no lo uses para listar.
Parámetros
case_id path · requerido |
string |
Respuestas
200 Successful Response — ReviewCaseDetail
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
actions |
sí | ReviewActionItem[] |
|
applicant |
sí | ApplicantPII | null |
|
case |
sí | CaseSummary |
|
decisions |
sí | DecisionItem[] |
|
events |
sí | CaseEventItem[] |
|
govLookups |
sí | app__schemas__review__GovLookupItem[] |
|
media |
sí | MediaItem[] |
|
session |
sí | ReviewSessionSummary | null |
Reclamar un caso
POST /v1/review/cases/{case_id}/claim
Requiere una API key secreta (belfort_{env}_sk_…) con scope review:write.
Te asigna el caso para que dos revisores no trabajen el mismo a la vez.
Parámetros
case_id path · requerido |
string |
Respuestas
200 Successful Response — ClaimResult
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
assigneeApiKeyId |
no | string | null |
Opaque API key id. |
assigneeUserId |
no | string | null |
Opaque user id. |
caseId |
sí | string |
|
claimedAt |
sí | string (date-time) |
|
status |
sí | open | in_progress | escalated | resolved | closed |
Añadir una nota
POST /v1/review/cases/{case_id}/notes
Requiere una API key secreta (belfort_{env}_sk_…) con scope review:write.
Nota a la bitácora del caso. No exige tenerlo reclamado: comentar es colaborativo, decidir no.
Parámetros
case_id path · requerido |
string |
Cuerpo de la petición
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
note |
sí | string |
Respuestas
204 Successful Response
Reasignar un caso
POST /v1/review/cases/{case_id}/reassign
Requiere una API key secreta (belfort_{env}_sk_…) con scope review:write.
Pasa el caso a otro revisor de tu organización.
Parámetros
case_id path · requerido |
string |
Cuerpo de la petición
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
assigneeUserId |
sí | string |
Opaque user id. |
Respuestas
200 Successful Response — ClaimResult
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
assigneeApiKeyId |
no | string | null |
Opaque API key id. |
assigneeUserId |
no | string | null |
Opaque user id. |
caseId |
sí | string |
|
claimedAt |
sí | string (date-time) |
|
status |
sí | open | in_progress | escalated | resolved | closed |
Liberar un caso
POST /v1/review/cases/{case_id}/release
Requiere una API key secreta (belfort_{env}_sk_…) con scope review:write.
Devuelve el caso a la cola sin resolverlo.
Parámetros
case_id path · requerido |
string |
Respuestas
204 Successful Response
Resolver un caso
POST /v1/review/cases/{case_id}/resolve
Requiere una API key secreta (belfort_{env}_sk_…) con scope review:write.
Aprobar, rechazar, pedir más información o escalar. Si tu política exige doble aprobación, la primera resolución deja el caso a la espera del segundo par de ojos en vez de cerrarlo.
Parámetros
case_id path · requerido |
string |
Cuerpo de la petición
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
action |
sí | approve | decline | request_more_info | escalate | note | assign |
|
note |
no | string | null |
|
reasonCodes |
no | string[] | null |
Respuestas
200 Successful Response — ResolveResult
| Campo | Requerido | Tipo | Descripción |
|---|---|---|---|
awaitingSecondApproval |
no | boolean |
|
caseId |
sí | string |
|
caseStatus |
sí | open | in_progress | escalated | resolved | closed |
|
outcome |
no | string | null |
|
sessionStatus |
sí | string |
Ver la media de un caso
GET /v1/review/media/{media_id}
Requiere una API key secreta (belfort_{env}_sk_…) con scope review:read.
Sirve el archivo al revisor autorizado, descifrándolo al vuelo.
Parámetros
media_id path · requerido |
string |
Respuestas
200 Successful Response