Create a task category
curl --request POST \
--url https://www.ruddr.io/api/workspace/task-categories \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"isActive": true
}
'import requests
url = "https://www.ruddr.io/api/workspace/task-categories"
payload = {
"name": "<string>",
"isActive": True
}
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({name: '<string>', isActive: true})
};
fetch('https://www.ruddr.io/api/workspace/task-categories', 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/task-categories",
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([
'name' => '<string>',
'isActive' => true
]),
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 := "https://www.ruddr.io/api/workspace/task-categories"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"isActive\": true\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("https://www.ruddr.io/api/workspace/task-categories")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"isActive\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/task-categories")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"isActive\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "a1b9d4e7-5c32-4f18-9a76-2e8f3d1c5b47",
"name": "Milestone",
"type": "standard",
"icon": "rocket",
"color": "teal",
"isActive": true,
"isDefault": false,
"createdAt": "2026-04-10T16:42:18.293Z"
}{
"status": 400,
"message": "There was a problem processing your request. See errors for more details.",
"errors": [
"'name' is required"
]
}{
"status": 409,
"message": "A Task Category with the same name already exists."
}Task Categories
Create a task category
POST
/
task-categories
Create a task category
curl --request POST \
--url https://www.ruddr.io/api/workspace/task-categories \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"isActive": true
}
'import requests
url = "https://www.ruddr.io/api/workspace/task-categories"
payload = {
"name": "<string>",
"isActive": True
}
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({name: '<string>', isActive: true})
};
fetch('https://www.ruddr.io/api/workspace/task-categories', 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/task-categories",
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([
'name' => '<string>',
'isActive' => true
]),
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 := "https://www.ruddr.io/api/workspace/task-categories"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"isActive\": true\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("https://www.ruddr.io/api/workspace/task-categories")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"isActive\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/task-categories")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"isActive\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "a1b9d4e7-5c32-4f18-9a76-2e8f3d1c5b47",
"name": "Milestone",
"type": "standard",
"icon": "rocket",
"color": "teal",
"isActive": true,
"isDefault": false,
"createdAt": "2026-04-10T16:42:18.293Z"
}{
"status": 400,
"message": "There was a problem processing your request. See errors for more details.",
"errors": [
"'name' is required"
]
}{
"status": 409,
"message": "A Task Category with the same name already exists."
}A classification applied to project tasks that determines their behavior.
standard categories represent regular tasks, while rollup categories act as containers whose budgets and rollups derive from their descendant standard tasks.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
The name of the task category (max 255 chars).
The type of the task category. Cannot be changed after tasks have been assigned to this category.
Available options:
standard, rollup, milestone The icon identifier for the task category.
Available options:
check-circle, folder, tasks, clipboard, lightbulb, rocket, wrench, file, file-alt, calendar, users The color identifier for the task category.
Available options:
grey, grey-light, teal, teal-light, blue, blue-light, orange, orange-light, brown, brown-light, purple, purple-light Whether the task category is active, defaults to true if not set.
Response
200
The unique identifier for the object.
The name of the task category.
The type of the task category.
Available options:
standard, rollup, milestone The icon identifier for the task category.
Available options:
check-circle, folder, tasks, clipboard, lightbulb, rocket, wrench, file, file-alt, calendar, users The color identifier for the task category.
Available options:
grey, grey-light, teal, teal-light, blue, blue-light, orange, orange-light, brown, brown-light, purple, purple-light Whether the task category is active.
Whether this is the default task category for the workspace.
The timestamp when the object was created.