API Reports

API documentation hub

Generate user, hourly, payroll, project, and expense reports with Public API v1.

On this page

  1. 14. Reports

14. Reports

Many report resources expose GET (query string) and POST (JSON body) with the same filters. Prefer POST when ID lists are large.

User info — GET /report/user/info

curl -s "$API_BASE/report/user/info?UserList=101,102" \
  -H "Authorization: Bearer $TOKEN" \
  -H "apikey: $API_KEY"

Empty UserList is treated as all users (AllUsers=1) inside the handler.

Hourly customizable — processed / unprocessed

Processed (GET/POST /report/hourly/customizable/processed):

Parameter Notes
StartDate, EndDate Range
AllUsers / UserList "1" for all, else csv
AllAccountCodes / AccountCodeList Same pattern
GroupType e.g. User, Job Title, Supervisor, Customer, Account Code, Date, None
IncludeExtendedData, IncludeWorkDescription "0" / "1"
ReportType Summary (default) or Detailed
curl -s "$API_BASE/report/hourly/customizable/processed?StartDate=2026-01-01&EndDate=2026-01-31&AllUsers=1&AllAccountCodes=1&ReportType=Summary" \
  -H "Authorization: Bearer $TOKEN" \
  -H "apikey: $API_KEY"

curl -s -X POST "$API_BASE/report/hourly/customizable/processed" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -H "apikey: $API_KEY" \
  -d '{
    "StartDate": "2026-01-01",
    "EndDate": "2026-01-31",
    "AllUsers": "0",
    "UserList": "101,102",
    "AllAccountCodes": "1",
    "ReportType": "Detailed",
    "IncludeWorkDescription": "1"
  }'

Unprocessed adds filters such as Signed, Approved, TimeClass, RecordStatus, FullTextSearch, IncludeGroupsWithNoRecords.

Hourly helpers

Path Purpose Key params
/report/hourly/filter/items Filter option lists for UI dates, UserList, AccountCodeList, Signed, Approved, TimeClass, RecordStatus
/report/hourly/location Location report StartDate, EndDate, AllUsers, UserList
/report/hourly/record/overlapping Overlapping time same
/report/hourly/record/history Record history report StartDate, EndDate, UserID, IncludeOnlyRecordsWithAlerts

Hourly payroll

# List periods
curl -s "$API_BASE/report/hourly/payroll/periods?StartDate=2026-01-01&EndDate=2026-06-30&MaxRows=20" \
  -H "Authorization: Bearer $TOKEN" -H "apikey: $API_KEY"

# One period
curl -s "$API_BASE/report/hourly/payroll/period/42?UserList=101,102" \
  -H "Authorization: Bearer $TOKEN" -H "apikey: $API_KEY"

# Preview (GET or POST)
curl -s -X POST "$API_BASE/report/hourly/payroll/preview" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -H "apikey: $API_KEY" \
  -d '{
    "PayrollRunType": "NEW",
    "StartDate": "2026-01-01",
    "EndDate": "2026-01-15",
    "UserSelect": "SelectedUsers",
    "UserList": "101,102"
  }'

Project customizable — GET/POST /report/project/customizable

Filters include users, customers, projects, account codes, Signed/Approved/Billable/RecordStatus, rate flags, GroupType, FullTextSearch, ReportType.

curl -s -X POST "$API_BASE/report/project/customizable" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -H "apikey: $API_KEY" \
  -d '{
    "StartDate": "2026-01-01",
    "EndDate": "2026-01-31",
    "AllUsers": "1",
    "AllCustomers": "1",
    "AllProjects": "1",
    "AllAccountCodes": "1",
    "ReportType": "Summary"
  }'

Filter items: GET /report/project/filter/items.

Expense customizable — GET/POST /report/expense/customizable

Adds vendor and event list filters (AllVendors / VendorList, AllEvents / EventList) on top of the usual user/customer/project/account-code dimensions.

curl -s -X POST "$API_BASE/report/expense/customizable" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -H "apikey: $API_KEY" \
  -d '{
    "StartDate": "2026-01-01",
    "EndDate": "2026-01-31",
    "AllUsers": "1",
    "AllVendors": "1",
    "AllEvents": "1",
    "ReportType": "Detailed"
  }'

API documentation hub

Updated on August 20, 2026
Was this article helpful?

Related Articles