Guide to the Reports API

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

  1. Request a report. Make a POST to /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 an id and a status of SUBMITTED.
  2. Wait for the webhook. When the report is finished, Everee sends a report.completed webhook event. If it fails, you receive report.errored. See Report events below.
  3. Retrieve the report run. Call Retrieve a report run with the id. When status is COMPLETED, the response includes a downloadUrl for the report file.
  4. Download the file. Reports are Microsoft Excel (.xlsx) files. The downloadUrl is an expiring signed link and needs no further authentication. It stops working at downloadUrlExpiresAt, 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

statusMeaning
SUBMITTEDAccepted and waiting to start
GENERATINGBeing built now
COMPLETEDReady. The downloadUrl is available when you retrieve the report run
ERROREDCould 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.

ReportreportTypeScope
Payroll ReviewPAYROLL_REVIEWintegration_reports-payroll-review:read
Payments by Pay PeriodPAYMENTS_BY_PAY_PERIODintegration_reports-payments-by-pay-period:read
Payments by Pay DatePAYMENTS_BY_PAY_DATEintegration_reports-payments-by-pay-date:read
FundingFUNDINGintegration_reports-funding:read
Pay Correction Outstanding RepaymentPAY_CORRECTION_OUTSTANDING_REPAYMENTintegration_reports-pay-correction-outstanding-repayment:read
Pay Correction by Earning PeriodPAY_CORRECTION_BY_EARNING_PERIODintegration_reports-pay-correction-by-earning-period:read
Pay Correction by Corrected PeriodPAY_CORRECTION_BY_CORRECTED_PERIODintegration_reports-pay-correction-by-corrected-period:read
Benefits and DeductionsBENEFITS_AND_DEDUCTIONSintegration_reports-benefits-and-deductions:read
Garnishment WithholdingGARNISHMENT_WITHHOLDINGintegration_reports-garnishment-withholding:read
Negative BalancesNEGATIVE_BALANCESintegration_reports-negative-balances:read
Workers' CompWORKERS_COMPintegration_reports-workers-comp:read
Outstanding Paid Leave LiabilityOUTSTANDING_PAID_LEAVE_LIABILITYintegration_reports-outstanding-paid-leave-liability:read
W-2 DetailsFORM_W2_DETAILSintegration_reports-w2-details:read
1099 DetailsFORM_1099_DETAILSintegration_reports-1099-details:read
940 DetailsFORM_940_DETAILSintegration_reports-940-details:read
941 DetailsFORM_941_DETAILSintegration_reports-941-details:read
W-4 ElectionsW4_ELECTIONSintegration_reports-w4-elections:read
Worker CensusWORKER_CENSUSintegration_reports-worker-census:read
Employee Navigator DemographicEMPLOYEE_NAVIGATOR_DEMOGRAPHICintegration_reports-employee-navigator-demographic:read
Employee Navigator DeductionEMPLOYEE_NAVIGATOR_DEDUCTIONintegration_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 412 and a Retry-After header 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 typeWhenExtra fields
report.completedThe report is ready to retrieveNone
report.erroredThe report couldn't be generatederrorMessage

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.