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_

CampoRequeridoTipoDescripció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.

Errores posibles (problem+json): 400 405 422 500

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

CampoRequeridoTipoDescripción
closed no integer
escalated no integer
inProgress no integer
open no integer
resolved no integer
total no integer

Errores posibles (problem+json): 400 405 422 500

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

CampoRequeridoTipoDescripció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

Errores posibles (problem+json): 400 405 422 500

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

CampoRequeridoTipoDescripció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

Errores posibles (problem+json): 400 405 422 500

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

application/json · schema NoteRequest

CampoRequeridoTipoDescripción
note sí string

Respuestas

204 Successful Response

Errores posibles (problem+json): 400 405 422 500

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

application/json · schema ReassignRequest

CampoRequeridoTipoDescripción
assigneeUserId sí string Opaque user id.

Respuestas

200 Successful Response — ClaimResult

CampoRequeridoTipoDescripció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

Errores posibles (problem+json): 400 405 422 500

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

Errores posibles (problem+json): 400 405 422 500

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

application/json · schema ResolveRequest

CampoRequeridoTipoDescripción
action sí approve | decline | request_more_info | escalate | note | assign
note no string | null
reasonCodes no string[] | null

Respuestas

200 Successful Response — ResolveResult

CampoRequeridoTipoDescripción
awaitingSecondApproval no boolean
caseId sí string
caseStatus sí open | in_progress | escalated | resolved | closed
outcome no string | null
sessionStatus sí string

Errores posibles (problem+json): 400 405 422 500

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

Errores posibles (problem+json): 400 405 422 500