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

client = Retab()

result = client.workflows.evals.results.get("wfresult_a")

print(result.eval_id)
print(result.lifecycle.status)
print(result.verdict)
{
  "id": "wfresult_a",
  "workflow_eval_run_id": "wfevalrun_q1z2",
  "eval_id": "wfnodeeval_a",
  "workflow_id": "wf_abc123xyz",
  "block_id": "block_extract_invoice",
  "block_type": "extract",
  "lifecycle": { "status": "completed" },
  "timing": {
    "created_at": "2026-05-18T10:00:00Z",
    "started_at": "2026-05-18T10:00:02Z",
    "completed_at": "2026-05-18T10:00:20Z",
    "duration_ms": 18221
  },
  "handle_inputs": {},
  "handle_outputs": {
    "output-json-0": {
      "type": "json",
      "data": { "total": 1234.56, "vendor": { "name": "Acme Inc" } }
    }
  },
  "warnings": [],
  "assertion_result": {
    "assertion_id": "assert_xyz",
    "condition_kind": "equals",
    "outcome": "passed",
    "actual_value": 1234.56,
    "expected_value": 1234.56,
    "failure": null
  },
  "verdict": "passed",
  "verdict_summary": {
    "passed": true,
    "assertions_passed": 1,
    "assertions_failed": 0,
    "blocked_assertions": 0,
    "failed_assertion_ids": []
  }
}
Fetch one workflow-eval result by its opaque result_id. Use this to refresh a single result row without re-listing every result for the parent eval run.
from retab import Retab

client = Retab()

result = client.workflows.evals.results.get("wfresult_a")

print(result.eval_id)
print(result.lifecycle.status)
print(result.verdict)
{
  "id": "wfresult_a",
  "workflow_eval_run_id": "wfevalrun_q1z2",
  "eval_id": "wfnodeeval_a",
  "workflow_id": "wf_abc123xyz",
  "block_id": "block_extract_invoice",
  "block_type": "extract",
  "lifecycle": { "status": "completed" },
  "timing": {
    "created_at": "2026-05-18T10:00:00Z",
    "started_at": "2026-05-18T10:00:02Z",
    "completed_at": "2026-05-18T10:00:20Z",
    "duration_ms": 18221
  },
  "handle_inputs": {},
  "handle_outputs": {
    "output-json-0": {
      "type": "json",
      "data": { "total": 1234.56, "vendor": { "name": "Acme Inc" } }
    }
  },
  "warnings": [],
  "assertion_result": {
    "assertion_id": "assert_xyz",
    "condition_kind": "equals",
    "outcome": "passed",
    "actual_value": 1234.56,
    "expected_value": 1234.56,
    "failure": null
  },
  "verdict": "passed",
  "verdict_summary": {
    "passed": true,
    "assertions_passed": 1,
    "assertions_failed": 0,
    "blocked_assertions": 0,
    "failed_assertion_ids": []
  }
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

result_id
string
required

Response

Successful Response

The outcome of one eval within an eval run: its lifecycle, timing, and verdict.

id
string
required
eval_id
string
required
workflow_id
string
required
block_id
string
required
block_type
string
required
workflow_eval_run_id
string | null
lifecycle
PendingWorkflowEvalRun · object

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

timing
WorkflowEvalRunTiming · object
verdict
enum<string> | null

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

Available options:
passed,
failed,
blocked
execution_fingerprint
string | null
handle_inputs_fingerprint
string | null
workflow_draft_fingerprint
string | null
block_config_fingerprint
string | null
artifact
StepArtifactRef · object

A resource produced by a workflow step.

An (operation, id) reference. The artifact itself carries no payload — consumers dispatch on operation and fetch the referenced record by id.

handle_inputs
Handle Inputs · object
handle_outputs
Handle Outputs · object
routing_decisions
string[] | null
warnings
string[]
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