from retab import Retab
client = Retab()
result = client.workflows.reviews.reject(
"rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
version_id="rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
reason="Source document is illegible; cannot verify totals.",
)
print(result.review.decision.verdict)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const result = await client.workflows.reviews.reject("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY", "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ", "Source document is illegible; cannot verify totals.");
console.log(result.review.decision?.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.Reviews.Reject(ctx, "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY", &retab.WorkflowReviewsRejectParams{
VersionID: "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
Reason: "Source document is illegible; cannot verify totals.",
})
if err != nil {
log.Fatal(err)
}
if result.Review.Decision != nil {
fmt.Println(result.Review.Decision.Verdict)
}
}
use retab::models::RejectReviewRequest;
use retab::resources::workflow_reviews::RejectParams;
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 body = RejectReviewRequest::new(
"rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"Source document is illegible; cannot verify totals.",
);
let result = client
.workflows().reviews()
.reject(
"rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
RejectParams::new(body),
)
.await?;
if let Some(decision) = result.review.decision.as_ref() {
println!("{:?}", decision.verdict);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->reviews()->reject(
reviewId: 'rev_abc123',
versionId: 'ver_abc123',
reason: 'value',
);
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.RejectAsync(
"rev_abc123",
new WorkflowReviewsRejectOptions
{
VersionId = "ver_abc123",
Reason = "Source document is illegible; cannot verify totals.",
}
);
Console.WriteLine(result);
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.reviews.reject(
review_id: 'rev_abc123',
version_id: 'ver_abc123',
reason: 'Source document is illegible; cannot verify totals.',
)
puts 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().reject("review_abc123", "version_abc123", "Needs another review");
System.out.println(result);
}
}
curl -X POST \
'https://api.retab.com/v1/workflows/reviews/rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY/reject' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <your-api-key>' \
-d '{
"version_id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"reason": "Source document is illegible; cannot verify totals."
}'
{
"submission_status": "accepted",
"resume_status": "resumed",
"resume_error": null,
"review": {
"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",
"block_type": "extract",
"triggered_by": { "kind": "always" },
"created_at": "2026-05-13T08:14:02.341Z",
"decision": {
"verdict": "rejected",
"version_id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"author": { "kind": "human", "id": "user_42", "display_name": "Dana Rivera" },
"reason": "Source document is illegible; cannot verify totals.",
"created_at": "2026-05-13T09:10:00.000Z"
}
}
}
Reviews
Reject Review
Reject one review version and resume the workflow run.
A reason is required.
POST
/
v1
/
workflows
/
reviews
/
{review_id}
/
reject
from retab import Retab
client = Retab()
result = client.workflows.reviews.reject(
"rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
version_id="rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
reason="Source document is illegible; cannot verify totals.",
)
print(result.review.decision.verdict)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const result = await client.workflows.reviews.reject("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY", "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ", "Source document is illegible; cannot verify totals.");
console.log(result.review.decision?.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.Reviews.Reject(ctx, "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY", &retab.WorkflowReviewsRejectParams{
VersionID: "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
Reason: "Source document is illegible; cannot verify totals.",
})
if err != nil {
log.Fatal(err)
}
if result.Review.Decision != nil {
fmt.Println(result.Review.Decision.Verdict)
}
}
use retab::models::RejectReviewRequest;
use retab::resources::workflow_reviews::RejectParams;
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 body = RejectReviewRequest::new(
"rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"Source document is illegible; cannot verify totals.",
);
let result = client
.workflows().reviews()
.reject(
"rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
RejectParams::new(body),
)
.await?;
if let Some(decision) = result.review.decision.as_ref() {
println!("{:?}", decision.verdict);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->reviews()->reject(
reviewId: 'rev_abc123',
versionId: 'ver_abc123',
reason: 'value',
);
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.RejectAsync(
"rev_abc123",
new WorkflowReviewsRejectOptions
{
VersionId = "ver_abc123",
Reason = "Source document is illegible; cannot verify totals.",
}
);
Console.WriteLine(result);
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.reviews.reject(
review_id: 'rev_abc123',
version_id: 'ver_abc123',
reason: 'Source document is illegible; cannot verify totals.',
)
puts 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().reject("review_abc123", "version_abc123", "Needs another review");
System.out.println(result);
}
}
curl -X POST \
'https://api.retab.com/v1/workflows/reviews/rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY/reject' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <your-api-key>' \
-d '{
"version_id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"reason": "Source document is illegible; cannot verify totals."
}'
{
"submission_status": "accepted",
"resume_status": "resumed",
"resume_error": null,
"review": {
"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",
"block_type": "extract",
"triggered_by": { "kind": "always" },
"created_at": "2026-05-13T08:14:02.341Z",
"decision": {
"verdict": "rejected",
"version_id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"author": { "kind": "human", "id": "user_42", "display_name": "Dana Rivera" },
"reason": "Source document is illegible; cannot verify totals.",
"created_at": "2026-05-13T09:10:00.000Z"
}
}
}
Reject one exact review version. The runtime records the review as rejected,
downstream blocks do not continue, and
reason is required.
from retab import Retab
client = Retab()
result = client.workflows.reviews.reject(
"rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
version_id="rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
reason="Source document is illegible; cannot verify totals.",
)
print(result.review.decision.verdict)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const result = await client.workflows.reviews.reject("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY", "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ", "Source document is illegible; cannot verify totals.");
console.log(result.review.decision?.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.Reviews.Reject(ctx, "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY", &retab.WorkflowReviewsRejectParams{
VersionID: "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
Reason: "Source document is illegible; cannot verify totals.",
})
if err != nil {
log.Fatal(err)
}
if result.Review.Decision != nil {
fmt.Println(result.Review.Decision.Verdict)
}
}
use retab::models::RejectReviewRequest;
use retab::resources::workflow_reviews::RejectParams;
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 body = RejectReviewRequest::new(
"rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"Source document is illegible; cannot verify totals.",
);
let result = client
.workflows().reviews()
.reject(
"rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
RejectParams::new(body),
)
.await?;
if let Some(decision) = result.review.decision.as_ref() {
println!("{:?}", decision.verdict);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->reviews()->reject(
reviewId: 'rev_abc123',
versionId: 'ver_abc123',
reason: 'value',
);
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.RejectAsync(
"rev_abc123",
new WorkflowReviewsRejectOptions
{
VersionId = "ver_abc123",
Reason = "Source document is illegible; cannot verify totals.",
}
);
Console.WriteLine(result);
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.reviews.reject(
review_id: 'rev_abc123',
version_id: 'ver_abc123',
reason: 'Source document is illegible; cannot verify totals.',
)
puts 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().reject("review_abc123", "version_abc123", "Needs another review");
System.out.println(result);
}
}
curl -X POST \
'https://api.retab.com/v1/workflows/reviews/rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY/reject' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <your-api-key>' \
-d '{
"version_id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"reason": "Source document is illegible; cannot verify totals."
}'
{
"submission_status": "accepted",
"resume_status": "resumed",
"resume_error": null,
"review": {
"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",
"block_type": "extract",
"triggered_by": { "kind": "always" },
"created_at": "2026-05-13T08:14:02.341Z",
"decision": {
"verdict": "rejected",
"version_id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"author": { "kind": "human", "id": "user_42", "display_name": "Dana Rivera" },
"reason": "Source document is illegible; cannot verify totals.",
"created_at": "2026-05-13T09:10:00.000Z"
}
}
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
application/json
Response
Successful Response
Response to a review approve or reject request.
Carries resume_status so callers can see whether the run resumed
successfully.
One review and its current decision.
Show child attributes
Show child attributes
Available options:
accepted, already_applied, conflict Available options:
resumed, pending, failed, skipped ⌘I