from retab import Retab
client = Retab()
result = client.workflows.runs.cancel(
run_id="run_abc123",
command_id="cmd_cancel_abc", # optional dedup key
)
print(result.cancellation_status)
print(result.run.lifecycle.status)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const result = await client.workflows.runs.cancel("run_abc123", "cmd_cancel_abc");
console.log(result.cancellationStatus);
console.log(result.run.lifecycle.status);
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.Runs.Cancel(ctx, "run_abc123", nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.CancellationStatus)
fmt.Println(result.Run.Lifecycle.Status())
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.runs.cancel(
run_id: 'run_abc123',
command_id: 'cmd_cancel_abc',
)
puts result.cancellation_status
puts result.run.lifecycle.status
use retab::models::CancelWorkflowRequest;
use retab::resources::workflow_runs::CancelParams;
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 result = client
.workflows().runs()
.cancel(
"run_abc123",
CancelParams {
body: Some(CancelWorkflowRequest {
command_id: Some("cmd_cancel_abc".into()),
}),
},
)
.await?;
println!("{:?}", result.cancellation_status);
println!("{:?}", result.run.lifecycle);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->runs()->cancel(
runId: 'run_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.Runs.CancelAsync("run_abc123", new WorkflowRunsCancelOptions());
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().runs().cancel("run_abc123");
System.out.println(result);
}
}
curl -X 'POST' \
'https://api.retab.com/v1/workflows/runs/run_abc123/cancel' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <your-api-key>' \
-d '{"command_id": "cmd_cancel_abc"}'
{
"run": {
"id": "run_abc123",
"workflow": {
"workflow_id": "wf_abc123xyz",
"version_id": "ver_abc123xyz"
},
"trigger": { "type": "api" },
"lifecycle": {
"status": "cancelled",
"reason": "user requested cancellation"
},
"timing": {
"created_at": "2026-05-01T14:30:00Z",
"started_at": "2026-05-01T14:30:00Z",
"completed_at": "2026-05-01T14:30:08Z"
},
"inputs": { "documents": {}, "json_data": {} }
},
"cancellation_status": "cancelled"
}
{
"run": {
"id": "run_abc123",
"workflow": {
"workflow_id": "wf_abc123xyz",
"version_id": "ver_abc123xyz"
},
"trigger": { "type": "api" },
"lifecycle": { "status": "running" },
"timing": {
"created_at": "2026-05-01T14:30:00Z",
"started_at": "2026-05-01T14:30:00Z",
"completed_at": null
},
"inputs": { "documents": {}, "json_data": {} }
},
"cancellation_status": "cancellation_requested"
}
{
"detail": "Workflow run not found"
}
Runs
Cancel Run
Cancel a pending, running, or waiting workflow run.
POST
/
v1
/
workflows
/
runs
/
{run_id}
/
cancel
from retab import Retab
client = Retab()
result = client.workflows.runs.cancel(
run_id="run_abc123",
command_id="cmd_cancel_abc", # optional dedup key
)
print(result.cancellation_status)
print(result.run.lifecycle.status)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const result = await client.workflows.runs.cancel("run_abc123", "cmd_cancel_abc");
console.log(result.cancellationStatus);
console.log(result.run.lifecycle.status);
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.Runs.Cancel(ctx, "run_abc123", nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.CancellationStatus)
fmt.Println(result.Run.Lifecycle.Status())
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.runs.cancel(
run_id: 'run_abc123',
command_id: 'cmd_cancel_abc',
)
puts result.cancellation_status
puts result.run.lifecycle.status
use retab::models::CancelWorkflowRequest;
use retab::resources::workflow_runs::CancelParams;
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 result = client
.workflows().runs()
.cancel(
"run_abc123",
CancelParams {
body: Some(CancelWorkflowRequest {
command_id: Some("cmd_cancel_abc".into()),
}),
},
)
.await?;
println!("{:?}", result.cancellation_status);
println!("{:?}", result.run.lifecycle);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->runs()->cancel(
runId: 'run_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.Runs.CancelAsync("run_abc123", new WorkflowRunsCancelOptions());
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().runs().cancel("run_abc123");
System.out.println(result);
}
}
curl -X 'POST' \
'https://api.retab.com/v1/workflows/runs/run_abc123/cancel' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <your-api-key>' \
-d '{"command_id": "cmd_cancel_abc"}'
{
"run": {
"id": "run_abc123",
"workflow": {
"workflow_id": "wf_abc123xyz",
"version_id": "ver_abc123xyz"
},
"trigger": { "type": "api" },
"lifecycle": {
"status": "cancelled",
"reason": "user requested cancellation"
},
"timing": {
"created_at": "2026-05-01T14:30:00Z",
"started_at": "2026-05-01T14:30:00Z",
"completed_at": "2026-05-01T14:30:08Z"
},
"inputs": { "documents": {}, "json_data": {} }
},
"cancellation_status": "cancelled"
}
{
"run": {
"id": "run_abc123",
"workflow": {
"workflow_id": "wf_abc123xyz",
"version_id": "ver_abc123xyz"
},
"trigger": { "type": "api" },
"lifecycle": { "status": "running" },
"timing": {
"created_at": "2026-05-01T14:30:00Z",
"started_at": "2026-05-01T14:30:00Z",
"completed_at": null
},
"inputs": { "documents": {}, "json_data": {} }
},
"cancellation_status": "cancellation_requested"
}
{
"detail": "Workflow run not found"
}
Cancel a running or pending workflow run. Cancellation is delivered through Temporal, so the response can carry one of three states:
cancelled— the run reached a cancelled terminal state.cancellation_requested— the cancel signal was accepted; the run will reachcancelledshortly. Re-poll Get Run to observe the transition.cancellation_failed— Temporal rejected the cancel (e.g. the run already finished). The returnedrunreflects the actual current state.
command_id is an idempotency key — replaying the same value never enqueues a second cancel.
from retab import Retab
client = Retab()
result = client.workflows.runs.cancel(
run_id="run_abc123",
command_id="cmd_cancel_abc", # optional dedup key
)
print(result.cancellation_status)
print(result.run.lifecycle.status)
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const result = await client.workflows.runs.cancel("run_abc123", "cmd_cancel_abc");
console.log(result.cancellationStatus);
console.log(result.run.lifecycle.status);
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.Runs.Cancel(ctx, "run_abc123", nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.CancellationStatus)
fmt.Println(result.Run.Lifecycle.Status())
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
result = client.workflows.runs.cancel(
run_id: 'run_abc123',
command_id: 'cmd_cancel_abc',
)
puts result.cancellation_status
puts result.run.lifecycle.status
use retab::models::CancelWorkflowRequest;
use retab::resources::workflow_runs::CancelParams;
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 result = client
.workflows().runs()
.cancel(
"run_abc123",
CancelParams {
body: Some(CancelWorkflowRequest {
command_id: Some("cmd_cancel_abc".into()),
}),
},
)
.await?;
println!("{:?}", result.cancellation_status);
println!("{:?}", result.run.lifecycle);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->runs()->cancel(
runId: 'run_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.Runs.CancelAsync("run_abc123", new WorkflowRunsCancelOptions());
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().runs().cancel("run_abc123");
System.out.println(result);
}
}
curl -X 'POST' \
'https://api.retab.com/v1/workflows/runs/run_abc123/cancel' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <your-api-key>' \
-d '{"command_id": "cmd_cancel_abc"}'
{
"run": {
"id": "run_abc123",
"workflow": {
"workflow_id": "wf_abc123xyz",
"version_id": "ver_abc123xyz"
},
"trigger": { "type": "api" },
"lifecycle": {
"status": "cancelled",
"reason": "user requested cancellation"
},
"timing": {
"created_at": "2026-05-01T14:30:00Z",
"started_at": "2026-05-01T14:30:00Z",
"completed_at": "2026-05-01T14:30:08Z"
},
"inputs": { "documents": {}, "json_data": {} }
},
"cancellation_status": "cancelled"
}
{
"run": {
"id": "run_abc123",
"workflow": {
"workflow_id": "wf_abc123xyz",
"version_id": "ver_abc123xyz"
},
"trigger": { "type": "api" },
"lifecycle": { "status": "running" },
"timing": {
"created_at": "2026-05-01T14:30:00Z",
"started_at": "2026-05-01T14:30:00Z",
"completed_at": null
},
"inputs": { "documents": {}, "json_data": {} }
},
"cancellation_status": "cancellation_requested"
}
{
"detail": "Workflow run not found"
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
application/json
Optional request payload for cancel workflow command idempotency.
Optional idempotency key for deduplicating cancel commands
Response
Successful Response
Response for cancel workflow endpoint.
A single execution of a workflow.
Show child attributes
Show child attributes
Whether immediate cancellation signaling was available
Cancellation delivery state from this request
Available options:
cancelled, cancellation_requested, cancellation_failed ⌘I