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

curl -s "https://api.talonic.com/v1/field-reviews/triage?pipeline_id=a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Bearer tlnc_your_api_key"

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": []
}

Frequently asked questions

How is triage different from the summary endpoint?+
Summary is cheap top-level counts for a nav badge. Triage loads cells and verdicts to classify each item, so it can return the full reason mix per field, document, assignee, and tag.
Why does triage ignore the reason and tag filters?+
Those facets are the switchable vocabulary the breakdown itself produces, so they must reflect the scope before a selection. Otherwise selecting one reason would hide the others from the breakdown.
How do I use triage to prioritize review work?+
Read the per-group reason mix: a field whose items are mostly `likely_fine` or identical `disagreement` values is a candidate for value-cluster bulk approval, while `failed_check` and `missing_value` groups need item-by-item human review.