from retab import Retab
client = Retab()
runs = client.workflows.evals.runs.list(
workflow_id="wf_abc123xyz",
status="completed",
limit=10,
)
for run in runs.data:
print(run.id, run.lifecycle.status, run.counts)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const runs = await client.workflows.evals.runs.list({
workflowId: "wf_abc123xyz",
status: "completed",
limit: 10,
});
for (const run of runs.data) {
console.log(run.id, run.lifecycle.status, run.counts);
}
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)
}
runs, err := client.Workflows.Evals.Runs.List(ctx, &retab.WorkflowEvalRunsListParams{
WorkflowID: ptr("wf_abc123xyz"),
Status: ptr("completed"),
PaginationParams: retab.PaginationParams{
Limit: ptr(10),
},
})
if err != nil {
log.Fatal(err)
}
for _, run := range runs.Data {
fmt.Println(run.ID, run.Lifecycle.Status(), run.Counts)
}
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
runs = client.workflows.evals.runs.list(
workflow_id: 'wf_abc123xyz',
status: 'completed',
limit: 10,
)
runs.data.each do |run|
puts "#{run.id} #{run.lifecycle.status} #{run.counts}"
end
use retab::resources::workflow_eval_runs::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 runs = client
.workflows().evals().runs()
.list(ListParams {
workflow_id: Some("wf_abc123xyz".into()),
status: Some("completed".into()),
limit: Some(10),
..Default::default()
})
.await?;
for run in &runs.data {
println!("{} {:?} {:?}", run.id, run.lifecycle, run.counts);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->evals()->runs()->list();
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.Runs.ListAsync(new WorkflowEvalRunsListOptions());
Console.WriteLine(result);
import com.retab.RetabClient;
import com.retab.workflowevalruns.WorkflowEvalRunsApi;
public final class Example {
public static void main(String[] args) throws Exception {
RetabClient client = new RetabClient(System.getenv("RETAB_API_KEY"));
var result = new WorkflowEvalRunsApi(client).list("wf_abc123", "eval_abc123", null, null, null, null, null, null, "created_at", null, null, 10L, null);
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/evals/runs?workflow_id=wf_abc123xyz&status=completed&limit=10' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <your-api-key>'
{
"data": [
{
"id": "wfnodeevalrun_tRNzPiMpBas4kDwD74M8d",
"workflow_id": "wf_abc123xyz",
"workflow_version_id": "draft_2026_05_18",
"trigger": { "type": "api" },
"lifecycle": { "status": "completed" },
"timing": {
"created_at": "2026-05-18T10:00:00Z",
"started_at": "2026-05-18T10:00:01Z",
"completed_at": "2026-05-18T10:00:29Z",
"duration_ms": 28000
},
"eval_id": null,
"target": { "type": "block", "block_id": "block_extract_invoice" },
"total_evals": 4,
"counts": {
"lifecycle_counts": {
"pending": 0,
"queued": 0,
"running": 0,
"completed": 4,
"error": 0,
"cancelled": 0
},
"outcome": {
"passed": 3,
"failed": 1,
"blocked": 0
}
}
}
],
"list_metadata": {
"before": null,
"after": null
}
}
Runs
List Workflow Eval Runs
List workflow eval runs.
Optionally filter by workflow_id, eval_id, target_block_id,
status/exclude_status, trigger_type, and a from_date/to_date
window. Returns a cursor-paginated list ordered by sort_by (default
newest first).
GET
/
v1
/
workflows
/
evals
/
runs
from retab import Retab
client = Retab()
runs = client.workflows.evals.runs.list(
workflow_id="wf_abc123xyz",
status="completed",
limit=10,
)
for run in runs.data:
print(run.id, run.lifecycle.status, run.counts)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const runs = await client.workflows.evals.runs.list({
workflowId: "wf_abc123xyz",
status: "completed",
limit: 10,
});
for (const run of runs.data) {
console.log(run.id, run.lifecycle.status, run.counts);
}
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)
}
runs, err := client.Workflows.Evals.Runs.List(ctx, &retab.WorkflowEvalRunsListParams{
WorkflowID: ptr("wf_abc123xyz"),
Status: ptr("completed"),
PaginationParams: retab.PaginationParams{
Limit: ptr(10),
},
})
if err != nil {
log.Fatal(err)
}
for _, run := range runs.Data {
fmt.Println(run.ID, run.Lifecycle.Status(), run.Counts)
}
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
runs = client.workflows.evals.runs.list(
workflow_id: 'wf_abc123xyz',
status: 'completed',
limit: 10,
)
runs.data.each do |run|
puts "#{run.id} #{run.lifecycle.status} #{run.counts}"
end
use retab::resources::workflow_eval_runs::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 runs = client
.workflows().evals().runs()
.list(ListParams {
workflow_id: Some("wf_abc123xyz".into()),
status: Some("completed".into()),
limit: Some(10),
..Default::default()
})
.await?;
for run in &runs.data {
println!("{} {:?} {:?}", run.id, run.lifecycle, run.counts);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->evals()->runs()->list();
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.Runs.ListAsync(new WorkflowEvalRunsListOptions());
Console.WriteLine(result);
import com.retab.RetabClient;
import com.retab.workflowevalruns.WorkflowEvalRunsApi;
public final class Example {
public static void main(String[] args) throws Exception {
RetabClient client = new RetabClient(System.getenv("RETAB_API_KEY"));
var result = new WorkflowEvalRunsApi(client).list("wf_abc123", "eval_abc123", null, null, null, null, null, null, "created_at", null, null, 10L, null);
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/evals/runs?workflow_id=wf_abc123xyz&status=completed&limit=10' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <your-api-key>'
{
"data": [
{
"id": "wfnodeevalrun_tRNzPiMpBas4kDwD74M8d",
"workflow_id": "wf_abc123xyz",
"workflow_version_id": "draft_2026_05_18",
"trigger": { "type": "api" },
"lifecycle": { "status": "completed" },
"timing": {
"created_at": "2026-05-18T10:00:00Z",
"started_at": "2026-05-18T10:00:01Z",
"completed_at": "2026-05-18T10:00:29Z",
"duration_ms": 28000
},
"eval_id": null,
"target": { "type": "block", "block_id": "block_extract_invoice" },
"total_evals": 4,
"counts": {
"lifecycle_counts": {
"pending": 0,
"queued": 0,
"running": 0,
"completed": 4,
"error": 0,
"cancelled": 0
},
"outcome": {
"passed": 3,
"failed": 1,
"blocked": 0
}
}
}
],
"list_metadata": {
"before": null,
"after": null
}
}
List workflow-eval runs, newest first. This is the run index for parent eval
runs, not the per-eval result history.
Filter by
workflow_id, eval_id, target_block_id, lifecycle status,
trigger type, date range, or id pagination. limit defaults to 20, max 100.
The response uses the canonical Retab list envelope:
{ "data": [...], "list_metadata": { "before": null, "after": null } }.
from retab import Retab
client = Retab()
runs = client.workflows.evals.runs.list(
workflow_id="wf_abc123xyz",
status="completed",
limit=10,
)
for run in runs.data:
print(run.id, run.lifecycle.status, run.counts)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const runs = await client.workflows.evals.runs.list({
workflowId: "wf_abc123xyz",
status: "completed",
limit: 10,
});
for (const run of runs.data) {
console.log(run.id, run.lifecycle.status, run.counts);
}
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)
}
runs, err := client.Workflows.Evals.Runs.List(ctx, &retab.WorkflowEvalRunsListParams{
WorkflowID: ptr("wf_abc123xyz"),
Status: ptr("completed"),
PaginationParams: retab.PaginationParams{
Limit: ptr(10),
},
})
if err != nil {
log.Fatal(err)
}
for _, run := range runs.Data {
fmt.Println(run.ID, run.Lifecycle.Status(), run.Counts)
}
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
runs = client.workflows.evals.runs.list(
workflow_id: 'wf_abc123xyz',
status: 'completed',
limit: 10,
)
runs.data.each do |run|
puts "#{run.id} #{run.lifecycle.status} #{run.counts}"
end
use retab::resources::workflow_eval_runs::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 runs = client
.workflows().evals().runs()
.list(ListParams {
workflow_id: Some("wf_abc123xyz".into()),
status: Some("completed".into()),
limit: Some(10),
..Default::default()
})
.await?;
for run in &runs.data {
println!("{} {:?} {:?}", run.id, run.lifecycle, run.counts);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->evals()->runs()->list();
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.Runs.ListAsync(new WorkflowEvalRunsListOptions());
Console.WriteLine(result);
import com.retab.RetabClient;
import com.retab.workflowevalruns.WorkflowEvalRunsApi;
public final class Example {
public static void main(String[] args) throws Exception {
RetabClient client = new RetabClient(System.getenv("RETAB_API_KEY"));
var result = new WorkflowEvalRunsApi(client).list("wf_abc123", "eval_abc123", null, null, null, null, null, null, "created_at", null, null, 10L, null);
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/evals/runs?workflow_id=wf_abc123xyz&status=completed&limit=10' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <your-api-key>'
{
"data": [
{
"id": "wfnodeevalrun_tRNzPiMpBas4kDwD74M8d",
"workflow_id": "wf_abc123xyz",
"workflow_version_id": "draft_2026_05_18",
"trigger": { "type": "api" },
"lifecycle": { "status": "completed" },
"timing": {
"created_at": "2026-05-18T10:00:00Z",
"started_at": "2026-05-18T10:00:01Z",
"completed_at": "2026-05-18T10:00:29Z",
"duration_ms": 28000
},
"eval_id": null,
"target": { "type": "block", "block_id": "block_extract_invoice" },
"total_evals": 4,
"counts": {
"lifecycle_counts": {
"pending": 0,
"queued": 0,
"running": 0,
"completed": 4,
"error": 0,
"cancelled": 0
},
"outcome": {
"passed": 3,
"failed": 1,
"blocked": 0
}
}
}
],
"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 WorkflowEvalRun resources. data holds the items and list_metadata carries the before/after cursors; pass after to fetch the next page.
⌘I