curl --request GET \
--url https://www.ruddr.io/api/workspace/project-roles/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ruddr.io/api/workspace/project-roles/{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/project-roles/{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/project-roles/{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/project-roles/{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/project-roles/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/project-roles/{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": "3e7a1b2c-8f4d-4a9e-b6c3-d2f5a8e1c9b7",
"name": "Senior Engineer",
"isActive": true,
"isBillable": true,
"rate": 175,
"createdAt": "2025-03-12T14:22:08.500Z",
"project": {
"id": "d8e3f7a2-c1b9-4d6e-8f2a-b5c7d3e9f1a6",
"name": "Platform Modernization",
"client": {
"id": "e1a4b8c3-d7f2-4e9a-b6c1-a3d8f4e7b2c9",
"name": "Acme Corporation"
}
},
"discipline": {
"id": "a91f4c2d-73b5-4e6a-8d1c-f3e7b2a9c4d6",
"name": "Engineering"
},
"practice": {
"id": "c45d8e3f-12a7-4b9c-9e2d-7f6a1b3c8d5e",
"name": "Software Development"
},
"location": {
"id": "f2b7c9a4-85d3-4f1e-a6b8-c3d9e7f2a1b4",
"name": "New York"
},
"budget": {
"billableHours": 320,
"nonBillableHours": 40
},
"monthlyBudget": {
"billableHours": 80,
"nonBillableHours": 10
},
"rateCards": [
{
"id": "f1a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"start": null,
"end": "2025-06-30",
"rate": 150
},
{
"id": "a9b8c7d6-e5f4-4a3b-9c2d-1e0f9a8b7c6d",
"start": "2025-07-01",
"end": null,
"rate": 175
}
]
}{
"status": 400,
"message": "Parameter 'id' is not a valid UUID."
}{
"status": 404,
"message": "Object with id 'a7b3c9d1-e5f2-4a8b-b6c4-d8e1f3a2c7b5' not found."
}Get a project role
curl --request GET \
--url https://www.ruddr.io/api/workspace/project-roles/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ruddr.io/api/workspace/project-roles/{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/project-roles/{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/project-roles/{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/project-roles/{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/project-roles/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/project-roles/{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": "3e7a1b2c-8f4d-4a9e-b6c3-d2f5a8e1c9b7",
"name": "Senior Engineer",
"isActive": true,
"isBillable": true,
"rate": 175,
"createdAt": "2025-03-12T14:22:08.500Z",
"project": {
"id": "d8e3f7a2-c1b9-4d6e-8f2a-b5c7d3e9f1a6",
"name": "Platform Modernization",
"client": {
"id": "e1a4b8c3-d7f2-4e9a-b6c1-a3d8f4e7b2c9",
"name": "Acme Corporation"
}
},
"discipline": {
"id": "a91f4c2d-73b5-4e6a-8d1c-f3e7b2a9c4d6",
"name": "Engineering"
},
"practice": {
"id": "c45d8e3f-12a7-4b9c-9e2d-7f6a1b3c8d5e",
"name": "Software Development"
},
"location": {
"id": "f2b7c9a4-85d3-4f1e-a6b8-c3d9e7f2a1b4",
"name": "New York"
},
"budget": {
"billableHours": 320,
"nonBillableHours": 40
},
"monthlyBudget": {
"billableHours": 80,
"nonBillableHours": 10
},
"rateCards": [
{
"id": "f1a2b3c4-d5e6-4f70-8192-a3b4c5d6e7f8",
"start": null,
"end": "2025-06-30",
"rate": 150
},
{
"id": "a9b8c7d6-e5f4-4a3b-9c2d-1e0f9a8b7c6d",
"start": "2025-07-01",
"end": null,
"rate": 175
}
]
}{
"status": 400,
"message": "Parameter 'id' is not a valid UUID."
}{
"status": 404,
"message": "Object with id 'a7b3c9d1-e5f2-4a8b-b6c4-d8e1f3a2c7b5' not found."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The project role uuid
Response
200
The unique identifier for the object.
The name of the role.
Whether the role is still active on the project.
Whether the role is billable. Overridden to false when the project is non-billable.
The billing rate for this role. null when the role or project is non-billable. When Project Rate Cards is enabled, this is the rate on the rate card covering today; see rateCards for other periods.
The timestamp when the object was created.
The project this role belongs to.
Show child attributes
Show child attributes
The discipline associated with this role. null if not assigned.
Show child attributes
Show child attributes
The practice associated with this role. null if not assigned.
Show child attributes
Show child attributes
The location associated with this role. null if not assigned.
Show child attributes
Show child attributes
The budget hours for this role. null when the project does not use a budget.
Show child attributes
Show child attributes
The monthly budget hours for this role. null when the project does not use a monthly budget in detailed mode.
Show child attributes
Show child attributes
The role's rates on each project rate card, earliest first. null if the Project Rate Cards feature is not enabled.
Show child attributes
Show child attributes