Create a project budget other item
curl --request POST \
--url https://www.ruddr.io/api/workspace/project-budget-other-items \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fee": 123,
"projectId": "<string>",
"invoiceItemId": "<string>",
"description": "<string>"
}
'import requests
url = "https://www.ruddr.io/api/workspace/project-budget-other-items"
payload = {
"fee": 123,
"projectId": "<string>",
"invoiceItemId": "<string>",
"description": "<string>"
}
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({
fee: 123,
projectId: '<string>',
invoiceItemId: '<string>',
description: '<string>'
})
};
fetch('https://www.ruddr.io/api/workspace/project-budget-other-items', 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-budget-other-items",
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([
'fee' => 123,
'projectId' => '<string>',
'invoiceItemId' => '<string>',
'description' => '<string>'
]),
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/project-budget-other-items"
payload := strings.NewReader("{\n \"fee\": 123,\n \"projectId\": \"<string>\",\n \"invoiceItemId\": \"<string>\",\n \"description\": \"<string>\"\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/project-budget-other-items")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fee\": 123,\n \"projectId\": \"<string>\",\n \"invoiceItemId\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/project-budget-other-items")
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 \"fee\": 123,\n \"projectId\": \"<string>\",\n \"invoiceItemId\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "a4f8c2e1-7b3d-4e9a-b5f6-0d1e2a3c4b5d",
"fee": 12500,
"description": "Equipment rental",
"createdAt": "2025-06-01T09:15:00.000Z",
"project": {
"id": "9c2adca5-73a7-4c9d-aa3e-14f52cd64275",
"name": "Sample T&M Project",
"client": {
"id": "976ed002-ecc4-49a5-9cee-2c52341b2b2a",
"name": "Big Box Retailer"
}
},
"invoiceItem": {
"id": "3c5ad57a-1d92-484c-a53e-d086b9569243",
"name": "Hosting"
}
}Project Budget Other Items
Create a project budget other item
POST
/
project-budget-other-items
Create a project budget other item
curl --request POST \
--url https://www.ruddr.io/api/workspace/project-budget-other-items \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fee": 123,
"projectId": "<string>",
"invoiceItemId": "<string>",
"description": "<string>"
}
'import requests
url = "https://www.ruddr.io/api/workspace/project-budget-other-items"
payload = {
"fee": 123,
"projectId": "<string>",
"invoiceItemId": "<string>",
"description": "<string>"
}
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({
fee: 123,
projectId: '<string>',
invoiceItemId: '<string>',
description: '<string>'
})
};
fetch('https://www.ruddr.io/api/workspace/project-budget-other-items', 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-budget-other-items",
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([
'fee' => 123,
'projectId' => '<string>',
'invoiceItemId' => '<string>',
'description' => '<string>'
]),
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/project-budget-other-items"
payload := strings.NewReader("{\n \"fee\": 123,\n \"projectId\": \"<string>\",\n \"invoiceItemId\": \"<string>\",\n \"description\": \"<string>\"\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/project-budget-other-items")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fee\": 123,\n \"projectId\": \"<string>\",\n \"invoiceItemId\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/project-budget-other-items")
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 \"fee\": 123,\n \"projectId\": \"<string>\",\n \"invoiceItemId\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "a4f8c2e1-7b3d-4e9a-b5f6-0d1e2a3c4b5d",
"fee": 12500,
"description": "Equipment rental",
"createdAt": "2025-06-01T09:15:00.000Z",
"project": {
"id": "9c2adca5-73a7-4c9d-aa3e-14f52cd64275",
"name": "Sample T&M Project",
"client": {
"id": "976ed002-ecc4-49a5-9cee-2c52341b2b2a",
"name": "Big Box Retailer"
}
},
"invoiceItem": {
"id": "3c5ad57a-1d92-484c-a53e-d086b9569243",
"name": "Hosting"
}
}The budget for a miscellaneous invoice item on a project. Only available for billable projects using a budget and the budget mode is either “detailed” or “aggregated”.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Response
200
The unique identifier for the object.
The total amount of the item.
A description of the item 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 budget item.
Show child attributes
Show child attributes
⌘I