Export Payroll Data
Pull paychecks, payroll runs, and GL journal entries for a date range.
This guide walks through exporting payroll runs, paychecks, and general ledger journal entries for a date range, a common pattern for pushing data into an accounting or ERP system.
Overview
Three v3 endpoints power the export workflow:
GET /payroll-runs: list payroll runs within a date rangeGET /paychecks: fetch individual paychecksGET /general-ledger-transactions: GL journal entries for one payroll run
Step 1: Query payroll runs
GET https://external-api.netchexonline.net/payroll-runs?company-ids=101&paycheck-date-from=2024-01-01&paycheck-date-to=2024-03-31&api-version=3.0
Authorization: ApiKey YOUR_API_KEYKey parameters:
| Parameter | Type | Description |
|---|---|---|
company-ids | integer[] | Filter to one or more companies |
organization-id | GUID | Filter by organization (mutually exclusive with company-ids) |
paycheck-date-from | date | Start of paycheck date range |
paycheck-date-to | date | End of paycheck date range |
page-number / page-size | integer | 1-based pagination |
{
"pageNumber": 1,
"pageSize": 100,
"totalItemsCount": 3,
"items": [
{
"payrollNumber": 550,
"companyId": 101,
"paycheckDate": "2024-01-19"
}
]
}This is intentionally a small record. There's no id, status, or pay period range here, only payrollNumber, companyId, and paycheckDate. Use payrollNumber as the identifier to fetch GL transactions in Step 3.
Step 2: Retrieve paychecks
GET https://external-api.netchexonline.net/paychecks?company-ids=101&paycheck-date-from=2024-01-01&paycheck-date-to=2024-03-31&api-version=3.0
Authorization: ApiKey YOUR_API_KEYKey parameters:
| Parameter | Type | Description |
|---|---|---|
company-ids | integer[] | Filter to one or more companies |
organization-id | GUID | Filter by organization |
paycheck-date-from / paycheck-date-to | date | Date range filter |
employee-ids | integer[] | Filter to specific employees |
payroll-keys | string[] | Filter to specific payroll runs, each key is companyId:payrollNumber (e.g. 1234:56) |
Step 3: Fetch GL journal entries
For each completed payroll run, fetch GL journal entries using payrollNumber:
GET https://external-api.netchexonline.net/general-ledger-transactions?company-id=101&payroll-number=550&api-version=3.0
Authorization: ApiKey YOUR_API_KEYThe query parameters are company-id (singular) and payroll-number. The payroll number comes from the payrollNumber field on payroll run objects.
This uses the standard PagedResponse<T> envelope, plus a few extra summary fields about the run itself:
{
"pageNumber": 1,
"pageSize": 100,
"totalItemsCount": 12,
"companyId": 101,
"payrollNumber": 550,
"paycheckDate": "2024-01-19",
"payPeriod": { "startDate": "2024-01-01", "endDate": "2024-01-14" },
"totalDebits": 35000.00,
"totalCredits": 35000.00,
"items": [
{
"accountNumber": "5000",
"accountDescription": "Salaries Expense",
"amount": 35000.00,
"type": "Debit",
"transactionCategory": "SalaryExpense",
"divisionId": 1,
"departmentId": 10,
"businessUnitId": 1,
"costCenter": "CC-100",
"paycheckNumber": "CHK-001"
}
]
}The array is items, the same envelope field used across the site. Each entry has accountNumber/accountDescription, and a single amount with a type of Debit or Credit. employeeId is optional, employer-side entries like taxes aren't tied to one.
Map accountNumber to your chart of accounts before importing. The salary-expenses, employer-tax-expenses, and similar distribution parameters aren't booleans and don't filter categories out of the response, each one takes HomeDepartment, WorkDepartment, or None to control which department that category's entries get allocated to. include-workers-compensation is the one true boolean, and does control whether workers' compensation entries are included at all.
Deeper GL integrations
GET /general-ledger-transactions above is self-serve, available to any client with access. For some accounting and dealership management systems, Netchex also automatically pushes a fully formatted GL posting the moment payroll is finalized, instead of the client polling for it. This is built per system today, not a generic capability every client can turn on. If a push model fits your workflow better than pulling, or your system needs GL data shaped differently than the response above, talk to your Netchex representative, we're open to scoping what that would take for your system.
An example from automotive
One category of client we've built this kind of deep integration for is automotive dealerships, where payroll pulls certain charges from the dealership's own system before a run, and pushes a matching GL posting back afterward. It's a useful reference for what "deeper than self-serve" looks like in practice:
Pulling data in first. Before a payroll run, a payroll admin can pull a few kinds of charges directly from the dealership's system rather than entering them by hand: technician labor recorded against open or closed repair orders, sales commissions and chargebacks (tracked separately for new and used vehicles), and recurring account charges configured to post as either earnings or deductions. Each pulled record carries enough reference information (a repair order and line number, a commission reference, an account and transaction reference) that it can be traced all the way through to the GL entry it eventually produces.
Posting the GL back after payroll runs. Once payroll closes, Netchex sends a complete set of journal entries back to the dealership's system in one batch, grouped by employee and paycheck. Entries that originated from a pulled record (technician time, a commission, a recurring charge) carry their original reference numbers, so the dealership's system can match them back to the source, for example to clear an open repair order line. Separate company-level entries, not tied to any individual employee, cover employer-side taxes, workers' compensation, and clearing accounts, computed by the payroll engine regardless of what was pulled in. A posting can be voided, which resends the exact original entries with amounts negated rather than recalculating from current payroll data, so the reversal always matches what was actually sent.
This kind of two-way, reference-matched integration is specific to how a given DMS or accounting system expects to receive data. If something similar fits your system, we're open to discussing it.
Try it in the playground
Test these endpoints interactively in the API reference: