> ## 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 Employee Sync

> How Toku syncs your worker roster from ADP Workforce Now

Toku keeps its worker roster in sync with ADP Workforce Now so stablecoin elections always map to the right person. Sync is read-only and runs automatically after every connection and on a rolling schedule.

## Endpoint

Toku reads workers through ADP's Workers v2 API, paginating with OData `$top`/`$skip`:

```bash theme={null}
curl "https://api.adp.com/hr/v2/workers?\$top=100&\$skip=0" \
  --cert toku.crt --key toku.key \
  -H "Authorization: Bearer <access_token>"
```

Workforce Now returns at most 100 workers per page (default 50); Toku pages with `$skip` until the `workers` array comes back empty. Individual records are available at `GET /hr/v2/workers/{aoid}`, and `$filter`/`$select` are supported for narrowing results. The scope used is `/hr/workerInformationManagement/workerManagement/workerProfileManagement/worker.read`.

A trimmed example response:

```json theme={null}
{
  "workers": [
    {
      "associateOID": "G3349PZGBADQY8H8",
      "workerID": { "idValue": "ADA001" },
      "person": {
        "legalName": { "formattedName": "Ada Lovelace" },
        "communication": {
          "emails": [{ "emailUri": "ada@yourcompany.com" }]
        }
      },
      "workAssignments": [
        {
          "positionID": "ABC0010078765",
          "assignmentStatus": { "statusCode": { "codeValue": "A" } },
          "payrollGroupCode": "ABC",
          "payrollFileNumber": "078765",
          "baseRemuneration": {
            "annualRateAmount": { "amountValue": 180000, "currencyCode": "USD" }
          }
        }
      ]
    }
  ]
}
```

See ADP's reference for the full schema: [Workers v2 API Explorer](https://developers.adp.com/apis/api-explorer/hcm-offrg-wfn/hcm-offrg-wfn-hr-workers-v2-workers).

## What Toku Reads

| Field                                   | Purpose                                                                       |
| --------------------------------------- | ----------------------------------------------------------------------------- |
| `associateOID`                          | Stable identifier used to match the worker across systems and post deductions |
| `workAssignments[].positionID`          | Together with the Associate ID, identifies the worker for pay data input      |
| `person.legalName`, `emails[].emailUri` | Roster display and employee-portal invitations                                |
| `workAssignments[].assignmentStatus`    | Marks departed or inactive workers inactive in Toku                           |
| `payrollGroupCode`, `payrollFileNumber` | Routes the deduction to the right payroll group and file                      |
| `baseRemuneration`                      | Validates election limits against compensation                                |

## Sync Behavior

* **New workers** appear in Toku automatically after they're added in ADP Workforce Now.
* **Updates** (name, email, compensation, pay group) flow through on the next sync.
* **Inactive workers** are marked inactive and stop receiving stablecoin payments.
* A manual sync can be triggered anytime from **Settings → Payroll Integrations** in Toku.

<Note>
  Employee sync never writes to ADP. Toku does not modify worker records, work assignments, or compensation.
</Note>

## Next

<CardGroup cols={2}>
  <Card title="Payroll Sync" icon="calendar" href="/integrations/adp/payroll-sync">
    How Toku tracks pay cycles and payroll output
  </Card>

  <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>
</CardGroup>
