from retab import Retab
client = Retab()
page = client.workflows.reviews.versions.list(
review_id="rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
limit=50,
)
for version in page.data:
print(version.id, version.parent_id)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const page = await client.workflows.reviews.versions.list({
reviewId: "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
limit: 50,
});
for (const version of page.data) {
console.log(version.id, version.parentId);
}
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)
}
page, err := client.Workflows.Reviews.Versions.List(ctx, &retab.WorkflowReviewVersionsListParams{
ReviewID: "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
PaginationParams: retab.PaginationParams{Limit: ptr(50)},
})
if err != nil {
log.Fatal(err)
}
for _, version := range page.Data {
fmt.Println(version.ID, version.ParentID)
}
}
use retab::resources::workflow_review_versions::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 page = client
.workflows().reviews().versions()
.list(ListParams {
limit: Some(50),
..ListParams::new("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
})
.await?;
for version in &page.data {
println!("{} {:?}", version.id, version.parent_id);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->reviews()->versions()->list(
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.Versions.ListAsync(new WorkflowReviewVersionsListOptions());
Console.WriteLine(result);
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.reviews.versions.list
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().versions().list("review_abc123", null, null, 10L);
System.out.println(result);
}
}
curl -X GET \
'https://api.retab.com/v1/workflows/reviews/versions?review_id=rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY&limit=50' \
-H 'Authorization: Bearer <your-api-key>'
{
"data": [
{
"id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"review_id": "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
"parent_id": null,
"author": {
"kind": "model",
"id": "retab-small",
"display_name": "Retab Small"
},
"snapshot": { "total_amount": 505, "vendor_name": "Acme Corp" },
"note": null,
"created_at": "2026-05-13T08:14:02.341Z"
},
{
"id": "rvr_PFBGO3R6T3PG5O37U4Y3NDXWAM",
"review_id": "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
"parent_id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"author": {
"kind": "human",
"id": "user_42",
"display_name": "Dana Rivera"
},
"snapshot": { "total_amount": 325, "vendor_name": "Acme Corp" },
"note": "Corrected total.",
"created_at": "2026-05-13T09:05:00.000Z"
}
],
"list_metadata": {
"before": null,
"after": null
}
}
Versions
List Versions
List versions for one review.
review_id is required by design — listing versions across all reviews
has no product use and would expose a needlessly wide query surface.
GET
/
v1
/
workflows
/
reviews
/
versions
from retab import Retab
client = Retab()
page = client.workflows.reviews.versions.list(
review_id="rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
limit=50,
)
for version in page.data:
print(version.id, version.parent_id)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const page = await client.workflows.reviews.versions.list({
reviewId: "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
limit: 50,
});
for (const version of page.data) {
console.log(version.id, version.parentId);
}
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)
}
page, err := client.Workflows.Reviews.Versions.List(ctx, &retab.WorkflowReviewVersionsListParams{
ReviewID: "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
PaginationParams: retab.PaginationParams{Limit: ptr(50)},
})
if err != nil {
log.Fatal(err)
}
for _, version := range page.Data {
fmt.Println(version.ID, version.ParentID)
}
}
use retab::resources::workflow_review_versions::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 page = client
.workflows().reviews().versions()
.list(ListParams {
limit: Some(50),
..ListParams::new("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
})
.await?;
for version in &page.data {
println!("{} {:?}", version.id, version.parent_id);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->reviews()->versions()->list(
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.Versions.ListAsync(new WorkflowReviewVersionsListOptions());
Console.WriteLine(result);
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.reviews.versions.list
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().versions().list("review_abc123", null, null, 10L);
System.out.println(result);
}
}
curl -X GET \
'https://api.retab.com/v1/workflows/reviews/versions?review_id=rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY&limit=50' \
-H 'Authorization: Bearer <your-api-key>'
{
"data": [
{
"id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"review_id": "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
"parent_id": null,
"author": {
"kind": "model",
"id": "retab-small",
"display_name": "Retab Small"
},
"snapshot": { "total_amount": 505, "vendor_name": "Acme Corp" },
"note": null,
"created_at": "2026-05-13T08:14:02.341Z"
},
{
"id": "rvr_PFBGO3R6T3PG5O37U4Y3NDXWAM",
"review_id": "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
"parent_id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"author": {
"kind": "human",
"id": "user_42",
"display_name": "Dana Rivera"
},
"snapshot": { "total_amount": 325, "vendor_name": "Acme Corp" },
"note": "Corrected total.",
"created_at": "2026-05-13T09:05:00.000Z"
}
],
"list_metadata": {
"before": null,
"after": null
}
}
List versions for one review, paginated with keyset cursors.
review_id
is required — listing versions across all reviews is not exposed.
from retab import Retab
client = Retab()
page = client.workflows.reviews.versions.list(
review_id="rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
limit=50,
)
for version in page.data:
print(version.id, version.parent_id)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const page = await client.workflows.reviews.versions.list({
reviewId: "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
limit: 50,
});
for (const version of page.data) {
console.log(version.id, version.parentId);
}
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)
}
page, err := client.Workflows.Reviews.Versions.List(ctx, &retab.WorkflowReviewVersionsListParams{
ReviewID: "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
PaginationParams: retab.PaginationParams{Limit: ptr(50)},
})
if err != nil {
log.Fatal(err)
}
for _, version := range page.Data {
fmt.Println(version.ID, version.ParentID)
}
}
use retab::resources::workflow_review_versions::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 page = client
.workflows().reviews().versions()
.list(ListParams {
limit: Some(50),
..ListParams::new("rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY")
})
.await?;
for version in &page.data {
println!("{} {:?}", version.id, version.parent_id);
}
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->reviews()->versions()->list(
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.Versions.ListAsync(new WorkflowReviewVersionsListOptions());
Console.WriteLine(result);
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.reviews.versions.list
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().versions().list("review_abc123", null, null, 10L);
System.out.println(result);
}
}
curl -X GET \
'https://api.retab.com/v1/workflows/reviews/versions?review_id=rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY&limit=50' \
-H 'Authorization: Bearer <your-api-key>'
{
"data": [
{
"id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"review_id": "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
"parent_id": null,
"author": {
"kind": "model",
"id": "retab-small",
"display_name": "Retab Small"
},
"snapshot": { "total_amount": 505, "vendor_name": "Acme Corp" },
"note": null,
"created_at": "2026-05-13T08:14:02.341Z"
},
{
"id": "rvr_PFBGO3R6T3PG5O37U4Y3NDXWAM",
"review_id": "rev_D4J7WZBRV4H7C2SKQJ4NP6W2EY",
"parent_id": "rvr_HQ6ZZBQTJLSGLZQCWBSI25SCOQ",
"author": {
"kind": "human",
"id": "user_42",
"display_name": "Dana Rivera"
},
"snapshot": { "total_amount": 325, "vendor_name": "Acme Corp" },
"note": "Corrected total.",
"created_at": "2026-05-13T09:05:00.000Z"
}
],
"list_metadata": {
"before": null,
"after": null
}
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Required: the review whose versions to list.
Required range:
1 <= x <= 200Response
Successful Response
A page of WorkflowReviewVersion resources. data holds the items and list_metadata carries the before/after cursors; pass after to fetch the next page.
⌘I