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 usUse Cases
Why integrate with TriNet
Common scenarios for SaaS companies building TriNet integrations for their customers.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.