Skip to content

HRIS · Beta

TriNet
API integration

Ship HRIS features without building the integration. Full TriNet API access via Proxy and 60+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Built for specific customer use cases. Issues are resolved quickly.

Talk to us
TriNet

Use Cases

Why integrate with TriNet

Common scenarios for SaaS companies building TriNet integrations for their customers.

01

Automate employee lifecycle provisioning

IT, identity, and access management platforms can listen to TriNet employee changes to auto-provision accounts for new hires and revoke access when employees are terminated, eliminating manual directory maintenance.

02

Sync payroll data into accounting and ERP workflows

Finance and spend management SaaS can pull payruns, paychecks, and paycheck details from TriNet to auto-generate journal entries and reconcile labor costs, removing bi-weekly CSV uploads.

03

Push new hires from ATS into TriNet

Applicant tracking systems can create employee records in TriNet the moment a candidate accepts an offer, including biographical details, addresses, and emergency contacts, so HR never re-enters data.

04

Power employee engagement and recognition

Engagement, recognition, and gifting platforms can sync the TriNet directory — including names, departments, supervisors, and biographical data — to automate birthday and anniversary workflows and route performance review chains.

05

Streamline benefits and retirement contributions

401(k) and benefits platforms can push contribution and loan deduction updates directly into TriNet payroll profiles, keeping retirement data in sync without manual uploads.

What You Can Build

Ship these features with Truto + TriNet

Concrete product features your team can ship faster by leveraging Truto’s TriNet integration instead of building from scratch.

01

Joiner/mover/leaver event sync

Use TriNet's employee-changes and platform-company-changes endpoints to build a delta-based sync that flags new hires, role changes, and terminations in near real time.

02

Full employee directory sync

Pull employees along with their names, addresses, contacts, emergency contacts, biographical details, employment info, jobs, and supervisor mappings to maintain a complete mirror of the TriNet workforce.

03

Automated new-hire onboarding to TriNet

Create employees in TriNet and attach names, contacts, and emergency contacts in a single workflow triggered by an offer-accepted event in your app.

04

Payroll reconciliation and reporting

Ingest payruns, paychecks, paycheck details, pay info, and pay codes to power GL mapping, labor cost dashboards, and automated expense categorization.

05

Retirement contribution write-back

Create and bulk-update 401(k) contributions and loan deductions in TriNet directly from your benefits platform, keeping deductions aligned with payroll runs.

06

Time-off and holiday calendars in-app

Surface TriNet time-off calendars, leave plans, accruals, and company holidays inside your workforce planning, scheduling, or engagement product.

SuperAI

TriNet AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

create_a_tri_net_employee

Add Employee (TriNet POST /v1/hire/{{company_id}}/employee). Takes no caller parameters. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_employees

