> ## Documentation Index
> Fetch the complete documentation index at: https://docs.toku.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ADP Payroll Sync

> How Toku reads payroll output from ADP Workforce Now

Toku tracks your ADP payroll calendar and reads finalized payroll output so the Toku deduction lands in the right pay cycle — and so on-chain delivery lines up with your pay date.

## Endpoint

Toku reads processed payroll results through ADP's Payroll Output API, filtered with OData to the runs it needs:

```bash theme={null}
curl "https://api.adp.com/payroll/v1/payroll-output?level=details&\$filter=payrollOutputs/payrollScheduleReference/payrollGroupCode eq 'ABC' and payrollOutputs/payrollScheduleReference/payrollYear eq 2026 and payrollOutputs/payrollScheduleReference/payrollWeekNumber eq 28&\$select=earnings,statutoryDeductions,nonStatutoryDeductions,memos" \
  --cert toku.crt --key toku.key \
  -H "Authorization: Bearer <access_token>"
```

Supported `$filter` dimensions include the `payrollScheduleReference` fields — `payrollYear`, `payrollWeekNumber`, and `payrollGroupCode` — or a specific `payrollProcessingJobID`. With `level=details`, `$select` narrows the payload to the sections Toku needs, such as `earnings`, `statutoryDeductions`, `nonStatutoryDeductions`, and `memos`.

A trimmed example response:

```json theme={null}
{
  "payrollOutputs": [
    {
      "payrollScheduleReference": {
        "payrollGroupCode": "ABC",
        "payrollYear": 2026,
        "payrollWeekNumber": 28
      },
      "payrollProcessingJobID": "1234567",
      "nonStatutoryDeductions": [
        {
          "deductionCode": { "codeValue": "TOKU" },
          "deductionAmount": { "amountValue": 250.00, "currencyCode": "USD" }
        }
      ]
    }
  ]
}
```

## What Toku Reads

| Field                                                                               | Purpose                                                        |
| ----------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| `payrollScheduleReference` (`payrollYear`, `payrollWeekNumber`, `payrollGroupCode`) | Ties each Toku pay cycle to the exact ADP pay run              |
| `payrollProcessingJobID`                                                            | Confirms which processing job produced the output              |
| `nonStatutoryDeductions`                                                            | Verifies the Toku deduction was applied at the expected amount |
| `earnings`, `statutoryDeductions`                                                   | Validates the election against actual pay before settlement    |

## Sync Behavior

* Upcoming pay cycles appear in the Toku dashboard based on your payroll group's schedule in ADP.
* When a run finishes processing, Toku reads the payroll output, reconciles the applied Toku deductions against it, and releases the corresponding stablecoin payments.
* Off-cycle runs are detected and skipped by default (configurable during onboarding).

<Note>
  Payroll sync is read-only. Toku never creates, calculates, or submits payrolls in ADP — your team keeps full control of running payroll.
</Note>

## API Access

ADP gates the Payroll Output API behind partner-level approval. Toku holds this approval as an ADP integration partner, but the API must also be enabled for your ADP account — your ADP administrator requests enablement through ADP support during implementation. If payroll sync shows no data after connecting, this enablement is the most common cause. See [ADP's developer documentation](https://developers.adp.com/) for details.

## Next

<CardGroup cols={2}>
  <Card title="The Toku Deduction" icon="money-bill-transfer" href="/integrations/adp/deduction">
    How the deduction is applied via the Pay Data Input API
  </Card>

  <Card title="Authentication" icon="lock" href="/integrations/adp/authentication">
    OAuth 2.0 client credentials and mutual TLS
  </Card>
</CardGroup>
