Skip to main content
GET
/
v1
/
workflows
/
{workflow_id}
/
block-tests
/
{test_id}
/
runs
/
{run_id}
from retab import Retab

client = Retab()

run = client.workflows.tests.runs.get(
    workflow_id="wf_abc123xyz",
    test_id="wfnodetest_hsLEQiM61ez9Piv147MWk",
    run_id="wfnodetestrun_tRNzPiMpBas4kDwD74M8d",
)

print(run.status)
print(run.outputs)              # ← per-handle outputs (renamed from `handle_outputs`)
print(run.assertion_result)
{
  "id": "wfnodetestrun_tRNzPiMpBas4kDwD74M8d",
  "test_id": "wfnodetest_hsLEQiM61ez9Piv147MWk",
  "workflow_id": "wf_abc123xyz",
  "organization_id": "org_123",
  "target": { "type": "block", "block_id": "block_extract_invoice" },
  "source": {
    "type": "manual",
    "handle_inputs": {
      "input-document-0": { "type": "file", "file_id": "file_invoice_q1" }
    }
  },
  "status": "passed",
  "execution_fingerprint": "d03d5d7cc9f55ba2db4399bc430f5bdc",
  "handle_inputs_fingerprint": "7ee7814256df5a34a387d0e95190b776",
  "workflow_draft_fingerprint": "ddd95baadce6045f2410a8074574c6bc",
  "block_config_fingerprint": "0ff93ddc7cefcb42b9375a405957a564",
  "started_at": "2026-04-08T14:27:35Z",
  "completed_at": "2026-04-08T14:27:52Z",
  "duration_ms": 17228,
  "outputs": {
    "output-json-0": { "total": 1234.56, "vendor": { "name": "Acme Inc" } },
    "output-file-0": { "type": "file", "file_id": "file_normalized_q1" }
  },
  "routing_decision": null,
  "warnings": [],
  "error": null,
  "skipped": false,
  "assertion_result": {
    "assertion_id": "assert_xyz",
    "condition_kind": "equals",
    "status": "passed",
    "actual_value": 1234.56,
    "expected_value": 1234.56,
    "score": null,
    "threshold": null,
    "metric_kind": null,
    "assertion_label": null,
    "failure": null
  },
  "verdict_summary": {
    "result": true,
    "assertions_passed": 1,
    "assertions_failed": 0,
    "blocked_assertions": 0,
    "failed_assertion_ids": []
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.retab.com/llms.txt

Use this file to discover all available pages before exploring further.

Fetch a single immutable run record. Use this after polling Execute Block Tests to inspect the inputs the block ran with, the per-handle outputs, the assertion result, and any warnings or routing decisions.
from retab import Retab

client = Retab()

run = client.workflows.tests.runs.get(
    workflow_id="wf_abc123xyz",
    test_id="wfnodetest_hsLEQiM61ez9Piv147MWk",
    run_id="wfnodetestrun_tRNzPiMpBas4kDwD74M8d",
)

print(run.status)
print(run.outputs)              # ← per-handle outputs (renamed from `handle_outputs`)
print(run.assertion_result)
{
  "id": "wfnodetestrun_tRNzPiMpBas4kDwD74M8d",
  "test_id": "wfnodetest_hsLEQiM61ez9Piv147MWk",
  "workflow_id": "wf_abc123xyz",
  "organization_id": "org_123",
  "target": { "type": "block", "block_id": "block_extract_invoice" },
  "source": {
    "type": "manual",
    "handle_inputs": {
      "input-document-0": { "type": "file", "file_id": "file_invoice_q1" }
    }
  },
  "status": "passed",
  "execution_fingerprint": "d03d5d7cc9f55ba2db4399bc430f5bdc",
  "handle_inputs_fingerprint": "7ee7814256df5a34a387d0e95190b776",
  "workflow_draft_fingerprint": "ddd95baadce6045f2410a8074574c6bc",
  "block_config_fingerprint": "0ff93ddc7cefcb42b9375a405957a564",
  "started_at": "2026-04-08T14:27:35Z",
  "completed_at": "2026-04-08T14:27:52Z",
  "duration_ms": 17228,
  "outputs": {
    "output-json-0": { "total": 1234.56, "vendor": { "name": "Acme Inc" } },
    "output-file-0": { "type": "file", "file_id": "file_normalized_q1" }
  },
  "routing_decision": null,
  "warnings": [],
  "error": null,
  "skipped": false,
  "assertion_result": {
    "assertion_id": "assert_xyz",
    "condition_kind": "equals",
    "status": "passed",
    "actual_value": 1234.56,
    "expected_value": 1234.56,
    "score": null,
    "threshold": null,
    "metric_kind": null,
    "assertion_label": null,
    "failure": null
  },
  "verdict_summary": {
    "result": true,
    "assertions_passed": 1,
    "assertions_failed": 0,
    "blocked_assertions": 0,
    "failed_assertion_ids": []
  }
}

Authorizations

Api-Key
string
header
required

Path Parameters

workflow_id
string
required
test_id
string
required
run_id
string
required

Query Parameters

access_token
string | null

Response

Successful Response

Immutable record of a single block test execution.

Identity fields (block_id, block_type) are denormalized for standalone queries. Provenance fields live on the test definition only — join via test_id when needed.

Block tests normalized to 1 test = 1 assertion, so there is exactly one assertion_result per run (or None if the simulation failed or the test was created without an assertion).

workflow_id
string
required
organization_id
string
required
block_id
string
required
block_type
string
required
test_id
string
required
status
enum<string>
required
Available options:
passed,
failed,
error
id
string
handle_inputs_fingerprint
string
default:""
workflow_draft_fingerprint
string
default:""
block_config_fingerprint
string
default:""
started_at
string<date-time>
completed_at
string<date-time> | null
duration_ms
integer | null
handle_inputs
Handle Inputs · object
output
any
handle_outputs
Handle Outputs · object
routing_decision
string[] | null
warnings
string[]
error
string | null
skipped
boolean
default:false
execution_fingerprint
string
default:""
assertion_result
AssertionResult · object
verdict_summary
VerdictSummary · object