BambooHR Toolkit
The BambooHR toolkit connects a BambooHR company account to agents and workflows using an API key and lets you look up employees and org structure, check who is out of office, list and manage time-off requests, check PTO balances, and run company reports. Authentication uses a personal BambooHR API key that inherits the creating user's permissions.
Prerequisites
- An active BambooHR account in the target company.
- Permission in BambooHR to view the employees, time-off records, and reports the agent or workflow requires.
- A personal BambooHR API key — go to My Info → API Keys in BambooHR, generate a key, and copy it immediately.
- The company subdomain from your BambooHR login URL. For
https://acme.bamboohr.com, the subdomain isacmeonly — not the full URL.
BambooHR API keys inherit the full permissions of the user who created them — use a dedicated, least-privilege user rather than an administrator account. Write actions (Add Employee, Update Employee, Add Time Off Request, Update Time Off Status) are confirmation-gated and should only be enabled for approved workflows. Never paste API keys into tickets, chat, prompts, screenshots, or documentation.
Setup
Generate a BambooHR API key
Sign in to BambooHR as the dedicated user. Go to My Info → API Keys, generate a personal API key, and copy it immediately. Note the company subdomain from the login URL.
Open an agent or workflow
Open an agent and add the BambooHR toolkit under Toolkits, or add a BambooHR step to a workflow.
Create a saved connection
In the BambooHR step, choose + New under Select saved connection. Enter a Connection Name, the Company Subdomain (letters, digits, and hyphens only — not the full URL), and the API Key. Save the connection.
Enable only the tools you need
Start with read-only actions: Find Employee, Who's Out, and Get Time Off Balances. Enable write actions only after access and confirmation policy are approved.
Test with a safe read action
Run Who's Out without any date inputs to confirm the connection. An empty list is a valid result when nobody is out.
Available tools
Employees
| Tool | Description |
|---|---|
| Find Employee | Searches the company directory by name or work email. Returns matching candidates — does not guess when multiple people match. |
| Get Employee Directory | Lists employees with an optional department filter. Returns up to 250 employees — use Find Employee for large companies. |
| Get Employee | Returns one employee's fields including title, department, manager, hire date, and employment status. |
| Get Employee Tables | Returns tabular history for one employee — job information, employment status, compensation, contacts, or emergency contacts. |
| Get Meta Fields | Lists BambooHR field definitions. Use a query filter to narrow results before using fields in Get Employee or reports. |
| Add Employee | Creates a new employee. Confirmation-gated. For approved provisioning workflows only. |
| Update Employee | Updates fields on an existing employee by exact employee ID. Confirmation-gated. |
Time Off
| Tool | Description |
|---|---|
| Who's Out | Lists people out of office (time off or holidays) in a date range. Safe first test — read-only with no required inputs. |
| List Time Off Requests | Lists time-off requests between two dates, optionally filtered by employee and status. |
| Get Time Off Types | Lists time-off types and default hours. Run this before Add Time Off Request to get the type ID. |
| Get Time Off Balances | Returns an employee's PTO balances as of a date. |
| Add Time Off Request | Creates a time-off request for an employee. Confirmation-gated. |
| Update Time Off Status | Approves, denies, or cancels an existing time-off request. Confirmation-gated. |
Reports
| Tool | Description |
|---|---|
| Get Company Report | Fetches a saved company report by its ID as JSON. |
| Get Custom Report | Runs an ad-hoc report for a specified list of field identifiers. Use Get Meta Fields to discover field IDs first. |
Advanced
| Tool | Description |
|---|---|
| Custom API Call | Calls an arbitrary BambooHR v1 endpoint. Use only when no dedicated tool covers the need. POST, PUT, PATCH, and DELETE can change HR data. |
Use cases
- Answer "who is out this week?" by running Who's Out with the current week's date range.
- Look up an employee by name or email and return their manager, title, and department.
- Check an employee's remaining PTO balance before submitting a time-off request on their behalf.
- Run a custom report to pull a specific set of employee fields for a downstream workflow step.
- List pending time-off requests in a date range and summarize them for a manager.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| BambooHR not visible in the toolkit picker | The toolkit is not enabled for the environment or project. | Ask a Super Admin to enable and show the toolkit, then refresh the picker. |
| Invalid subdomain error | The full URL, trailing slash, or extra characters were entered. | Enter only the company name from the BambooHR URL — letters, digits, and hyphens only. |
401 Unauthorized | The API key is missing, revoked, or mistyped. | Generate a new personal key in BambooHR and update the saved connection. |
403 Forbidden or sparse employee fields | The API key's user cannot see those records or fields. | Use a BambooHR user account with the required access level. Sparse fields usually indicate a permission limit, not missing HR data. |
| No employee matched or multiple matches | The name or email matched zero or more than one person. | Use a work email for a precise lookup, or present the candidates and ask which person to use. |
| Directory looks truncated | The directory returns up to 250 employees client-side. | Use Find Employee to look up a specific person instead of listing the full directory. |
429 Too Many Requests | BambooHR rate-limited the company. | The toolkit retries up to three times with backoff. Reduce concurrent steps and retry after a short wait. |
| Write action did not run | Confirmation was required and not approved. | Approve the confirmation card. If writes are not in scope, keep those tools disabled. |