Skip to content

BambooHR technical integration

Connecting BambooHR to Tallyfy

BambooHR’s REST API supports API key authentication and SHA-256 HMAC webhook signatures. You can pull employee data from BambooHR and launch Tallyfy processes automatically.

REST API integration

Fetch employee data from BambooHR, then launch a Tallyfy process with that data:

const handleBambooHREmployee = async (employeeId) => {
// Fetch employee from BambooHR
const employee = await fetch(
`https://api.bamboohr.com/api/gateway.php/${subdomain}/v1/employees/${employeeId}`,
{
headers: {
'Authorization': `Basic ${Buffer.from(apiKey + ':x').toString('base64')}`,
'Accept': 'application/json'
}
}
).then(res => res.json());
// Launch a Tallyfy process (run) for this employee
const run = await fetch(
`https://go.tallyfy.com/api/organizations/${orgId}/runs`,
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_TALLYFY_TOKEN',
'X-Tallyfy-Client': 'APIClient',
'Content-Type': 'application/json'
},
body: JSON.stringify({
checklist_id: 'your_onboarding_template_id',
name: `Onboarding - ${employee.firstName} ${employee.lastName}`,
data: {
employee_id: employee.id,
full_name: `${employee.firstName} ${employee.lastName}`,
email: employee.workEmail,
department: employee.department,
location: employee.location,
job_title: employee.jobTitle,
manager: employee.supervisor,
start_date: employee.hireDate
}
})
}
);
return run.json();
};

Webhook integration

BambooHR webhooks use SHA-256 HMAC signatures. Verify every incoming request before processing it:

const express = require('express');
const crypto = require('crypto');
const app = express();
app.post('/bamboohr-webhook', express.raw({ type: '*/*' }), async (req, res) => {
const signature = req.headers['x-bamboohr-signature'];
const expected = crypto
.createHmac('sha256', process.env.BAMBOOHR_WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
if (signature !== expected) {
return res.status(401).send('Invalid signature');
}
const { type, employees } = JSON.parse(req.body);
for (const employeeId of employees) {
switch (type) {
case 'employee':
await launchOnboardingWorkflow(employeeId);
break;
case 'job_information':
await launchRoleChangeWorkflow(employeeId);
break;
case 'employment_status':
await handleStatusChange(employeeId);
break;
}
}
res.status(200).send('OK');
});

Polling for changes

If your system can’t receive webhooks, BambooHR supports change reports you can poll on a schedule:

const pollBambooHRChanges = async () => {
const since = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString();
const changes = await fetch(
`https://api.bamboohr.com/api/gateway.php/${subdomain}/v1/employees/changed?since=${since}`,
{
headers: {
'Authorization': `Basic ${Buffer.from(apiKey + ':x').toString('base64')}`,
'Accept': 'application/json'
}
}
).then(res => res.json());
for (const employee of changes.employees) {
await processEmployeeChange(employee.id, employee.action);
}
};

Data mapping

Common BambooHR fields mapped to Tallyfy form field variables:

BambooHR fieldTallyfy variableNotes
idemployee_idRecord ID
firstName + lastNamefull_nameCombined name
workEmailemailWork email
departmentdepartmentDepartment
divisiondivisionDivision
locationlocationWork location
jobTitlejob_titleTitle
supervisormanagerDirect manager name
supervisorEmailmanager_emailManager’s email
hireDatestart_dateHire date
employmentHistoryStatusstatusEmployment status

Authentication

BambooHR uses HTTP Basic auth - the API key is the username and x is the password:

const getBambooHRHeaders = () => ({
'Authorization': `Basic ${Buffer.from(process.env.BAMBOOHR_API_KEY + ':x').toString('base64')}`,
'Accept': 'application/json'
});

Webhook events

BambooHR webhooks can fire on these field changes:

  • Employee created - new employee added
  • Job information - title, department, or location changed
  • Employment status - active, terminated, or on leave
  • Compensation - salary or pay rate changed
  • Time off - requests or balances changed

iPaaS alternatives

If you’d rather not build a direct API integration:

  • Merge API - unified HRIS API that includes BambooHR
  • Finch - employment system API
  • Zapier - pre-built BambooHR triggers and actions
  • Make - visual workflow builder with a BambooHR connector

Vendors > BambooHR

Connect BambooHR with Tallyfy to coordinate cross-department workflows like onboarding, offboarding, and role changes that BambooHR can’t handle alone - spanning IT, Facilities, and Finance teams.

Netsuite > NetSuite technical integration

This technical documentation outlines methods for integrating NetSuite with Tallyfy including REST API with OAuth 2.0 authentication and native SuiteScript development for triggering workflows on record events along with data field mappings and iPaaS platform alternatives like Celigo and Workato.

Open Api > API integration guide

The Tallyfy REST API enables workflow automation through two authentication methods (user-based tokens obtained from Settings or application-based OAuth credentials) requiring specific headers and proper token management while supporting multi-organization contexts and webhook integrations with standardized date formats.