Skip to main content

Review Result

Reclassify individual match results from a matching run as matched, review, or no_match. Matched results feed downstream enrichment and reconciliation.

Review a single match result by reclassifying its status. Each result carries the status the engine assigned when the run executed — matched, review, or no_match — and this endpoint moves it between those same three states after human inspection. Set matched to accept a borderline candidate, no_match to reject a false positive, or review to flag a result for another look.

The typical review workflow targets the review band: results whose confidence landed between the review floor (0.4) and the config threshold. Inspect the evidence.field_contributions to see exactly which fields agreed and disagreed, then accept (matched) or reject (no_match). Reclassifying does not recompute confidence — the score remains the engine's original weighted sum.

The response returns the full updated match result object, including the evidence breakdown and the new status. Once reviewed, a result can be re-reviewed by calling this endpoint again with a different status — there is no lock on the review state. Any other status value is rejected with a 400 listing the valid values.

For bulk review workflows, iterate over results from GET /v1/matching/runs/:id/results?status=review and call this endpoint for each result. The API enforces standard rate limits — for high-volume batch review, use reasonable concurrency (e.g. 10 concurrent requests) and respect the Retry-After header on 429 responses.

Results can be re-reviewed at any time. Calling this endpoint again on an already-reclassified result simply updates the status to the new value.
POST/v1/matching/runs/:runId/results/:resultId/review

Path parameters

runId*stringUUID of the matching run.
resultId*stringUUID of the match result to review.

Body parameters

status*stringNew match status: `matched`, `review`, or `no_match`.

Request body

{
  "status": "matched"
}

Response

Response fields (200 OK)

idstringResult UUID.
document_idstringSource document UUID.
document_filenamestring | nullSource document filename.
matched_reference_row_idstring | nullMatched reference dataset row ID.
confidencenumberWeighted confidence score (0–1). Unchanged by reclassification.
statusstringUpdated match status: matched, review, or no_match.
evidenceobject | nullEvidence: field_contributions[], candidates_considered, top_n_candidates[], and blocking_method.

Response

{
  "id": "e5f6a7b8-c9d0-1234-efab-345678901234",
  "document_id": "doc_uuid_1",
  "document_filename": "invoice-acme-2024-001.pdf",
  "matched_reference_row_id": "ref_row_42",
  "confidence": 0.78,
  "status": "matched",
  "evidence": {
    "field_contributions": [
      { "extracted_field": "vendor_name", "extracted_value": "Acme Corp GmbH", "reference_value": "Acme Corp", "match_type": "fuzzy_string", "matched": true, "weight": 0.4, "score": 0.95, "contribution": 0.38 },
      { "extracted_field": "invoice_date", "extracted_value": "2024-09-28", "reference_value": "2024-09-30", "match_type": "date_range", "matched": true, "weight": 0.3, "score": 1.0, "contribution": 0.3 },
      { "extracted_field": "amount", "extracted_value": 14100.00, "reference_value": 14250.50, "match_type": "numeric_range", "matched": false, "weight": 0.3, "score": 0.33, "contribution": 0.1 }
    ],
    "candidates_considered": 3,
    "top_n_candidates": [
      { "reference_row_id": "ref_row_42", "confidence": 0.78 }
    ],
    "blocking_method": null
  }
}

Errors

Error responses

400validation_errorMissing or invalid status field. Must be "matched", "review", or "no_match".
401unauthorizedMissing or invalid API key.
404not_foundNo matching run or result with the specified IDs exists for your workspace.
429rate_limitedToo many requests. Retry after the period indicated in the Retry-After header.

Frequently asked questions

Can I change a review decision after submitting it?+
Yes. Call the review endpoint again with a different status. There is no lock on the review state — results can be re-reviewed as many times as needed.
What happens to matched results downstream?+
Results with status matched are available for data enrichment and reconciliation workflows. They can be consumed via the results endpoint filtered by status=matched, or delivered to external systems via delivery bindings.
Is there a bulk review endpoint?+
Not currently. For bulk review, iterate over the review band from GET /v1/matching/runs/:id/results?status=review and call the review endpoint for each result. Use reasonable concurrency (e.g. 10 concurrent requests) and respect rate limits.
Does reclassifying a result change its confidence score?+
No. The confidence is the weighted sum the engine computed when the run executed and is immutable. Reclassification only changes the status field, so the original score stays available as an audit trail of what the engine thought.