Skip to main content
GET
/
v1
/
workflows
/
tests
/
results
/
{result_id}
from retab import Retab

client = Retab()

result = client.workflows.tests.results.get("wfnodetestrun_a")

print(result.test_id)
print(result.lifecycle.status)
print(result.verdict)
{
  "id": "wfnodetestrun_a",
  "run_id": "wftestrun_q1z2",
  "test_id": "wfnodetest_a",
  "target": { "type": "block", "block_id": "block_extract_invoice" },
  "lifecycle": { "status": "completed" },
  "timing": {
    "started_at": "2026-05-18T10:00:02Z",
    "completed_at": "2026-05-18T10:00:20Z",
    "duration_ms": 18221
  },
  "outputs": {
    "output-json-0": { "total": 1234.56, "vendor": { "name": "Acme Inc" } }
  },
  "assertion_result": {
    "assertion_id": "assert_xyz",
    "condition_kind": "equals",
    "status": "passed",
    "actual_value": 1234.56,
    "expected_value": 1234.56,
    "failure": null
  },
  "verdict": { "status": "passed" }
}

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 one workflow-test result by its opaque result_id. Use this to refresh a single result row without re-listing every result for the parent test run.
from retab import Retab

client = Retab()

result = client.workflows.tests.results.get("wfnodetestrun_a")

print(result.test_id)
print(result.lifecycle.status)
print(result.verdict)
{
  "id": "wfnodetestrun_a",
  "run_id": "wftestrun_q1z2",
  "test_id": "wfnodetest_a",
  "target": { "type": "block", "block_id": "block_extract_invoice" },
  "lifecycle": { "status": "completed" },
  "timing": {
    "started_at": "2026-05-18T10:00:02Z",
    "completed_at": "2026-05-18T10:00:20Z",
    "duration_ms": 18221
  },
  "outputs": {
    "output-json-0": { "total": 1234.56, "vendor": { "name": "Acme Inc" } }
  },
  "assertion_result": {
    "assertion_id": "assert_xyz",
    "condition_kind": "equals",
    "status": "passed",
    "actual_value": 1234.56,
    "expected_value": 1234.56,
    "failure": null
  },
  "verdict": { "status": "passed" }
}

Authorizations

Api-Key
string
header
required

Path Parameters

result_id
string
required

Response

Successful Response

id
string
required
test_id
string
required
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.

source
ManualWorkflowTestSource · object
required
run_id
string | null
lifecycle
PendingWorkflowTestRun · object

The test run has been created but execution has not started.

timing
WorkflowTestRunTiming · object
verdict
enum<string> | null

Verdict label populated only when the underlying test reaches a terminal lifecycle state and the verdict could be determined. Execution-error details flow through error (an ErrorDetails envelope), not through this enum.

Available options:
passed,
failed,
blocked
execution_fingerprint
string
default:""
handle_inputs_fingerprint
string
default:""
workflow_draft_fingerprint
string
default:""
block_config_fingerprint
string
default:""
outputs
Outputs · object
routing_decision
string[] | null
warnings
string[]
error
ErrorDetails · object

Detailed error information for debugging.

Captures stack traces and context about where and why an error occurred.

skipped
boolean
default:false
assertion_result
AssertionResult · object

Result of evaluating ONE assertion against a block's output.

outcome is a verdict only — pass / fail / blocked. An execution error (the assertion couldn't be evaluated because of a type error, invalid regex, schema validation crash, block execution crash, etc.) is expressed by outcome="blocked" with a populated failure whose code identifies the specific failure mode (execution_error, type_error, invalid_regex, schema_invalid, block_execution_failed, ...).

verdict_summary
VerdictSummary · object