---
title: "List AI extraction reviews (the human-review queue)"
method: GET
path: "/v1/imports/contexts/{contextId}/extraction-reviews"
tags: ["Ingestion"]
---

# List AI extraction reviews (the human-review queue)

`GET /v1/imports/contexts/{contextId}/extraction-reviews`

Cursor-paginated list of extraction reviews for a context, optionally filtered by lifecycle status (e.g. PENDING_REVIEW for the queue). Tenant from the JWT, context from the path. Reads already-stored config-only candidates; it does not egress anything.

## Path parameters

- `contextId` string, uuid, required — Context ID

## Query parameters

- `status` 'PENDING_REVIEW' | 'APPROVED' | 'REJECTED' — Filter by status
- `limit` integer — Page size
- `cursor` string — Opaque pagination cursor

## Response `200`

OK

- ExtractionReviewListResponse
  - `items` ExtractionReviewResponse[], nullable, required — Extraction reviews on this page
    - `candidates` CandidateResponse[], nullable, required — Proposed transaction candidates awaiting review
      - `fields` CandidateFieldResponse[], nullable, required — Per-field breakdown with verbatim tokens, confidence, and provenance
        - `canonicalKey` string, required — Canonical field-map key (e.g. amount, external_id, currency, date)
        - `confidence` number, double, required — Extractor confidence in this field, 0.0 (none) to 1.0 (certain)
        - `page` integer, required — 1-based page the value was extracted from; 0 when unknown
        - `region` string — Best-effort region/bounding-box descriptor; empty when the source lane does not expose it
        - `value` string, required — Verbatim string token extracted for the canonical key; money stays a string, never a parsed amount
      - `source` string, required — Extraction lane that produced this candidate: text_layer (PDF text, higher trust) or vision (OCR/vision model, lower trust)
    - `contextId` string, uuid, required — Reconciliation context the candidates belong to
    - `createdAt` string, date-time, required — Creation timestamp (RFC 3339, UTC)
    - `id` string, uuid, required — Review identifier
    - `ingestionJobId` string, uuid — Downstream ingestion job linked on approval; null until linked
    - `rejectReason` string — Free-text reason captured on rejection; empty otherwise
    - `reviewerId` string — Principal id of the human who adjudicated the review; empty until decided
    - `sourceId` string, uuid, required — Reconciliation source the candidates belong to
    - `status` string, required — Review lifecycle: PENDING_REVIEW (awaiting decision), APPROVED (candidates ingested), REJECTED (discarded)
    - `updatedAt` string, date-time, required — Last-update timestamp (RFC 3339, UTC)
    - `version` integer, required — Optimistic-concurrency version, incremented on each state change
  - `limit` integer, required — Page size requested
  - `nextCursor` string — Opaque cursor for the next page; empty when there are no more pages
  - `prevCursor` string — Opaque cursor for the previous page; empty when at the start

## Other responses

- `default` — Error

---

[API](https://skmtc.net/lerian/apis/identity-plugin.md) · [All operations](https://skmtc.net/lerian/apis/identity-plugin/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lerian/identity-plugin/revisions/25daba385532/schema)
