Attach an existing task to a project workflow node
curl --request POST \
--url http://localhost:3000/api/v1/projects/tasks/attach \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"nodeKey": "<string>",
"project": "<string>",
"taskId": "<string>",
"agent": "<string>",
"dispatch": true,
"session": "<string>",
"workflow": "<string>"
}
'import requests
url = "http://localhost:3000/api/v1/projects/tasks/attach"
payload = {
"nodeKey": "<string>",
"project": "<string>",
"taskId": "<string>",
"agent": "<string>",
"dispatch": True,
"session": "<string>",
"workflow": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
nodeKey: '<string>',
project: '<string>',
taskId: '<string>',
agent: '<string>',
dispatch: true,
session: '<string>',
workflow: '<string>'
})
};
fetch('http://localhost:3000/api/v1/projects/tasks/attach', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/api/v1/projects/tasks/attach",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'nodeKey' => '<string>',
'project' => '<string>',
'taskId' => '<string>',
'agent' => '<string>',
'dispatch' => true,
'session' => '<string>',
'workflow' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:3000/api/v1/projects/tasks/attach"
payload := strings.NewReader("{\n \"nodeKey\": \"<string>\",\n \"project\": \"<string>\",\n \"taskId\": \"<string>\",\n \"agent\": \"<string>\",\n \"dispatch\": true,\n \"session\": \"<string>\",\n \"workflow\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:3000/api/v1/projects/tasks/attach")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"nodeKey\": \"<string>\",\n \"project\": \"<string>\",\n \"taskId\": \"<string>\",\n \"agent\": \"<string>\",\n \"dispatch\": true,\n \"session\": \"<string>\",\n \"workflow\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/api/v1/projects/tasks/attach")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"nodeKey\": \"<string>\",\n \"project\": \"<string>\",\n \"taskId\": \"<string>\",\n \"agent\": \"<string>\",\n \"dispatch\": true,\n \"session\": \"<string>\",\n \"workflow\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{}projects
Attach an existing task to a project workflow node
POST
/
api
/
v1
/
projects
/
tasks
/
attach
Attach an existing task to a project workflow node
curl --request POST \
--url http://localhost:3000/api/v1/projects/tasks/attach \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"nodeKey": "<string>",
"project": "<string>",
"taskId": "<string>",
"agent": "<string>",
"dispatch": true,
"session": "<string>",
"workflow": "<string>"
}
'import requests
url = "http://localhost:3000/api/v1/projects/tasks/attach"
payload = {
"nodeKey": "<string>",
"project": "<string>",
"taskId": "<string>",
"agent": "<string>",
"dispatch": True,
"session": "<string>",
"workflow": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
nodeKey: '<string>',
project: '<string>',
taskId: '<string>',
agent: '<string>',
dispatch: true,
session: '<string>',
workflow: '<string>'
})
};
fetch('http://localhost:3000/api/v1/projects/tasks/attach', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/api/v1/projects/tasks/attach",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'nodeKey' => '<string>',
'project' => '<string>',
'taskId' => '<string>',
'agent' => '<string>',
'dispatch' => true,
'session' => '<string>',
'workflow' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:3000/api/v1/projects/tasks/attach"
payload := strings.NewReader("{\n \"nodeKey\": \"<string>\",\n \"project\": \"<string>\",\n \"taskId\": \"<string>\",\n \"agent\": \"<string>\",\n \"dispatch\": true,\n \"session\": \"<string>\",\n \"workflow\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:3000/api/v1/projects/tasks/attach")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"nodeKey\": \"<string>\",\n \"project\": \"<string>\",\n \"taskId\": \"<string>\",\n \"agent\": \"<string>\",\n \"dispatch\": true,\n \"session\": \"<string>\",\n \"workflow\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/api/v1/projects/tasks/attach")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"nodeKey\": \"<string>\",\n \"project\": \"<string>\",\n \"taskId\": \"<string>\",\n \"agent\": \"<string>\",\n \"dispatch\": true,\n \"session\": \"<string>\",\n \"workflow\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{}Authorizations
Runtime context-key (rctx_*) issued by the Ravi gateway. Required for every non-open scope. Bootstrap the first key with ravi daemon init-admin-key; rotate, derive, and revoke via the ravi context family. Specs: runtime/context-keys, sdk/auth.
Body
application/json
Workflow node key
Project id or slug
Existing task id
Override project owner agent for dispatch
Dispatch after attach using project defaults
Override project operator session for dispatch
Linked workflow run id (defaults to project focus)
Response
Success — no @Returns schema declared; payload shape is loose.
The response is of type object.