CONNECT APP
Build with BambooHR
Human Resources
- API key
MCP
Give your agent BambooHR tools
Every BambooHR action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's BambooHR account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "bamboohr",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Add Application Comment:
const result = await mcp.callTool({
name: "bamboohr-add-application-comment",
arguments: {
applicationId: "Application ID",
comment: "Comment",
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "bamboohr",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Add Application Comment:
result = await session.call_tool("bamboohr-add-application-comment", {
"applicationId": "Application ID",
"comment": "Comment",
})API PROXY
Call the BambooHR API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the BambooHR API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://api.example.com/v1/me",
})
// Any allowed BambooHR endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://api.example.com/v1/me
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vdjEvbWU?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run BambooHR actions from your backend
Connect a user's BambooHR account once, then run Add Application Comment on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "bamboohr-add-application-comment",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
bamboohr: { authProvisionId: "apn_xxxxxxx" },
applicationId: "Application ID",
comment: "Comment",
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="bamboohr-add-application-comment",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"bamboohr": {"authProvisionId": "apn_xxxxxxx"},
"applicationId": "Application ID",
"comment": "Comment",
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "bamboohr-add-application-comment",
"configured_props": {
"bamboohr": { "authProvisionId": "apn_xxxxxxx" },
"applicationId": "Application ID",
"comment": "Comment"
}
}'TOOLS
BambooHR actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Add Application Comment
actionAdd a comment to an application. See the documentationWritev0.0.3 -
Adjust Time Off Balance
actionCreate a balance adjustment for an employee's time off type, recorded as an override history item. Cannot adjust discretionary (unlimited) time off types. Use Get Time Off Balance to check current balances and List Time Off Types for a valid type ID first. See the documentationWritev0.0.1 -
Approve Time Off Request
actionApprove a time off request, completing the caller's step in the approval chain — or every remaining step when Bypass is true. Fails with 409 if the request is not currentlyREQUESTED. Use List Time Off Requests to find the request ID. See the documentationWritev0.0.1 -
Approve Timesheet
actionApprove a timesheet. Only approval is supported by the API; there is no reject/deny endpoint.lastChangedAtmust be the timesheet'shoursLastChangedAtvalue from Get Timesheet. See the documentationWritev0.0.1 -
Cancel Time Off Request
actionCancel a time off request. Available to the requester and anyone with authority to manage it; a request can be canceled whileREQUESTED, and after approval only if it hasn't started yet. Takes no request body. Use List Time Off Requests to find the request ID. See the documentationWritev0.0.1 -
Change Time Off Request Status
actionChange the status of a time off request, including cancellation. Setting status tocanceledcancels the request; this same endpoint covers both status changes and cancellation. Use List Time Off Requests to find request IDs. See the documentationWritev0.0.1 -
Clock In
actionClock an employee in in real time. This is a separate endpoint from Clock Out. For manual/retroactive entries use Create Clock Entry. See the documentationWritev0.0.1 -
Clock Out
actionClock an employee out in real time. Separate endpoint from Clock In; returns 409 if the employee is not currently clocked in. See the documentationWritev0.0.1 -
Create Clock Entry
actionCreate a manual/retroactive clock entry with explicit start and end. For real-time punches use Clock In / Clock Out instead. See the documentationWritev0.0.1 -
Create Employee
actionCreate a new employee.firstNameandlastNameare required; any other valid writable field can be supplied via Additional Fields. Returns a Location header with the new employee ID. See the documentationWritev0.0.1 -
Create Hour Entry
actionCreate a time-tracking hour entry. Records worked hours for an employee on a date. See the documentationWritev0.0.1 -
Create Hour Record
actionAdd a single approved hour record to the legacy Hours API, separate from Time Tracking timesheets — use Create Hour Entry instead for timesheet-integrated hours. You choose the record's ID; save it to update or delete this record later with Update Hour Record / Delete Hour Record. See the documentationWritev0.0.1 -
Create or Update Hour Records
actionBulk add or edit approved hour records in the legacy Hours API. Records whose ID already exists are updated; unrecognized IDs are created. The API can return HTTP 201 even when individual items fail validation — check each item'ssuccessflag in the response. Use Create Hour Record for a single record. See the documentationWritev0.0.1 -
Create Time Off Request
actionCreate a time off request for an employee. Use List Time Off Types to find a valid time off type ID and Get Employees Directory for the employee ID. See the documentationWritev0.0.1 -
Create Time Off Request Comment
actionAdd a comment to a time off request. Use List Time Off Requests to find the request ID and List Time Off Request Comments to review the existing thread first. See the documentationWritev0.0.1 -
Delete Clock Entry
actionPermanently delete a clock entry. Idempotent (returns 204); returns 409 if the entry belongs to an approved timesheet or is still open. Use List Clock Entries to find IDs. See the documentationWritev0.0.1 -
Delete Employee
actionPermanently delete an employee record and all associated data. This cannot be undone. Use Get Employees Directory or Get Employee to find the employee ID first. See the documentationWritev0.0.1 -
Delete Hour Entry
actionPermanently delete a time-tracking hour entry. Idempotent (returns 204); returns 409 if the entry belongs to an approved timesheet. Use List Hour Entries to find IDs. See the documentationWritev0.0.1 -
Delete Hour Record
actionPermanently delete a legacy Hours API record and all its stored revisions. This cannot be undone. Use Get Time Tracking Record to confirm the ID first. See the documentationWritev0.0.1 -
Deny Time Off Request
actionDeny a time off request. A single denial is final — it discards any remaining approval steps, so the request always ends inDENIEDstatus. Fails with 409 if the request is not currentlyREQUESTED. Use List Time Off Requests to find the request ID. See the documentationWritev0.0.1 -
Download Resume
actionDownload a resume from an application. See the documentationWritev0.0.3 -
Get Application
actionGet an application by its application ID. Use List Applications to find the application ID before retrieving the full application details. See the documentationRead-onlyv0.0.3 -
Get Clock Entry
actionGet a single clock entry by ID. While the entry is open,endandclockOutLocationare null. Use List Clock Entries to find IDs. See the documentationRead-onlyv0.0.1 -
Get Company Report
actionGet a saved company report by ID. Report IDs are company-specific. In JSON, returns{title, fields, employees}. See the documentationRead-onlyv0.0.1 -
Get Employee
actionGet a single employee record. Onlyidis returned unless you request fields. Use Get Employees Directory to find an employee ID. Pass0as the ID to fetch the authenticated user. See the documentationRead-onlyv0.0.1 -
Get Employee File
actionDownload a single employee file and save it to/tmp. Use List Employee Files to discover file IDs. See the documentationRead-onlyv0.0.1 -
Get Employees Directory
actionGet the company employee directory from BambooHR. Returns the company-configured fieldset for every employee in the published directory; filter client-side, or usefieldsto keep the response small. The directory may omit inactive/former employees and anyone the company excludes from sharing, so it is not an authoritative employee roster. Use this to discover employee IDs before calling Get Employee, Update Employee, or time-tracking actions. See the documentationRead-onlyv0.0.1 -
Get Time Off Balance
actionGet time off balances for an employee as of a date. Returns one entry per assigned policy. Run Get Employees Directory to find the employee ID. See the documentationRead-onlyv0.0.1 -
Get Time Tracking Record
actionGet a legacy Hours API time-tracking record by ID. Returns hours, date, employee, project, task, and shift differential. Note: missing records may return an empty/null payload rather than 404. See the documentationRead-onlyv0.0.1 -
Get Timesheet
actionGet a single timesheet by ID. Returns derived status (OPEN, PENDING_APPROVAL, APPROVED) and type. Use List Timesheets to find IDs. See the documentationRead-onlyv0.0.1 -
List Application ID Options
actionRetrieves available application IDs for use with applicant-tracking actions. See the documentationRead-onlyv0.0.2 -
List Applications
actionList all applications. See the documentationRead-onlyv0.0.3 -
List Changed Employees
actionList employee IDs that changed since a given time. Returns employeeId, change type, and last-changed timestamp per entry. See the documentationRead-onlyv0.0.1 -
List Clock Entries
actionList time-tracking clock entries with optional OData filtering. An entry with a nullendis still open, so this action also serves to check clocked-in status (filter by employeeId and inspectend). Use returned IDs with Get Clock Entry and Delete Clock Entry. See the documentationRead-onlyv0.0.1 -
List Company Holidays
actionList company holidays with optional OData filtering, sorting, and pagination. See the documentationRead-onlyv0.0.1 -
List Employee Files
actionList file metadata (grouped by category) for an employee. Use the returned file IDs with Get Employee File. Run Get Employees Directory to find the employee ID. See the documentationRead-onlyv0.0.1 -
List Employees
actionList employees with optional filtering, sorting, and cursor-based pagination. Every record includesemployeeId,firstName,lastName,preferredName,photoUrl,jobTitleName,status, and_restrictedFieldsby default; usefieldsfor more. Restricted fields you can't read returnnulland are listed in_restrictedFields. See the documentationRead-onlyv0.0.1 -
List Hour Entries
actionList time-tracking hour entries with optional OData filtering. Use returned IDs with Delete Hour Entry. See the documentationRead-onlyv0.0.1 -
List Job ID Options
actionRetrieves available job IDs for use with applicant-tracking actions. See the documentationRead-onlyv0.0.2 -
List Status ID Options
actionRetrieves available application status IDs for use with applicant-tracking actions. See the documentationRead-onlyv0.0.2 -
List Time Off Policies
actionList all non-deleted company time off policies, sorted alphabetically by name. Each policy isaccruing,discretionary, ormanualand links to a time off type. Use List Time Off Types for the type-level metadata; use Adjust Time Off Balance to modify balances for the type a policy is tied to. See the documentationRead-onlyv0.0.1 -
List Time Off Request Comments
actionList the comments on a time off request, oldest first. An empty thread returns an empty array. Use List Time Off Requests to find the request ID; use Create Time Off Request Comment to add one. See the documentationRead-onlyv0.0.1 -
List Time Off Requests
actionList time off requests within a date range. To fetch your own requests, set the Action parameter tomyRequests(passing employeeId=0 returns an empty array). Use List Time Off Types to find type IDs. See the documentationRead-onlyv0.0.1 -
List Time Off Types
actionList active company time off types plus the default hours-per-day. Use the returned type IDs with Create Time Off Request and List Time Off Requests. See the documentationRead-onlyv0.0.1 -
List Timesheet Entries
actionList legacy timesheet entries grouped by employee within a date range. Dates must be within the last 365 days. See the documentationRead-onlyv0.0.1 -
List Timesheets
actionList timesheets with optional OData filtering and sorting. Status values are OPEN, PENDING_APPROVAL, APPROVED. Use returned IDs with Get Timesheet and Approve Timesheet. See the documentationRead-onlyv0.0.1 -
List Who's Out
actionList a date-sorted feed of employees who are out and company holidays for a period. Returns 403 if the Who's Out feature is disabled for the account. See the documentationRead-onlyv0.0.1 -
Update Application Status
actionUpdate the status of an application. Not every status returned by List Status ID Options is a valid transition from the application's current status — an "Invalid status" error means the target stage isn't reachable from here; check the application's current status and try an adjacent stage. See the documentationWritev0.0.4 -
Update Employee
actionUpdate fields on an existing employee. Only supplied fields are changed; unknown field names are silently ignored. Use Get Employees Directory to find the employee ID. See the documentationWritev0.0.1 -
Update Hour Record
actionEdit an existing legacy Hours API record's hours worked and links. Send the corrected total hours worked, not a delta. Use Get Time Tracking Record to check current values first. See the documentationWritev0.0.1 -
Update Time Off Request
actionUpdate an existing time off request using merge-patch semantics — only the fields you set are changed. Fails with 409 if the request is denied, canceled, or already-started/approved. Editing a request while it's stillREQUESTEDreplaces it with a new request, restarting its approval workflow; the returnedidmay differ from the one in the path, and the original id then returns 410 on subsequent calls. Use theidfrom this action's response for later steps. Use List Time Off Requests to find the request ID; use Approve Time Off Request / Deny Time Off Request / Cancel Time Off Request for status changes instead. See the documentationWritev0.0.1
EVENTS
BambooHR triggers
Event sources your backend can deploy for users and receive through a webhook.
No BambooHR triggers are available yet.
- App slug
- bamboohr
- Authentication
- API key
- Categories
- Human Resources
- Actions
- 51
- Triggers
- 0
- API proxy
- Available