App settings: HR
HR policy (leave year, allowances, carry-over, half days), leave types, company closures, checklist templates, who is in HR, removed people, and each person's HR record including dated allowance changes.
| Method | Path | Summary |
|---|---|---|
| GET | /v1/admin/hr/overview | HR policy, leave types, closures, templates and licence counts in one call |
| PUT | /v1/admin/hr/settings | Update the leave policy (leave year start, allowance, bank holidays, carry-over, half days, privacy) |
| PUT | /v1/admin/hr/people-scope | Who gets an HR record automatically — every staff account (scope all) or members of chosen groups (scope groups, groups = ids) |
| POST | /v1/admin/hr/removed/:employeeId/restore | Restore a removed |
| POST | /v1/admin/hr/types | Add a leave type |
| PUT | /v1/admin/hr/types/:id | Change a leave type, or archive / restore it ({ archived }) |
| POST | /v1/admin/hr/closures | Add company closure days (a date range) |
| PUT | /v1/admin/hr/closures/:id | Switch one closure day between "extra day off" and "comes out of the allowance" |
| DELETE | /v1/admin/hr/closures/:id | Delete a closure |
| POST | /v1/admin/hr/templates | Add an onboarding or offboarding checklist template with its tasks |
| PUT | /v1/admin/hr/templates/:id | Replace a template's name, description and tasks (checklists already started keep their own copy) |
| DELETE | /v1/admin/hr/templates/:id | Delete a template |
| GET | /v1/admin/hr/people/:userId | Get a people |
| PUT | /v1/admin/hr/people/:userId | Update a people |
| POST | /v1/admin/hr/people/:userId/allowance-changes | Change a user's holiday allowance from a leave year on (kind set = days a year, extra = days on top of the policy) |
| DELETE | /v1/admin/hr/people/:userId/allowance-changes/:id | Delete an allowance change |
#HR policy, leave types, closures, templates and licence counts in one call
GET
/v1/admin/hr/overview- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/overview- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Response 200
| Field | Type | Description |
|---|---|---|
settings | any | |
types | array of any | |
closures | array of any | |
templates | array of any | |
people | integer | |
licensed_users | integer | |
hr_admins | array of object | |
hr_admins[].id | integer | |
hr_admins[].first_name | string, or null | |
hr_admins[].last_name | string, or null | |
hr_admins[].email | string | |
groups | array of any | |
removed | any |
Example response
JSON
{
"settings": null,
"types": [],
"closures": [],
"templates": [],
"people": 1,
"licensed_users": 1,
"hr_admins": [
{
"id": 42,
"first_name": "Alex",
"last_name": "Morgan",
"email": "alex@example.com"
}
],
"groups": [],
"removed": null
}Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/overview' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/overview', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/overview",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/overview' -Headers $headers#Update the leave policy (leave year start, allowance, bank holidays, carry-over, half days, privacy)
PUT
/v1/admin/hr/settings- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/settings- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Request body JSON
| Name | Type | Description |
|---|---|---|
year_start_month | number | |
default_allowance | number | |
carry_over_max | number | |
bank_holidays | string | |
region | any | |
half_days | integer | |
show_leave_types | array of any | |
overlap_mode | string |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
JSON
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 400 | Choose the month the leave year starts |
| 400 | The allowance must be between 0 and 100 days |
| 400 | Carry-over must be between 0 and 100 days |
Example request
Bash
curl -X PUT 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/settings' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"year_start_month":12.5,"default_allowance":12.5,"carry_over_max":12.5,"bank_holidays":"string","region":"…","half_days":1,"show_leave_types":[],"overlap_mode":"string"}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/settings', {
method: 'PUT',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"year_start_month":12.5,"default_allowance":12.5,"carry_over_max":12.5,"bank_holidays":"string","region":"…","half_days":1,"show_leave_types":[],"overlap_mode":"string"}),
});
const data = await res.json();Python
import os, requests
r = requests.put(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/settings",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"year_start_month":12.5,"default_allowance":12.5,"carry_over_max":12.5,"bank_holidays":"string","region":"…","half_days":1,"show_leave_types":[],"overlap_mode":"string"},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"year_start_month":12.5,"default_allowance":12.5,"carry_over_max":12.5,"bank_holidays":"string","region":"…","half_days":1,"show_leave_types":[],"overlap_mode":"string"}'
Invoke-RestMethod -Method PUT -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/settings' -Headers $headers -ContentType 'application/json' -Body $body#Who gets an HR record automatically — every staff account (scope all) or members of chosen groups (scope groups, groups = ids)
PUT
/v1/admin/hr/people-scopeWho gets an HR record automatically — every staff account (scope all) or members of chosen groups (scope groups, groups = ids). BRM-HR applies it within a minute.
- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/people-scope- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Request body JSON
| Name | Type | Description |
|---|---|---|
scope | string | |
groups | array of any |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
JSON
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 400 | Choose at least one group |
| 400 | Those groups were not found |
Example request
Bash
curl -X PUT 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/people-scope' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"scope":"string","groups":[]}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/people-scope', {
method: 'PUT',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"scope":"string","groups":[]}),
});
const data = await res.json();Python
import os, requests
r = requests.put(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/people-scope",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"scope":"string","groups":[]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"scope":"string","groups":[]}'
Invoke-RestMethod -Method PUT -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/people-scope' -Headers $headers -ContentType 'application/json' -Body $body#Restore a removed
POST
/v1/admin/hr/removed/:employeeId/restore- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/removed/:employeeId/restore- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Path parameters
| Name | Type | Description |
|---|---|---|
employeeIdrequired | number |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
JSON
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 404 | That person was not found |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/removed/12.5/restore' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/removed/12.5/restore', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/removed/12.5/restore",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/removed/12.5/restore' -Headers $headers#Add a leave type
POST
/v1/admin/hr/types- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/types- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Request body JSON
| Name | Type | Description |
|---|---|---|
name | string | |
kind | string | |
deducts | array of any | |
needs_approval | any | |
colour | any | |
icon | any | |
priority | number | |
is_absence | boolean | |
annual_limit | string |
Response 201
| Field | Type | Description |
|---|---|---|
id | integer |
Example response
JSON
{
"id": 42
}Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/types' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","kind":"string","deducts":[],"needs_approval":"…","colour":"…","icon":"…","priority":12.5,"is_absence":true,"annual_limit":"string"}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/types', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","kind":"string","deducts":[],"needs_approval":"…","colour":"…","icon":"…","priority":12.5,"is_absence":true,"annual_limit":"string"}),
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/types",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","kind":"string","deducts":[],"needs_approval":"…","colour":"…","icon":"…","priority":12.5,"is_absence":True,"annual_limit":"string"},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","kind":"string","deducts":[],"needs_approval":"…","colour":"…","icon":"…","priority":12.5,"is_absence":true,"annual_limit":"string"}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/types' -Headers $headers -ContentType 'application/json' -Body $body#Change a leave type, or archive / restore it ({ archived })
PUT
/v1/admin/hr/types/:id- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/types/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | number |
Request body JSON
| Name | Type | Description |
|---|---|---|
archived | any |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
JSON
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 404 | Leave type not found |
Example request
Bash
curl -X PUT 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/types/12.5' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"archived":"…"}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/types/12.5', {
method: 'PUT',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"archived":"…"}),
});
const data = await res.json();Python
import os, requests
r = requests.put(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/types/12.5",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"archived":"…"},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"archived":"…"}'
Invoke-RestMethod -Method PUT -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/types/12.5' -Headers $headers -ContentType 'application/json' -Body $body#Add company closure days (a date range)
POST
/v1/admin/hr/closuresAdd company closure days (a date range). Nobody books them; with { deducts } they also come out of everyone's allowance
- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Request body JSON
| Name | Type | Description |
|---|---|---|
title | string | |
from | any | |
to | any | |
deducts | array of any |
Response 201
| Field | Type | Description |
|---|---|---|
added | integer |
Example response
JSON
{
"added": 1
}Errors
| Status | Message |
|---|---|
| 400 | Give the closure a name, e.g. Christmas shutdown |
| 400 | Choose the dates |
| 400 | Those dates are all weekends |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Example title","from":"…","to":"…","deducts":[]}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"title":"Example title","from":"…","to":"…","deducts":[]}),
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"title":"Example title","from":"…","to":"…","deducts":[]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"title":"Example title","from":"…","to":"…","deducts":[]}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures' -Headers $headers -ContentType 'application/json' -Body $body#Switch one closure day between "extra day off" and "comes out of the allowance"
PUT
/v1/admin/hr/closures/:id- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | number |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
JSON
{
"ok": true
}Example request
Bash
curl -X PUT 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures/12.5' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures/12.5', {
method: 'PUT',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.put(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures/12.5",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method PUT -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures/12.5' -Headers $headers#Delete a closure
DELETE
/v1/admin/hr/closures/:id- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | number |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
JSON
{
"ok": true
}Example request
Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures/12.5' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures/12.5', {
method: 'DELETE',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.delete(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures/12.5",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method DELETE -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/closures/12.5' -Headers $headers#Add an onboarding or offboarding checklist template with its tasks
POST
/v1/admin/hr/templates- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Request body JSON
| Name | Type | Description |
|---|---|---|
name | string | |
kind | string | |
description | string | |
tasks | array of any |
Response 201
| Field | Type | Description |
|---|---|---|
id | integer |
Example response
JSON
{
"id": 42
}Errors
| Status | Message |
|---|---|
| 400 | Give the checklist a name |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","kind":"string","description":"string","tasks":[]}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","kind":"string","description":"string","tasks":[]}),
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","kind":"string","description":"string","tasks":[]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","kind":"string","description":"string","tasks":[]}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates' -Headers $headers -ContentType 'application/json' -Body $body#Replace a template's name, description and tasks (checklists already started keep their own copy)
PUT
/v1/admin/hr/templates/:id- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | number |
Request body JSON
| Name | Type | Description |
|---|---|---|
name | string | |
description | string | |
tasks | array of any |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
JSON
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 400 | Give the checklist a name |
| 404 | Checklist not found |
Example request
Bash
curl -X PUT 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates/12.5' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Example name","description":"string","tasks":[]}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates/12.5', {
method: 'PUT',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"name":"Example name","description":"string","tasks":[]}),
});
const data = await res.json();Python
import os, requests
r = requests.put(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates/12.5",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"name":"Example name","description":"string","tasks":[]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"name":"Example name","description":"string","tasks":[]}'
Invoke-RestMethod -Method PUT -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates/12.5' -Headers $headers -ContentType 'application/json' -Body $body#Delete a template
DELETE
/v1/admin/hr/templates/:id- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | number |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
JSON
{
"ok": true
}Example request
Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates/12.5' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates/12.5', {
method: 'DELETE',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.delete(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates/12.5",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method DELETE -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/templates/12.5' -Headers $headers#Get a people
GET
/v1/admin/hr/people/:userId- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/:userId- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Path parameters
| Name | Type | Description |
|---|---|---|
userIdrequired | number |
Response 200
| Field | Type | Description |
|---|---|---|
employee | object | |
employee.id | integer | |
employee.manager_id | integer | |
employee.work_days | integer | |
employee.hours_per_week | any | |
employee.start_date | string (date) | |
employee.end_date | string (date) | |
allowance_changes | array of any | |
this_year | any | |
managers | array of any | |
reports | array of any | |
policy | object | |
policy.default_allowance | any | |
policy.bank_holidays | any | |
policy.year_start_month | any |
Example response
JSON
{
"employee": {
"id": 42,
"manager_id": 7,
"work_days": 1,
"hours_per_week": null,
"start_date": "2026-11-12",
"end_date": "2026-11-12"
},
"allowance_changes": [],
"this_year": null,
"managers": [],
"reports": [],
"policy": {
"default_allowance": null,
"bank_holidays": null,
"year_start_month": null
}
}Errors
| Status | Message |
|---|---|
| 404 | Only staff accounts have HR records |
Example request
Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5' -Headers $headers#Update a people
PUT
/v1/admin/hr/people/:userId- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/:userId- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Path parameters
| Name | Type | Description |
|---|---|---|
userIdrequired | number |
Request body JSON
| Name | Type | Description |
|---|---|---|
manager_id | string | |
work_days | integer | |
hours_per_week | any | |
start_date | string (date) |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
JSON
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 400 | Someone can't be their own manager |
| 400 | That manager was not found |
| 400 | That manager reports to this person, so they can't also manage them |
| 400 | Choose at least one working day |
| 400 | The start date is after their last day |
| 404 | Only staff accounts have HR records |
Example request
Bash
curl -X PUT 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"manager_id":"string","work_days":1,"hours_per_week":"…","start_date":"2026-11-12"}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5', {
method: 'PUT',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"manager_id":"string","work_days":1,"hours_per_week":"…","start_date":"2026-11-12"}),
});
const data = await res.json();Python
import os, requests
r = requests.put(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"manager_id":"string","work_days":1,"hours_per_week":"…","start_date":"2026-11-12"},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"manager_id":"string","work_days":1,"hours_per_week":"…","start_date":"2026-11-12"}'
Invoke-RestMethod -Method PUT -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5' -Headers $headers -ContentType 'application/json' -Body $body#Change a user's holiday allowance from a leave year on (kind set = days a year, extra = days on top of the policy)
POST
/v1/admin/hr/people/:userId/allowance-changesChange a user's holiday allowance from a leave year on (kind set = days a year, extra = days on top of the policy). Replaces any change from the same year.
- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/:userId/allowance-changes- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Path parameters
| Name | Type | Description |
|---|---|---|
userIdrequired | number |
Request body JSON
| Name | Type | Description |
|---|---|---|
kind | string | |
daysrequired | number | |
fromrequired | string (date) | |
reason | string |
Response 201
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
JSON
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 400 | Give a number of days |
| 400 | The allowance must be between 0 and 366 days |
| 400 | Extra days must be between -100 and 100 |
| 400 | Choose the leave year it starts from |
| 404 | Only staff accounts have HR records |
Example request
Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5/allowance-changes' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"string","days":12.5,"from":"2026-11-12","reason":"string"}'JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5/allowance-changes', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"kind":"string","days":12.5,"from":"2026-11-12","reason":"string"}),
});
const data = await res.json();Python
import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5/allowance-changes",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"kind":"string","days":12.5,"from":"2026-11-12","reason":"string"},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"kind":"string","days":12.5,"from":"2026-11-12","reason":"string"}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5/allowance-changes' -Headers $headers -ContentType 'application/json' -Body $body#Delete an allowance change
DELETE
/v1/admin/hr/people/:userId/allowance-changes/:id- Address
https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/:userId/allowance-changes/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Permission (any of):hr.admin.manage.
Path parameters
| Name | Type | Description |
|---|---|---|
userIdrequired | number | |
idrequired | number |
Response 200
| Field | Type | Description |
|---|---|---|
ok | boolean |
Example response
JSON
{
"ok": true
}Errors
| Status | Message |
|---|---|
| 404 | Only staff accounts have HR records |
| 404 | Allowance change not found |
Example request
Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5/allowance-changes/12.5' \
-H "X-API-Key: $BRAMBLE_KEY"JavaScript
const res = await fetch('https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5/allowance-changes/12.5', {
method: 'DELETE',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();Python
import os, requests
r = requests.delete(
"https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5/allowance-changes/12.5",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()PowerShell
$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method DELETE -Uri 'https://<your-org>.brambleit.cloud/api/v1/admin/hr/people/12.5/allowance-changes/12.5' -Headers $headersWas this page helpful?
Thanks for your feedback.