This integration connects to TriNet’s PEO service through the TriNet API at
api.trinet.com. TriNet HR Platform (formerly Zenefits) has a separate API and isn’t covered by this integration.What Oleria discovers
Once connected, Oleria continuously discovers and maps the following from TriNet:- Employees - every employee TriNet’s employee list returns, of every employment status, with their employment record. Oleria uses them as the worker record that accounts in your other systems are matched against. See Employee details.
- Terminated, terminated with pay, and deceased employees stay in Oleria with their termination date as their end date and last day worked, so you can find access that outlived employment.
- Employees who are active, on leave, on leave with pay, or suspended are current workers. A current employee with a future termination date keeps it as a scheduled end date.
- If an employee was rehired, Oleria treats them as current: a termination date on or before their service date is ignored.
- People - the person behind each employee, with their name, linked to their employee record. Oleria uses it to tie the worker record to the individual. If you grant the optional
hr-personal-readscope, each person also has their personal (home) email. - Departments - every department in TriNet’s department list, including departments with no employees, named after the TriNet department name. Each employee is linked to their home department and to every other department their pay is split across, which places them in your organization.
- Manager relationships - each employee’s supervisor, used to build your reporting hierarchy.
- TriNet platform role holders - if you grant the optional
hr-security-readscope, each employee who holds a TriNet platform role appears as a TriNet user, with the roles they hold. The roles come from your company’s TriNet role list, plus any role a holder has that isn’t in it. Oleria uses them to show who can administer HR, payroll, and benefits data in TriNet. Only role holders appear, so this is a partial list of TriNet users. See Known limitations. - Activity - TriNet’s employee change feed and company change feed. Oleria uses them to track joiner, mover, and leaver events.
- Each employee change is linked to the employee it’s about. Hires appear as created, terminations (including terminated with benefits and terminated with pay) as deleted, and every other employee change, such as address, job, and pay changes, as updated.
- Company changes, such as company setup, company details, client options, and department, location, job code, pay group, client contact, and holiday schedule changes, are linked to the TriNet integration itself, because TriNet doesn’t say which department or location changed.
- Each activity shows TriNet’s description of the change and its effective date. TriNet’s change feeds report which kind of change happened, never the old or new values, so no personal data is stored with the activity.
TriNet is the system of record for the worker, not for application access. Oleria doesn’t read TriNet sign-in accounts, their MFA or single sign-on (SSO) settings, or employees’ compensation, benefits, tax, bank, or national ID data. See Known limitations.
Employee details
Each person has the employee’s primary name, or the preferred name when no primary name is set, and, with
hr-personal-read, their home email addresses.
Each TriNet platform role holder has their name, work email, employee number, title, start and end date, and the roles they hold. A role holder who is terminated, terminated with pay, or deceased is shown as disabled. TriNet doesn’t flag which roles are administrative, so Oleria doesn’t mark role holders as administrators. Each role has TriNet’s role description as its name, its long description, and its category.
Prerequisites
- Administrator permission on the Oleria workspace.
- A TriNet user with the Integration Administrator role, to authorize the Oleria integration and copy its credentials.
- The Oleria integration listed under Admin•Manager -> Integration Center -> TriNet API. If it isn’t listed, contact support@oleria.com.
TriNet API credentials belong to an integration, not to a TriNet user, so you don’t need a service account. Use the Client ID and Client Secret issued to the Oleria integration only, and don’t share them with another integration. Changing their scopes or revoking them then affects only Oleria.
TriNet scopes
TriNet credentials carry scopes, and each scope covers a list of TriNet API endpoints. Oleria uses only these five scopes, all read-only. The last three are optional:
Without
hr-personal-read, Oleria still connects, doesn’t call the contacts endpoint, and people sync without a personal email. Without hr-security-read, Oleria still connects, doesn’t call the role endpoints, and syncs no TriNet users or roles. Without hr-pay-read, Oleria reads contacts and roles one employee at a time.
Every endpoint that a granted scope covers must also be enabled for the integration. If TriNet refuses one of them, Oleria refuses the connection, and a sync that TriNet refuses fails instead of syncing partial data. The only exception is List Company Changes. See Authenticate.
Authorize the Oleria integration in TriNet
1
Open the Oleria integration
In TriNet, go to Admin•Manager -> Integration Center -> TriNet API as a user with the Integration Administrator role, and select the Oleria integration.
2
Authorize the required scopes
Under Admin•Manager -> Integration Center -> TriNet API, authorize the Oleria integration for the
read and basic-read scopes, which cover List All Employees, Get Company Details, List Departments, List Locations, List Employee Changes, and List Company Changes.3
Authorize the optional scopes
Under Admin•Manager -> Integration Center -> TriNet API, optionally also authorize
hr-personal-read for each person’s personal email, hr-security-read for TriNet platform role holders and their roles, and hr-pay-read so Oleria reads contacts and roles in bulk (Oleria never reads pay data). Never grant write.4
Copy the credentials
Under Admin•Manager -> Integration Center -> TriNet API, copy the Company ID, Client ID, and Client Secret of the Oleria integration. TriNet shows the Client Secret only once, so store it somewhere safe until you enter it in Oleria.
Connect TriNet to Oleria
1
Open the integration
Go to your Oleria workspace, select Integrations -> select TriNet.
2
Complete the connection form
Fill in the connection form. All three fields are required:
3
Authenticate
Select Authenticate. Before it saves the integration, Oleria checks the credentials in this order:
- It gets an access token from TriNet with the Client ID and Client Secret.
- It checks that the token is granted the
readandbasic-readscopes. - It reads the company details of your Company ID.
- It reads the first page of up to 100 employees, and checks that the page isn’t empty. If the token is granted
hr-pay-readandhr-personal-read, it reads the page with each employee’s contacts. If the page is full and has no terminated, terminated with pay, or deceased employee, it logs a warning. - It reads the department list, then the location list.
- If the token is granted
hr-personal-readbut nothr-pay-read, it reads the first employee’s contacts. - If the token is granted
hr-security-read, it reads your company’s TriNet role list, then the first employee who holds a role. Unless the token is grantedhr-pay-read, it then reads that employee’s roles. - It reads the employee change feed for the last 24 hours.
- It reads the company change feed for the last 24 hours.
read or basic-read, the credentials aren’t authorized for the Company ID, the employee list is empty, TriNet refuses an endpoint the integration needs, or TriNet doesn’t respond. When TriNet refuses an endpoint, the message names the endpoint and its scope.Oleria connects, and logs a warning, when:- the token isn’t granted
hr-personal-read. People then sync without a personal email. - the token isn’t granted
hr-security-read. TriNet platform role holders then aren’t synced. - TriNet refuses the company change feed or doesn’t serve it. Company activity then isn’t collected.
- the first page of employees is full and has no leavers.
hr-pay-read. It reads contacts and roles one employee at a time, and refuses the connection if TriNet refuses one of those calls.Find the newly connected TriNet company on the Connected tab of your Oleria Integrations page.Verify the integration
Confirm the TriNet instance appears on the Connected tab of your Oleria Integrations page with a status of Healthy. To see more detail about its health, select View Details on the TriNet instance to open the side pane. The integration is named after your TriNet company, for example TriNet (Example Co). After the first sync completes, go to Posture -> Access Inventory -> Employees to review the TriNet employees. Oleria shows HR employee records there when TriNet is your employee source of truth. To select it, go to Settings -> Employee Information. In the integration’s Capabilities and operation readiness section, each row shows Available when the credentials have these scopes:
If a scope isn’t granted, or TriNet refuses an endpoint on the row, the row shows Needs permission. Read users also checks that Oleria can read the employee list, the department list, and the location list. Read roles also checks that Oleria can read your company’s role list and the employees who hold roles. TriNet has no access groups to read, so Read groups isn’t supported.
hr-personal-read isn’t on a row. It only adds personal email to people.
Oleria gets a new access token from TriNet about every hour, so there’s no token to renew. If TriNet issues a new Client Secret, edit the integration in Oleria, paste the new Client Secret, and select Update. To keep the stored secret, leave Client Secret blank. If you change the Client ID, you must also enter its Client Secret. The next sync runs with the new credentials.
Troubleshooting
- TriNet rejected the Client ID or Client Secret - re-enter both from Admin•Manager -> Integration Center -> TriNet API. TriNet shows the Client Secret only once. If you no longer have it, get new credentials for the Oleria integration from TriNet.
- The credential is not granted the read, basic-read scope(s) - authorize the Oleria integration for
readandbasic-read, then select Authenticate again. - This TriNet credential is not authorized for company - check the Company ID. It must be the Company ID shown with these credentials in the Integration Center.
- The credential cannot read List All Employees - authorize the integration for List All Employees and the scopes the message names:
basic-read, plushr-pay-readif you granted it. - TriNet refused it (HTTP 403); authorize the endpoint for the integration - TriNet refused an endpoint that a granted scope covers. Authorize the endpoint the message names, with the scope it names, then select Authenticate again. The same message on a sync means the sync failed and synced nothing for that data, so nothing was removed.
- List All Employees returned no employees - the credentials can’t see any employees of this company. Check that they’re authorized for this company. Oleria refuses an empty employee list, so that a sync never removes your synced workforce.
- Could not reach api.trinet.com - try again later. If it keeps failing, contact support@oleria.com.
- The Company ID of an existing connection cannot be changed - the Company ID identifies the integration. Create a new TriNet integration for the other company.
- Terminated employees don’t appear - Oleria shows leavers only if TriNet’s employee list returns them. If the list and its employee total both leave out terminated employees, they disappear from Oleria instead of showing an end date. If the total counts them, the sync fails instead, as in the next entry. Oleria logs a warning when a company of 200 or more employees has none. Contact TriNet to include them.
- employeesTotal is N but the list returned M rows, or page N is empty but hasMore is true - TriNet’s employee list reported more employees than it returned, or returned an empty page while reporting that more employees follow. The sync fails instead of syncing a partial workforce, so nothing is removed. The next sync usually succeeds. If it keeps failing, contact support@oleria.com.
- Employees have no location - Oleria leaves the location empty when TriNet’s location has no country, or the employee’s location isn’t in the location list.
- People have no personal email - authorize
hr-personal-readand the employee contacts endpoint. Oleria uses only email addresses TriNet marks as home. - No TriNet users or roles appear - authorize
hr-security-readand the company roles and employee roles endpoints. - Activity syncs fail - authorize List Employee Changes. Until it’s authorized, activity syncs fail without moving forward, so the next sync with access picks up from the last window Oleria read.
- No company activity appears - authorize List Company Changes.
- The sync fails because employees, managers, or role holders were skipped - Oleria tolerates a few employees removed from TriNet during a sync, or supervisors who aren’t among the synced employees, up to 1% of your employees (at least five, at most 50). Beyond that, the sync fails instead of syncing a partial workforce. The next sync usually succeeds. If it keeps failing, contact support@oleria.com.
- The sync fails with HTTP 429 - the credentials reached their TriNet call quota. Oleria retries with a delay, but if the quota is used up, ask TriNet to raise it for the Oleria integration.
Known limitations
- Read-only - this integration is read-only. Oleria has no remediation actions for TriNet and never changes employee records. It never requests the
writescope. - Partial TriNet user list, no groups - TriNet’s API doesn’t list its sign-in accounts. Oleria discovers a TriNet user only from the employees who hold a TriNet platform role, so an employee who signs in to TriNet without a platform role doesn’t appear as a TriNet user. TriNet doesn’t report sign-ins, MFA, or SSO settings, so they show as unavailable. Without
hr-security-read, Oleria discovers no TriNet users or roles. TriNet has no access groups. Your IdP and SaaS integrations supply them. - No non-human identities (NHIs) or AI agents - TriNet API credentials are visible only in TriNet’s Integration Center, with no API to list them. TriNet has no AI agent API. Oleria doesn’t discover any of them.
- Flat departments - TriNet departments have no parent department, so department hierarchy isn’t discovered. A department that appears on an employee but not in the department list is added with the name on the employee record.
- Single supervisor - TriNet records one supervisor per employee. A supervisor who isn’t among the synced employees, or an employee listed as their own supervisor, isn’t shown as a manager.
- Leavers in the employee list - Oleria reads TriNet’s employee list without a status filter, so it gets every employee TriNet returns. If a company of 200 or more employees has no terminated employee in the list, the sync logs a warning, because leavers left out of the list would disappear from Oleria instead of showing an end date.
- Activity covers employee and company changes - Oleria reads two TriNet feeds:
- The employee change feed records each change to an employee’s record, such as hires, terminations, and address, job, and pay changes, as an event code with its effective date. Oleria reads it for every sync. If TriNet refuses it, the activity sync fails and resumes from the last window it read once access is granted.
- The company change feed records changes to your company’s setup, details, client options, departments, locations, job codes, pay groups, client contacts, and holiday schedule. Oleria reads it for your Company ID only and drops any change for another company. If TriNet refuses it, or answers not found three times before it has answered successfully once, Oleria stops reading company changes for the rest of that sync and logs a warning. The rest of the sync isn’t affected. Once the feed has answered successfully, a later failure fails the sync.
- TriNet has no sign-in, administrator, or security audit feed, so none of that appears.
- No actor on activity - TriNet’s change feeds don’t say who made a change, so activities have no actor.
- Changes without values - TriNet’s change feeds report which kind of change happened and when it takes effect, never the old or new values.
- Activity history - Oleria reads both feeds in 24-hour windows, several windows at a time. When you connect, it reads the last 30 days of changes. It never reads changes older than 90 days. Each later sync resumes from the last window it read completely, with a five-minute overlap, and drops repeated changes. Each change is timed by when TriNet recorded it, or by its effective date when TriNet records no time. A change with neither is skipped and logged.
- Contacts and roles without
hr-pay-read- TriNet returns contacts and roles in its employee list only when the integration hashr-pay-read. With it, Oleria reads them 100 employees per call and never reads pay data. Without it, Oleria reads each employee’s contacts and each role holder’s roles separately, five at a time: withhr-personal-read, a sync of 10,000 employees takes about 35 minutes. Withouthr-personal-read, Oleria reads the employee list 100 employees per call. - Rate limits - Oleria paces its requests to TriNet at five per second. It retries with a delay when TriNet limits a request with HTTP 429 or returns a server error. TriNet sets each credential’s call quota when it issues the credentials, and doesn’t publish a number. If a sync reaches the quota, ask TriNet to raise it.

