curl --request GET \
--url https://www.ruddr.io/api/workspace/project-expenses/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ruddr.io/api/workspace/project-expenses/{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-expenses/{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-expenses/{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-expenses/{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-expenses/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/project-expenses/{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": "7e3a1f82-b54d-4c89-a2f1-9d6e0c3b5a47",
"date": "2025-03-14",
"amount": 2450.75,
"total": 2940.9,
"isBillable": true,
"vendor": "Delta Airlines",
"notes": "Flight to client site for Q1 kickoff",
"createdAt": "2025-03-14T18:23:41.502Z",
"markupMethod": "percentage",
"markupAmount": null,
"markupRatio": 0.2,
"markup": 490.15,
"project": {
"id": "c50fafe3-4ec1-44f2-8a61-ddb3abcc55bb",
"name": "Website Redesign",
"client": {
"id": "aa39afdb-e168-4956-b061-41c7c62e8c2e",
"name": "Acme Corp"
}
},
"expenseCategory": {
"id": "175e0635-ac9e-4880-8492-07fa584f1b15",
"name": "Airfare"
},
"invoiced": false
}{
"status": 400,
"message": "Parameter 'id' is not a valid UUID."
}{
"status": 404,
"message": "Object with id 'e9c7a3b1-2d4f-4e8a-b5c6-f1d2e3a4b5c6' not found."
}Get a project expense
curl --request GET \
--url https://www.ruddr.io/api/workspace/project-expenses/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ruddr.io/api/workspace/project-expenses/{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-expenses/{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-expenses/{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-expenses/{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-expenses/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/project-expenses/{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": "7e3a1f82-b54d-4c89-a2f1-9d6e0c3b5a47",
"date": "2025-03-14",
"amount": 2450.75,
"total": 2940.9,
"isBillable": true,
"vendor": "Delta Airlines",
"notes": "Flight to client site for Q1 kickoff",
"createdAt": "2025-03-14T18:23:41.502Z",
"markupMethod": "percentage",
"markupAmount": null,
"markupRatio": 0.2,
"markup": 490.15,
"project": {
"id": "c50fafe3-4ec1-44f2-8a61-ddb3abcc55bb",
"name": "Website Redesign",
"client": {
"id": "aa39afdb-e168-4956-b061-41c7c62e8c2e",
"name": "Acme Corp"
}
},
"expenseCategory": {
"id": "175e0635-ac9e-4880-8492-07fa584f1b15",
"name": "Airfare"
},
"invoiced": false
}{
"status": 400,
"message": "Parameter 'id' is not a valid UUID."
}{
"status": 404,
"message": "Object with id 'e9c7a3b1-2d4f-4e8a-b5c6-f1d2e3a4b5c6' not found."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The project expense uuid
Response
200
The unique identifier for the object.
The date of the expense. Will be in the form YYYY-MM-DD.
The total amount of the expense.
The total billed amount of the expense, including any markup.
Whether the expense is billable to the client. Can only be true on billable projects.
The vendor for the expense.
Any notes about the expense.
The timestamp when the object was created.
The method used to calculate markup. Either amount (fixed dollar amount) or percentage (ratio of the expense amount).
amount, percentage, null The fixed markup amount. Present when markupMethod is amount, otherwise null.
The markup ratio (0–1). Present when markupMethod is percentage, otherwise null.
The calculated markup value. null when no markup method is set.
The project this expense belongs to.
Show child attributes
Show child attributes
The expense category assigned to this expense.
Show child attributes
Show child attributes
Whether the expense has been invoiced.