List All Employees (TriNet GET /v1/company/{{company_id}}/employees). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED. Beyond the general `read` scope, seven section scopes control which sections of this response are returned: `basic-read` -> departmentSplit, employementInfo, names; `hr-personal-read` -> emergencyContacts, homeAddress, employeeContacts, workEligibility; `hr-bioinfo-read` -> bioInfo; `hr-admin-read` -> customFields; `hr-pay-read` -> payInfo; `hr-security-read` -> roles; `hr-natid-read` -> nationalIds. (`employementInfo` is TriNet's own spelling.) A credential holding only `read` still succeeds, with fewer sections.

get_single_tri_net_citizenship_by_id

Get Citizenship (TriNet GET /v1/profile/{{company_id}}/{{id}}/citizenship). Caller must supply `id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

tri_net_custom_fields_bulk_update

Update Custom Fields (TriNet PUT /v1/manage-employee/{{company_id}}/{{query.employee_id}}/custom-fields). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

get_single_tri_net_department_split_by_id

Department Split (TriNet GET /v1/department/{{company_id}}/{{id}}/department-split). Caller must supply `id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

create_a_tri_net_emergency_contact

Add Emergency Contact (TriNet POST /v1/profile/{{company_id}}/{{query.employee_id}}/emergency-contacts). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_emergency_contacts

List Emergency Contact (TriNet GET /v1/profile/{{company_id}}/{{query.employee_id}}/emergency-contacts). Caller must supply `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

tri_net_emergency_contacts_bulk_update

Update Emergency Contact (TriNet PUT /v1/profile/{{company_id}}/{{query.employee_id}}/emergency-contacts). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

create_a_tri_net_name

Add Employee Name (TriNet POST /v1/identity/{{company_id}}/{{query.employee_id}}/names). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

tri_net_names_bulk_update

Update Employee Name (TriNet PUT /v1/identity/{{company_id}}/{{query.employee_id}}/names). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_employment_details

Job Details (TriNet GET /v1/identity/{{company_id}}/{{query.employee_id}}/employment-details). Caller must supply `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_addresses

Get Home Address (TriNet GET /v1/identity/{{company_id}}/{{query.employee_id}}/addresses). Caller must supply `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

create_a_tri_net_contact

Add Personal Contacts (TriNet POST /v1/identity/{{company_id}}/{{query.employee_id}}/contacts). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_contacts

Get Work Contact (TriNet GET /v1/identity/{{company_id}}/{{query.employee_id}}/contacts). Caller must supply `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

tri_net_contacts_bulk_update

Update Personal Contacts (TriNet PUT /v1/identity/{{company_id}}/{{query.employee_id}}/contacts). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_biographical_details

Get Personal Identification Info (TriNet GET /v1/identity/{{company_id}}/{{query.employee_id}}/biographical-details). Caller must supply `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

tri_net_personals_bulk_update

Update Personal Identification (TriNet PUT /v1/identity/{{company_id}}/{{query.employee_id}}/personals). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

get_single_tri_net_photo_by_id

Get Profile Photo By ID (TriNet GET /v1/profile/{{company_id}}/{{query.employee_id}}/photos/{{id}}). Caller must supply `id`, `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_photos

List Profile Photos (TriNet GET /v1/profile/{{company_id}}/{{query.employee_id}}/photos). Caller must supply `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_employee_roles

List Roles (TriNet GET /v1/manage-employee/{{company_id}}/{{query.employee_id}}/employee-roles). Caller must supply `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_jobs

List Job Codes (TriNet GET /v1/company/{{company_id}}/jobs). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_manage_company_org_details

Get Company Details (TriNet GET /v1/manage-company/{{company_id}}/org-details). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_manage_company_custom_fields

List Company Custom Fields (TriNet GET /v1/manage-company/{{company_id}}/custom-fields). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_supervisors

List Supervisors (TriNet GET /v1/company/{{company_id}}/supervisors). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_workers_comp_codes

List Workers Comp Codes (TriNet GET /v1/company/{{company_id}}/workers-comp-codes). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_benefit_classes

List Company Benefit Classes (TriNet GET /v1/company/{{company_id}}/benefit-classes). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_benefits

List Company Benefits (TriNet GET /v1/company/{{company_id}}/benefits). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_savings_plans

List Company Savings Plans (TriNet GET /v1/company/{{company_id}}/savings-plans). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_platform_company_employee_changes

List Company and Employee Changes (TriNet GET /v1/platform/company-employee-changes). Takes no caller parameters. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_platform_company_changes

List Company Changes (TriNet GET /v1/platform/company-changes). Takes no caller parameters. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_employee_changes

List Employee Changes (TriNet GET /v1/company/{{company_id}}/employee-changes). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

get_single_tri_net_department_by_id

Get Department by ID (TriNet GET /v1/company/{{company_id}}/departments/{{id}}). Caller must supply `id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_departments

List Departments (TriNet GET /v1/company/{{company_id}}/departments). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

create_a_tri_net_manage_company_department

Add Department (TriNet POST /v1/manage-company/{{company_id}}/departments). Takes no caller parameters. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

update_a_tri_net_manage_company_department_by_id

Update Department (TriNet PUT /v1/manage-company/{{company_id}}/departments/{{id}}). Caller must supply `id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

get_single_tri_net_location_by_id

Get Location by ID (TriNet GET /v1/company/{{company_id}}/locations/{{id}}). Caller must supply `id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_locations

List Locations (TriNet GET /v1/company/{{company_id}}/locations). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

create_a_tri_net_manage_company_location

Add Location (TriNet POST /v1/manage-company/{{company_id}}/locations). Takes no caller parameters. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_pay_codes

List Pay Codes (TriNet GET /v1/company/{{company_id}}/pay-codes). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

get_single_tri_net_paygroup_by_id

Get Pay Group by ID (TriNet GET /v1/company/{{company_id}}/paygroups/{{id}}). Caller must supply `id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_paygroups

List Pay Groups (TriNet GET /v1/company/{{company_id}}/paygroups). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

get_single_tri_net_payrun_by_id

Get Payrun by ID (TriNet GET /v1/payroll/{{company_id}}/payruns/{{id}}). Caller must supply `id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_payruns

List Payruns (TriNet GET /v1/payroll/{{company_id}}/payruns). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_paychecks

List Employee's Pay Checks (TriNet GET /v1/payroll/{{company_id}}/{{query.employee_id}}/paychecks). Caller must supply `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

get_single_tri_net_paycheck_detail_by_id

Employee's Pay Check Details (TriNet GET /v1/payroll/{{company_id}}/{{query.employee_id}}/paycheck-details/{{id}}). Caller must supply `id`, `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

get_single_tri_net_pay_info_by_id

Get Employee's Pay Info (TriNet GET /v1/payroll/{{company_id}}/{{id}}/pay-info). Caller must supply `id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

create_a_tri_net_contribution

Add/Update Retirement Elections (TriNet POST /v1/retirement-plan/{{company_id}}/{{query.employee_id}}/contributions). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_contributions

Retirement Plan Elections (TriNet GET /v1/retirement-plan/{{company_id}}/{{query.employee_id}}/contributions). Caller must supply `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

tri_net_contributions_bulk_update

Update Retirement Elections (TriNet PUT /v1/retirement-plan/{{company_id}}/{{query.employee_id}}/contributions). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

create_a_tri_net_contributions_loan_deduction

Add Loan Deduction (TriNet POST /v1/retirement-plan/{{company_id}}/{{query.employee_id}}/contributions/loan-deductions). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_contributions_loan_deductions

Employee Loan Deductions (TriNet GET /v1/retirement-plan/{{company_id}}/{{query.employee_id}}/contributions/loan-deductions). Caller must supply `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

tri_net_contributions_loan_deductions_bulk_update

Update Loan Deduction (TriNet PUT /v1/retirement-plan/{{company_id}}/{{query.employee_id}}/contributions/loan-deductions/{{query.deduction_type}}). Caller must supply `employee_id`, `deduction_type`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_timeoff_calendars

List Employees' Time Off Requests (TriNet GET /v1/timeoff/{{company_id}}/timeoff-calendar). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_leave_plan_accruals

Employee's Time Off Accruals (TriNet GET /v1/employee/{{company_id}}/{{query.employee_id}}/leave-plan-accruals). Caller must supply `employee_id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_holidays

List Holidays (TriNet GET /v1/company/{{company_id}}/holidays). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

get_single_tri_net_holiday_by_id

Get Holidays by Schedule (TriNet GET /v1/company/{{company_id}}/holidays/{{id}}). Caller must supply `id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_leave_plans

List Leave Plans (TriNet GET /v1/company/{{company_id}}/leave-plans). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

get_single_tri_net_leave_plan_by_id

Leave Plan Details by Plan Type (TriNet GET /v1/company/{{company_id}}/leave-plans/{{id}}). Caller must supply `id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

list_all_tri_net_payroll_schedules

List Payroll Schedules (TriNet GET /v1/company/{{company_id}}/payroll-schedules). Takes no caller parameters. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

get_single_tri_net_payroll_schedule_by_id

Payroll Schedules by Pay Group (TriNet GET /v1/company/{{company_id}}/payroll-schedules/{{id}}). Caller must supply `id`. The companyId comes from the connection credential. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

tri_net_employee_jobs_bulk_update

Job Reclassification (TriNet PUT /v1/manage-employee/{{company_id}}/{{query.employee_id}}/jobs). Caller must supply `employee_id`. The companyId comes from the connection credential. Requires a JSON request body; TriNet does not publish the request schema, so no body_schema row exists. Vendor gaps: TriNet publishes no query or paging parameters for any endpoint, and no per-endpoint 200 schema, so `response_path` (`data`) is taken from TriNet's generic response envelope and is UNVERIFIED.

Why Truto

Why use Truto’s MCP server for TriNet

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 800+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

How It Works

From zero to integrated

Go live with TriNet in under an hour. No boilerplate, no maintenance burden.

01

Link your customer’s TriNet account

Use Truto’s frontend SDK to connect your customer’s TriNet account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call TriNet

Truto’s Proxy API is a 1-to-1 mapping of the TriNet API. You call us, we call TriNet, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate TriNet’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about TriNet on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

How does authentication work for TriNet via Truto?

TriNet uses OAuth. Truto handles the full OAuth flow and token management, so your end users connect their TriNet account from your app without you storing credentials or refreshing tokens manually.

Why do some fields appear missing on employee responses?

TriNet's API dynamically masks payload fields based on the OAuth scopes granted to the token. For example, a basic-read scope returns departmentSplit, employment info, and names, but you'll need hr-pay-read for pay info and hr-bioinfo-read for biographical details. Make sure the appropriate scopes are requested at connection time.

How do I detect new hires, terminations, and role changes efficiently?

Use the list_all_tri_net_employee_changes and list_all_tri_net_platform_company_employee_changes tools to build delta syncs. TriNet's standard list endpoints lack filtering and pagination parameters, so these change endpoints are the recommended way to avoid polling the entire employee roster.

Does TriNet's API support pagination and server-side filtering?

Not meaningfully. Most TriNet list endpoints don't expose standard query or paging parameters, so you'll typically fetch the full dataset and filter client-side, or rely on the employee-changes endpoints for incremental updates.

Do I need to pass the company_id on every request?

TriNet endpoints are scoped to a company_id, but in Truto it's mapped from the connection credential rather than being passed by your end user, so you don't need to collect or manage it in your app.

Can I write data back to TriNet, or is it read-only?

You can write. Supported operations include creating employees, names, emergency contacts, contacts, departments, locations, and contributions, plus bulk updates for custom fields, emergency contacts, names, contacts, personals, contributions, loan deductions, and employee jobs.

TriNet

Get TriNet integrated into your app

Our team understands what it takes to make a TriNet integration successful. A short, crisp 30 minute call with folks who understand the problem.