Skip to content

Paylocity technical integration

Integration options

Paylocity offers REST APIs through their developer program. Pick the approach that fits your partnership status and technical needs.

REST API integration

Use Paylocity’s REST API to trigger Tallyfy processes when employee events happen:

const handlePaylocityEvent = async (event) => {
if (event.eventType === 'employee.created') {
const employee = await paylocityAPI.get(
`/v2/companies/${companyId}/employees/${event.employeeId}`
);
// Launch a Tallyfy process (called a "run") from a template
const run = await fetch(
`https://go.tallyfy.com/api/organizations/${orgId}/runs`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${tallyfyToken}`,
'X-Tallyfy-Client': 'APIClient',
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
checklist_id: 'TEMPLATE_ID_HERE',
name: `Onboarding - ${employee.firstName} ${employee.lastName}`,
prerun: {
employee_id: employee.employeeId,
full_name: `${employee.firstName} ${employee.lastName}`,
email: employee.workEmail,
department: employee.departmentCode,
location: employee.workLocation,
job_title: employee.jobTitle,
manager: `${employee.supervisorFirstName} ${employee.supervisorLastName}`,
start_date: employee.hireDate
}
})
}
);
return run.json();
}
};

Webhook integration

Register webhooks to get real-time notifications from Paylocity:

const express = require('express');
const crypto = require('crypto');
const app = express();
app.post('/paylocity-webhook', express.json(), async (req, res) => {
// Verify webhook signature
const signature = req.headers['x-paylocity-signature'];
const payload = JSON.stringify(req.body);
const expected = crypto
.createHmac('sha256', process.env.PAYLOCITY_WEBHOOK_SECRET)
.update(payload)
.digest('hex');
if (signature !== expected) {
return res.status(401).send('Invalid signature');
}
const { eventType, data } = req.body;
switch (eventType) {
case 'employee.hired':
await launchOnboardingWorkflow(data);
break;
case 'employee.terminated':
await launchOffboardingWorkflow(data);
break;
case 'payroll.completed':
await launchPayrollReviewWorkflow(data);
break;
}
res.status(200).send('OK');
});

Data mapping

Here’s how common Paylocity fields map to Tallyfy kick-off form variables:

Paylocity fieldTallyfy variableDescription
employeeIdemployee_idUnique employee identifier
firstName + lastNamefull_nameEmployee full name
workEmailemailWork email address
departmentCodedepartmentDepartment code
costCentercost_centerCost center assignment
workLocationlocationWork location code
jobTitlejob_titleJob title
supervisorFirstNamemanagerDirect supervisor
employeeTypeemployee_typeFull-time, part-time, or contractor
hireDatestart_dateEmployee start date

Authentication

Paylocity uses OAuth 2.01 with the client credentials flow. Store credentials securely - don’t expose them in client-side code.

const getPaylocityToken = async () => {
const response = await fetch(
'https://api.paylocity.com/IdentityServer/connect/token',
{
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
grant_type: 'client_credentials',
client_id: process.env.PAYLOCITY_CLIENT_ID,
client_secret: process.env.PAYLOCITY_CLIENT_SECRET,
scope: 'WebLinkAPI'
})
}
);
return response.json();
};

iPaaS alternatives

If direct API work isn’t an option, consider these platforms:

  • Merge API - unified HRIS API with Paylocity support
  • Finch - employment system API with a Paylocity connector
  • Flexspring - HR integration platform
  • Workato - enterprise automation recipes

Vendors > Paylocity

Tallyfy picks up where Paylocity stops by coordinating the cross-department workflows that…

Footnotes

  1. Industry-standard protocol for secure third-party authorization without sharing passwords