from retab import Retab
client = Retab()
results = client.workflows.evals.results.list("wfevalrun_q1z2")
for result in results.data:
print(result.eval_id, result.verdict)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const results = await client.workflows.evals.results.list({
runId: "wfevalrun_q1z2",
});
for (const result of results.data) {
console.log(result.evalId, 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)
}
results, err := client.Workflows.Evals.Results.List(ctx, &retab.WorkflowEvalRunResultsListParams{
RunID: "wfevalrun_q1z2",
})
if err != nil {
log.Fatal(err)
}
for _, result := range results.Data {
fmt.Println(result.EvalID, result.Verdict)
}
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
results = client.workflows.evals.results.list(run_id: 'wfevalrun_q1z2')
results.data.each do |result|
puts "#{result.eval_id} #{result.verdict}"
end
use retab::resources::workflow_eval_run_results::ListParams;
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 results = client
.workflows().evals().results()
.list(ListParams::new("wfevalrun_q1z2"))
.await?;
for result in &results.data {
println!("{} {:?}", result.eval_id, result.verdict);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->evals()->results()->list(
runId: 'run_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.ListAsync(new WorkflowEvalRunResultsListOptions());
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).list("run_abc123", null, null, 10L, null);
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/evals/results?run_id=wfevalrun_q1z2' \
-H 'Authorization: Bearer <your-api-key>'
{
"data": [
{
"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": []
}
}
],
"list_metadata": {
"before": null,
"after": null
}
}
Results
List Eval Results
List workflow eval results for a single run, page by page.
Results are returned in run-time order.
GET
/
v1
/
workflows
/
evals
/
results
from retab import Retab
client = Retab()
results = client.workflows.evals.results.list("wfevalrun_q1z2")
for result in results.data:
print(result.eval_id, result.verdict)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const results = await client.workflows.evals.results.list({
runId: "wfevalrun_q1z2",
});
for (const result of results.data) {
console.log(result.evalId, 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)
}
results, err := client.Workflows.Evals.Results.List(ctx, &retab.WorkflowEvalRunResultsListParams{
RunID: "wfevalrun_q1z2",
})
if err != nil {
log.Fatal(err)
}
for _, result := range results.Data {
fmt.Println(result.EvalID, result.Verdict)
}
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
results = client.workflows.evals.results.list(run_id: 'wfevalrun_q1z2')
results.data.each do |result|
puts "#{result.eval_id} #{result.verdict}"
end
use retab::resources::workflow_eval_run_results::ListParams;
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 results = client
.workflows().evals().results()
.list(ListParams::new("wfevalrun_q1z2"))
.await?;
for result in &results.data {
println!("{} {:?}", result.eval_id, result.verdict);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->evals()->results()->list(
runId: 'run_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.ListAsync(new WorkflowEvalRunResultsListOptions());
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).list("run_abc123", null, null, 10L, null);
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/evals/results?run_id=wfevalrun_q1z2' \
-H 'Authorization: Bearer <your-api-key>'
{
"data": [
{
"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": []
}
}
],
"list_metadata": {
"before": null,
"after": null
}
}
List the eval results produced by one workflow-eval run. Filter by
run_id;
each result also has
its own opaque id; use Get Workflow Eval Result
to refresh one row directly.
The response uses the canonical Retab list envelope:
{ "data": [...], "list_metadata": { "before": null, "after": null } }.
from retab import Retab
client = Retab()
results = client.workflows.evals.results.list("wfevalrun_q1z2")
for result in results.data:
print(result.eval_id, result.verdict)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const results = await client.workflows.evals.results.list({
runId: "wfevalrun_q1z2",
});
for (const result of results.data) {
console.log(result.evalId, 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)
}
results, err := client.Workflows.Evals.Results.List(ctx, &retab.WorkflowEvalRunResultsListParams{
RunID: "wfevalrun_q1z2",
})
if err != nil {
log.Fatal(err)
}
for _, result := range results.Data {
fmt.Println(result.EvalID, result.Verdict)
}
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
results = client.workflows.evals.results.list(run_id: 'wfevalrun_q1z2')
results.data.each do |result|
puts "#{result.eval_id} #{result.verdict}"
end
use retab::resources::workflow_eval_run_results::ListParams;
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 results = client
.workflows().evals().results()
.list(ListParams::new("wfevalrun_q1z2"))
.await?;
for result in &results.data {
println!("{} {:?}", result.eval_id, result.verdict);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->evals()->results()->list(
runId: 'run_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.ListAsync(new WorkflowEvalRunResultsListOptions());
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).list("run_abc123", null, null, 10L, null);
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/evals/results?run_id=wfevalrun_q1z2' \
-H 'Authorization: Bearer <your-api-key>'
{
"data": [
{
"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": []
}
}
],
"list_metadata": {
"before": null,
"after": null
}
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Required range:
1 <= x <= 100Available options:
asc, desc Response
Successful Response
A page of WorkflowEvalResult resources. data holds the items and list_metadata carries the before/after cursors; pass after to fetch the next page.
⌘I