Integrations

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 range
  • GET /paychecks: fetch individual paychecks
  • GET /general-ledger-transactions: GL journal entries for one payroll run

Step 1: Query payroll runs

Request
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_KEY

Key parameters:

ParameterTypeDescription
company-idsinteger[]Filter to one or more companies
organization-idGUIDFilter by organization (mutually exclusive with company-ids)
paycheck-date-fromdateStart of paycheck date range
paycheck-date-todateEnd of paycheck date range
page-number / page-sizeinteger1-based pagination
Response (200)
{
  "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

Request
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_KEY

Key parameters:

ParameterTypeDescription
company-idsinteger[]Filter to one or more companies
organization-idGUIDFilter by organization
paycheck-date-from / paycheck-date-todateDate range filter
employee-idsinteger[]Filter to specific employees
payroll-keysstring[]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:

Request
GET https://external-api.netchexonline.net/general-ledger-transactions?company-id=101&payroll-number=550&api-version=3.0
Authorization: ApiKey YOUR_API_KEY

The 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:

Response (200)
{
  "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:

On this page