from retab import Retab
client = Retab()
workflow = client.workflows.update(
"wf_abc123xyz",
name="Invoice Processing v2",
description="Extract invoice fields, validate, and route for review",
)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const workflow = await client.workflows.update("wf_abc123xyz", "Invoice Processing v2", "Extract invoice fields, validate, and route for review");
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)
}
name := "Invoice Processing v2"
description := "Extract invoice fields, validate, and route for review"
workflow, err := client.Workflows.Update(ctx, "wf_abc123xyz", &retab.WorkflowsUpdateParams{
Name: &name,
Description: &description,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(workflow.Name)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
workflow = client.workflows.update(
workflow_id: 'wf_abc123xyz',
name: 'Invoice Processing v2',
description: 'Extract invoice fields, validate, and route for review',
)
puts workflow.name
use retab::models::UpdateWorkflowRequest;
use retab::resources::workflows::UpdateParams;
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 workflow = client
.workflows()
.update(
"wf_abc123xyz",
UpdateParams::new(UpdateWorkflowRequest {
name: Some("Invoice Processing v2".into()),
description: Some("Extract invoice fields, validate, and route for review".into()),
}),
)
.await?;
println!("{}", workflow.name.as_deref().unwrap_or(""));
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->update(
workflowId: 'wf_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.UpdateAsync("wf_abc123", new WorkflowsUpdateOptions());
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().update("wf_abc123", "Invoice Processing", "Extract invoice fields");
System.out.println(result);
}
}
curl -X 'PATCH' \
'https://api.retab.com/v1/workflows/wf_abc123xyz' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <your-api-key>' \
-d '{
"name": "Invoice Processing v2",
"description": "Extract invoice fields, validate, and route for review"
}'
{
"id": "wf_abc123xyz",
"name": "Invoice Processing v2",
"description": "Extract invoice fields, validate, and route for review",
"published": {
"version_id": "ver_8zJfV7T9qK2mP4xN6bR1cD3eF5gH7iJ9",
"published_at": "2026-04-30T18:00:00Z"
},
"created_at": "2026-04-30T17:00:00Z",
"updated_at": "2026-05-01T14:30:00Z"
}
{
"detail": "Workflow not found"
}
Workflows
Update Workflow
Update an existing workflow.
PATCH
/
v1
/
workflows
/
{workflow_id}
from retab import Retab
client = Retab()
workflow = client.workflows.update(
"wf_abc123xyz",
name="Invoice Processing v2",
description="Extract invoice fields, validate, and route for review",
)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const workflow = await client.workflows.update("wf_abc123xyz", "Invoice Processing v2", "Extract invoice fields, validate, and route for review");
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)
}
name := "Invoice Processing v2"
description := "Extract invoice fields, validate, and route for review"
workflow, err := client.Workflows.Update(ctx, "wf_abc123xyz", &retab.WorkflowsUpdateParams{
Name: &name,
Description: &description,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(workflow.Name)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
workflow = client.workflows.update(
workflow_id: 'wf_abc123xyz',
name: 'Invoice Processing v2',
description: 'Extract invoice fields, validate, and route for review',
)
puts workflow.name
use retab::models::UpdateWorkflowRequest;
use retab::resources::workflows::UpdateParams;
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 workflow = client
.workflows()
.update(
"wf_abc123xyz",
UpdateParams::new(UpdateWorkflowRequest {
name: Some("Invoice Processing v2".into()),
description: Some("Extract invoice fields, validate, and route for review".into()),
}),
)
.await?;
println!("{}", workflow.name.as_deref().unwrap_or(""));
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->update(
workflowId: 'wf_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.UpdateAsync("wf_abc123", new WorkflowsUpdateOptions());
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().update("wf_abc123", "Invoice Processing", "Extract invoice fields");
System.out.println(result);
}
}
curl -X 'PATCH' \
'https://api.retab.com/v1/workflows/wf_abc123xyz' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <your-api-key>' \
-d '{
"name": "Invoice Processing v2",
"description": "Extract invoice fields, validate, and route for review"
}'
{
"id": "wf_abc123xyz",
"name": "Invoice Processing v2",
"description": "Extract invoice fields, validate, and route for review",
"published": {
"version_id": "ver_8zJfV7T9qK2mP4xN6bR1cD3eF5gH7iJ9",
"published_at": "2026-04-30T18:00:00Z"
},
"created_at": "2026-04-30T17:00:00Z",
"updated_at": "2026-05-01T14:30:00Z"
}
{
"detail": "Workflow not found"
}
Update workflow metadata. Only the fields you supply are touched — omit a field to leave it unchanged.
from retab import Retab
client = Retab()
workflow = client.workflows.update(
"wf_abc123xyz",
name="Invoice Processing v2",
description="Extract invoice fields, validate, and route for review",
)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const workflow = await client.workflows.update("wf_abc123xyz", "Invoice Processing v2", "Extract invoice fields, validate, and route for review");
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)
}
name := "Invoice Processing v2"
description := "Extract invoice fields, validate, and route for review"
workflow, err := client.Workflows.Update(ctx, "wf_abc123xyz", &retab.WorkflowsUpdateParams{
Name: &name,
Description: &description,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(workflow.Name)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
workflow = client.workflows.update(
workflow_id: 'wf_abc123xyz',
name: 'Invoice Processing v2',
description: 'Extract invoice fields, validate, and route for review',
)
puts workflow.name
use retab::models::UpdateWorkflowRequest;
use retab::resources::workflows::UpdateParams;
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 workflow = client
.workflows()
.update(
"wf_abc123xyz",
UpdateParams::new(UpdateWorkflowRequest {
name: Some("Invoice Processing v2".into()),
description: Some("Extract invoice fields, validate, and route for review".into()),
}),
)
.await?;
println!("{}", workflow.name.as_deref().unwrap_or(""));
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->update(
workflowId: 'wf_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.UpdateAsync("wf_abc123", new WorkflowsUpdateOptions());
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().update("wf_abc123", "Invoice Processing", "Extract invoice fields");
System.out.println(result);
}
}
curl -X 'PATCH' \
'https://api.retab.com/v1/workflows/wf_abc123xyz' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <your-api-key>' \
-d '{
"name": "Invoice Processing v2",
"description": "Extract invoice fields, validate, and route for review"
}'
{
"id": "wf_abc123xyz",
"name": "Invoice Processing v2",
"description": "Extract invoice fields, validate, and route for review",
"published": {
"version_id": "ver_8zJfV7T9qK2mP4xN6bR1cD3eF5gH7iJ9",
"published_at": "2026-04-30T18:00:00Z"
},
"created_at": "2026-04-30T17:00:00Z",
"updated_at": "2026-05-01T14:30:00Z"
}
{
"detail": "Workflow not found"
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
application/json
Response
Successful Response
A workflow and its current configuration.
Unique ID for this workflow
The name of the workflow
Description of the workflow
Project that owns this workflow. Null only on legacy rows that predate the project backfill.
Published workflow metadata when a published version exists
Show child attributes
Show child attributes
⌘I