---
title: Unified ATS API — Truto Unified API
slug: ats
canonical: "https://truto.one/unified-apis/ats/"
---

# Applicant Tracking System Unified API

Integrate Applicant Tracking System data across 27 providers with one API. 17 normalized resources, real-time pass-through, fully customizable.

**Base URL:** `https://api.truto.one/unified/ats`  
**Resources:** 17  
**Integrations:** 27

## Resources

### Activities

The activity on a candidate performed by a user. (12 fields)

- `id` (string) — The activity's unique identifier
- `candidate` (object) — The activity's candidate
- `actor` (object) — The activity's actor
- `activity_type` (string) — The activity's type
- `from` (array) — From email addresses if the activity_type is email
- `to` (array) — 
- `cc` (array) — 
- `subject` (string) — The activity's subject
- `body` (string) — The activity's body
- `visibility` (string) — The activity's visibility
- `updated_at` (string) — The date and time of the activity's last update
- `created_at` (string) — The date and time of the activity's creation

### Applications

The applications represent an application for a job. (12 fields)

- `id` (string) — The application's unique identifier
- `candidate` (object) — The application's candidate
- `job` (object) — The application's job
- `applied_at` (string) — The date and time of the application's creation
- `rejected_at` (string) — The date and time of the application's rejection
- `source` (object) — The application's source
- `credited_to` (object) — The application's credited_to
- `current_stage` (object) — The application's current_stage
- `reject_reason` (string) — The application's reject_reason
- `attachments` (array) — The application's attachments
- `created_at` (string) — The date and time of the application's creation
- `updated_at` (string) — The date and time of the application's last update

### Attachments

The attachments represent an attachment for a candidate. (9 fields)

- `id` (string) — The attachment's unique identifier
- `file_name` (string) — The attachment's file_name
- `file_url` (string) — The attachment's file_url
- `candidate` (object) — The attachment's candidate
- `application` (object) — The attachment's application
- `job` (object) — The attachment's job
- `attachment_type` (string) — The attachment's type
- `created_at` (string) — The date and time of the attachment's creation
- `updated_at` (string) — The date and time of the attachment's last update

### Candidates

The candidates represent a candidate. (18 fields)

- `id` (string) — The candidate's unique identifier
- `first_name` (string) — The candidate's first_name
- `last_name` (string) — The candidate's last_name
- `name` (string) — The user's full name
- `company` (string) — The candidate's company
- `title` (string) — The candidate's title
- `last_interaction_at` (string) — The candidate's last_interaction date
- `is_private` (string) — Whether the candidate is_private
- `can_email` (boolean) — Whether the candidate can email
- `locations` (array) — The candidate's locations
- `phones` (array) — The candidate's phone numbers
- `emails` (array) — The candidate's emails
- `urls` (array) — The candidate's urls
- `tags` (array) — The candidate's tags
- `applications` (array) — The candidate's applications
- `attachments` (array) — The candidate's attachments
- `created_at` (string) — The date and time of the phone number's creation
- `updated_at` (string) — The date and time of the phone number's last update

### Departments

The departments represent a department. (6 fields)

- `id` (string) — The department's unique identifier
- `name` (string) — The department's name
- `parent` (object) — 
- `status` (string) — The department's status
- `created_at` (string) — The date and time of the department's creation
- `updated_at` (string) — The date and time of the department's last update

### Eeocs

The eecocs represent an Equal Employment Opportunity Commission data submitted by the candidates. (9 fields)

- `id` (string) — The eecoc's unique identifier
- `candidate` (object) — The eecoc's candidate
- `submitted_at` (string) — The eecoc's submitted_at date
- `race` (string) — The candidate's race
- `gender` (string) — The candidate's gender
- `veteran_status` (string) — The candidate's veteran status
- `disability_status` (string) — The candidate's disability status
- `created_at` (string) — The date and time of the eecoc's creation
- `updated_at` (string) — The date and time of the eecoc's last update

### Interviews

The interviews represent an interview. (12 fields)

- `id` (string) — The interview's unique identifier
- `application` (object) — The interview's application
- `candidate` (object) — The interview's candidate
- `job_interview_stage` (object) — The interview's job interview stage
- `organizer` (object) — The interview's organizer
- `interviewers` (array) — The interview's interviewers
- `location` (string) — The interview's location
- `start_at` (string) — The interview's start date
- `end_at` (string) — The interview's end date
- `status` (string) — The interview's status
- `created_at` (string) — The date and time of the interview's creation
- `updated_at` (string) — The date and time of the interview's last update

### Job Form Fields

