curl --request GET \
--url https://www.ruddr.io/api/workspace/tasks \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ruddr.io/api/workspace/tasks"
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', 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",
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"
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")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/tasks")
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{
"results": [
{
"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"
}
]
}
],
"hasMore": true
}{
"status": 400,
"message": "Parameter 'startingAfter' is not a valid UUID."
}List tasks
curl --request GET \
--url https://www.ruddr.io/api/workspace/tasks \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ruddr.io/api/workspace/tasks"
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', 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",
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"
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")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/tasks")
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{
"results": [
{
"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"
}
]
}
],
"hasMore": true
}{
"status": 400,
"message": "Parameter 'startingAfter' is not a valid UUID."
}/project-tasks path remains available as an alias for this endpoint.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
A cursor ID (uuid) used to request the next page of results. If not provided, defaults to the first page of results.
A cursor ID (uuid) used to request the previous page of results. Is mutually exclusive with startingAfter.
The maximum number of results to be returned. Can be any number from 1 to 100. Defaults to 10, if not provided.
A filter on the list based on the task's modifiedAt field. Accepts an ISO 8601 date or datetime. This will match timestamps after (>) the value specified.
A filter on the list based on the task's modifiedAt field. Accepts an ISO 8601 date or datetime. This will match timestamps on and after (>=) the value specified.
A filter on the list based on the task's modifiedAt field. Accepts an ISO 8601 date or datetime. This will match timestamps before (<) the value specified.
A filter on the list based on the task's modifiedAt field. Accepts an ISO 8601 date or datetime. This will match timestamps on and before (<=) the value specified.
A project ID (uuid) used to filter objects for a specific project.
A task code to filter tasks by code.
Filter by task name when it exactly matches the provided keyword.
Filter by task name when it contains the provided keyword.
Filter by task name when it starts with the provided keyword.
Filter by task name when it ends with the provided keyword.