cURL
curl --request POST \
--url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN'const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate';
const options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}const http = require('https');
const options = {
method: 'POST',
hostname: 'app.teable.ai',
port: null,
path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate',
headers: {
Authorization: 'Bearer REPLACE_BEARER_TOKEN'
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on('data', function (chunk) {
chunks.push(chunk);
});
res.on('end', function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();import http.client
conn = http.client.HTTPSConnection("app.teable.ai")
headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }
conn.request("POST", "/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.teable.ai/api/base/{baseId}/workflow/{workflowId}/action/{actionId}/duplicate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.teable.ai/api/base/{baseId}/workflow/{workflowId}/action/{actionId}/duplicate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.teable.ai/api/base/{baseId}/workflow/{workflowId}/action/{actionId}/duplicate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.teable.ai/api/base/{baseId}/workflow/{workflowId}/action/{actionId}/duplicate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"config": {
"tableId": "<string>",
"fields": {},
"baseId": "<string>",
"loopKey": {
"resolvable": true,
"type": "fact",
"fact": "<string>",
"path": "<string>",
"keyStack": [
"<string>"
],
"params": {
"pipes": []
}
},
"_fieldsOrder": [
"<string>"
]
},
"id": "<string>",
"category": "action",
"type": "createRecord",
"name": "<string>",
"description": "<string>",
"testResult": {
"createdTime": "<string>",
"spent": 123,
"inputRaw": null,
"outputRaw": null,
"inputVariables": {},
"outputVariables": {},
"errorMsg": "<string>"
},
"outputVariables": {},
"inputVariables": {},
"createdTime": "<string>",
"lastModifiedTime": "<string>"
}automation
Post base workflow action duplicate
duplicate a automation workflow action
POST
/
base
/
{baseId}
/
workflow
/
{workflowId}
/
action
/
{actionId}
/
duplicate
cURL
curl --request POST \
--url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN'const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate';
const options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}const http = require('https');
const options = {
method: 'POST',
hostname: 'app.teable.ai',
port: null,
path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate',
headers: {
Authorization: 'Bearer REPLACE_BEARER_TOKEN'
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on('data', function (chunk) {
chunks.push(chunk);
});
res.on('end', function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();import http.client
conn = http.client.HTTPSConnection("app.teable.ai")
headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }
conn.request("POST", "/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.teable.ai/api/base/{baseId}/workflow/{workflowId}/action/{actionId}/duplicate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.teable.ai/api/base/{baseId}/workflow/{workflowId}/action/{actionId}/duplicate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.teable.ai/api/base/{baseId}/workflow/{workflowId}/action/{actionId}/duplicate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.teable.ai/api/base/{baseId}/workflow/{workflowId}/action/{actionId}/duplicate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"config": {
"tableId": "<string>",
"fields": {},
"baseId": "<string>",
"loopKey": {
"resolvable": true,
"type": "fact",
"fact": "<string>",
"path": "<string>",
"keyStack": [
"<string>"
],
"params": {
"pipes": []
}
},
"_fieldsOrder": [
"<string>"
]
},
"id": "<string>",
"category": "action",
"type": "createRecord",
"name": "<string>",
"description": "<string>",
"testResult": {
"createdTime": "<string>",
"spent": 123,
"inputRaw": null,
"outputRaw": null,
"inputVariables": {},
"outputVariables": {},
"errorMsg": "<string>"
},
"outputVariables": {},
"inputVariables": {},
"createdTime": "<string>",
"lastModifiedTime": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Response
200 - application/json
Successful duplicate
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
Show child attributes
Show child attributes
node id
Available options:
action This Action will activate when a record is created in a table.
Available options:
createRecord name of the node
description of the node
action test result
Show child attributes
Show child attributes
output variables
input variables
created time
last modified time
Last modified on March 5, 2026
Was this page helpful?
⌘I

