from retab import Retab
client = Retab()
review = client.workflows.reviews.get("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
print(review.id, review.run_id, review.block_id)
if review.decision:
print(review.decision.verdict, review.decision.version_id)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const review = await client.workflows.reviews.get(
"rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
);
console.log(review.id, review.runId, review.blockId);
if (review.decision) {
console.log(review.decision.verdict, review.decision.versionId);
}
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)
}
review, err := client.Workflows.Reviews.Get(ctx, "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
if err != nil {
log.Fatal(err)
}
fmt.Println(review.ID, review.RunID, review.BlockID)
if review.Decision != nil {
fmt.Println(review.Decision.Verdict, review.Decision.VersionID)
}
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
review = client.workflows.reviews.get(review_id: 'rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY')
puts "#{review.id} #{review.run_id} #{review.block_id}"
if review.decision
puts "#{review.decision.verdict} #{review.decision.version_id}"
end
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 review = client
.workflows().reviews()
.get("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
.await?;
println!("{} {} {}", review.id, review.run_id, review.block_id);
if let Some(decision) = review.decision.as_ref() {
println!("{:?} {}", decision.verdict, decision.version_id);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->reviews()->get(
reviewId: 'rev_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.Reviews.GetAsync("rev_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().reviews().get("review_abc123");
System.out.println(result);
}
}
curl -X GET \
'https://api.retab.com/v1/workflows/reviews/rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY' \
-H 'Authorization: Bearer <your-api-key>'
{
"id": "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
"workflow_id": "wf_1",
"workflow_version_id": "wfv_1",
"run_id": "run_abc123",
"block_id": "block_extract",
"step_id": "run_abc123_block_extract",
"parent_step_id": null,
"iteration_key": null,
"block_type": "extract",
"triggered_by": { "kind": "always" },
"created_at": "2026-05-13T08:14:02.341Z",
"decision": null
}
Reviews
Get Review
Read one review’s metadata + decision. Versions are fetched separately.
GET
/
v1
/
workflows
/
reviews
/
{review_id}
from retab import Retab
client = Retab()
review = client.workflows.reviews.get("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
print(review.id, review.run_id, review.block_id)
if review.decision:
print(review.decision.verdict, review.decision.version_id)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const review = await client.workflows.reviews.get(
"rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
);
console.log(review.id, review.runId, review.blockId);
if (review.decision) {
console.log(review.decision.verdict, review.decision.versionId);
}
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)
}
review, err := client.Workflows.Reviews.Get(ctx, "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
if err != nil {
log.Fatal(err)
}
fmt.Println(review.ID, review.RunID, review.BlockID)
if review.Decision != nil {
fmt.Println(review.Decision.Verdict, review.Decision.VersionID)
}
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
review = client.workflows.reviews.get(review_id: 'rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY')
puts "#{review.id} #{review.run_id} #{review.block_id}"
if review.decision
puts "#{review.decision.verdict} #{review.decision.version_id}"
end
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 review = client
.workflows().reviews()
.get("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
.await?;
println!("{} {} {}", review.id, review.run_id, review.block_id);
if let Some(decision) = review.decision.as_ref() {
println!("{:?} {}", decision.verdict, decision.version_id);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->reviews()->get(
reviewId: 'rev_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.Reviews.GetAsync("rev_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().reviews().get("review_abc123");
System.out.println(result);
}
}
curl -X GET \
'https://api.retab.com/v1/workflows/reviews/rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY' \
-H 'Authorization: Bearer <your-api-key>'
{
"id": "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
"workflow_id": "wf_1",
"workflow_version_id": "wfv_1",
"run_id": "run_abc123",
"block_id": "block_extract",
"step_id": "run_abc123_block_extract",
"parent_step_id": null,
"iteration_key": null,
"block_type": "extract",
"triggered_by": { "kind": "always" },
"created_at": "2026-05-13T08:14:02.341Z",
"decision": null
}
Get one full review by opaque review id.
from retab import Retab
client = Retab()
review = client.workflows.reviews.get("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
print(review.id, review.run_id, review.block_id)
if review.decision:
print(review.decision.verdict, review.decision.version_id)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const review = await client.workflows.reviews.get(
"rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
);
console.log(review.id, review.runId, review.blockId);
if (review.decision) {
console.log(review.decision.verdict, review.decision.versionId);
}
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)
}
review, err := client.Workflows.Reviews.Get(ctx, "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
if err != nil {
log.Fatal(err)
}
fmt.Println(review.ID, review.RunID, review.BlockID)
if review.Decision != nil {
fmt.Println(review.Decision.Verdict, review.Decision.VersionID)
}
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
review = client.workflows.reviews.get(review_id: 'rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY')
puts "#{review.id} #{review.run_id} #{review.block_id}"
if review.decision
puts "#{review.decision.verdict} #{review.decision.version_id}"
end
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 review = client
.workflows().reviews()
.get("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
.await?;
println!("{} {} {}", review.id, review.run_id, review.block_id);
if let Some(decision) = review.decision.as_ref() {
println!("{:?} {}", decision.verdict, decision.version_id);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->reviews()->get(
reviewId: 'rev_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.Reviews.GetAsync("rev_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().reviews().get("review_abc123");
System.out.println(result);
}
}
curl -X GET \
'https://api.retab.com/v1/workflows/reviews/rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY' \
-H 'Authorization: Bearer <your-api-key>'
{
"id": "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
"workflow_id": "wf_1",
"workflow_version_id": "wfv_1",
"run_id": "run_abc123",
"block_id": "block_extract",
"step_id": "run_abc123_block_extract",
"parent_step_id": null,
"iteration_key": null,
"block_type": "extract",
"triggered_by": { "kind": "always" },
"created_at": "2026-05-13T08:14:02.341Z",
"decision": null
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Response
Successful Response
One review and its current decision.
Available options:
extract, split, classifier, for_each Gate every run.
- ReviewAlways
- ReviewValidationFailed
- ReviewConfidenceLt
- ReviewCategoryIn
- ReviewTopMarginLt
- ReviewSplitCountNeq
- ReviewAnySplitPagesLt
- ReviewBoundaryConfidenceLt
- ReviewAnyPagesUnassigned
- ReviewAnyRequiredFieldNull
- ReviewJsonCondition
- ReviewBranchIn
- ReviewAnyOf
- ReviewAllOf
Show child attributes
Show child attributes
When the review was created.
The terminal decision recorded against one review version.
Show child attributes
Show child attributes
⌘I