Time and Attendance
Send shifts, breaks, and classified hours for hourly employees, and correct them after payroll has run.
This guide covers the day-to-day work of an integration that records hourly employees' time: which of the two ways to send hours fits your data, what each request needs, how Everee turns hours into wages, and what to do when hours are wrong. It's a companion to the Guide to the Timesheets API, which documents every field and error code.
Hours are for hourly W-2 employees. Contractors and flat amounts go through payable items.
Shifts or classified hours?
Send hours one of two ways.
| Shifts | Classified hours | |
|---|---|---|
| You send | Each shift's start and end time, with breaks | Totals for a pay period, already split into regular, overtime, and double time |
| Everee classifies overtime | Yes, by federal and state rules | No. You classify before sending |
| Breaks | Yes | No |
| Shift detail on the pay stub | Yes | No |
| When to send | As each shift completes | Once per pay period, for the whole period |
| Endpoint | Create a shift | Update classified hours (bulk) |
Prefer shifts when you can. Everee shows shift details on workers' pay stubs, which labor law requires in some places, such as California. Real break times also make a better audit trail. Use classified hours only if all you have are pre-classified totals, for example because another system calculates overtime.
Everything else in this guide applies to both.
What every hour needs
Each request carries the data Everee needs to calculate wages and taxes correctly. For an integration that serves staffing or multi-site employers, the first three aren't optional.
| Data | Field | Why |
|---|---|---|
| Where it was worked | workLocationId | Sets the tax jurisdiction for the wages. If you leave it out, the worker's default work location is used, which may be wrong |
| Pay rate | effectiveHourlyPayRate | The regular rate to calculate wages from. If you leave it out, the rate on the worker's profile is used |
| Workers' Comp class | workersCompClassCode | The class code, not its name. It's matched in the state the shift was worked, and rejected if no such class exists there |
| Cost allocation | costCenters | Up to three tags, like client or job, that follow the wages into reports and journals |
| Display pay rate | displayHourlyPayRate | A rate to show on the pay stub when it differs from the rate used to calculate wages |
Both requests accept all of these. Work locations and cost center types must exist before you refer to them. See Setting up your organization.
Sending shifts
POST https://api.everee.com/integration/v1/labor/timesheet/worked-shifts
{
"externalWorkerId": "emp-1042",
"shiftStartEpochSeconds": 1792051200,
"shiftEndEpochSeconds": 1792080000,
"createBreaks": [
{ "segmentConfigCode": "DEFAULT_UNPAID", "breakDuration": "PT30M" }
],
"effectiveHourlyPayRate": { "amount": "22.50", "currency": "USD" },
"workLocationId": 1234,
"workersCompClassCode": "8810",
"costCenters": [{ "type": "clientId", "value": "290" }]
}- Identify the worker with
externalWorkerIdor Everee'sworkerId. - Times are Unix epoch seconds. A shift can't be in the future, can't end before it starts, and must be at least one minute long.
- Record a lunch as a break inside one shift, not as two shifts. Breaks must fall within the shift and can't overlap each other.
DEFAULT_UNPAIDis built in. Everee can set up other paid or unpaid break types on request. - Send each shift as soon as it's complete, so your customer's admins can review and edit it before payroll.
- To change or remove a shift, update it or delete it, using the shift ID from the create response. List shifts or retrieve one to check what Everee holds.
How overtime works
By default, Everee classifies every shift for overtime and double time under the FLSA and each state's rules, based on the worker's legal work location. You send raw punch times and Everee does the rest. For custom overtime rules, contact [email protected].
If another system classifies your hours, Everee can be set up to accept fully-classified shifts. You then send fullyClassifiedHours on each shift, and Everee uses them as they are. Contact support to enable it.
Sending classified hours
POST https://api.everee.com/integration/v1/labor/classified-hours/bulk
{
"earningDate": "2026-10-07",
"classifiedHoursPerWorker": [
{
"externalWorkerId": "emp-1042",
"classifiedHours": [
{
"payRate": { "amount": "22.50", "currency": "USD" },
"workLocationId": "1234",
"regularHoursWorked": "40.00",
"flsaQualifiedOvertimeHoursWorked": "6.50"
}
]
}
]
}earningDateis any date within the pay period.- Overtime is sent in two fields,
flsaQualifiedOvertimeHoursWorkedfor weekly overtime over 40 hours andnonFlsaQualifiedOvertimeHoursWorkedfor everything else. The older single overtime field was retired in April 2026. See Complying with the OBBBA overtime rule.
Each call replaces hours. It never adds to themA call replaces everything Everee holds for that worker, pay period, and work location. If you send a worker's Monday hours in one call and Tuesday's in another, only Tuesday's survive, and nothing warns you. Always send a worker's complete hours for a location in a single call. Hours at other locations are left alone.
What happens next
Hours stay editable until their pay period is paid.
sent ──► editable ──► payroll approved and paid ──► locked
(add, edit, delete freely) (changes need a correction)Hours become part of the worker's payroll payment on their regular cycle, and a payroll admin approves the payment. Follow it with the payment.paid webhook. See Sending pay to Everee.
Correcting hours after payroll
Once a pay period is paid, its hours are locked, because they were used to move money. When hours were missed or wrong, you send a timesheet correction.
Corrections use the same endpoints, plus correction-authorized=true:
POST https://api.everee.com/integration/v1/labor/timesheet/worked-shifts?correction-authorized=trueWithout the parameter, a change to paid hours is rejected with Already Finalized Payments. This is deliberate. You can run a day-to-day integration that never creates corrections, and handle the rare ones by hand in the Everee admin portal.
Everee works out the difference between what was paid and what should have been paid:
| Outcome | What happens |
|---|---|
| Overpayment | Everee records a deduction on the worker's profile that withholds the overpaid amount from their next payment |
| Underpayment | The worker is paid the difference. correctionPaymentTimeframe decides when |
correctionPaymentTimeframe accepts:
| Value | Meaning |
|---|---|
NEXT_PAYROLL_PAYMENT | Add it to the worker's next regular payment. The default |
IMMEDIATELY | Pay it right away, off-cycle |
EXTERNALLY_PAID | You've already paid it outside Everee |
Pick one policy and use it every time, so workers know what to expect. The corrected hours appear on the pay stub as a Prior Period Correction.
Two limits to know about:
- A shift's start or end time can't move by more than 48 hours in one update. To move it further, delete the shift and create a new one.
- The
taxCalculationConfigCodeof paid hours can't change.
Errors you'll meet
| Error | What to do |
|---|---|
Resource Not Found (404) | A worker, work location, Workers' Comp class, or break code doesn't exist. The message says which |
Employee Is Not Hourly (400) | The worker is salaried. Don't send hours for them |
Employee Not Active (400) | The shift is dated after the worker's recorded separation date |
Already Finalized Payments (400) | The period is paid. Send a correction if it's intended |
Shift Exists In The Future (400) | Send hours after they're worked |
Overlapping Break Segments or Break Segments Are Escaping (400) | Fix the breaks so they sit inside the shift and don't overlap |
The Timesheets guide lists them all.
Checklist
- Create work locations, and give every worker a default one.
- Send
workLocationId,effectiveHourlyPayRate, andworkersCompClassCodewith every shift, or every block of classified hours. - Send shifts with breaks when you can.
- Send a worker's classified hours for a location in one call.
- Choose a
correctionPaymentTimeframepolicy. - Send FLSA and non-FLSA overtime separately if you classify hours yourself.
Next steps
Updated about 3 hours ago