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.

MethodPathSummary
GET/v1/admin/hr/overviewHR policy, leave types, closures, templates and licence counts in one call
PUT/v1/admin/hr/settingsUpdate the leave policy (leave year start, allowance, bank holidays, carry-over, half days, privacy)
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)
POST/v1/admin/hr/removed/:employeeId/restoreRestore a removed
POST/v1/admin/hr/typesAdd a leave type
PUT/v1/admin/hr/types/:idChange a leave type, or archive / restore it ({ archived })
POST/v1/admin/hr/closuresAdd company closure days (a date range)
PUT/v1/admin/hr/closures/:idSwitch one closure day between "extra day off" and "comes out of the allowance"
DELETE/v1/admin/hr/closures/:idDelete a closure
POST/v1/admin/hr/templatesAdd an onboarding or offboarding checklist template with its tasks
PUT/v1/admin/hr/templates/:idReplace a template's name, description and tasks (checklists already started keep their own copy)
DELETE/v1/admin/hr/templates/:idDelete a template
GET/v1/admin/hr/people/:userIdGet a people
PUT/v1/admin/hr/people/:userIdUpdate a people
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)
DELETE/v1/admin/hr/people/:userId/allowance-changes/:idDelete 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

FieldTypeDescription
settingsany
typesarray of any
closuresarray of any
templatesarray of any
peopleinteger
licensed_usersinteger
hr_adminsarray of object
hr_admins[].idinteger
hr_admins[].first_namestring, or null
hr_admins[].last_namestring, or null
hr_admins[].emailstring
groupsarray of any
removedany
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"

#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

NameTypeDescription
year_start_monthnumber
default_allowancenumber
carry_over_maxnumber
bank_holidaysstring
regionany
half_daysinteger
show_leave_typesarray of any
overlap_modestring

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
400Choose the month the leave year starts
400The allowance must be between 0 and 100 days
400Carry-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"}'

#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-scope

Who 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

NameTypeDescription
scopestring
groupsarray of any

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
400Choose at least one group
400Those 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":[]}'

#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

NameTypeDescription
employeeIdrequirednumber

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
404That 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"

#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

NameTypeDescription
namestring
kindstring
deductsarray of any
needs_approvalany
colourany
iconany
prioritynumber
is_absenceboolean
annual_limitstring

Response 201

FieldTypeDescription
idinteger
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"}'

#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

NameTypeDescription
idrequirednumber

Request body JSON

NameTypeDescription
archivedany

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
404Leave 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":"…"}'

#Add company closure days (a date range)

POST/v1/admin/hr/closures

Add 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

NameTypeDescription
titlestring
fromany
toany
deductsarray of any

Response 201

FieldTypeDescription
addedinteger
Example response
JSON
{
  "added": 1
}

Errors

StatusMessage
400Give the closure a name, e.g. Christmas shutdown
400Choose the dates
400Those 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":[]}'

#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

NameTypeDescription
idrequirednumber

Response 200

FieldTypeDescription
okboolean
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"

#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

NameTypeDescription
idrequirednumber

Response 200

FieldTypeDescription
okboolean
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"

#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

NameTypeDescription
namestring
kindstring
descriptionstring
tasksarray of any

Response 201

FieldTypeDescription
idinteger
Example response
JSON
{
  "id": 42
}

Errors

StatusMessage
400Give 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":[]}'

#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

NameTypeDescription
idrequirednumber

Request body JSON

NameTypeDescription
namestring
descriptionstring
tasksarray of any

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
400Give the checklist a name
404Checklist 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":[]}'

#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

NameTypeDescription
idrequirednumber

Response 200

FieldTypeDescription
okboolean
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"

#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

NameTypeDescription
userIdrequirednumber

Response 200

FieldTypeDescription
employeeobject
employee.idinteger
employee.manager_idinteger
employee.work_daysinteger
employee.hours_per_weekany
employee.start_datestring (date)
employee.end_datestring (date)
allowance_changesarray of any
this_yearany
managersarray of any
reportsarray of any
policyobject
policy.default_allowanceany
policy.bank_holidaysany
policy.year_start_monthany
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

StatusMessage
404Only 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"

#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

NameTypeDescription
userIdrequirednumber

Request body JSON

NameTypeDescription
manager_idstring
work_daysinteger
hours_per_weekany
start_datestring (date)

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
400Someone can't be their own manager
400That manager was not found
400That manager reports to this person, so they can't also manage them
400Choose at least one working day
400The start date is after their last day
404Only 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"}'

#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-changes

Change 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

NameTypeDescription
userIdrequirednumber

Request body JSON

NameTypeDescription
kindstring
daysrequirednumber
fromrequiredstring (date)
reasonstring

Response 201

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
400Give a number of days
400The allowance must be between 0 and 366 days
400Extra days must be between -100 and 100
400Choose the leave year it starts from
404Only 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"}'

#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

NameTypeDescription
userIdrequirednumber
idrequirednumber

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
404Only staff accounts have HR records
404Allowance 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"