from retab import Retab
client = Retab()
artifact = client.workflows.artifacts.get("ceval_abc123")
print(artifact.operation)
print(artifact.id)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const artifact = await client.workflows.artifacts.get("ceval_abc123");
console.log(artifact.operation);
console.log(artifact.id);
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() {
client, err := retab.NewClient("")
if err != nil {
log.Fatal(err)
}
artifact, err := client.Workflows.Artifacts.Get(context.Background(), "ceval_abc123")
if err != nil {
log.Fatal(err)
}
fmt.Println(artifact)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
artifact = client.workflows.artifacts.get(artifact_id: 'ceval_abc123')
puts artifact['operation']
puts artifact['id']
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 artifact = client.workflows().artifacts().get("ceval_abc123").await?;
println!("{:?}", artifact);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->artifacts()->get(
artifactId: 'artifact_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.Artifacts.GetAsync("artifact_abc123");
Console.WriteLine(result);
import com.retab.RetabClient;
public final class Example {
public static void main(String[] args) throws Exception {
RetabClient client = new RetabClient(System.getenv("RETAB_API_KEY"));
var result = client.workflows().artifacts().get("artifact_abc123");
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/artifacts/ceval_abc123' \
-H 'Authorization: Bearer <your-api-key>'
{
"operation": "conditional_evaluation",
"id": "ceval_abc123",
"run_id": "run_abc123xyz",
"step_id": "conditional-block-1",
"selected_handles": ["wrong"],
"matched_branch_id": "branch_wrong",
"matched_condition_ids": ["condition_wrong_total"],
"evaluations": [
{
"condition_id": "condition_wrong_total",
"matched": true,
"output_handle_id": "wrong",
"left_value": 1200,
"operator": "greater_than",
"right_value": 1000
}
],
"created_at": "2026-03-12T09:00:04Z"
}
{
"detail": "Unknown artifact id - prefix does not match any known workflow artifact operation"
}
Get Artifact
Get one workflow artifact by id.
The artifact kind is derived from the id prefix (extr_… → extraction,
clss_… → classification, etc.).
from retab import Retab
client = Retab()
artifact = client.workflows.artifacts.get("ceval_abc123")
print(artifact.operation)
print(artifact.id)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const artifact = await client.workflows.artifacts.get("ceval_abc123");
console.log(artifact.operation);
console.log(artifact.id);
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() {
client, err := retab.NewClient("")
if err != nil {
log.Fatal(err)
}
artifact, err := client.Workflows.Artifacts.Get(context.Background(), "ceval_abc123")
if err != nil {
log.Fatal(err)
}
fmt.Println(artifact)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
artifact = client.workflows.artifacts.get(artifact_id: 'ceval_abc123')
puts artifact['operation']
puts artifact['id']
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 artifact = client.workflows().artifacts().get("ceval_abc123").await?;
println!("{:?}", artifact);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->artifacts()->get(
artifactId: 'artifact_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.Artifacts.GetAsync("artifact_abc123");
Console.WriteLine(result);
import com.retab.RetabClient;
public final class Example {
public static void main(String[] args) throws Exception {
RetabClient client = new RetabClient(System.getenv("RETAB_API_KEY"));
var result = client.workflows().artifacts().get("artifact_abc123");
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/artifacts/ceval_abc123' \
-H 'Authorization: Bearer <your-api-key>'
{
"operation": "conditional_evaluation",
"id": "ceval_abc123",
"run_id": "run_abc123xyz",
"step_id": "conditional-block-1",
"selected_handles": ["wrong"],
"matched_branch_id": "branch_wrong",
"matched_condition_ids": ["condition_wrong_total"],
"evaluations": [
{
"condition_id": "condition_wrong_total",
"matched": true,
"output_handle_id": "wrong",
"left_value": 1200,
"operator": "greater_than",
"right_value": 1000
}
],
"created_at": "2026-03-12T09:00:04Z"
}
{
"detail": "Unknown artifact id - prefix does not match any known workflow artifact operation"
}
artifact_id. The endpoint infers
the backing artifact operation from the id prefix, so callers do not need to
know which collection stores the record.
The response is the flattened artifact record with operation injected at the
top level. Operation-specific fields are preserved.
from retab import Retab
client = Retab()
artifact = client.workflows.artifacts.get("ceval_abc123")
print(artifact.operation)
print(artifact.id)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const artifact = await client.workflows.artifacts.get("ceval_abc123");
console.log(artifact.operation);
console.log(artifact.id);
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() {
client, err := retab.NewClient("")
if err != nil {
log.Fatal(err)
}
artifact, err := client.Workflows.Artifacts.Get(context.Background(), "ceval_abc123")
if err != nil {
log.Fatal(err)
}
fmt.Println(artifact)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
artifact = client.workflows.artifacts.get(artifact_id: 'ceval_abc123')
puts artifact['operation']
puts artifact['id']
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 artifact = client.workflows().artifacts().get("ceval_abc123").await?;
println!("{:?}", artifact);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->artifacts()->get(
artifactId: 'artifact_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.Artifacts.GetAsync("artifact_abc123");
Console.WriteLine(result);
import com.retab.RetabClient;
public final class Example {
public static void main(String[] args) throws Exception {
RetabClient client = new RetabClient(System.getenv("RETAB_API_KEY"));
var result = client.workflows().artifacts().get("artifact_abc123");
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/artifacts/ceval_abc123' \
-H 'Authorization: Bearer <your-api-key>'
{
"operation": "conditional_evaluation",
"id": "ceval_abc123",
"run_id": "run_abc123xyz",
"step_id": "conditional-block-1",
"selected_handles": ["wrong"],
"matched_branch_id": "branch_wrong",
"matched_condition_ids": ["condition_wrong_total"],
"evaluations": [
{
"condition_id": "condition_wrong_total",
"matched": true,
"output_handle_id": "wrong",
"left_value": 1200,
"operator": "greater_than",
"right_value": 1000
}
],
"created_at": "2026-03-12T09:00:04Z"
}
{
"detail": "Unknown artifact id - prefix does not match any known workflow artifact operation"
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Response
Successful Response
- ExtractionWorkflowArtifact
- SplitWorkflowArtifact
- ClassificationWorkflowArtifact
- ParseWorkflowArtifact
- EditWorkflowArtifact
- PartitionWorkflowArtifact
- ConditionalEvaluationWorkflowArtifact
- ReviewEvaluationWorkflowArtifact
- WhileLoopTerminationWorkflowArtifact
- ApiCallInvocationWorkflowArtifact
- FunctionInvocationWorkflowArtifact
An extraction produced by a workflow run, tagged with its artifact operation and creation time.
Unique identifier of the extraction
Information about the extracted file
Show child attributes
Show child attributes
Model used for the extraction
JSON schema used for the extraction
The extracted structured data
Number of consensus votes used
Free-form instructions supplied with the extraction request.
Lifecycle status. The synchronous path returns 'completed'. Background runs progress pending -> queued -> in_progress -> completed | failed | cancelled.
pending, queued, in_progress, completed, failed, cancelled Error details when a background run fails; null otherwise. Always present so consumers can read it without an existence check.
Show child attributes
Show child attributes
Consensus metadata for multi-vote extraction runs
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Usage information for the extraction
Show child attributes
Show child attributes
Timestamp when this artifact was created.
The operation that produced this artifact
"extraction"