Skip to main content

Get Results

Read a resolution run's per-field results with GET /v1/resolutions/{id}/results: original vs resolved values, the resolution step applied, and confidence.

Retrieve the resolution results for a run. data holds one row per document and field: the raw extracted value alongside the canonical value resolution produced, the resolution_step (strategy) that made the match, and a confidence score. Rows appear as documents finish resolving, so an early read during processing returns only the documents flushed so far; a document that has not produced any field yet contributes no rows.

Rows are returned oldest-first (created_at ascending) with no pagination. Results are also filtered by source visibility: rows whose document is hidden from you under your organization's source visibility rules are dropped from the response entirely, so two API keys can legitimately see different row counts for the same run.

resolution_step names the strategy that produced the resolved value — for example lookup (reference table match), registry_transfer, deterministic_compute, or source_extraction when the extracted value stood as-is. It is null when the engine recorded no method for the cell.
GET/v1/resolutions/{id}/results

Path parameters

id*uuidResolution run UUID.

curl

curl -s https://api.talonic.com/v1/resolutions/a1b2c3d4-e5f6-7890-abcd-ef1234567890/results \
  -H "Authorization: Bearer tlnc_your_api_key"

Response

Response fields

dataarrayArray of resolution result objects, ordered by created_at ascending.
data[].idstringRow identifier: the document result UUID and the field key joined by a colon.
data[].result_idstringUUID of the per-document result row this field belongs to.
data[].resolution_run_idstringParent resolution run UUID.
data[].document_idstringDocument UUID this result belongs to.
data[].statusstringThe document result's status: pending, processing, completed, or failed.
data[].field_namestringField key that was resolved.
data[].original_valueany | nullRaw extracted value before resolution.
data[].resolved_valueany | nullCanonical value after resolution.
data[].resolution_stepstring | nullStrategy that produced the resolved value (for example lookup, registry_transfer, deterministic_compute, source_extraction), or null.
data[].confidencenumber | nullConfidence score for the resolved value (0-1), or null when not applicable.
data[].created_atstringISO 8601 timestamp.

Response

{
  "data": [
    {
      "id": "c3d4e5f6-a7b8-9012-cdef-123456789012:country",
      "result_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
      "resolution_run_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "document_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
      "status": "completed",
      "field_name": "country",
      "original_value": "Deutschland",
      "resolved_value": "DE",
      "resolution_step": "lookup",
      "confidence": 0.98,
      "created_at": "2026-07-14T10:35:00.000Z"
    }
  ]
}

Use resolution_step to understand how each value was normalized: lookup indicates a direct reference table match, registry_transfer means the value was carried from the field registry, deterministic_compute means a formula produced the result, and source_extraction means the extracted value stood as-is. A null resolved_value means no strategy produced a value for the field. Recurring unmatched values are the signal to extend your reference tables before the next run.

Read results only after [GET /v1/resolutions/{id}](get-resolution) reports completed when you need the final picture — during processing the endpoint serves whatever has been flushed so far, which is useful for progress display but not for downstream consumption. For delivery-shaped output (dialect renames, suppressed fields, casts applied), configure the run's schema with a dialect and consume the run through your delivery destinations instead of re-implementing that shaping client-side.

Errors

Error responses

401unauthorizedMissing or invalid API key.
404not_foundResolution run not found or does not belong to your organization.
429rate_limitedDaily request quota for your tier reached. The counter resets at midnight UTC.

Frequently asked questions

What does it mean when resolved_value is null?+
No resolution strategy could match the original value to a canonical form, so the field keeps its raw extracted value. Recurring unmatched values are the signal to add entries to your reference tables — the next run created after the edit picks them up.
Why does the endpoint return rows before the run is completed?+
Per-document results are flushed in batches during execution, and each flushed document contributes one row per field. Partial reads are useful for progress display; wait for the run status to reach completed before consuming results downstream.
Why do I see fewer rows than the source run has documents?+
Results are filtered by your organization's source visibility rules: rows for documents hidden from your API key's user are dropped from the response. A key minted by a user with broader visibility can see more rows for the same run.
Can I use resolution results in a data product?+
Yes. Pass the completed resolution run's UUID in the run_ids array of POST /v1/data-products to assemble the resolved values into a data product ready for export or delivery.