BambooHR
Let hires look people up in BambooHR, see time-off requests and who's out, and answer time-off requests after a person approves, with personal data kept to a minimum.
Explore 5 actions and their permissionsExact inputs, sign-in scopes, access limits and approval rules.
With BambooHR connected, a hire can:
- look people up: name, job title, department, location, manager and status,
- see time-off requests in a date range and who's out (with company holidays),
- approve or deny a time-off request that's waiting, always after a person approves,
- be woken when someone asks for time off.
Personal data: the minimum, unless you widen it
HR data is about people, and much of it is sensitive. Roster keeps it to what a hire needs:
- By default a hire sees only names, job titles, departments, locations, managers and status. Roster asks BambooHR for nothing more, so the rest never leaves BambooHR.
- Never by default: pay, social security and other ID numbers, birth dates, home addresses, private emails and phone numbers, gender, ethnicity, family details, why someone is off (the time-off type, like "Sick leave") and notes on requests.
- You widen it on purpose, on the connection: More fields hires may see for ordinary
fields (like
workEmail), and Sensitive fields hires may see for the rest (liketimeOffType,timeOffNotesorpayRate). A sensitive field typed in the ordinary list is refused, so it always takes a deliberate second step. - When notes are shown, phone numbers and email addresses in them are taken out.
- Hires are told that personal data stays inside your team.
The API key also sees only what its BambooHR user sees, so make it for a user whose access matches what hires should see.
1. Make an API key in BambooHR
Straight there: your BambooHR (https://<subdomain>.bamboohr.com) → your name → API Keys. Once you've typed your subdomain in Roster, the form links to your BambooHR.
- Sign in to BambooHR as the user hires should see as (ideally one whose access you've limited).
- Click your name at the top right, choose API Keys and Add New Key. Name it
Rosterand copy it.
2. Connect it in Roster
- Open Integrations → Tools → Add a tool, search for BambooHR and choose it.
- API key: paste the key.
- BambooHR subdomain: the part before
.bamboohr.comin your BambooHR address, likebayt. - More fields hires may see and Sensitive fields hires may see: leave them empty unless a
hire's job needs more (field names as BambooHR's API names them, like
workEmail,hireDate,timeOffType). - Click Connect.
Roster checks the key when you click Connect. Once it's accepted, the connection shows Connected as your BambooHR address and whose key it is. If it's refused, Roster says what to fix (a mistyped key, a missing permission) and saves nothing.
3. Give hires access
On the hire's Tools tab, click Give access on BambooHR:
- Read only: it can look people up and see time off and who's out.
- Read and write: it can also approve or deny time-off requests. That always asks a person first: the hire asks in the thread with whose request it is and the note, and when the approver says yes, Roster does exactly that, once.
- Departments: departments whose people it may see, by name. Leave it empty for everyone. Anyone in another department is refused, in every list and lookup.
Watching time off
A hire's responsibility can watch BambooHR: it's woken when someone in its departments asks for time off.
Tools and permissions reference
This reference is built from the same definitions Roster uses to connect BambooHR and give hires access. It updates with each release.
Authentication and requested permissions
The account or app you connect sets the outer limit. Each hire's access can narrow it further. Connecting a tool gives it to no hire until you give access on that hire's Tools tab.
API key or access token
In BambooHR: your name (top right) → API Keys → Add New Key. It sees what its user sees, so make it as a user who sees only what hires should.
No fixed permission list is declared for this connection. Review the sign-in consent screen, the account's roles, and the service's own documentation before connecting.
Connection fields
| Field | What to provide |
|---|---|
API keytokenRequired · sealed secret | In BambooHR: your name (top right) → API Keys → Add New Key. It sees what its user sees, so make it as a user who sees only what hires should. |
BambooHR subdomainsubdomainRequired | The part before .bamboohr.com in your BambooHR address. |
More fields hires may seemoreFieldsOptional | By default hires see only names, job titles, departments, locations, managers and status. Add ordinary fields here by their name, like workEmail, workPhone, hireDate, divisionName. Sensitive ones go in the next list. |
Sensitive fields hires may seesensitiveFieldsOptional | Only if a hire's job needs them: pay, identity numbers, birth dates, home addresses, private contact details, notes. Like timeOffType, timeOffNotes, mobilePhone, payRate. Leave empty unless you mean it. |
Per-hire limits
Read-only hires receive only actions that read. Read-and-write access also allows actions that change things, where the connection itself permits them. An empty resource allowlist usually means everything the connected account can reach; each field below explains its meaning.
| Field | What to provide |
|---|---|
DepartmentsdepartmentsOptional | Departments whose people it may see, by name as BambooHR shows them. Leave empty for everyone. |
Actions
5 actions: 4 only read and 1 change something. A read action may still need approval when your workspace or hire is set to ask. A locked approval requirement always applies.
5 of 5 actions. Open an action for its arguments and full input schema.
list_employeesRead only
People in BambooHR (active employees), found by words in their name, job title or department. Only the fields this connection allows are shown; personal data stays inside your team, so don't repeat it outside.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
wordsOptional | string | See input schema below. |
limitOptional | integer | See input schema below.Default: 30 |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"words": {
"type": "string",
"maxLength": 200
},
"limit": {
"default": 30,
"type": "integer",
"minimum": 1,
"maximum": 100
}
}
}get_employeeRead only
One person in BambooHR by their employee ID, with the fields this connection allows. Only the fields this connection allows are shown; personal data stays inside your team, so don't repeat it outside.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
idRequired | string | See input schema below. |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^\\d{1,12}$"
}
},
"required": [
"id"
]
}list_time_offRead only
Time-off requests in a date range (the next 30 days by default): who, when, how much and the status. Why someone is off is shown only if this connection allows it.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
startOptional | string | See input schema below. |
endOptional | string | See input schema below. |
statusOptional | "requested" | "approved" | "denied" | "canceled" | See input schema below. |
employeeOptional | string | an employee ID |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"status": {
"type": "string",
"enum": [
"requested",
"approved",
"denied",
"canceled"
]
},
"employee": {
"description": "an employee ID",
"type": "string",
"pattern": "^\\d{1,12}$"
}
}
}whos_outRead only
Who's out, and company holidays, between two dates (the next 14 days by default).
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
startOptional | string | See input schema below. |
endOptional | string | See input schema below. |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
}
}respond_to_time_offRead and write
Approve or deny a time-off request that's still waiting (from list_time_off), with a note for the employee. It waits for a person's approval: Roster asks in the thread and does exactly this, once, when they approve.
Approval: Always asks for approval.
| Argument | Type | Details |
|---|---|---|
requestRequired | string | See input schema below. |
decisionRequired | "approve" | "deny" | See input schema below. |
employeeRequired | string | the employee's name as list_time_off shows it; checked |
noteOptional | string | for the employee |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"request": {
"type": "string",
"pattern": "^\\d{1,12}$"
},
"decision": {
"type": "string",
"enum": [
"approve",
"deny"
]
},
"employee": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "the employee's name as list_time_off shows it; checked"
},
"note": {
"description": "for the employee",
"type": "string",
"maxLength": 1000
}
},
"required": [
"request",
"decision",
"employee"
]
}Watches and incoming events
- This integration supports a responsibility that watches for changes. The guide above explains what it checks and how to limit it.
- No incoming webhook handler is declared for this integration.
Limits and troubleshooting
- Permission errors: check both the connected account's rights and the hire's resource and read/write limits.
- Expired or revoked access: reconnect or replace the key on the connection.
- Rate limits and unavailable services can interrupt work. The hire's timecard records the outcome.
- The action schema describes accepted inputs. It does not grant additional access or bypass approvals.