Skip to main content

Triage Breakdown

Get a classification-backed breakdown of the field review queue: counts by reason, field, document, assignee, and tag, each with a per-group reason mix.

The triage endpoint returns the review queue's shape rather than its items: how the held fields break down byReason, byField, byDocument, byAssignee, and byTag. Each group carries a per-group reason mix, so you can see not just how many items a field or document has, but why they are held: disagreement, low confidence, a failed check, or a missing value. It is what a review dashboard reads to draw section headers and prioritize human review work.

Triage honors the same scope filters as the queue list (pipeline_id, schema_id, document_id, stage_id, trigger, older_than_hours, include_held, assignee, and the free-text q), so you can scope the breakdown to one pipeline or one schema. It intentionally does NOT honor reason or tag filters: those facets stay the full switchable vocabulary so every reason and tag is represented.

Use triage to power a queue header or routing logic: the reason mix tells you which fields are mostly safe to bulk-approve versus which need a careful human look.
GET/v1/field-reviews/triage

Query parameters

pipeline_idstringScope to one pipeline.
schema_idstringScope to one schema.
document_idstringScope to one pipeline document.
stage_idstringScope to one validation stage.
triggerstringgate | declarative.
assigneestringme | unassigned.
qstringFree-text filter over field key, display name, filename, assignee.
older_than_hoursintegerOnly items requested before this many hours ago.
include_heldbooleanInclude hold-routed items (default false).

curl

Response

Response fields

totalintegerTotal held items in the filtered scope.
byReasonobjectCounts per reason bucket (missing_value, disagreement, failed_check, low_confidence, likely_fine, other).
byFieldobject[]Per-field groups: { fieldKey, count, mix }.
byDocumentobject[]Per-document groups: { pipelineDocumentId, documentName, count, mix }.
byAssigneeobject[]Per-assignee groups: { assignee, assigneeName, count, mix }; null owners fold into one unassigned bucket.
byTagobject[]Per-tag groups: { tag, count, mix }; an item joins every tag on its schema field.

Response

{
  "total": 14,
  "byReason": {
    "failed_check": 6,
    "low_confidence": 4,
    "disagreement": 2,
    "missing_value": 2
  },
  "byField": [
    {
      "fieldKey": "total_amount",
      "count": 5,
      "mix": { "failed_check": 4, "low_confidence": 1 }
    }
  ],
  "byDocument": [
    {
      "pipelineDocumentId": "pd_uuid_1",
      "documentName": "lease_oct.pdf",
      "count": 3,
      "mix": { "failed_check": 2, "missing_value": 1 }
    }
  ],
  "byAssignee": [
    {
      "assignee": null,
      "assigneeName": null,
      "count": 14,
      "mix": { "failed_check": 6, "low_confidence": 4, "disagreement": 2, "missing_value": 2 }
    }
  ],
  "byTag": []
}