The form fields used to apply to a job. (12 fields)

- `id` (string) — The form field's unique identifier
- `name` (string) — The form field's name. Use this when submitting the application.
- `job` (object) — The form field's job
- `label` (string) — The form field's label.
- `index` (integer) — The form field's position inside a form. If `group_id` is present, the index is relative to the group.
- `is_required` (boolean) — Whether the form field is required or not.
- `answer_visibility` (string) — The form field's answer visibility inside the ATS.
- `description` (string) — The form field's description.
- `type` (string) — The form field's type. If no clear mapping exists, then raw value is returned.
- `options` (array) — The form field's options. Only present for dropdown, radio and checkbox types.
- `group_id` (string) — The form field's group identifier. If present, the form field is part of a group.
- `group_name` (string) — The form field's group name or label. If present, the form field is part of a group.

### Job Interview Stages

The job interview stages represent a job interview stage. (7 fields)

- `id` (string) — The job interview stage's unique identifier
- `name` (string) — The job interview stage's name
- `status` (string) — The job interview stage's status
- `job` (object) — The job interview stage's job
- `position` (integer) — The job interview stage's position
- `created_at` (string) — The date and time of the job interview stage's creation
- `updated_at` (string) — The date and time of the job interview stage's last update

### Jobs

The jobs represent a job. (23 fields)

- `id` (string) — The job's unique identifier
- `name` (string) — The job's name
- `description` (string) — The job's description
- `code` (string) — The job's code
- `requisition_id` (string) — The job's requisition_id
- `status` (string) — The job's status
- `locations` (array) — The job's locations
- `job_posting_urls` (array) — The job's job posting urls
- `confidential` (boolean) — Whether the job is confidential or not
- `departments` (array) — The job's department
- `teams` (array) — 
- `offices` (array) — The job's office
- `hiring_managers` (array) — The job's hiring managers
- `recruiters` (array) — The job's recruiters
- `tags` (array) — The job's tags
- `is_remote` (boolean) — Whether the job is remote or not
- `job_type` (string) — The job's type.
- `job_position_level` (string) — The job's position level.
- `compensation` (object) — 
- `created_at` (string) — The date and time of the job's creation
- `updated_at` (string) — The date and time of the job's last update
- `closed_at` (string) — The date and time of the job's closing
- `opened_at` (string) — The date and time of the job's opening

### Offers

The offers represent an offer. (11 fields)

- `id` (string) — The offer's unique identifier
- `application` (object) — The offer's application
- `candidate` (object) — The offer's candidate
- `job` (object) — The offer's job
- `creator` (object) — The offer's creator
- `closed_at` (string) — The offer's closed date
- `sent_at` (string) — The offer's sent date
- `start_date` (string) — The offer's start date
- `status` (string) — The offer's status
- `created_at` (string) — The date and time of the offer's creation
- `updated_at` (string) — The date and time of the offer's last update

### Offices

The offices represent an office. (7 fields)

- `id` (string) — The office's unique identifier
- `name` (string) — The office's name
- `parent` (object) — The office's parent
- `location` (string) — The office's location
- `is_remote` (boolean) — Whether the office is remote or not
- `created_at` (string) — The date and time of the office's creation
- `updated_at` (string) — The date and time of the office's last update

### Organizations

The organizations represent the organization. (4 fields)

- `id` (string) — Unique identifier for the organization.
- `name` (string) — Name of the organization.
- `created_at` (string) — Date and time when the organization was created.
- `updated_at` (string) — Date and time when the organization was last updated.

### Reject Reasons

The reject reasons represent a reject reason. (4 fields)

- `id` (string) — The reject reason's unique identifier
- `name` (string) — The reject reason's name
- `created_at` (string) — The date and time of the reject reason's creation
- `updated_at` (string) — The date and time of the reject reason's last update

### Scorecards

The scorecards represent a scorecard. (10 fields)

- `id` (string) — The scorecard's unique identifier
- `application` (object) — The scorecard's application
- `candidate` (object) — The scorecard's candidate
- `interview` (object) — The scorecard's interview
- `interviewer` (object) — The scorecard's interviewer
- `submitted_at` (string) — The scorecard's submitted date
- `overall_recommendation` (string) — The scorecard's overall recommendation
- `form_values` (array) — The scorecard's form values
- `created_at` (string) — The date and time of the scorecard's creation
- `updated_at` (string) — The date and time of the scorecard's last update

### Tags

The tags represent a tag for a candidate. (4 fields)

