Skip to main content

Results

Retrieve matching results for a completed run, filtered by status (matched, review, no_match), with weighted confidence scores and per-field evidence.

Retrieve the full paginated results for a completed matching run. Each result represents a document matched (or unmatched) against the reference dataset, with a weighted confidence score, a match status, and an evidence object showing how each field contributed to the overall score.

Every result carries one of three statuses assigned by the engine: `matched` (confidence at or above the config threshold, default 0.85), `review` (confidence between the review floor of 0.4 and the threshold — a plausible match that needs a human look), or `no_match` (nothing scored high enough). Filter with status=review to work the review band, or status=matched to consume auto-accepted matches. Paginate with page and limit — the run detail endpoint only shows the top 50 results, while this endpoint provides full access.

The evidence object carries field_contributions[] — one entry per field mapping with the extracted and reference values, the match_type used, the per-field score, its weight, and the resulting contribution — plus candidates_considered, the top_n_candidates[] runner-up rows with their confidences, and the blocking_method used for candidate pre-filtering. A null matched_reference_row_id means no reference row produced a positive score at all; a no_match result can still carry the best candidate's row ID when it scored below the threshold.

Use POST /v1/matching/runs/:runId/results/:resultId/review to reclassify individual results after inspection — set matched to accept, no_match to reject. Pair with the config detail endpoint to understand which field mappings and thresholds produced these results. Re-run matching with adjusted weights or a lower threshold to auto-accept more matches.

Results with status: review scored between the review floor (0.4) and your config threshold. Inspect their evidence and reclassify them via POST /v1/matching/runs/:runId/results/:resultId/review. Matched results feed downstream data enrichment and reconciliation workflows.
GET/v1/matching/runs/:id/results

Query parameters

statusstringFilter by match status: matched, review, or no_match.
pageintegerPage number. Default: 1
limitintegerResults per page. Default: 50

Response

Response fields

dataarrayArray of match result objects.
data[].idstringResult UUID.
data[].document_idstringSource document UUID.
data[].document_filenamestring | nullSource document filename.
data[].matched_reference_row_idstring | nullMatched reference dataset row ID.
data[].confidencenumberWeighted confidence score (0–1).
data[].statusstringMatch status: matched (confidence ≥ threshold), review (between 0.4 and the threshold), or no_match.
data[].evidenceobject | nullEvidence: field_contributions[], candidates_considered, top_n_candidates[], and blocking_method. Null when no candidate scored.
pagination.totalintegerTotal number of results for this run.
pagination.pageintegerCurrent page number.
pagination.limitintegerResults per page.

Response

{
  "data": [
    {
      "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.92,
      "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": 14250.00, "reference_value": 14250.50, "match_type": "numeric_range", "matched": true, "weight": 0.3, "score": 0.82, "contribution": 0.25 }
        ],
        "candidates_considered": 3,
        "top_n_candidates": [
          { "reference_row_id": "ref_row_42", "confidence": 0.92 },
          { "reference_row_id": "ref_row_87", "confidence": 0.61 }
        ],
        "blocking_method": null
      }
    }
  ],
  "pagination": {
    "total": 183,
    "page": 1,
    "limit": 50
  }
}

Errors

Error responses

401unauthorizedMissing or invalid API key.
404not_foundNo matching run with this ID exists for your workspace.
429rate_limitedToo many requests. Retry after the period indicated in the Retry-After header.

Frequently asked questions

How is the confidence score calculated?+
Each field produces a strategy-specific score (0-1). The overall confidence is the weighted sum of per-field scores, using the weights defined in the matching config.
What does null matched_reference_row_id mean?+
A null matched_reference_row_id means no reference row produced a positive score for this document at all. Note that a no_match result can still carry a non-null row ID: it records the best candidate even though its confidence fell below the threshold — inspect its evidence before accepting it.
Can I review results programmatically?+
Yes. Use POST /v1/matching/runs/:runId/results/:resultId/review with a status of matched, review, or no_match to reclassify match results after inspection.