The APS Developer API gives your systems authenticated, on-demand access to your live payroll and HR data in APS OnLine. This guide covers every module in API version 1.1, the inputs each one needs, and what you can build with it. The full interactive reference is published on the API Reference page.
Baseline
| Specification | OpenAPI 3.0.4, API version 1.1 |
| Base URL | https://api.apspayrollonline.com |
| Surface | 21 endpoints across 9 modules |
| Read and write | 20 GET operations, 1 POST (employee data upload) |
| Authentication | Bearer or OAuth2 |
| Pagination | Page (default 1), PageSize (default 100, max 1000) |
Authentication and conventions
- All operations are served under /v1.1/. OAuth2 bearer tokens are issued from POST /v2/OAuth/Token.
- The About heartbeat is published without a declared security scheme; send your token with it for consistency.
- Tokens are organization scoped and reach a fixed list of company codes. A single request never spans more than one company.
- Dates should use the ISO-8601 standard formats, monetary values are number/double, and identifiers are int32. Enum casing is exact.
- Response codes are 200, 400, 401, 403, 404, and 502. List endpoints return the PagedList envelope: data, currentPage, nextPage, pageSize, recordCount, and links.
Module map
| Module | Endpoints | Required inputs | Returns and typical use |
| About | GET /About | None | Service heartbeat. Wire into your integration health check. |
| Company | GET /Company GET /Company/{companyCode} + /batches, /customFields, /departments, /employees, /payGroups, /payGroups/{payGroupId} | companyCode. Optional: sort (Asc, Desc) on batches, historicalPeriods and futurePeriods on payGroups (default 2, max 52) | Company profile, departments, custom fields, payroll batch history, paged employee roster, and pay group schedules covering completed and projected periods. The entry point for any sync: discover companies, then walk employees and departments. |
| Department | GET /Department/{departmentId} | departmentId | Single department record. Resolves the department IDs returned on employee, shift, and general ledger payloads. |
| Employee | GET /Employee/{employeeId} + /PayRates, /ScheduledEarnings | employeeId | Full profile: identity, employment status, hire, rehire and termination dates, title, base department and location, wage type, salary, address, pay group, custom fields, department rates, scheduled earnings, bank account records, current gross earnings, and pay history links. Drives HRIS sync, provisioning, and headcount reporting. |
| Attendance | GET /Attendance/{companyCode} + /Shifts + /Shifts/{shiftId}/Breaks + /AdditionalEarnings | companyCode, plus start and end dates on Shifts and AdditionalEarnings | Shifts with regular, overtime, and doubletime hours, break detail, and additional earnings across a date range. Feeds labor cost analysis, scheduling tools, and overtime monitoring. |
| Pay | GET /Pay/company/{companyCode} GET /Pay/employee/{employeeId} | companyCode or employeeId, plus date | Paystub data: incomes, deductions, taxes, accruals, direct deposits, net pay, and year-to-date net pay. Powers pay statement mirroring and compensation reporting. |
| General Ledger | GET /GeneralLedger/company/{companyCode} | companyCode. Optional: batchId or checkDate, combineBy (None, Department, Memo), postDateOption (CheckDate, PayPeriodEnd), five boolean flags | A payroll journal entry shaped for your accounting system, grouped and posted the way your finance team wants it. The strongest single automation case in the API. Bearer only. |
| Time Off Requests | GET /TimeOffRequests/{companyCode} | companyCode, Start, End. Optional: employeeId | Paged time off requests by date range and status. Supports absence dashboards and coverage planning. |
| EIP | POST /Eip/{companyCode}/Upload | companyCode. Optional: fileFormat (DailyPay) | The one write path in the API. Accepts employee demographic import files. Distinct from the separate APS Enterprise Integration Platform offering, which transmits XML files over SFTP with its own security token — see Enterprise Integration Platform. |
What to design around
Access is all-or-nothing. A provisioned token exposes every data element the API supports, for every company code on that token’s instance. There is no per-endpoint or per-field gating. Employee records include bankAccounts with accountNumber and routingNumber, and paystubs include direct deposit detail, so build your own handling and storage controls with that in mind.
- Read only in practice. Every operation is a GET except the employee data upload. Create and update operations across employee, department, company, and time off are on the roadmap and are not available today.
- One company per request. Multi-company organizations iterate company by company, and large rosters require paging.
- Plan your volume. Validate high-frequency or bulk pulling during your proof of concept against the demo company before you move to production.
- Build against the API Reference. The interactive reference on the API Reference page is the authoritative source for paths, parameters, and schemas.