---
title: "Validate Document Extraction"
method: PUT
path: "/api/v1/documents/extractions/{target_document_extraction_id}/feedback"
tags: ["Document"]
---

# Validate Document Extraction

`PUT /api/v1/documents/extractions/{target_document_extraction_id}/feedback`

## Request

- Base URL: `https://api.gemina.co` (the document declares no server; this is the origin it was published from)
- URL: `https://api.gemina.co/api/v1/documents/extractions/{target_document_extraction_id}/feedback`
- Auth: one of:
  - API key in header `X-API-Key`
  - OAuth 2 (password, token URL `token`)

One-shot validation feedback, dual-auth: X-API-Key (key-scoped,
unchanged) or a Bearer session token (tenant-scoped, gated by the signed
xids/euid claims). Semantics untouched: whole-payload, 409 on
resubmission, scored server-side by the processor's DataValidator.

## Path parameters

- `target_document_extraction_id` string, uuid, required

## Request body

- ExtractionValidationInDTO
  - `data` object, required
  - `rowSources` RowSourcesModel[]
    - `table` string, required
    - `sources` integer[], required

## Response `201`

Successful Response

- ExtractionValidationResultOutDTO
  - `servedAt` string, date-time
  - `servedAtTimestamp` number
  - `createdAt` string, date-time, nullable
  - `createdAtTimestamp` number, nullable
  - `status` 'pending' | 'in_process' | 'failed' | 'success' | 'partial' | 'empty', required
  - `meta` ExtractionValidationMetaOutDTO, required
    - `extractionId` string, uuid, nullable
    - `documentId` string, uuid, nullable
    - `modelType` 'gemina' | 'google' | 'openai' | 'velox' | 'praetorian' | 'invictus', required
    - `thinking` boolean, required
    - `correction` boolean, required
    - `evaluation` boolean, required
    - `includeCoordinates` boolean, required
    - `processorClass` string, required
    - `extractionType` 'ocr' | 'document_details_hebrew' | 'document_line_items_hebrew' | 'invoice_headers' | 'invoice_line_items' | 'custom_template' | 'filetag', required: Defines the type of operation to perform on the uploaded document
  - `data` ComparisonSummaryModel, required
    - `coverage` number, required: (tp + fp) / total_expected
    - `recall` number, required: tp / (tp + fn)
    - `precision` number, required: tp / (tp + fp)
    - `f1` number, required: 2 * precision * recall / (precision + recall)
    - `strict_precision` number, nullable: tp / (tp + fp + extra)
    - `strict_f1` number, nullable: 2 * strict_precision * recall / (strict_precision + recall)
    - `accuracy` number, required: tp / total_expected — 'correct out of all expected'
    - `exact_match` boolean, required
    - `counts` CountBreakdownModel, required
      - `total_expected` integer, required
      - `total_extracted` integer, required
      - `present` integer, required
      - `correct` integer, required
      - `incorrect` integer, required
      - `missing` integer, required
      - `extra` integer, required
      - `tp` integer, required: True Positives (correct)
      - `fp` integer, required: False Positives (incorrect on expected)
      - `fn` integer, required: False Negatives (missing)
    - `correct_fields` string[], required
    - `incorrect_fields` string[], required
    - `missing_fields` string[], required
    - `extra_fields` string[], required
    - `differences` FieldDifferenceModel[], required
      - `label` string, required
      - `expected` unknown, required
      - `got` unknown, required
      - `abs_diff` number, nullable
      - `pct_diff` number, nullable
    - `by_label` object: label -> one of {'correct','incorrect','missing','extra'}
  - `errors` object[]

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/gemina/apis/gemina-api.md) · [All operations](https://skmtc.dev/gemina/apis/gemina-api/llms.txt) · [OpenAPI document](https://skmtc.dev/gemina/apis/gemina-api/revisions/152fd3f6f6ec?raw)
