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

Tallyfy extends BambooHR beyond basic HR admin by automatically launching structured cross-department workflows for onboarding and offboarding and promotions so that IT and Facilities and Finance teams all get coordinated tasks with deadlines and escalation instead of relying on manual emails and spreadsheets.

Paylocity > Paylocity technical integration

Paylocity can be integrated with Tallyfy through REST APIs or webhooks to automatically launch structured workflow processes like onboarding and offboarding when employee events occur in Paylocity and the integration uses OAuth 2.0 authentication with field mapping between Paylocity employee data and Tallyfy kick-off form variables.

Netsuite > NetSuite technical integration

Tallyfy integrates with NetSuite through REST APIs or native SuiteScript to automatically launch structured workflow processes like employee onboarding when records are created in NetSuite and maps common fields like department and subsidiary into Tallyfy kick-off forms.

Open Api > API integration guide

Tallyfy’s REST API enables you to connect workflow features to external systems using OAuth 2.0 authentication with required Bearer tokens and X-Tallyfy-Client headers while mapping API terminology like Checklists and Runs to their UI equivalents of Templates and Processes and handling token refresh and multi-organization context for reliable integrations.