from retab import Retab
client = Retab()
edge = client.workflows.edges.get(
"edge-1",
)
print(f"{edge.source_block}/{edge.source_handle} -> {edge.target_block}/{edge.target_handle}")
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const edge = await client.workflows.edges.get("edge-1");
console.log(
`${edge.sourceBlock}/${edge.sourceHandle} -> ${edge.targetBlock}/${edge.targetHandle}`,
);
package main
import (
"context"
"fmt"
"log"
retab "github.com/retab-dev/retab/clients/go"
)
func main() {
ctx := context.Background()
client, err := retab.NewClient("")
if err != nil {
log.Fatal(err)
}
edge, err := client.Workflows.Edges.Get(ctx, "edge-1", nil)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s/%v -> %s/%v\n", edge.SourceBlock, edge.SourceHandle, edge.TargetBlock, edge.TargetHandle)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
edge = client.workflows.edges.get(edge_id: 'edge-1')
puts "#{edge.source_block}/#{edge.source_handle} -> #{edge.target_block}/#{edge.target_handle}"
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 edge = client
.workflows()
.edges()
.get("edge-1", Default::default())
.await?;
println!(
"{}/{} -> {}/{}",
edge.source_block,
edge.source_handle.as_deref().unwrap_or(""),
edge.target_block,
edge.target_handle.as_deref().unwrap_or(""),
);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->edges()->get(
edgeId: 'edge_start_extract',
);
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.Edges.GetAsync("edge_start_extract");
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().edges().get("edge_abc123");
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/edges/edge-1' \
-H 'Authorization: Bearer <your-api-key>'
{
"id": "edge-1",
"workflow_id": "wf_abc123xyz",
"source_block": "start-1",
"target_block": "extract-1",
"source_handle": "output-file-0",
"target_handle": "input-file-0",
"updated_at": "2026-04-30T17:00:00Z"
}
{
"detail": "Edge not found"
}
Edges
Get Edge
Get a single edge by ID.
GET
/
v1
/
workflows
/
edges
/
{edge_id}
from retab import Retab
client = Retab()
edge = client.workflows.edges.get(
"edge-1",
)
print(f"{edge.source_block}/{edge.source_handle} -> {edge.target_block}/{edge.target_handle}")
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const edge = await client.workflows.edges.get("edge-1");
console.log(
`${edge.sourceBlock}/${edge.sourceHandle} -> ${edge.targetBlock}/${edge.targetHandle}`,
);
package main
import (
"context"
"fmt"
"log"
retab "github.com/retab-dev/retab/clients/go"
)
func main() {
ctx := context.Background()
client, err := retab.NewClient("")
if err != nil {
log.Fatal(err)
}
edge, err := client.Workflows.Edges.Get(ctx, "edge-1", nil)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s/%v -> %s/%v\n", edge.SourceBlock, edge.SourceHandle, edge.TargetBlock, edge.TargetHandle)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
edge = client.workflows.edges.get(edge_id: 'edge-1')
puts "#{edge.source_block}/#{edge.source_handle} -> #{edge.target_block}/#{edge.target_handle}"
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 edge = client
.workflows()
.edges()
.get("edge-1", Default::default())
.await?;
println!(
"{}/{} -> {}/{}",
edge.source_block,
edge.source_handle.as_deref().unwrap_or(""),
edge.target_block,
edge.target_handle.as_deref().unwrap_or(""),
);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->edges()->get(
edgeId: 'edge_start_extract',
);
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.Edges.GetAsync("edge_start_extract");
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().edges().get("edge_abc123");
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/edges/edge-1' \
-H 'Authorization: Bearer <your-api-key>'
{
"id": "edge-1",
"workflow_id": "wf_abc123xyz",
"source_block": "start-1",
"target_block": "extract-1",
"source_handle": "output-file-0",
"target_handle": "input-file-0",
"updated_at": "2026-04-30T17:00:00Z"
}
{
"detail": "Edge not found"
}
Get a single edge by ID.
from retab import Retab
client = Retab()
edge = client.workflows.edges.get(
"edge-1",
)
print(f"{edge.source_block}/{edge.source_handle} -> {edge.target_block}/{edge.target_handle}")
import { Retab } from "@retab/node";
const client = new Retab({ apiKey: process.env.RETAB_API_KEY });
const edge = await client.workflows.edges.get("edge-1");
console.log(
`${edge.sourceBlock}/${edge.sourceHandle} -> ${edge.targetBlock}/${edge.targetHandle}`,
);
package main
import (
"context"
"fmt"
"log"
retab "github.com/retab-dev/retab/clients/go"
)
func main() {
ctx := context.Background()
client, err := retab.NewClient("")
if err != nil {
log.Fatal(err)
}
edge, err := client.Workflows.Edges.Get(ctx, "edge-1", nil)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s/%v -> %s/%v\n", edge.SourceBlock, edge.SourceHandle, edge.TargetBlock, edge.TargetHandle)
}
require 'retab'
client = Retab::Client.new(api_key: ENV['RETAB_API_KEY'])
edge = client.workflows.edges.get(edge_id: 'edge-1')
puts "#{edge.source_block}/#{edge.source_handle} -> #{edge.target_block}/#{edge.target_handle}"
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 edge = client
.workflows()
.edges()
.get("edge-1", Default::default())
.await?;
println!(
"{}/{} -> {}/{}",
edge.source_block,
edge.source_handle.as_deref().unwrap_or(""),
edge.target_block,
edge.target_handle.as_deref().unwrap_or(""),
);
Ok(())
}
<?php
require 'vendor/autoload.php';
use Retab\Client;
$client = new Client(apiKey: getenv('RETAB_API_KEY'));
$result = $client->workflows()->edges()->get(
edgeId: 'edge_start_extract',
);
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.Edges.GetAsync("edge_start_extract");
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().edges().get("edge_abc123");
System.out.println(result);
}
}
curl -X 'GET' \
'https://api.retab.com/v1/workflows/edges/edge-1' \
-H 'Authorization: Bearer <your-api-key>'
{
"id": "edge-1",
"workflow_id": "wf_abc123xyz",
"source_block": "start-1",
"target_block": "extract-1",
"source_handle": "output-file-0",
"target_handle": "input-file-0",
"updated_at": "2026-04-30T17:00:00Z"
}
{
"detail": "Edge not found"
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Query Parameters
Response
Successful Response
Public live workflow edge object.
Foreign key to workflow
ID of the source block
ID of the target block
Output handle on source block
Input handle on target block
⌘I