<!-- BusyBot node reference — https://busybot.net/tools/bamboo-hr/ -->

> Node: BambooHR (`bamboo_hr`) · Action (binary) · v1
> Category: Productivity · Credentials: BambooHR API (`bambooHrApi`)
> Updated: 2026-08-16

# BambooHR

> Manage employees, documents, files, and reports in BambooHR

## Overview

The BambooHR tool interacts with the BambooHR HR platform API. It supports four resources: Employee (create, get, getAll, update), Employee Document (delete, download, getAll, update, upload), Company File (delete, download, getAll, update, upload), and Company Report (get in JSON/CSV/PDF/XLS/XML formats). Binary operations include downloading employee documents and company files, uploading documents/files via multipart form data, and exporting company reports as binary files. Authentication uses Basic Auth with an API key.

**Category:** Productivity  
**Tool Name:** `bamboo_hr`  
**Version:** 1

**Appearance:** Icon: `lucide-Users` | Color: `#73C41D`

## Node Type

**Action (Binary)** — handles file/binary data operations

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **BambooHR API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/bamboo-hr-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Company Report | `companyReport` |
| Employee | `employee` |
| Employee Document | `employeeDocument` |
| File | `file` |

### Operations

Each resource has its own Operation list. Pick the resource first, then the operation.

| Resource | Operation | Value | Description |
|----------|-----------|-------|-------------|
| Employee | Create | `create` | Create an employee |
| Employee | Get | `get` | Get an employee |
| Employee | Get Many | `getAll` | Get many employees |
| Employee | Update | `update` | Update an employee |
| Employee Document | Delete | `delete` | Delete an employee document |
| Employee Document | Download | `download` | Download an employee document |
| Employee Document | Get Many | `getAll` | Get many employee documents |
| Employee Document | Update | `update` | Update an employee document |
| Employee Document | Upload | `upload` | Upload an employee document |
| File | Delete | `delete` | Delete a company file |
| File | Download | `download` | Download a company file |
| File | Get Many | `getAll` | Get many company files |
| File | Update | `update` | Update a company file |
| File | Upload | `upload` | Upload a company file |
| Company Report | Get | `get` | Get a company report |

### Parameters

#### Employee: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| First Name | `string` | Yes | — | The employee's first name. |
| Last Name | `string` | Yes | — | The employee's last name. |
| Synced with Trax Payroll | `boolean` | Yes | `false` | Whether the employee was added to a pay schedule synced with Trax Payroll. |
| Department | `string` | Yes | — | Department name or ID. Use GET /meta/lists (fieldId=4) to find valid options. _(shown when Synced with Trax Payroll is `true`)_ |
| Division | `string` | Yes | — | Division name or ID. Use GET /meta/lists (fieldId=1355) to find valid options. _(shown when Synced with Trax Payroll is `true`)_ |
| Date of Birth | `string` | Yes | — | Employee date of birth (YYYY-MM-DD). _(shown when Synced with Trax Payroll is `true`)_ |
| Employee Number | `string` | Yes | — | The employee number to record. _(shown when Synced with Trax Payroll is `true`)_ |
| FLSA Overtime Status | `options` | Yes | — | The employee's FLSA overtime status. _(shown when Synced with Trax Payroll is `true`)_ |
| | | | | Options: `exempt`, `non-exempt` |
| Gender | `options` | Yes | — | The employee's gender. _(shown when Synced with Trax Payroll is `true`)_ |
| | | | | Options: `female`, `male` |
| Hire Date | `string` | Yes | — | Hire date (YYYY-MM-DD). _(shown when Synced with Trax Payroll is `true`)_ |
| Location | `string` | Yes | — | Location name or ID. Use GET /meta/lists (fieldId=18) to find valid options. _(shown when Synced with Trax Payroll is `true`)_ |
| Marital Status | `options` | Yes | — | The employee's marital status. _(shown when Synced with Trax Payroll is `true`)_ |
| | | | | Options: `single`, `married`, `domesticPartnership` |
| Mobile Phone | `string` | Yes | — | The employee's mobile phone number. _(shown when Synced with Trax Payroll is `true`)_ |
| Pay Per | `options` | Yes | — | The period the pay rate applies to. _(shown when Synced with Trax Payroll is `true`)_ |
| | | | | Options: `hour`, `day`, `week`, `month`, `quater` (the Quarter option — send the value exactly as spelled), `year` |
| Pay Rate | `json` | No | `{}` | Pay rate as JSON object, e.g. { "value": "20.00", "currency": "USD" }. _(shown when Synced with Trax Payroll is `true`)_ |
| Pay Type | `options` | Yes | — | How the employee is paid. _(shown when Synced with Trax Payroll is `true`)_ |
| | | | | Options: `commission`, `contract`, `daily`, `exceptionHourly`, `hourly`, `monthly`, `pieceRate`, `proRata`, `salary`, `weekly` |
| Preferred Name | `string` | Yes | — | The employee's preferred name. _(shown when Synced with Trax Payroll is `true`)_ |
| SSN | `string` | Yes | — | Social Security Number (e.g. 123-45-6789). _(shown when Synced with Trax Payroll is `true`)_ |
| Address | `json` | No | `{}` | Address as JSON: { "address1": "", "address2": "", "city": "", "state": "", "country": "" }. _(shown when Synced with Trax Payroll is `true`)_ |
| Additional Fields | `json` | No | `{}` | Additional employee fields as JSON. Supports: department, division, dateOfBirth, employeeNumber, exempt, gender, hireDate, location, maritalStatus, mobilePhone, paidPer, payRate, payType, preferredName, ssn, address, workEmail, workPhone. _(shown when Synced with Trax Payroll is `false`)_ |

