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)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const result = await client.workflows.evals.results.get("wfresult_a");
console.log(result.evalId);
console.log(result.lifecycle.status);
console.log(result.verdict);
package main
import (
"context"
"fmt"
"log"
retab "github.com/retab-dev/retab/clients/go"
)
func ptr[T any](v T) *T { return &v }
func main() {
ctx := context.Background()
client, err := retab.NewClient("")
if err != nil {
log.Fatal(err)
}
result, err := client.Workflows.Evals.Results.Get(ctx, "wfresult_a")
if err != nil {
log.Fatal(err)
}
fmt.Println(result.EvalID)
fmt.Println(result.Lifecycle)
fmt.Println(result.Verdict)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.evals.results.get(result_id: 'wfresult_a')
puts result.eval_id
puts result.lifecycle.status
puts result.verdict
use retab::Retab;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Retab::new(std::env::var("RETAB_API_KEY")?);
let result = client
.workflows().evals().results()
.get("wfresult_a")
.await?;
println!("{}", result.eval_id);
println!("{:?}", result.lifecycle);
println!("{:?}", result.verdict);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->evals()->results()->get(
resultId: 'result_abc123',
);
print_r($result);
using Retab;
using RetabClient = Retab.Retab;
var apiKey = Environment.GetEnvironmentVariable("RETAB_API_KEY")!;
var client = new RetabClient(apiKey);
var result = await client.Workflows.Evals.Results.GetAsync("result_abc123");
Console.WriteLine(result);
import com.retab.RetabClient;
import com.retab.workflowevalrunresults.WorkflowEvalRunResultsApi;
public final class Example {
public static void main(String[] args) throws Exception {
RetabClient client = new RetabClient(System.getenv("RETAB_API_KEY"));
var result = new WorkflowEvalRunResultsApi(client).get("result_abc123");
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/evals/results/wfresult_a' \
-H 'Authorization: Bearer <your-api-key>'
{
"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": []
}
}
{
"detail": "Workflow eval result not found: wfresult_a"
}
Get Workflow Eval Result
Retrieve a single workflow eval result.
Identified by result_id. Returns the result for one eval within a run,
including its verdict (passed, failed, or blocked), lifecycle,
timing, and any error. Returns 404 if no result with that ID exists.
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)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const result = await client.workflows.evals.results.get("wfresult_a");
console.log(result.evalId);
console.log(result.lifecycle.status);
console.log(result.verdict);
package main
import (
"context"
"fmt"
"log"
retab "github.com/retab-dev/retab/clients/go"
)
func ptr[T any](v T) *T { return &v }
func main() {
ctx := context.Background()
client, err := retab.NewClient("")
if err != nil {
log.Fatal(err)
}
result, err := client.Workflows.Evals.Results.Get(ctx, "wfresult_a")
if err != nil {
log.Fatal(err)
}
fmt.Println(result.EvalID)
fmt.Println(result.Lifecycle)
fmt.Println(result.Verdict)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.evals.results.get(result_id: 'wfresult_a')
puts result.eval_id
puts result.lifecycle.status
puts result.verdict
use retab::Retab;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Retab::new(std::env::var("RETAB_API_KEY")?);
let result = client
.workflows().evals().results()
.get("wfresult_a")
.await?;
println!("{}", result.eval_id);
println!("{:?}", result.lifecycle);
println!("{:?}", result.verdict);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->evals()->results()->get(
resultId: 'result_abc123',
);
print_r($result);
using Retab;
using RetabClient = Retab.Retab;
var apiKey = Environment.GetEnvironmentVariable("RETAB_API_KEY")!;
var client = new RetabClient(apiKey);
var result = await client.Workflows.Evals.Results.GetAsync("result_abc123");
Console.WriteLine(result);
import com.retab.RetabClient;
import com.retab.workflowevalrunresults.WorkflowEvalRunResultsApi;
public final class Example {
public static void main(String[] args) throws Exception {
RetabClient client = new RetabClient(System.getenv("RETAB_API_KEY"));
var result = new WorkflowEvalRunResultsApi(client).get("result_abc123");
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/evals/results/wfresult_a' \
-H 'Authorization: Bearer <your-api-key>'
{
"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": []
}
}
{
"detail": "Workflow eval result not found: wfresult_a"
}
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)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const result = await client.workflows.evals.results.get("wfresult_a");
console.log(result.evalId);
console.log(result.lifecycle.status);
console.log(result.verdict);
package main
import (
"context"
"fmt"
"log"
retab "github.com/retab-dev/retab/clients/go"
)
func ptr[T any](v T) *T { return &v }
func main() {
ctx := context.Background()
client, err := retab.NewClient("")
if err != nil {
log.Fatal(err)
}
result, err := client.Workflows.Evals.Results.Get(ctx, "wfresult_a")
if err != nil {
log.Fatal(err)
}
fmt.Println(result.EvalID)
fmt.Println(result.Lifecycle)
fmt.Println(result.Verdict)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.evals.results.get(result_id: 'wfresult_a')
puts result.eval_id
puts result.lifecycle.status
puts result.verdict
use retab::Retab;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Retab::new(std::env::var("RETAB_API_KEY")?);
let result = client
.workflows().evals().results()
.get("wfresult_a")
.await?;
println!("{}", result.eval_id);
println!("{:?}", result.lifecycle);
println!("{:?}", result.verdict);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->evals()->results()->get(
resultId: 'result_abc123',
);
print_r($result);
using Retab;
using RetabClient = Retab.Retab;
var apiKey = Environment.GetEnvironmentVariable("RETAB_API_KEY")!;
var client = new RetabClient(apiKey);
var result = await client.Workflows.Evals.Results.GetAsync("result_abc123");
Console.WriteLine(result);
import com.retab.RetabClient;
import com.retab.workflowevalrunresults.WorkflowEvalRunResultsApi;
public final class Example {
public static void main(String[] args) throws Exception {
RetabClient client = new RetabClient(System.getenv("RETAB_API_KEY"));
var result = new WorkflowEvalRunResultsApi(client).get("result_abc123");
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/evals/results/wfresult_a' \
-H 'Authorization: Bearer <your-api-key>'
{
"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": []
}
}
{
"detail": "Workflow eval result not found: wfresult_a"
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Response
Successful Response
The outcome of one eval within an eval run: its lifecycle, timing, and verdict.
The eval run has been created but execution has not started.
- PendingWorkflowEvalRun
- QueuedWorkflowEvalRun
- RunningWorkflowEvalRun
- CompletedWorkflowEvalRun
- ErrorWorkflowEvalRun
- CancelledWorkflowEvalRun
Show child attributes
Show child attributes
Show child attributes
Show child attributes
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.
passed, failed, blocked 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.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
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, ...).
Show child attributes
Show child attributes
Show child attributes
Show child attributes