- `id` (string) — The tag's unique identifier
- `name` (string) — The tag's name
- `created_at` (string) — The date and time of the tag's creation
- `updated_at` (string) — The date and time of the tag's last update

### Users

The users represent a user. (9 fields)

- `id` (string) — The user's unique identifier
- `first_name` (string) — The user's first name
- `last_name` (string) — The user's last name
- `name` (string) — The user's full name
- `emails` (array) — 
- `disabled` (boolean) — The user's disabled status
- `access_role` (string) — The user's access role
- `created_at` (string) — The date and time of the user's creation
- `updated_at` (string) — The date and time of the user's last update

## Supported integrations

- [ApplicantStack](https://truto.one/integrations/detail/applicantstack/)
- [Ashby](https://truto.one/integrations/detail/ashby/)
- [BambooHR](https://truto.one/integrations/detail/bamboohr/)
- [Breezy](https://truto.one/integrations/detail/breezy/)
- [CATS](https://truto.one/integrations/detail/cats/)
- [Ceipal](https://truto.one/integrations/detail/ceipal/)
- [Fountain](https://truto.one/integrations/detail/fountain/)
- [Greenhouse](https://truto.one/integrations/detail/greenhouse/)
- [Homerun](https://truto.one/integrations/detail/homerun/)
- [HR Cloud](https://truto.one/integrations/detail/hrcloud/)
- [JazzHR](https://truto.one/integrations/detail/jazzhr/)
- [JobScore](https://truto.one/integrations/detail/jobscore/)
- [Jobsoid](https://truto.one/integrations/detail/jobsoid/)
- [Jobvite](https://truto.one/integrations/detail/jobvite/)
- [Keka](https://truto.one/integrations/detail/keka/)
- [Lever](https://truto.one/integrations/detail/lever/)
- [Loxo](https://truto.one/integrations/detail/loxo/)
- [Manatal](https://truto.one/integrations/detail/manatal/)
- [Pinpoint](https://truto.one/integrations/detail/pinpoint/)
- [Recruitee](https://truto.one/integrations/detail/recruitee/)
- [Recruiterflow](https://truto.one/integrations/detail/recruiterflow/)
- [Sage HR](https://truto.one/integrations/detail/sagehr/)
- [SmartRecruiters](https://truto.one/integrations/detail/smartrecruiters/)
- [TalentLyft](https://truto.one/integrations/detail/talentlyft/)
- [Teamtailor](https://truto.one/integrations/detail/teamtailor/)
- [Workable](https://truto.one/integrations/detail/workable/)
- [Zoho Recruit](https://truto.one/integrations/detail/zohorecruit/)

## Related reading

- [What Are ATS Integrations? (2026 Architecture & Strategy Guide)](https://truto.one/blog/what-are-ats-integrations-2026-architecture-strategy-guide/) — ATS integrations sync hiring data between your app and Greenhouse, Lever, or Workable. A technical guide to the real engineering costs and architecture decisions.
- [How to Integrate Multiple ATS Platforms (Greenhouse, Lever, Workable)](https://truto.one/blog/how-to-integrate-multiple-ats-platforms-greenhouse-lever-workable/) — Learn how to integrate Greenhouse, Lever, and Workable APIs simultaneously. Covers schema normalization, auth differences, rate limits, and using a unified ATS API to ship faster.
- [Automating the Employee Compliance Lifecycle: From Offer Letter to Offboarding](https://truto.one/blog/automating-the-employee-compliance-lifecycle-from-offer-letter-to-offboarding/) — Automate the employee compliance lifecycle from hiring to offboarding. Learn how to use Unified APIs to sync ATS, HRIS, LMS, and Directory data for SOC 2 readiness.
- [Understanding MCP Server Security Risks and Ways to Mitigate Them](https://truto.one/blog/understanding-mcp-server-security/) — A comprehensive guide to MCP security: understand key threats, examples, and effective strategies to secure your AI integrations.
- [Which Integration Platform Handles the Most API Categories? (2026)](https://truto.one/blog/which-integration-platform-handles-the-most-api-categories-2026/) — Compare unified API platforms by actual category coverage in 2026. See how Merge, Apideck, Unified.to, and Truto stack up across CRM, HRIS, ATS, and 20+ niche verticals.
- [Connect Ashby to AI Agents: Automate Talent Sourcing & Offer Processes](https://truto.one/blog/connect-ashby-to-ai-agents-automate-talent-sourcing-offer-processes/) — Learn how to connect Ashby to AI Agents using Truto's /tools endpoint. A complete guide to binding 33 Ashby tools and automating ATS workflows without hand-written integration boilerplate.
