openapi: 3.1.0 info: title: Deel ATS Adjustments People API description: 'Applicant Tracking System API for managing the full recruiting pipeline — jobs and job postings, candidates, applications, attachments, offers, departments, locations, email templates, hiring members, employment types, application sources, tags, and reasons — with an end-to-end candidate-to-contract flow via Deel Hire. ' version: '2026-05-25' contact: name: Deel Developer Support url: https://developer.deel.com/api/ats-guides/introduction servers: - url: https://api.letsdeel.com/rest/v2 description: Production - url: https://api-sandbox.demo.deel.com/rest/v2 description: Sandbox security: - BearerAuth: [] tags: - name: People description: Unified directory across IC, EOR, and direct employees paths: /people: get: operationId: getPeople summary: List Of People description: Returns a paginated unified directory across all worker types. tags: - People parameters: - name: after_cursor in: query schema: type: string - name: limit in: query schema: type: integer default: 20 maximum: 100 - name: hiring_type in: query schema: type: string enum: - contractor - eor - direct_employee - global_payroll - name: employment_status in: query schema: type: string enum: - active - terminated - onboarding - offboarded - name: country in: query schema: type: string responses: '200': description: People list content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Person' post: operationId: createPersonWithoutContract summary: Create A Person Without A Contract description: Create a person record (for example a future hire) before any contract exists. tags: - People requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PersonCreate' responses: '201': description: Person created content: application/json: schema: $ref: '#/components/schemas/Person' /people/{person_id}: get: operationId: getPersonById summary: Retrieve A Single Person tags: - People parameters: - name: person_id in: path required: true schema: type: string responses: '200': description: Person content: application/json: schema: $ref: '#/components/schemas/Person' /people/{person_id}/working-location: patch: operationId: updateWorkingLocation summary: Update Working Location tags: - People parameters: - name: person_id in: path required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WorkingLocationUpdate' responses: '200': description: Location updated components: schemas: PersonCreate: type: object required: - first_name - last_name - email properties: first_name: type: string last_name: type: string email: type: string format: email preferred_name: type: string country: type: string job_title: type: string external_id: type: string Person: type: object properties: id: type: string first_name: type: string last_name: type: string preferred_name: type: string email: type: string format: email work_email: type: string format: email hiring_type: type: string enum: - contractor - eor - direct_employee - global_payroll employment_status: type: string enum: - active - terminated - onboarding - offboarded country: type: string working_location: $ref: '#/components/schemas/WorkingLocation' department: type: object properties: id: type: string name: type: string manager: type: object properties: id: type: string name: type: string job_title: type: string start_date: type: string format: date external_id: type: string WorkingLocationUpdate: type: object required: - country properties: country: type: string state: type: string city: type: string address: type: string timezone: type: string effective_date: type: string format: date WorkingLocation: type: object properties: country: type: string state: type: string city: type: string address: type: string timezone: type: string securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: opaque