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",
  "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",
  "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

Response

Successful Response

id
string
required
test_id
string
required
status
enum<string>
required
Available options:
queued,
running,
passed,
failed,
blocked,
error,
cancelled
workflow_id
string
required
target
WorkflowTestBlockTarget · object
required

Public workflow-test target.

The storage layer remains block-scoped today, but the API shape names the tested entity explicitly so workflow-level targets can be added later.

started_at
string<date-time>
required
source
ManualWorkflowTestSource · object
required
execution_fingerprint
string
default:""
handle_inputs_fingerprint
string
default:""
workflow_draft_fingerprint
string
default:""
block_config_fingerprint
string
default:""
completed_at
string<date-time> | null
duration_ms
integer | null
outputs
Outputs · object
routing_decision
string[] | null
warnings
string[]
error
string | null
skipped
boolean
default:false
assertion_result
AssertionResult · object
verdict_summary
VerdictSummary · object