curl --request PATCH \
--url https://www.ruddr.io/api/workspace/resource-placeholders/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"isActive": true,
"isBillable": true,
"rateCurrency": "<string>",
"rate": 123,
"costCurrency": "<string>",
"costPerHour": 123,
"disciplineId": "<string>",
"practiceId": "<string>",
"locationId": "<string>",
"skillIds": [
"<string>"
]
}
'import requests
url = "https://www.ruddr.io/api/workspace/resource-placeholders/{id}"
payload = {
"name": "<string>",
"isActive": True,
"isBillable": True,
"rateCurrency": "<string>",
"rate": 123,
"costCurrency": "<string>",
"costPerHour": 123,
"disciplineId": "<string>",
"practiceId": "<string>",
"locationId": "<string>",
"skillIds": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
isActive: true,
isBillable: true,
rateCurrency: '<string>',
rate: 123,
costCurrency: '<string>',
costPerHour: 123,
disciplineId: '<string>',
practiceId: '<string>',
locationId: '<string>',
skillIds: ['<string>']
})
};
fetch('https://www.ruddr.io/api/workspace/resource-placeholders/{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/resource-placeholders/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'isActive' => true,
'isBillable' => true,
'rateCurrency' => '<string>',
'rate' => 123,
'costCurrency' => '<string>',
'costPerHour' => 123,
'disciplineId' => '<string>',
'practiceId' => '<string>',
'locationId' => '<string>',
'skillIds' => [
'<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/resource-placeholders/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"isActive\": true,\n \"isBillable\": true,\n \"rateCurrency\": \"<string>\",\n \"rate\": 123,\n \"costCurrency\": \"<string>\",\n \"costPerHour\": 123,\n \"disciplineId\": \"<string>\",\n \"practiceId\": \"<string>\",\n \"locationId\": \"<string>\",\n \"skillIds\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://www.ruddr.io/api/workspace/resource-placeholders/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"isActive\": true,\n \"isBillable\": true,\n \"rateCurrency\": \"<string>\",\n \"rate\": 123,\n \"costCurrency\": \"<string>\",\n \"costPerHour\": 123,\n \"disciplineId\": \"<string>\",\n \"practiceId\": \"<string>\",\n \"locationId\": \"<string>\",\n \"skillIds\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/resource-placeholders/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"isActive\": true,\n \"isBillable\": true,\n \"rateCurrency\": \"<string>\",\n \"rate\": 123,\n \"costCurrency\": \"<string>\",\n \"costPerHour\": 123,\n \"disciplineId\": \"<string>\",\n \"practiceId\": \"<string>\",\n \"locationId\": \"<string>\",\n \"skillIds\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "74c6b273-b91e-4cde-91d8-866ee99b0aad",
"name": "Consultant",
"isActive": true,
"isBillable": true,
"rateCurrency": "USD",
"rate": 165,
"costCurrency": "USD",
"costPerHour": 80,
"createdAt": "2025-11-13T17:02:37.742Z",
"discipline": {
"id": "3a8f1d2c-e947-4b06-9f13-c2d5e7a80b41",
"name": "Technical Consulting"
},
"practice": {
"id": "89c60b34-cca3-4b66-85d0-7b21e8e03c94",
"name": "Implementation Services"
},
"location": {
"id": "9f4c2e71-3b8d-4a15-b6f2-d1e9c7a50384",
"name": "North America"
},
"skills": [
{
"id": "cc1128f7-7cac-4707-aeab-fe347b784abc",
"name": "Salesforce"
},
{
"id": "354ba2a2-b67b-4278-8d25-9ec2aa37daea",
"name": "Consulting"
}
]
}Update a resource placeholder
curl --request PATCH \
--url https://www.ruddr.io/api/workspace/resource-placeholders/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"isActive": true,
"isBillable": true,
"rateCurrency": "<string>",
"rate": 123,
"costCurrency": "<string>",
"costPerHour": 123,
"disciplineId": "<string>",
"practiceId": "<string>",
"locationId": "<string>",
"skillIds": [
"<string>"
]
}
'import requests
url = "https://www.ruddr.io/api/workspace/resource-placeholders/{id}"
payload = {
"name": "<string>",
"isActive": True,
"isBillable": True,
"rateCurrency": "<string>",
"rate": 123,
"costCurrency": "<string>",
"costPerHour": 123,
"disciplineId": "<string>",
"practiceId": "<string>",
"locationId": "<string>",
"skillIds": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
isActive: true,
isBillable: true,
rateCurrency: '<string>',
rate: 123,
costCurrency: '<string>',
costPerHour: 123,
disciplineId: '<string>',
practiceId: '<string>',
locationId: '<string>',
skillIds: ['<string>']
})
};
fetch('https://www.ruddr.io/api/workspace/resource-placeholders/{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/resource-placeholders/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'isActive' => true,
'isBillable' => true,
'rateCurrency' => '<string>',
'rate' => 123,
'costCurrency' => '<string>',
'costPerHour' => 123,
'disciplineId' => '<string>',
'practiceId' => '<string>',
'locationId' => '<string>',
'skillIds' => [
'<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/resource-placeholders/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"isActive\": true,\n \"isBillable\": true,\n \"rateCurrency\": \"<string>\",\n \"rate\": 123,\n \"costCurrency\": \"<string>\",\n \"costPerHour\": 123,\n \"disciplineId\": \"<string>\",\n \"practiceId\": \"<string>\",\n \"locationId\": \"<string>\",\n \"skillIds\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://www.ruddr.io/api/workspace/resource-placeholders/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"isActive\": true,\n \"isBillable\": true,\n \"rateCurrency\": \"<string>\",\n \"rate\": 123,\n \"costCurrency\": \"<string>\",\n \"costPerHour\": 123,\n \"disciplineId\": \"<string>\",\n \"practiceId\": \"<string>\",\n \"locationId\": \"<string>\",\n \"skillIds\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ruddr.io/api/workspace/resource-placeholders/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"isActive\": true,\n \"isBillable\": true,\n \"rateCurrency\": \"<string>\",\n \"rate\": 123,\n \"costCurrency\": \"<string>\",\n \"costPerHour\": 123,\n \"disciplineId\": \"<string>\",\n \"practiceId\": \"<string>\",\n \"locationId\": \"<string>\",\n \"skillIds\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "74c6b273-b91e-4cde-91d8-866ee99b0aad",
"name": "Consultant",
"isActive": true,
"isBillable": true,
"rateCurrency": "USD",
"rate": 165,
"costCurrency": "USD",
"costPerHour": 80,
"createdAt": "2025-11-13T17:02:37.742Z",
"discipline": {
"id": "3a8f1d2c-e947-4b06-9f13-c2d5e7a80b41",
"name": "Technical Consulting"
},
"practice": {
"id": "89c60b34-cca3-4b66-85d0-7b21e8e03c94",
"name": "Implementation Services"
},
"location": {
"id": "9f4c2e71-3b8d-4a15-b6f2-d1e9c7a50384",
"name": "North America"
},
"skills": [
{
"id": "cc1128f7-7cac-4707-aeab-fe347b784abc",
"name": "Salesforce"
},
{
"id": "354ba2a2-b67b-4278-8d25-9ec2aa37daea",
"name": "Consulting"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The resource placeholder uuid
Body
The name of the resource placeholder (max 255 chars).
Whether the resource placeholder is active.
Whether the resource placeholder is billable.
The currency code for the placeholder's rate. Can only use currencies available in the workspace.
The placeholder's rate.
The currency code for the placeholder's cost. Can only use currencies available in the workspace.
The placeholder's cost per hour.
The discipline ID (uuid) for this placeholder.
The practice ID (uuid) for this placeholder.
The location ID (uuid) for this placeholder.
A list of skill IDs (uuid) associated with this resource placeholder.
Response
200
The unique identifier for the object.
The name of the placeholder.
Whether the placeholder is active.
Whether the placeholder is billable.
The currency code for the placeholder's billing rate. null when isBillable is false.
The placeholder's billing rate. null when isBillable is false.
The currency code for the placeholder's cost rate. null when no cost rate is configured.
The placeholder's cost per hour. null when no cost rate is configured.
The timestamp when the object was created.
The discipline associated with this placeholder.
Show child attributes
Show child attributes
The practice associated with this placeholder.
Show child attributes
Show child attributes
The location associated with this placeholder.
Show child attributes
Show child attributes
The skills associated with this placeholder.
Show child attributes
Show child attributes