#### Employee: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Employee ID | `string` | Yes | — | ID of the employee to retrieve. |
| Fields | `string` | No | `all` | Comma-separated list of field IDs to retrieve, or "all" to get all fields. Use GET /employees/directory to find available fields. |

#### Employee: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Employee: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Employee ID | `string` | Yes | — | ID of the employee to update. |
| Synced with Trax Payroll | `boolean` | Yes | `false` | Whether the employee was added to a pay schedule synced with Trax Payroll. |
| Update Fields | `json` | No | `{}` | Fields to update as JSON. Supports: firstName, lastName, department, division, dateOfBirth, employeeNumber, exempt, gender, hireDate, location, maritalStatus, mobilePhone, paidPer, payRate, payType, preferredName, ssn, address, workEmail, workPhone. |

#### Employee Document: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Employee ID | `string` | Yes | — | ID of the employee the document belongs to. |
| File ID | `string` | Yes | — | ID of the document to delete. |

#### Employee Document: Download

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Employee ID | `string` | Yes | — | ID of the employee the document belongs to. |
| File ID | `string` | Yes | — | ID of the document to download. |
| Binary Property | `string` | No | `data` | Name of the binary property to write the downloaded file to. Names are case-sensitive — see the upstream node's Binary Data panel for the exact names to use. |

#### Employee Document: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Employee ID | `string` | Yes | — | ID of the employee whose documents you want to list. |
| Simplify Output | `boolean` | No | `false` | Whether to return a flat file list instead of categorized results. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Employee Document: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Employee ID | `string` | Yes | — | ID of the employee the document belongs to. |
| File ID | `string` | Yes | — | ID of the document to update. |
| Share with Employee (`shareWithEmployee`) | `boolean` | No | `true` | Whether to share this document with the employee. |

#### Employee Document: Upload

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Employee ID | `string` | Yes | — | ID of the employee to attach the document to. |
| Category ID | `string` | Yes | — | Employee document category ID. Use GET /employees/{id}/files/view/ to find categories. |
| Binary Property | `string` | Yes | `data` | Name of the binary property containing the file to upload. Names are case-sensitive — see the upstream node's Binary Data panel for the exact names to use. |
| Share with Employee (`share`) | `boolean` | No | `true` | Whether to share this file with the employee. |

#### File: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| File ID | `string` | Yes | — | ID of the company file to delete. |

#### File: Download

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| File ID | `string` | Yes | — | ID of the company file to download. |
| Binary Property | `string` | No | `data` | Name of the binary property to write the downloaded file to. Names are case-sensitive — see the upstream node's Binary Data panel for the exact names to use. |

#### File: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Simplify Output | `boolean` | No | `false` | Whether to return a flat file list instead of categorized results. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |

#### File: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| File ID | `string` | Yes | — | ID of the company file to update. |
| Share with Employee (`shareWithEmployee`) | `boolean` | No | `true` | Whether to share this file with employees. |

#### File: Upload

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Binary Property | `string` | Yes | `data` | Name of the binary property containing the file to upload. Names are case-sensitive — see the upstream node's Binary Data panel for the exact names to use. |
| Category ID | `string` | Yes | — | Company file category ID. Use GET /files/view/ to find categories. |
| Share with Employee (`share`) | `boolean` | No | `true` | Whether to share this file with employees. |

#### Company Report: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Report ID | `string` | Yes | — | ID of the report. Hover over the report name on the Reports page to find the ID. |
| Format | `options` | Yes | `JSON` | The output format for the report. |
| | | | | Options: `CSV`, `JSON`, `PDF`, `XLS`, `XML` |
| Binary Property | `string` | No | `data` | Name of the binary property to write the report file to (used when format is not JSON). Names are case-sensitive — see the upstream node's Binary Data panel for the exact names to use. _(hidden when Format is `JSON`)_ |
| Duplicate Field Filtering | `boolean` | No | `true` | Whether to apply standard duplicate field filtering. |
| Only Current | `boolean` | No | `true` | Whether to hide future-dated values from history table fields. |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently. |

