The Reports API generates Everee reports on demand and gives you a link to download each one as a file. Reports can take a while to build, so the API works asynchronously: you ask for a report, Everee builds it, and you're notified when it's ready.
How it works
- Request a report. Make a
POSTto/integration/v1/reports/{report-type}with the report's criteria in the request body. Each report has its own endpoint, listed below. The response is a report run, with anidand astatusofSUBMITTED. - Wait for the webhook. When the report is finished, Everee sends a
report.completedwebhook event. If it fails, you receivereport.errored. See Report events below. - Retrieve the report run. Call Retrieve a report run with the
id. WhenstatusisCOMPLETED, the response includes adownloadUrlfor the report file. - Download the file. Reports are Microsoft Excel (
.xlsx) files. ThedownloadUrlis an expiring signed link and needs no further authentication. It stops working atdownloadUrlExpiresAt, so download promptly. If it expires, retrieve the report run again to get a new link.
You can also poll Retrieve a report run instead of using webhooks, but webhooks are recommended.
Report run status
status | Meaning |
|---|---|
SUBMITTED | Accepted and waiting to start |
GENERATING | Being built now |
COMPLETED | Ready. The downloadUrl is available when you retrieve the report run |
ERRORED | Could not be generated. errorMessage says why |
Reports and scopes
Each report is gated by its own scope, so you only need (and can only be granted) access to the reports you use. Retrieving a report run needs the scope of that run's report type.
| Report | reportType | Scope |
|---|---|---|
| Payroll Review | PAYROLL_REVIEW | integration_reports-payroll-review:read |
| Payments by Pay Period | PAYMENTS_BY_PAY_PERIOD | integration_reports-payments-by-pay-period:read |
| Payments by Pay Date | PAYMENTS_BY_PAY_DATE | integration_reports-payments-by-pay-date:read |
| Funding | FUNDING | integration_reports-funding:read |
| Pay Correction Outstanding Repayment | PAY_CORRECTION_OUTSTANDING_REPAYMENT | integration_reports-pay-correction-outstanding-repayment:read |
| Pay Correction by Earning Period | PAY_CORRECTION_BY_EARNING_PERIOD | integration_reports-pay-correction-by-earning-period:read |
| Pay Correction by Corrected Period | PAY_CORRECTION_BY_CORRECTED_PERIOD | integration_reports-pay-correction-by-corrected-period:read |
| Benefits and Deductions | BENEFITS_AND_DEDUCTIONS | integration_reports-benefits-and-deductions:read |
| Garnishment Withholding | GARNISHMENT_WITHHOLDING | integration_reports-garnishment-withholding:read |
| Negative Balances | NEGATIVE_BALANCES | integration_reports-negative-balances:read |
| Workers' Comp | WORKERS_COMP | integration_reports-workers-comp:read |
| Outstanding Paid Leave Liability | OUTSTANDING_PAID_LEAVE_LIABILITY | integration_reports-outstanding-paid-leave-liability:read |
| W-2 Details | FORM_W2_DETAILS | integration_reports-w2-details:read |
| 1099 Details | FORM_1099_DETAILS | integration_reports-1099-details:read |
| 940 Details | FORM_940_DETAILS | integration_reports-940-details:read |
| 941 Details | FORM_941_DETAILS | integration_reports-941-details:read |
| W-4 Elections | W4_ELECTIONS | integration_reports-w4-elections:read |
| Worker Census | WORKER_CENSUS | integration_reports-worker-census:read |
| Employee Navigator Demographic | EMPLOYEE_NAVIGATOR_DEMOGRAPHIC | integration_reports-employee-navigator-demographic:read |
| Employee Navigator Deduction | EMPLOYEE_NAVIGATOR_DEDUCTION | integration_reports-employee-navigator-deduction:read |
Criteria
Each endpoint documents its own criteria. Most reports take a date range (startDate and endDate, as yyyy-MM-dd), a year, or a year and quarter. Some take none, and report current data; for those, still send an empty JSON object ({}) as the request body.
A request with missing or invalid criteria returns 400, with an errorMessage naming the offending field.
Data safety
Reports are only as reliable as the data behind them. Reports built from finalized payments, such as the Payments by Pay Period report, are stable: payments don't change once finalized.
Payment data that has not been finalized is different. It can change at any moment, especially while payments are being calculated. The Payroll Review report reports on exactly that data, so it will never report on payments that are waiting for calculation or being calculated:
- If such payments exist when you make the request, you get
412and aRetry-Afterheader telling you how many seconds to wait. No report run is created. - If payments start calculating after your request is accepted, the report run ends as
ERRORED.
Either way, wait and request the report again. See the endpoint's page for details.
Report events
When a report run finishes, Everee sends one of these webhook events. Their data.object has this structure:
{
"reportId": "8841",
"reportType": "PAYMENTS_BY_PAY_PERIOD",
"status": "COMPLETED"
}Event type | When | Extra fields |
|---|---|---|
report.completed | The report is ready to retrieve | None |
report.errored | The report couldn't be generated | errorMessage |
If the report couldn't be generated, the event has type report.errored, and data.object includes the reason in errorMessage:
{
"reportId": "8842",
"reportType": "FUNDING",
"status": "ERRORED",
"errorMessage": "No funding transactions found."
}reportId is the report run's id, which you pass to Retrieve a report run.