Get a project service item
curl --request GET \
--url https://www.ruddr.io/api/workspace/project-service-items/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ruddr.io/api/workspace/project-service-items/{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-service-items/{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-service-items/{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-service-items/{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-service-items/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/project-service-items/{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": "f1d8b3e6-9c4a-4f7e-b2d5-3a8c6f1b9e47",
"date": "2026-06-04",
"quantity": 5,
"rate": 200,
"fee": 1000,
"description": "Managed services retainer",
"createdAt": "2026-06-04T09:15:42.831Z",
"project": {
"id": "b8d4e6f2-3c9a-4b7e-a5d1-2f8c4e9b6d37",
"name": "Managed IT Services",
"client": {
"id": "c1e9b5d3-7f4a-4c8b-9e2d-6a3f1c7e4b82",
"name": "Pinnacle Financial"
}
},
"invoiceItem": {
"id": "d6f2a8c4-1e7b-4d3f-b9a5-4c8e2d6f1b73",
"name": "Managed Services"
},
"invoiced": false
}{
"status": 400,
"message": "Parameter 'id' is not a valid UUID."
}{
"status": 404,
"message": "Object with id '2b7e4c9f-8d1a-4e6b-a3f8-5c9d2e7b4f13' not found."
}Project Service Items
Get a project service item
GET
/
project-service-items
/
{id}
Get a project service item
curl --request GET \
--url https://www.ruddr.io/api/workspace/project-service-items/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ruddr.io/api/workspace/project-service-items/{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-service-items/{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-service-items/{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-service-items/{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-service-items/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/project-service-items/{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": "f1d8b3e6-9c4a-4f7e-b2d5-3a8c6f1b9e47",
"date": "2026-06-04",
"quantity": 5,
"rate": 200,
"fee": 1000,
"description": "Managed services retainer",
"createdAt": "2026-06-04T09:15:42.831Z",
"project": {
"id": "b8d4e6f2-3c9a-4b7e-a5d1-2f8c4e9b6d37",
"name": "Managed IT Services",
"client": {
"id": "c1e9b5d3-7f4a-4c8b-9e2d-6a3f1c7e4b82",
"name": "Pinnacle Financial"
}
},
"invoiceItem": {
"id": "d6f2a8c4-1e7b-4d3f-b9a5-4c8e2d6f1b73",
"name": "Managed Services"
},
"invoiced": false
}{
"status": 400,
"message": "Parameter 'id' is not a valid UUID."
}{
"status": 404,
"message": "Object with id '2b7e4c9f-8d1a-4e6b-a3f8-5c9d2e7b4f13' not found."
}An additional service charge billed to a project, such as managed services, consulting retainers, or other recurring fees beyond core project work. Only available for billable projects.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The project service item uuid
Response
200
The unique identifier for the object.
The date of the item. Will be in the form YYYY-MM-DD.
The quantity used to calculate the fee.
The rate used to calculate the fee.
The total amount of the item.
A description of the additional service being charged.
The timestamp when the object was created.
The project this item belongs to.
Show child attributes
Show child attributes
The invoice item associated with this service item.
Show child attributes
Show child attributes
Whether the item has been invoiced.