## Output Data

Results are merged onto the item JSON at the top level — there is no wrapper property. The rest of the incoming item JSON passes through, and binary data from upstream is forwarded.

Most operations produce one output item per input item. The three Get Many operations fan out instead, emitting one output item per result:

| Operation | Output items |
|-----------|--------------|
| Employee: Get Many | One item per employee in the directory |
| Employee Document: Get Many | One item per category, or one item per file when Simplify Output is on |
| File: Get Many | One item per category, or one item per file when Simplify Output is on |

Three operations write a file onto the output item's binary data, under the name you set in **Binary Property** (default `data`). The item JSON is unchanged for these, and any incoming binary properties are kept alongside the new one:

- **Employee Document: Download** — the downloaded document.
- **File: Download** — the downloaded company file.
- **Company Report: Get** — only when Format is `CSV`, `PDF`, `XLS` or `XML`. With Format `JSON` nothing binary is written.

Fields added to the item JSON, per operation:

| Operation | Fields |
|-----------|--------|
| Employee: Create | `id` — the ID of the new employee |
| Employee: Get | The requested employee fields, merged onto the item |
| Employee: Get Many | Each employee's directory fields, merged onto its own item |
| Employee: Update | `success: true` |
| Employee Document: Delete | `success: true` |
| Employee Document: Download | None — the file is written to the binary property |
| Employee Document: Get Many | Each category (or file) object, merged onto its own item |
| Employee Document: Update | `success: true` |
| Employee Document: Upload | `fileId` — the ID of the uploaded document |
| File: Delete | `success: true` |
| File: Download | None — the file is written to the binary property |
| File: Get Many | Each category (or file) object, merged onto its own item |
| File: Update | `success: true` |
| File: Upload | `fileId` — the ID of the uploaded file |
| Company Report: Get (Format `JSON`) | The report object, merged onto the item — or `report` holding the raw body when the response is not an object |
| Company Report: Get (other formats) | None — the report file is written to the binary property |

Reference the result downstream by expression, e.g. `{{ $json.id }}` after creating an employee or `{{ $json.fileId }}` after an upload.

## Usage Examples

- Download an employee document from BambooHR
- Upload a PDF to a company file category
- Get all employees from BambooHR directory
- Export a company report as PDF
- Create a new employee in BambooHR

## Example Configuration

Create an employee that is not on a Trax Payroll-synced pay schedule, passing the optional fields as JSON:

```json
{
  "type": "bamboo_hr",
  "parameters": {
    "resource": "employee",
    "operation": "create",
    "firstName": "{{ $json.firstName }}",
    "lastName": "{{ $json.lastName }}",
    "synced": false,
    "additionalFields": {
      "department": "Marketing",
      "hireDate": "{{ $json.startDate }}",
      "workEmail": "{{ $json.email }}",
      "location": "New York Office",
      "payType": "hourly",
      "payRate": { "value": "35.00", "currency": "USD" }
    }
  }
}
```

Read the first 50 employees out of the directory, one item each:

```json
{
  "type": "bamboo_hr",
  "parameters": {
    "resource": "employee",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50
  }
}
```

Download an employee document into a named binary property:

```json
{
  "type": "bamboo_hr",
  "parameters": {
    "resource": "employeeDocument",
    "operation": "download",
    "employeeId": "{{ $json.employeeId }}",
    "fileId": "{{ $json.fileId }}",
    "binaryPropertyName": "document"
  }
}
```

Upload a file coming from an upstream node into a company file category, without sharing it:

```json
{
  "type": "bamboo_hr",
  "parameters": {
    "resource": "file",
    "operation": "upload",
    "categoryId": "2",
    "binaryPropertyName": "data",
    "share": false
  }
}
```

Export a company report as a PDF file:

```json
{
  "type": "bamboo_hr",
  "parameters": {
    "resource": "companyReport",
    "operation": "get",
    "reportId": "{{ $json.reportId }}",
    "format": "PDF",
    "binaryPropertyName": "reportFile",
    "fd": true,
    "onlyCurrent": true
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Manage BambooHR employees, documents, company files, and reports with binary download/upload support.

### Key Notes

1. **Resource-Operation Dependencies**: The `operation` parameter options change completely based on the selected `resource`.

2. **Synced Employee Logic**: When creating employees, the `synced` parameter determines whether individual field parameters or the `additionalFields` JSON object is used.

3. **Binary Property Handling**: File operations require careful handling of `binaryPropertyName` parameters for uploads and downloads.

4. **Report Format Dependencies**: The `binaryPropertyName` parameter is hidden when `format` is "JSON" for company reports.

5. **Field IDs vs Names**: Many parameters accept either field names or IDs - consult the BambooHR API documentation for available options.