curl --request GET \
--url https://www.ruddr.io/api/workspace/tasks/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ruddr.io/api/workspace/tasks/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.ruddr.io/api/workspace/tasks/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.ruddr.io/api/workspace/tasks/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://www.ruddr.io/api/workspace/tasks/{id}"
req, _ := http.NewRequest("GET", 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.get("https://www.ruddr.io/api/workspace/tasks/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/tasks/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "a3f8c214-7b92-4e61-9d05-1c83e6f2a047",
"name": "Backend API Integration",
"notes": "Implement REST endpoints for the client portal module.",
"order": 16384,
"position": 16384,
"statusId": "in_progress",
"start": "2026-02-01",
"end": "2026-03-31",
"isBillable": true,
"lockTime": false,
"capHours": true,
"capAssignedHours": false,
"code": "DEV-042",
"forAssignedOnly": false,
"requireNotes": false,
"recordStatusId": "active",
"budgetedHours": 120.5,
"budgetedServicesRevenue": 18075,
"createdAt": "2026-01-10T14:22:35.491Z",
"modifiedAt": "2026-01-31T14:22:35.491Z",
"project": {
"id": "f52e9a17-3c64-4b88-a701-8d94bc2f5e63",
"name": "Acme Portal Redesign",
"client": {
"id": "2b7d8e41-9f53-4a26-b8c2-6e1f5d3a9074",
"name": "Acme Company, Inc."
}
},
"parent": {
"id": "7d1b4f93-2a85-4c70-8e16-5b29d4c7e831",
"name": "Phase 2 Development"
},
"roles": [
{
"id": "0e011217-4925-4931-b2ee-257da8d9f0fe",
"name": "Senior Developer",
"hours": 80
},
{
"id": "c4a9f312-8b57-4d93-a625-1e7f2b8d4c06",
"name": "QA Engineer",
"hours": 40.5
}
],
"projectMembers": [
{
"id": "5c2d9f84-1b67-4e38-a915-7d3c8e2f6a41",
"member": {
"id": "b8f4e293-6d17-4a85-9c42-3e7f1d5b2a68",
"name": "Jordan Rivera"
},
"hours": null
}
],
"tags": [
{
"id": "91b3e724-5f18-4a92-8c37-2d6e4f1b5a89",
"name": "Backend"
},
{
"id": "3e8f1d62-7a45-4b19-9c28-6f2e5d4a3b17",
"name": "High Priority"
}
],
"taskCategory": {
"id": "c7e2f4a1-9b38-4d65-8c17-3a5f1e2d4b96",
"name": "Standard Task",
"type": "standard"
},
"predecessors": [
{
"id": "8d3a1f56-2c94-4e07-b815-6f2d9a4c7e30",
"name": "Database Schema Design"
}
],
"successors": [
{
"id": "4b9e2d71-5a38-4c16-9f02-7e1c8d3b5a64",
"name": "Client Portal Launch"
}
]
}{
"status": 400,
"message": "Parameter 'id' is not a valid UUID."
}{
"status": 404,
"message": "Object with id 'a3f8c214-7b92-4e61-9d05-1c83e6f2a047' not found."
}Get a task
curl --request GET \
--url https://www.ruddr.io/api/workspace/tasks/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ruddr.io/api/workspace/tasks/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.ruddr.io/api/workspace/tasks/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.ruddr.io/api/workspace/tasks/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://www.ruddr.io/api/workspace/tasks/{id}"
req, _ := http.NewRequest("GET", 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.get("https://www.ruddr.io/api/workspace/tasks/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/tasks/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "a3f8c214-7b92-4e61-9d05-1c83e6f2a047",
"name": "Backend API Integration",
"notes": "Implement REST endpoints for the client portal module.",
"order": 16384,
"position": 16384,
"statusId": "in_progress",
"start": "2026-02-01",
"end": "2026-03-31",
"isBillable": true,
"lockTime": false,
"capHours": true,
"capAssignedHours": false,
"code": "DEV-042",
"forAssignedOnly": false,
"requireNotes": false,
"recordStatusId": "active",
"budgetedHours": 120.5,
"budgetedServicesRevenue": 18075,
"createdAt": "2026-01-10T14:22:35.491Z",
"modifiedAt": "2026-01-31T14:22:35.491Z",
"project": {
"id": "f52e9a17-3c64-4b88-a701-8d94bc2f5e63",
"name": "Acme Portal Redesign",
"client": {
"id": "2b7d8e41-9f53-4a26-b8c2-6e1f5d3a9074",
"name": "Acme Company, Inc."
}
},
"parent": {
"id": "7d1b4f93-2a85-4c70-8e16-5b29d4c7e831",
"name": "Phase 2 Development"
},
"roles": [
{
"id": "0e011217-4925-4931-b2ee-257da8d9f0fe",
"name": "Senior Developer",
"hours": 80
},
{
"id": "c4a9f312-8b57-4d93-a625-1e7f2b8d4c06",
"name": "QA Engineer",
"hours": 40.5
}
],
"projectMembers": [
{
"id": "5c2d9f84-1b67-4e38-a915-7d3c8e2f6a41",
"member": {
"id": "b8f4e293-6d17-4a85-9c42-3e7f1d5b2a68",
"name": "Jordan Rivera"
},
"hours": null
}
],
"tags": [
{
"id": "91b3e724-5f18-4a92-8c37-2d6e4f1b5a89",
"name": "Backend"
},
{
"id": "3e8f1d62-7a45-4b19-9c28-6f2e5d4a3b17",
"name": "High Priority"
}
],
"taskCategory": {
"id": "c7e2f4a1-9b38-4d65-8c17-3a5f1e2d4b96",
"name": "Standard Task",
"type": "standard"
},
"predecessors": [
{
"id": "8d3a1f56-2c94-4e07-b815-6f2d9a4c7e30",
"name": "Database Schema Design"
}
],
"successors": [
{
"id": "4b9e2d71-5a38-4c16-9f02-7e1c8d3b5a64",
"name": "Client Portal Launch"
}
]
}{
"status": 400,
"message": "Parameter 'id' is not a valid UUID."
}{
"status": 404,
"message": "Object with id 'a3f8c214-7b92-4e61-9d05-1c83e6f2a047' not found."
}/project-tasks/{id} path remains available as an alias for this endpoint.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The task uuid.
Response
200
The unique identifier for the object.
The name of the task.
Any notes associated with the task.
The display order position of the task (same value as position).
The numeric position of the task used for ordering.
The status of the task.
not_started, in_progress, completed The start date for the task. Will be in the form YYYY-MM-DD.
The end date for the task. Will be in the form YYYY-MM-DD. null if no end date is set.
Whether the task is billable. Overridden to false when the project is not billable.
When enabled, prevents new time entries from being created with this task.
When enabled, prevents time entries that would exceed the budgeted hours for this task.
When enabled, prevents time entries that would exceed the budgeted hours assigned to the role or member for this task.
The task code.
When enabled, only assigned members and roles can track time to this task.
Whether notes are required on time entries for this task. Overridden to true when the project requires notes.
The record status of the task.
active, archived The budgeted hours for the task.
The budgeted services revenue for the task.
The timestamp when the object was created.
The timestamp when the object was last modified.
The project this task belongs to.
Show child attributes
Show child attributes
The parent task this task is nested under, or null if it has no parent.
Show child attributes
Show child attributes
The list of project roles assigned to this task. null when the project does not use roles.
Show child attributes
Show child attributes
The list of project members directly assigned to this task.
Show child attributes
Show child attributes
The list of tags associated with this task.
Show child attributes
Show child attributes
The task category associated with this task.
Show child attributes
Show child attributes
The tasks that must finish before this task can start. null when useDependencies is disabled on the project.
Show child attributes
Show child attributes
The tasks that cannot start until this task finishes. null when useDependencies is disabled on the project.
Show child attributes
Show child attributes