Skip to content

Get the review view

GET
/v1/loans/{ref}/review
curl --request GET \
--url http://localhost:8080/v1/loans/example/review

Everything the workstation needs to decide: the loan, the latest run’s findings with their action history, whether approval is possible (canApprove) and the blockers if not, the bank’s override reason codes and the minimum justification length. Any staff role or an API key with status:read. 404 for an unknown reference.

ref
required
string

OK

Media typeapplication/json

GET /v1/loans/{ref}/review: everything the workstation needs to decide; findings of the latest run with their actions, whether approval is possible and why not, and the bank’s reason-code policy.

object
loan
required
object
id
required
string format: uuid
externalRef
required
string
packageVersion
required
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
borrowerName
required
string
expectedPrincipal
required
null | string
state
required
string
hasExceptions
required
boolean
assigneeId
required
null | string format: uuid
createdBy
required
null | string format: uuid
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
runId
required
null | string format: uuid
findings
required
Array<object>

A finding with its action history; the row the workstation panel shows.

object
finding
required
object
id
required
string format: uuid
runId
required
string format: uuid
loanId
required
string format: uuid
ruleId
required
string
severity
required
string
status
required
string
title
required
string
detail
required

Stored as findings.detail_json: the human sentence plus every source the finding points at.

object
message
required
string
sources
required
Array<object>

Where a finding points (document / page / box); the provenance the workstation deep-links to.

object
documentId
required
string format: uuid
source
required
string
field
required
null | string
value
required
null | string
pageNo
required
null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
bbox
required
One of:
null
data
required
createdAt
required
string format: date-time
blocksApproval
required
boolean
actions
required
Array<object>
object
id
required
integer | string format: int64
/^-?(?:0|[1-9]\d*)$/
findingId
required
string format: uuid
action
required
string
reasonCode
required
null | string
note
required
null | string
actorId
required
string format: uuid
actorName
required
string
occurredAt
required
string format: date-time
canApprove
required
boolean
blockers
required
Array<string>
reasonCodes
required
Array<string>
justificationMinLength
required
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
Examplegenerated
{
"loan": {
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"externalRef": "example",
"packageVersion": 1,
"borrowerName": "example",
"expectedPrincipal": "example",
"state": "example",
"hasExceptions": true,
"assigneeId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"createdBy": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"createdAt": "2026-04-15T12:00:00Z",
"updatedAt": "2026-04-15T12:00:00Z"
},
"runId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"findings": [
{
"finding": {
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"runId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"loanId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"ruleId": "example",
"severity": "example",
"status": "example",
"title": "example",
"detail": {
"message": "example",
"sources": [
{
"documentId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"source": "example",
"field": "example",
"value": "example",
"pageNo": 1,
"bbox": {
"x": 1,
"y": 1,
"w": 1,
"h": 1
}
}
],
"data": "example"
},
"createdAt": "2026-04-15T12:00:00Z",
"blocksApproval": true
},
"actions": [
{
"id": 1,
"findingId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"action": "example",
"reasonCode": "example",
"note": "example",
"actorId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"actorName": "example",
"occurredAt": "2026-04-15T12:00:00Z"
}
]
}
],
"canApprove": true,
"blockers": [
"example"
],
"reasonCodes": [
"example"
],
"justificationMinLength": 1
}