openapi: 3.1.0
info:
  title: Calamari Public API
  description: API for Calamari, your HR tool
  contact:
    name: Calamari Team
    url: https://developers.calamari.io
    email: developers@calamari.io
  version: v1
servers:
  - url: https://{tenantName}.calamari.io/api
    variables:
      tenantName:
        description: >-
          This is the company domain you use with Calamari. If in doubt, check
          the base URL in API key configuration or ask your Calamari admin.
        default: awesome-company
security:
  - basicAuth: []
tags:
  - name: Absence requests
  - name: Absence type
  - name: Contract types
  - name: Current shift status
  - name: Employees
  - name: Holidays
  - name: Positions
  - name: Projects
  - name: Shifts and breaks
  - name: Teams
  - name: Timesheet entries
  - name: Working Week
  - name: People (Beta)
    description: Endpoints related to managing people records.
  - name: People
    description: Endpoints related to managing people records.
paths:
  /clockin/projects/v1/archive:
    post:
      tags:
        - Projects
      summary: Archive project type.
      description: >-
        Archive project type.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_PROJECT</strong> - provided project id is
        invalid</li></ol>
      operationId: archiveProjectType
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ArchiveProjectRequestIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/projects/v1/create:
    post:
      tags:
        - Projects
      summary: Create project type.
      description: >-
        Create project type.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_PERSON</strong> - when one of provided
        persons is invalid</li><li><strong>INVALID_TEAM</strong> - when one of
        provided teams is invalid</li></ol>
      operationId: createProjectType
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProjectRequestIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectOutWithAssignedEmployeesTeams'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/projects/v1/get-projects:
    post:
      tags:
        - Projects
      summary: Get project types.
      description: Get project types.
      operationId: getProjects
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProjectOutWithAssignedEmployeesTeams'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
  /clockin/projects/v1/get-projects-for-person:
    post:
      tags:
        - Projects
      summary: Get project types for one person.
      description: >-
        Get project types for one person.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_EMPLOYEE</strong> - when invalid employee
        id provided</li></ol>
      operationId: getProjectForEmployee
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonForProjects'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProjectOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/projects/v1/update:
    post:
      tags:
        - Projects
      summary: Update project type.
      description: >-
        Update project type.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_PERSON</strong> - when one of provided
        persons is invalid</li><li><strong>INVALID_TEAM</strong> - when one of
        provided teams is invalid</li></ol>
      operationId: updateProjectType
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditProjectRequestIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectOutWithAssignedEmployeesTeams'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/shift/status/v1/get-current:
    post:
      tags:
        - Current shift status
      summary: Get current shift status for one person.
      description: >-
        Get current shift status for one person.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_EMPLOYEE</strong> - when invalid employee
        id provided</li></ol>
      operationId: getCurrentShiftStatusForOnePerson
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ShiftStatusRequest'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CurrentShiftStatus'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/shift/status/v1/get-current-for-all:
    post:
      tags:
        - Current shift status
      summary: Get current shift status for all employees
      description: Get current shift status for all employees.
      operationId: getCurrentShiftStatusForAll
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CurrentShiftStatus'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
  /clockin/shift/status/v1/presence/report:
    post:
      tags:
        - Current shift status
      summary: Get current presence report for all employees
      description: >-
        Get current presence report for all employees. Results are paged by
        employees number.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_PAGE</strong> - when invalid page
        provided</li><li><strong>INVALID_LIMIT</strong> - when invalid limit
        provided</li><li><strong>INVALID_DATE_FROM</strong> - when invalid date
        provided</li><li><strong>INVALID_DATE_TO</strong> - when invalid date
        provided</li></ol>
      operationId: getPresenceReport
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetPresenceReportRequest'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DailyPresenceReport'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/terminal/v1/break-start:
    post:
      tags:
        - Shifts and breaks
      summary: Start employee break.
      description: >-
        Start employee break. <br /><br />Client application should send request
        immediately when event occurs. If there is any problem with connection
        or access to API event should be queued in clients side and then sent in
        order of occurence.<br /><br />Before you can use this method,
        please:<ol><li>Configure 'API Terminal' in Calamari Clockin
        configuration panel</li><li>Make sure API access is enabled</li></ol><br
        /><br />Expect error codes:<ol><li><strong>INVALID_EMPLOYEE</strong> -
        when invalid employee id provided</li><li><strong>INVALID_TIME</strong>
        - when invalid event time
        provided</li><li><strong>INVALID_BREAK_TYPE</strong> - when invalid
        break type id
        provided</li><li><strong>API_TERMINAL_NOT_AVAILABLE</strong> - no API
        terminal configured or the employee doesn't have access to this
        terminal</li></ol>
      operationId: breakStart
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BreakIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BreakOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Possible reasons:<br/>API terminal configured
            or the employee doesn't have access to this terminal<br/>Provided
            ApiKey is valid but does not contain a scope required to perform
            requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/terminal/v1/break-stop:
    post:
      tags:
        - Shifts and breaks
      summary: Stop employee break.
      description: >-
        Stop employee break. <br /><br />Client application should send request
        immediately when event occurs. If there is any problem with connection
        or access to API event should be queued in clients side and then sent in
        order of occurence.<br /><br />Before you can use this method,
        please:<ol><li>Configure 'API Terminal' in Calamari Clockin
        configuration panel</li><li>Make sure API access is enabled</li></ol><br
        /><br />Expect error codes:<ol><li><strong>INVALID_EMPLOYEE</strong> -
        when invalid employee id provided</li><li><strong>INVALID_TIME</strong>
        - when invalid event time
        provided</li><li><strong>INVALID_BREAK_TYPE</strong> - when invalid
        break type id provided. You should use get-break-types method to find
        properly break type ID
        </li><li><strong>API_TERMINAL_NOT_AVAILABLE</strong> - no API terminal
        configured or the employee doesn't have access to this
        terminal</li></ol>
      operationId: breakStop
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BreakIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BreakOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Possible reasons:<br/>API terminal configured
            or the employee doesn't have access to this terminal<br/>Provided
            ApiKey is valid but does not contain a scope required to perform
            requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/terminal/v1/clock-in:
    post:
      tags:
        - Shifts and breaks
      summary: Start employees shift.
      description: >-
        Start employee shift. If the employee shift has already been started via
        web browser, mobile app or any other terminal, the request is ignored
        and the method returns status 200.<br /><br />Client application should
        send request immediately when event occurs. If there is any problem with
        connection or access to API event should be queued in clients side and
        then sent in order of occurence.<br /><br />Before you can use this
        method, please:<ol><li>Configure 'API Terminal' in Calamari Clockin
        configuration panel</li><li>Make sure API access is enabled</li></ol><br
        /><br />Expect error codes:<ol><li><strong>INVALID_EMPLOYEE</strong> -
        when invalid employee id provided</li><li><strong>INVALID_TIME</strong>
        - when invalid event time
        provided</li><li><strong>API_TERMINAL_NOT_AVAILABLE</strong> - no API
        terminal configured or the employee doesn't have access to this
        terminal</li></ol>
      operationId: clockIn
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PunchClockIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PunchOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Possible reasons:<br/>API terminal configured
            or the employee doesn't have access to this terminal<br/>Provided
            ApiKey is valid but does not contain a scope required to perform
            requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/terminal/v1/clock-out:
    post:
      tags:
        - Shifts and breaks
      summary: Finish employees shift.
      description: >-
        Stop employee shift. If employee shift is not started in moment of
        request the request is ignored.<br /><br />Client application should
        send request immediately when event occurs. If there is any problem with
        connection or access to API event should be queued in clients side and
        then sent in order of occurence.<br /><br />Before you can use this
        method, please:<ol><li>Configure 'API Terminal' in Calamari Clockin
        configuration panel</li><li>Make sure API access is enabled</li></ol><br
        /><br />Expect error codes:<ol><li><strong>INVALID_EMPLOYEE</strong> -
        when invalid employee id provided</li><li><strong>INVALID_TIME</strong>
        - when invalid event time
        provided</li><li><strong>API_TERMINAL_NOT_AVAILABLE</strong> - no API
        terminal configured or the employee doesn't have access to this
        terminal</li></ol>
      operationId: clockOut
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PunchClockOut'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PunchOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Possible reasons:<br/>API terminal configured
            or the employee doesn't have access to this terminal<br/>Provided
            ApiKey is valid but does not contain a scope required to perform
            requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/terminal/v1/get-break-types:
    post:
      tags:
        - Shifts and breaks
      summary: Get break types.
      description: Get break types. <br /><br />
      operationId: getBreakTypes
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GetBreakTypeOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
  /clockin/terminal/v1/get-break-types-for-person:
    post:
      tags:
        - Shifts and breaks
      summary: Get break types for one person.
      description: >-
        Get break types for one person.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_EMPLOYEE</strong> - when invalid employee
        id provided</li></ol>
      operationId: getBreakTypesForEmployee
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonForBreakTypes'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GetBreakTypeOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/terminal/v1/punch-clock:
    post:
      tags:
        - Shifts and breaks
      summary: Start or stop employee shift
      description: >-
        Method indicates employee go through company's doors. Starts shift if
        it's not started or stops it otherwise.<br /><br />Client application
        should send request immediately when event occurs. If there is any
        problem with connection or access to API event should be queued in
        clients side and then sent in order of occurence.<br /><br />Before you
        can use this method, please:<ol><li>Configure 'API Terminal' in Calamari
        Clockin configuration panel</li><li>Make sure API access is
        enabled</li></ol><br /><br />Expect error
        codes:<ol><li><strong>INVALID_EMPLOYEE</strong> - when invalid employee
        id provided</li><li><strong>INVALID_TIME</strong> - when invalid event
        time provided</li><li><strong>API_TERMINAL_NOT_AVAILABLE</strong> - no
        API terminal configured or the employee doesn't have access to this
        terminal</li></ol>
      operationId: punch
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PunchClockIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PunchOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Possible reasons:<br/>API terminal configured
            or the employee doesn't have access to this terminal<br/>Provided
            ApiKey is valid but does not contain a scope required to perform
            requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/timesheetentries/v1/balance:
    post:
      tags:
        - Timesheet entries
      summary: >-
        Find employees working time balances with advanced filtering by several
        parameters.
      description: >-
        Find employees working time balances in dates range. <br /><br />If you
        provide more than one value in one filter attribute there is OR relation
        between them.  For instance: if you put in a filter: {employees:
        ["john@mycompany.com", "kevin@mycompany.com"]} it returns all John's and
        all Kevin's balances.<br /><br />When you fill more than one attribute
        in filter all conditions have to be fulfilled. There is AND relation
        between attributes. For instance: if you provide in filter
        {contractTypes: ["Full-time"], teams: ["DevTeam"]} then you receive
        balances of employees from Dev and Full-time<br /><br />Expect error
        codes:<ol><li><strong>INVALID_DATE_FROM</strong> - when invalid time in
        filter provided</li><li><strong>INVALID_DATE_TO</strong> - when invalid
        time in filter provided</li><li><strong>INVALID_EMPLOYEE</strong> - when
        one of provided employees is
        invalid</li><li><strong>INVALID_TEAM</strong> - when one of provided
        teams is invalid</li><li><strong>INVALID_POSITION</strong> - when one of
        provided positions is
        invalid</li><li><strong>INVALID_CONTRACT_TYPE</strong> - when one of
        provided contract types is invalid</li></ol>
      operationId: findTimesheetBalances
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FilterBalanceEntriesIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BalanceEntryOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/timesheetentries/v1/create:
    post:
      tags:
        - Timesheet entries
      summary: Add historical timesheet entry.
      description: >-
        Add employee shift. <br /><br />Expect error
        codes:<ol><li><strong>INVALID_EMPLOYEE</strong> - when invalid employee
        id provided</li><li><strong>INVALID_SHIFT_START</strong> - when invalid
        start of work time provided</li><li><strong>INVALID_SHIFT_END</strong> -
        when invalid finish of work time
        provided</li><li><strong>SHIFT_END_BEFORE_START</strong> - when end of
        work time is before start</li><li><strong>SHIFT_TO_SHORT</strong> - when
        shift period is shorter than one
        minute</li><li><strong>INVALID_BREAK_TYPE</strong> - when invalid break
        type id provided. You should use get-break-types method to find proper
        break type ID</li><li><strong>INVALID_BREAK_FOR_USER</strong> -  when
        break type is not available for
        employee</li><li><strong>INVALID_BREAK_START</strong> - when invalid
        start of break time provided</li><li><strong>INVALID_BREAK_END</strong>
        - when invalid finish of break time
        provided</li><li><strong>BREAK_END_BEFORE_START</strong> - when end of
        break time is before
        start</li><li><strong>BREAK_IS_NOT_IN_SHIFT_RANGE</strong> -  when break
        time range goes beyond work time
        range</li><li><strong>BREAK_TO_SHORT</strong> - when break period is
        shorter than one minute</li><li><strong>BREAKS_OVERLAP</strong> - when
        one break time range overlaps
        another</li><li><strong>INVALID_PROJECT_TYPE</strong> - when invalid
        project type id provided. You should use get-projects method to find
        proper project type ID</li><li><strong>INVALID_PROJECT_FOR_USER</strong>
        -  when project type is not available for employee. You should use
        get-projects-for-person method to find proper project type
        ID</li><li><strong>INVALID_PROJECT_TIME_ENTRY_START</strong> - when
        invalid start of project time entry
        provided</li><li><strong>INVALID_PROJECT_TIME_ENTRY_END</strong> - when
        invalid finish of project time entry
        provided</li><li><strong>PROJECT_TIME_ENTRY_END_BEFORE_START</strong> -
        when end of project time entry is before
        start</li><li><strong>PROJECT_TIME_ENTRY_IS_NOT_IN_SHIFT_RANGE</strong>
        -  when project time entry goes beyond work time
        range</li><li><strong>PROJECT_TIME_ENTRY_TO_SHORT</strong> - when
        project time entry is shorter than one
        minute</li><li><strong>PROJECT_TIME_ENTRIES_OVERLAP</strong> - when one
        project time entry overlaps
        another</li><li><strong>SHIFT_DESCRIPTION_TOO_LONG</strong> - when
        description contains more than 4096 characters</li></ol>
      operationId: addTimeEntry
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTimesheetEntryIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimesheetEntryOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/timesheetentries/v1/delete:
    post:
      tags:
        - Timesheet entries
      summary: Delete timesheet entry by id
      description: Delete timesheet entry by id
      operationId: deleteTimesheetEntryById
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeleteTimesheetEntryById'
        required: false
      responses:
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/timesheetentries/v1/find:
    post:
      tags:
        - Timesheet entries
      summary: Find timesheet entries with advanced filtering by several parameters.
      description: >-
        Find timesheet entries in dates range. <br /><br />If you provide more
        than one value in one filter attribute there is OR relation between
        them.  For instance: if you put in a filter: {employees:
        ["john@mycompany.com", "kevin@mycompany.com"]} it returns all John's and
        all Kevin's timesheet entries.<br /><br />When you fill more than one
        attribute in filter all conditions have to be fulfilled. There is AND
        relation between attributes. For instance: if you provide in filter
        {contractTypes: ["Full-time"], teams: ["DevTeam"]} then timesheet
        entries of employees from Dev and Full-time<br /><br />Expect error
        codes:<ol><li><strong>INVALID_DATE_FROM</strong> - when invalid time in
        filter provided</li><li><strong>INVALID_DATE_TO</strong> - when invalid
        time in filter provided</li><li><strong>INVALID_EMPLOYEE</strong> - when
        one of provided employees is
        invalid</li><li><strong>INVALID_TEAM</strong> - when one of provided
        teams is invalid</li><li><strong>INVALID_POSITION</strong> - when one of
        provided positions is
        invalid</li><li><strong>INVALID_CONTRACT_TYPE</strong> - when one of
        provided contract types is invalid</li></ol>
      operationId: findTimeEntries
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FilterTimesheetEntriesIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TimesheetEntryOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/timesheetentries/v1/get-projects:
    post:
      tags:
        - Timesheet entries
      summary: Get project types.
      description: Get project types.
      operationId: getProjectTypes
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProjectOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
  /clockin/timesheetentries/v1/get-projects-for-person:
    post:
      tags:
        - Timesheet entries
      summary: Get project types for one person.
      description: >-
        Get project types for one person.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_EMPLOYEE</strong> - when invalid employee
        id provided</li></ol>
      operationId: getProjectTypesForEmployee
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonForProjects'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProjectOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /clockin/timesheetentries/v1/update:
    post:
      tags:
        - Timesheet entries
      summary: Update historical timesheet entry.
      description: >-
        Update employee shift. <br /><br />Expect error
        codes:<ol><li><strong>INVALID_EMPLOYEE</strong> - when invalid employee
        id provided</li><li><strong>INVALID_SHIFT_START</strong> - when invalid
        start of work time provided</li><li><strong>INVALID_SHIFT_END</strong> -
        when invalid finish of work time
        provided</li><li><strong>SHIFT_END_BEFORE_START</strong> - when end of
        work time is before start</li><li><strong>SHIFT_TO_SHORT</strong> - when
        shift period is shorter than one
        minute</li><li><strong>INVALID_BREAK_TYPE</strong> - when invalid break
        type id provided. You should use get-break-types method to find proper
        break type ID</li><li><strong>INVALID_BREAK_FOR_USER</strong> -  when
        break type is not available for
        employee</li><li><strong>INVALID_BREAK_START</strong> - when invalid
        start of break time provided</li><li><strong>INVALID_BREAK_END</strong>
        - when invalid finish of break time
        provided</li><li><strong>BREAK_END_BEFORE_START</strong> - when end of
        break time is before
        start</li><li><strong>BREAK_IS_NOT_IN_SHIFT_RANGE</strong> -  when break
        time range goes beyond work time
        range</li><li><strong>BREAK_TO_SHORT</strong> - when break period is
        shorter than one minute</li><li><strong>BREAKS_OVERLAP</strong> - when
        one break time range overlaps
        another</li><li><strong>INVALID_PROJECT_TYPE</strong> - when invalid
        project type id provided. You should use get-projects method to find
        proper project type ID</li><li><strong>INVALID_PROJECT_FOR_USER</strong>
        -  when project type is not available for employee. You should use
        get-projects-for-person method to find proper project type
        ID</li><li><strong>INVALID_PROJECT_TIME_ENTRY_START</strong> - when
        invalid start of project time entry
        provided</li><li><strong>INVALID_PROJECT_TIME_ENTRY_END</strong> - when
        invalid finish of project time entry
        provided</li><li><strong>PROJECT_TIME_ENTRY_END_BEFORE_START</strong> -
        when end of project time entry is before
        start</li><li><strong>PROJECT_TIME_ENTRY_IS_NOT_IN_SHIFT_RANGE</strong>
        -  when project time entry goes beyond work time
        range</li><li><strong>PROJECT_TIME_ENTRY_TO_SHORT</strong> - when
        project time entry is shorter than one
        minute</li><li><strong>PROJECT_TIME_ENTRIES_OVERLAP</strong> - when one
        project time entry overlaps
        another</li><li><strong>SHIFT_DESCRIPTION_TOO_LONG</strong> - when
        description contains more than 4096 characters</li></ol>
      operationId: updateTimeEntry
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditTimesheetEntryIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimesheetEntryOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /contract-types/v1/all:
    post:
      tags:
        - Contract types
      summary: Get all contract types.
      description: Get all contract types.
      operationId: getContractTypes
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ContractTypeOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
  /employees/v1/archive:
    post:
      tags:
        - Employees
      summary: Mark employee as archived.
      description: Mark employee as archived.
      operationId: markEmployeeAsArchived
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicArchiveEmployeeIn'
        required: false
      responses:
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /employees/v1/create:
    post:
      tags:
        - Employees
      summary: Create employee.
      description: >-
        Create employee.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_FIRST_NAME</strong> - when first name is
        not provided or is invalid</li><li><strong>INVALID_LAST_NAME</strong> -
        when last name is not provided or is
        invalid</li><li><strong>INVALID_EMAIL</strong> - when email name is not
        provided or is invalid</li><li><strong>INVALID_WORKING_WEEK</strong> -
        when working week is not provided or is
        invalid</li><li><strong>INVALID_ACCEPTANCE_FLOW</strong> - when
        acceptance flow is not provided or is
        invalid</li><li><strong>INVALID_HOLIDAYS_CALENDAR</strong> - when
        holidays calendar is not provided or is
        invalid</li><li><strong>INVALID_SEX</strong> - when sex is not provided
        or is invalid</li><li><strong>INVALID_MARTIAL_STATUS</strong> - when
        martial status is not provided or is
        invalid</li><li><strong>INVALID_WORKING_WEEK</strong> - when working
        week is not provided or is invalid</li><li><strong>INVALID_TEAM</strong>
        - when one of provided teams is
        invalid</li><li><strong>INVALID_POSITION</strong> - when one of provided
        positions is invalid</li><li><strong>INVALID_CONTRACT_TYPE</strong> -
        when contract type is
        invalid</li><li><strong>INVALID_DIRECT_MANAGER</strong> - when invalid
        direct manager id is
        provided</li><li><strong>LICENCE_MAX_USERS_EXCEEDED</strong> - when you
        reach the maximum number of seats within your subscription</li></ol>
      operationId: createEmployee
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicCreateEmployeeIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateEmployeeOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /employees/v1/edit:
    post:
      tags:
        - Employees
      summary: Edit employee.
      description: >-
        Edit employee.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_EMPLOYEE</strong> - when invalid employee
        id provided</li><li><strong>INVALID_FIRST_NAME</strong> - when first
        name is not provided or is
        invalid</li><li><strong>INVALID_LAST_NAME</strong> - when last name is
        not provided or is invalid</li><li><strong>INVALID_EMAIL</strong> - when
        email is not provided or is
        invalid</li><li><strong>INVALID_WORKING_WEEK</strong> - when provided
        working week is invalid</li><li><strong>INVALID_ACCEPTANCE_FLOW</strong>
        - when provided acceptance flow is is
        invalid</li><li><strong>INVALID_HOLIDAYS_CALENDAR</strong> - when
        provided holidays calendar is
        invalid</li><li><strong>INVALID_SEX</strong> - when provided sex is
        invalid</li><li><strong>INVALID_MARITAL_STATUS</strong> - when provided
        marital status is invalid</li><li><strong>INVALID_WORKING_WEEK</strong>
        - when provided working week is
        invalid</li><li><strong>INVALID_TEAM</strong> - when one of provided
        teams is invalid</li><li><strong>INVALID_POSITION</strong> - when one of
        provided positions is
        invalid</li><li><strong>INVALID_CONTRACT_TYPE</strong> - when contract
        type is invalid</li><li><strong>INVALID_PERSONAL_EMAIL</strong> - when
        personal email is
        invalid</li><li><strong>INVALID_DIRECT_MANAGER</strong> - when invalid
        direct manager is provided</li></ol>
      operationId: EditEmployee
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicEditEmployeeIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateEmployeeOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /employees/v1/invite:
    post:
      tags:
        - Employees
      summary: Invite employee.
      description: Invite employee
      operationId: inviteEmployee
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvitationEmployeeIn'
        required: false
      responses:
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /employees/v1/list:
    post:
      tags:
        - Employees
      summary: Get all non archived employees.
      description: If you want to find archived employees, please use search method.
      operationId: getEmployees
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicEmployeesIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeesOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /employees/v1/search:
    post:
      tags:
        - Employees
      summary: Get all employees.
      description: Get all employees.
      operationId: searchEmployees
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicSearchEmployeesIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeesOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /holiday/v1/find:
    post:
      tags:
        - Holidays
      summary: Find public holidays for employee in dates range.
      description: >-
        Find public holidays for employee in dates range.<br /><br />Expect
        error codes:<ol><li><strong>INVALID_EMPLOYEE</strong> - when invalid
        employee id provided</li><li><strong>INVALID_DATE_FROM</strong> - when
        invalid time in filter provided</li><li><strong>INVALID_DATE_TO</strong>
        - when invalid time in filter provided</li></ol>
      operationId: find
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FindHolidaysInRangeIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/HolidayOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /leave/request/v1/create:
    post:
      tags:
        - Absence requests
      summary: Create an absence request.
      description: >-
        Create an absence request.Expect error
        codes:<ol><li><strong>INVALID_ABSENCE_TIME</strong> - when invalid
        absence time provided</li><li><strong>INVALID_ABSENCE_ALLOWANCE</strong>
        - when employee absence allowance is not
        enough</li><li><strong>INVALID_HIRE_DATE</strong> - when employee hire
        date is invalid</li><li><strong>REQUESTING_RULES_VIOLATED</strong> -
        when requesting rules
        violated</li><li><strong>INVALID_APPROVAL_FLOW</strong> - when approval
        flow is not configured</li><li><strong>INVALID_ABSENCE_TYPE</strong> -
        when invalid absence type
        provided</li><li><strong>INVALID_REASON</strong> - when invalid reason
        provided</li><li><strong>INVALID_SUBSTITUTE</strong> - when invalid
        substitute provided</li><li><strong>INVALID_COMMENT</strong> - when
        invalid comment provided</li><li><strong>INVALID_TIME_PART</strong> -
        when invalid time part
        provided</li><li><strong>INVALID_ATTACHMENTS_REQUIRED</strong> - when
        attachments are required</li></ol>
      operationId: createAbsenceRequest
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAbsenceRequestForParticularEmployee'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AbsenceRequestId'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /leave/request/v1/create-comment:
    post:
      tags:
        - Absence requests
      summary: Create comment for chosen request.
      description: >-
        Create comment for chosen request.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_EMPLOYEE</strong> - when invalid employee
        id provided</li><li><strong>INVALID_CONTENT</strong> - when invalid
        content provided</li><li><strong>INVALID_REQUEST</strong> - when invalid
        absence request provided</li></ol>
      operationId: createComment
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Comment'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CommentOut'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /leave/request/v1/find:
    post:
      tags:
        - Absence requests
      summary: Find absence requests of employee in dates range.
      description: >-
        Find absence requests of employee in dates range.<br /><br />Expect
        error codes:<ol><li><strong>INVALID_EMPLOYEE</strong> - when invalid
        employee id provided</li><li><strong>INVALID_DATE_FROM</strong> - when
        invalid date from in filter
        provided</li><li><strong>INVALID_DATE_TO</strong> - when invalid date to
        in filter provided</li></ol>
      operationId: findAbsenceRequests
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FindAbsencesInRangeIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AbsenceDto'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /leave/request/v1/find-advanced:
    post:
      tags:
        - Absence requests
      summary: Find absence requests with advanced filtering by several parameters.
      description: >-
        Find absence requests in dates range. <br /><br />If you provide more
        than one value in one filter attribute there is OR relation between
        them.  For instance: if you put in a filter: {employees:
        ["john@mycompany.com", "kevin@mycompany.com"]} it returns all John's and
        all Kevin's requests.<br /><br />When you fill more than one attribute
        in filter all conditions have to be fulfilled. There is AND relation
        between attributes. For instance: if you provide in filter
        {absenceTypes: ["PTO"], teams: ["DevTeam"]} then will be returned PTO
        requests of employees who are in team DevTeam.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_DATE_FROM</strong> - when invalid time in
        filter provided</li><li><strong>INVALID_DATE_TO</strong> - when invalid
        time in filter provided</li><li><strong>INVALID_EMPLOYEE</strong> - when
        one of provided employees is
        invalid</li><li><strong>INVALID_ABSENCE_TYPE</strong> - when one of
        provided absence types is invalid</li><li><strong>INVALID_TEAM</strong>
        - when one of provided teams is
        invalid</li><li><strong>INVALID_POSITION</strong> - when one of provided
        positions is invalid</li><li><strong>INVALID_CONTRACT_TYPE</strong> -
        when one of provided contract types is
        invalid</li><li><strong>INVALID_CREATE_DATE_FROM</strong> - when invalid
        time in filter provided</li><li><strong>INVALID_CREATE_DATE_TO</strong>
        - when invalid time in filter
        provided</li><li><strong>INVALID_CREATE_UPDATE_FROM</strong> - when
        invalid time in filter
        provided</li><li><strong>INVALID_CREATE_UPDATE_TO</strong> - when
        invalid time in filter provided</li></ol>
      operationId: findAbsenceRequestsAdvanced
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FindAbsencesAdvancedIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AbsenceDtoExtended'
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured od invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /leave/request/v1/remove:
    post:
      tags:
        - Absence requests
      summary: Remove chosen absence request.
      description: >-
        Remove chosen absence request.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_REQUEST</strong> - when invalid absence
        request provided</li></ol>
      operationId: removeRequest
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AbsenceRequestId'
        required: false
      responses:
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /leave/v1/entitlement-balance/all:
    post:
      tags:
        - Absence type
      summary: Get entitlement balance grouped by absence type.
      description: >
        Get entitlement balance grouped by absence type.

        <br/><br/>

        The method allows you to get the entitlement balance for selected
        employee grouped by available absence types on a selected day.

        <br ><br />

        Expect error codes:

        <ol>

        <li><strong>INVALID_EMPLOYEE</strong> - when invalid balance owner
        provided</li>

        <li><strong>INVALID_DATE</strong> - when invalid date provided</li>

        </ol>
      operationId: getAllAbsenceTypesEntitlementBalances
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetBalanceOfEmployee'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BalanceOutWithAbsenceType'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /leave/v1/entitlement-balance/create:
    post:
      tags:
        - Absence type
      summary: Create entitlement balance.
      description: >-
        Create entitlement balance.<br/><br/>The method allows you to add the
        entitlement balance of a selected absence type on a selected day.<br
        ><br />Expect error codes:<ol><li><strong>INVALID_AMOUNT</strong> - when
        invalid amount provided</li><li><strong>INVALID_AS_OF_DATE</strong> -
        when invalid date provided</li><li><strong>INVALID_ABSENCE_TYPE</strong>
        - when invalid absence type
        provided</li><li><strong>INVALID_EMPLOYEE</strong> - when invalid
        balance owner provided</li><li><strong>INVALID_COMMENT</strong> - when
        invalid comment provided</li></ol>
      operationId: manualCreateEntitlementBalance
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBalanceIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModifyBalanceOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /leave/v1/entitlement-balance/get:
    post:
      tags:
        - Absence type
      summary: Get entitlement balance.
      description: >-
        Get entitlement balance.<br/><br/>The method allows you to get the
        entitlement balance for selected employee and absence type on a selected
        day.<br ><br />Expect error
        codes:<ol><li><strong>INVALID_ABSENCE_TYPE</strong> - when invalid
        absence type provided</li><li><strong>INVALID_EMPLOYEE</strong> - when
        invalid balance owner provided</li><li><strong>INVALID_DATE</strong> -
        when invalid date provided</li></ol>
      operationId: getEntitlementBalance
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetBalanceOfEmployeeAndAbsenceType'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BalanceOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '404':
          description: Absence Type not exists
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /leave/v1/entitlement-balance/get-advanced:
    post:
      tags:
        - Absence type
      summary: Get entitlement balance with advanced filtering by several parameters.
      description: >-
        Get entitlement balance.<br/><br/>The method allows you to get the
        entitlement balance for selected employees and absence types on a
        selected day.<br ><br />Expect error
        codes:<ol><li><strong>INVALID_ABSENCE_TYPE</strong> - when invalid
        absence type provided</li><li><strong>INVALID_EMPLOYEE</strong> - when
        invalid balance owner provided</li><li><strong>INVALID_TEAM</strong> -
        when invalid team provided</li><li><strong>INVALID_DATE</strong> - when
        invalid date provided</li></ol>
      operationId: getEntitlementBalances
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetEmployeesBalancesIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EmployeeBalanceOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /leave/v1/get-absence-types:
    post:
      tags:
        - Absence type
      summary: Get absence types with duration units.
      description: Get absence types with duration units. <br/><br/>
      operationId: getAbsenceTypes
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GetAbsenceTypeOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
  /positions/v1/all:
    post:
      tags:
        - Positions
      summary: Get all positions.
      description: Get all positions.
      operationId: getPositions
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PositionDto'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
  /positions/v1/create:
    post:
      tags:
        - Positions
      summary: Create a position.
      description: Create a position.
      operationId: createPosition
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePositionIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreatePositionOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /teams/v1/all:
    post:
      tags:
        - Teams
      summary: Get all teams.
      description: Get all teams.
      operationId: getTeams
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TeamOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
  /teams/v1/create:
    post:
      tags:
        - Teams
      summary: Create a team.
      description: Create a team.
      operationId: createTeam
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTeamIn'
        required: false
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateTeamOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /teams/v1/remove:
    post:
      tags:
        - Teams
      summary: Remove chosen team.
      description: >-
        Remove chosen team.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_REQUEST</strong> - when invalid team
        provided</li></ol>
      operationId: removeTeam
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TeamIdRequest'
        required: false
      responses:
        '400':
          description: Invalid input. Reason and description is returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failure. There are three possible reasons: disabled
            API access, no API terminal configured or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
      x-codegen-request-body-name: body
  /working-week/v1/all:
    post:
      tags:
        - Working Week
      summary: Get all working weeks.
      description: Get all working weeks.
      operationId: getWorkingWeeks
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WorkingWeekOut'
        '401':
          description: >-
            Authentication failure. There are two possible reasons: disabled API
            access, or invalid ApiKey provided
          content: {}
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
          content: {}
        '429':
          description: Too many requests per second or quota exceeded
          content: {}
  /people/v2:
    get:
      tags:
        - People (Beta)
      summary: List all people
      description: >
        You can fetch a list of all people.

        You can optionally specify a limit to control the number of results
        returned, and an offset to skip a specified number of entries from the
        start.
      operationId: listAllPeople
      parameters:
        - $ref: '#/components/parameters/ContractTypesParameter'
        - $ref: '#/components/parameters/PositionsParameter'
        - $ref: '#/components/parameters/TeamsParameter'
        - $ref: '#/components/parameters/ArchivedParameter'
        - $ref: '#/components/parameters/ProjectionParameter'
        - $ref: '#/components/parameters/ProjectionFieldsParameter'
        - $ref: '#/components/parameters/LimitParameter'
        - $ref: '#/components/parameters/OffsetParameter'
        - $ref: '#/components/parameters/SortParameter'
        - $ref: '#/components/parameters/NullOrderingParameter'
      responses:
        '200':
          description: >-
            The request was successful. A list of people matching the specified
            criteria is returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/search-people-response-schema'
        '400':
          description: >-
            The request parameters are invalid. Check filters, pagination or
            projection options.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad-request-error-schema'
        '403':
          description: You do not have permission to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/forbidden-request-error-schema'
        '500':
          description: An unexpected error occurred on the server.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/internal-server-error-schema'
      x-badges:
        - name: Beta
          position: before
    post:
      tags:
        - People (Beta)
      summary: Create a new person
      description: >
        This endpoint allows you to add a new person to the Calamari.

        The request must include essential details such as first name, last
        name,

        e-mail address, approval process, work schedule, and holidays calendar.
      operationId: createPerson
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/add-person-request-schema'
        required: true
      responses:
        '201':
          description: Person created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/add-person-response-schema'
        '400':
          description: >-
            The request is invalid due to syntax errors or incorrect parameters.
            Check the request structure and data format.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad-request-schema'
        '403':
          description: The license is unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/forbidden-schema'
        '500':
          description: Unexpected issue, typically should not happen.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/internal-server-error-schema'
      x-badges:
        - name: Beta
          position: before
  /people/v2/{id}:
    patch:
      tags:
        - People (Beta)
      summary: Update a person
      description: >
        This endpoint allows you to partially update a person in Calamari.

        You can send any number of fields in the request body.

        Only the fields included in the request will be updated.

        If a field is set to `null`, its value will be removed (if removal is
        allowed).

        Fields that are not included in the request will remain unchanged, even
        if they exist in the system.

        This means you can send both updated and unchanged fields, but only
        those explicitly provided in the request will be processed.
      operationId: partialUpdatePerson
      parameters:
        - name: id
          in: path
          description: The unique identifier of the person to update.
          required: true
          style: simple
          explode: false
          schema:
            type: string
          example: 24dc4a05-ef40-4c30-9b95-554bf3be8741
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update-person-request-schema'
        required: true
      responses:
        '204':
          description: Person updated successfully.
        '400':
          description: >-
            The request is invalid due to syntax errors or incorrect parameters.
            Check the request structure and data format.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad-request-schema'
        '403':
          description: The license is unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/forbidden-schema'
        '404':
          description: The requested resource could not be found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/not-found-schema'
        '500':
          description: Unexpected issue, typically should not happen.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/internal-server-error-schema'
      x-badges:
        - name: Beta
          position: before
components:
  schemas:
    AbsenceDto:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Absence request ID
        from:
          type: string
          format: date
          description: Absence start date in ISO format
          example: '2017-02-20'
        to:
          type: string
          format: date
          description: Absence finish date in ISO format
          example: '2017-02-25'
        absenceTypeName:
          type: string
          description: Absence type name
          example: Annual leave
        absenceTypeId:
          type: integer
          format: int64
          description: Absence type ID
        absenceCategory:
          type: string
          description: >-
            Absence category. TIMEOFF - regular time off. WORK - when employee
            is working but is not in office (eg. 'Remote working day')
          enum:
            - TIMEOFF
            - WORK
        status:
          type: string
          description: Absence request status
          enum:
            - PENDING
            - PENDING_CANCELLATION
            - REJECTED
            - ACCEPTED
            - CANCELED
            - REVOKED
        entitlementAmount:
          type: number
          format: float
          description: Entitlement amount
        reason:
          type: string
          description: Reason for absence
        amountFirstDay:
          type: number
          format: float
          description: First day amount
        amountLastDay:
          type: number
          format: float
          description: Last day amount
        entitlementAmountUnit:
          type: string
          description: 'Entitlement amount unit '
          enum:
            - DAYS
            - HOURS
        created:
          type: string
          format: date-time
          description: Date and time of absence request creation
        updated:
          type: string
          format: date-time
          description: Date and time of absence request latest update
        fullDayRequest:
          type: boolean
          description: Has the absence been requested for the whole day?
        startTime:
          type: string
          description: Local start date and start time of absence
          example: '2018-06-30T09:00:00.000'
        endTime:
          type: string
          description: Local end date and end time of absence
          example: '2018-06-30T13:00:00.000'
        timeZone:
          $ref: '#/components/schemas/DateTimeZone'
        hasAttachments:
          type: boolean
          description: Absence has attachments
          example: true
      required:
        - absenceCategory
        - absenceTypeId
        - absenceTypeName
        - amountFirstDay
        - amountLastDay
        - created
        - endTime
        - entitlementAmount
        - entitlementAmountUnit
        - from
        - fullDayRequest
        - hasAttachments
        - id
        - reason
        - startTime
        - status
        - timeZone
        - to
        - updated
    AbsenceDtoExtended:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Absence request ID
        from:
          type: string
          format: date
          description: Absence start date in ISO format
          example: '2017-02-20'
        to:
          type: string
          format: date
          description: Absence finish date in ISO format
          example: '2017-02-25'
        absenceTypeName:
          type: string
          description: Absence type name
          example: Annual leave
        absenceTypeId:
          type: integer
          format: int64
          description: Absence type ID
        absenceCategory:
          type: string
          description: >-
            Absence category. TIMEOFF - regular time off. WORK - when employee
            is working but is not in office (eg. 'Remote working day')
          enum:
            - TIMEOFF
            - WORK
        status:
          type: string
          description: Absence request status
          enum:
            - PENDING
            - PENDING_CANCELLATION
            - REJECTED
            - ACCEPTED
            - CANCELED
            - REVOKED
        entitlementAmount:
          type: number
          format: float
          description: Entitlement amount
        reason:
          type: string
          description: Reason for absence
        amountFirstDay:
          type: number
          format: float
          description: First day amount
        amountLastDay:
          type: number
          format: float
          description: Last day amount
        entitlementAmountUnit:
          type: string
          description: 'Entitlement amount unit '
          enum:
            - DAYS
            - HOURS
        created:
          type: string
          format: date-time
          description: Date and time of absence request creation
        updated:
          type: string
          format: date-time
          description: Date and time of absence request latest update
        fullDayRequest:
          type: boolean
          description: Has the absence been requested for the whole day?
        startTime:
          type: string
          description: Local start date and start time of absence
          example: '2018-06-30T09:00:00.000'
        endTime:
          type: string
          description: Local end date and end time of absence
          example: '2018-06-30T13:00:00.000'
        timeZone:
          $ref: '#/components/schemas/DateTimeZone'
        hasAttachments:
          type: boolean
          description: Absence has attachments
          example: true
        employeeEmail:
          type: string
          description: Employee email
          example: john.white@mycompany.com
        substituteEmail:
          type: string
          description: >-
            Substitute email. Has null value if employee does not have
            substitute
          example: john.black@mycompany.com
      required:
        - absenceCategory
        - absenceTypeId
        - absenceTypeName
        - amountFirstDay
        - amountLastDay
        - created
        - endTime
        - entitlementAmount
        - entitlementAmountUnit
        - from
        - fullDayRequest
        - hasAttachments
        - id
        - reason
        - startTime
        - status
        - timeZone
        - to
        - updated
    AbsenceRequestId:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Absence request ID
      required:
        - id
    ArchiveProjectRequestIn:
      type: object
      properties:
        projectId:
          type: integer
          format: int64
          description: Project ID
          example: 13
      required:
        - projectId
    BalanceEntryOut:
      type: object
      properties:
        person:
          $ref: '#/components/schemas/EmployeeSimpleOut'
        balance:
          type: integer
          format: int64
          description: Working time balance in seconds
          example: -3600
      required:
        - balance
        - person
    BalanceOut:
      type: object
      properties:
        unit:
          type: string
          description: Duration unit
          enum:
            - '[HOURS'
            - DAYS]
        unlimited:
          type: boolean
          description: Is entitlement balance unlimited?
        amount:
          type: integer
          format: int32
          description: Entitlement balance amount
      required:
        - amount
        - unit
        - unlimited
    BalanceOutWithAbsenceType:
      type: object
    BreakDto:
      type: object
      properties:
        from:
          type: string
          format: date-time
          description: Date and time when break was started.
        to:
          type: string
          format: date-time
          description: >-
            Date and time when break was finished. Has null value if break was
            not finished
        duration:
          type: integer
          format: int64
          description: >-
            Duration of a break in seconds. Has null value if break was not
            finished.
          example: 28800
        breakType:
          $ref: '#/components/schemas/BreakTypeOut'
    BreakDtoIn:
      type: object
      description: Breaks
      properties:
        breakType:
          type: integer
          format: int64
          description: ID break type
          example: 1
        breakStart:
          type: string
          description: Date and time of break start in ISO format
          example: '2020-03-15T09:30:00'
        breakEnd:
          type: string
          description: Date and time of break end in ISO format
          example: '2020-03-15T10:30:00'
      required:
        - breakEnd
        - breakStart
        - breakType
    BreakIn:
      type: object
      description: Break method payload.
      properties:
        person:
          type: string
          description: Employee e-mail or login
          example: john.white@mycompany.com
        time:
          type: string
          description: Date and time of event occurence in ISO format.
          example: '2015-11-10T08:30:00'
        breakType:
          type: integer
          format: int64
          description: ID break type
          example: 1
      required:
        - breakType
        - person
        - time
    BreakOut:
      type: object
      properties:
        person:
          $ref: '#/components/schemas/Person'
        breakStatus:
          type: string
          description: Employee break status after request
          enum:
            - STARTED
            - FINISHED
      required:
        - breakStatus
        - person
    BreakTypeOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Break id
        name:
          type: string
          description: Break name
          example: Primary break
    Comment:
      type: object
      description: Absence request comment with content and creator
      properties:
        creator:
          type: string
          description: >-
            Employee identifier. You can use e-mail or external identifier in
            format (externalNumber:ABC123)
          example: john.white@mycompany.com
        content:
          type: string
          description: Comment content
          example: Home office
        absenceRequestId:
          type: integer
          format: int64
          description: Absence request id
          example: 12
      required:
        - absenceRequestId
        - content
        - creator
    CommentOut:
      type: object
      properties:
        commentator:
          $ref: '#/components/schemas/EmployeeSimpleOut'
        content:
          type: string
          description: Comment content
        absenceRequestId:
          type: integer
          format: int64
          description: Absence request ID
      required:
        - absenceRequestId
        - commentator
        - content
    ContractTypeOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Contract type ID
        name:
          type: string
          description: Contract type name
          example: Contract name
      required:
        - id
        - name
    CreateAbsenceRequestForParticularEmployee:
      type: object
      properties:
        employee:
          type: string
          description: >-
            Employee e-mail or login. Absence request will be created for the
            chosen employee. Chosen employee will be also a creator of request.
          example: john.white@mycompany.com
        fromPart:
          type: string
          description: >-
            Time part value for absence start. Allowed values are based on
            minimal duration of absence request in absence type configuration.
          enum:
            - MORNING
            - AFTERNOON
            - END_OF_DAY and hour based(HH:mm)
          example: MORNING
        toPart:
          type: string
          description: >-
            Time part value for absence end. Allowed values are based on minimal
            duration of absence request in absence type configuration.
          enum:
            - MORNING
            - AFTERNOON
            - END_OF_DAY and hour based(HH:mm)
          example: END_OF_DAY
        absenceTypeId:
          type: string
          description: Absence type Id
          example: PTO
        reason:
          type: string
          description: Reason content
          example: Home office
          maxLength: 1024
          minLength: 0
        substitute:
          type: string
          description: Employee e-mail or login
          example: john.white@mycompany.com
        comment:
          type: string
          description: Comment content
          example: Home office
          maxLength: 1024
          minLength: 0
        dateTo:
          type: string
          format: date
        dateFrom:
          type: string
          format: date
      required:
        - absenceTypeId
        - employee
        - fromPart
        - toPart
    CreateBalanceIn:
      type: object
      description: Create entitlement balance.
      properties:
        amount:
          type: string
          description: Entitlement amount with precision 3
          example: '1.5'
        asOfDate:
          type: string
          format: date
          description: Date in ISO format
          example: '2018-09-25'
        absenceType:
          type: integer
          format: int64
          description: Absence type Id
        employee:
          type: string
          description: Employee e-mail or login
          example: john.white@mycompany.com
        comment:
          type: string
          description: Optional comment
          example: Example comment
        balanceOwner:
          type: string
      required:
        - absenceType
        - amount
        - asOfDate
        - employee
    CreateEmployeeOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Id of create employee
      required:
        - id
    CreatePositionIn:
      type: object
      properties:
        positionName:
          type: string
          description: Position name.
          example: Manager
          maxLength: 2147483647
          minLength: 1
        members:
          type: array
          description: Ids of employees in the position.
          items:
            type: integer
            format: int64
      required:
        - members
        - positionName
    CreatePositionOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Id of the created position.
          example: 1
      required:
        - id
    CreateProjectRequestIn:
      type: object
      properties:
        name:
          type: string
          description: Project name
          example: PROJECT-123
        restrictedToPersons:
          type: array
          description: >-
            List of employees e-mails or logins. Example:
            ["john.smith@domain.com", "mark.small@domain.com"]
          items:
            type: string
        restrictedToTeams:
          type: array
          description: 'List of teams names or ids. Example: ["Developers Team", "17"]'
          items:
            type: string
      required:
        - name
    CreateTeamIn:
      type: object
      properties:
        name:
          type: string
          description: Team name.
          example: Marketing
          maxLength: 2147483647
          minLength: 1
        members:
          type: array
          description: Identifiers of team members.
          items:
            type: integer
            format: int64
        managers:
          type: array
          description: Identifiers of team managers.
          items:
            type: integer
            format: int64
      required:
        - managers
        - members
        - name
    CreateTeamOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Id of the created team.
          example: 1
      required:
        - id
    CreateTimesheetEntryIn:
      type: object
      description: Creating historical shift
      properties:
        person:
          type: string
          description: >-
            Employee identifier. You can use e-mail or external identifier in
            format (externalNumber:ABC123)
          example: john.white@mycompany.com
        shiftStart:
          type: string
          description: Date and time of shift start in ISO format
          example: '2020-03-15T08:30:00'
        shiftEnd:
          type: string
          description: Date and time of shift end in ISO format
          example: '2020-03-15T16:30:00'
        breaks:
          type: array
          description: List of breaks.
          items:
            $ref: '#/components/schemas/BreakDtoIn'
        projects:
          type: array
          description: List of projects.
          items:
            $ref: '#/components/schemas/ProjectDtoIn'
        description:
          type: string
          description: Shift description
          maxLength: 4096
          minLength: 0
      required:
        - person
        - shiftEnd
        - shiftStart
    CurrentShiftStatus:
      type: object
      properties:
        person:
          $ref: '#/components/schemas/EmployeeSimpleOut'
        status:
          type: string
          description: Current shift status.
          enum:
            - STARTED
            - STOPPED
            - BREAK
      required:
        - person
        - status
    DailyPresenceReport:
      type: object
      properties:
        date:
          type: string
          description: Date of the daily report
          example: '2021-01-01'
        dailyPresenceReport:
          type: array
          description: Daily employees presence reports
          items:
            $ref: '#/components/schemas/EmployeePresenceStatus'
      required:
        - dailyPresenceReport
        - date
    DateTimeZone:
      type: object
      properties:
        id:
          type: string
        fixed:
          type: boolean
    DeleteTimesheetEntryById:
      type: object
      description: Deleting timesheet entry by id
      properties:
        id:
          type: integer
          format: int64
      required:
        - id
    EditProjectRequestIn:
      type: object
      properties:
        projectId:
          type: integer
          format: int64
          description: Project ID
          example: 13
        name:
          $ref: '#/components/schemas/ThreeStateOptionalString'
        restrictedToPersons:
          $ref: '#/components/schemas/ThreeStateOptionalListString'
        restrictedToTeams:
          $ref: '#/components/schemas/ThreeStateOptionalListString'
      required:
        - projectId
    EditTimesheetEntryIn:
      type: object
      description: Updating historical shift
      properties:
        person:
          type: string
          description: >-
            Employee identifier. You can use e-mail or external identifier in
            format (externalNumber:ABC123)
          example: john.white@mycompany.com
        shiftStart:
          type: string
          description: Date and time of shift start in ISO format
          example: '2020-03-15T08:30:00'
        shiftEnd:
          type: string
          description: Date and time of shift end in ISO format
          example: '2020-03-15T16:30:00'
        breaks:
          type: array
          description: List of breaks.
          items:
            $ref: '#/components/schemas/BreakDtoIn'
        projects:
          type: array
          description: List of projects.
          items:
            $ref: '#/components/schemas/ProjectDtoIn'
        description:
          type: string
          description: Shift description
          maxLength: 4096
          minLength: 0
        id:
          type: integer
          format: int64
      required:
        - id
        - person
        - shiftEnd
        - shiftStart
    EmployeeBalanceOut:
      type: object
    EmployeeFullOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Employee id number
        firstName:
          type: string
          description: Employee first name
          example: John
        lastName:
          type: string
          description: Employee last name
          example: Smith
        email:
          type: string
          description: Employee email
          example: john.smith@domain.com
        externalNumber:
          type: string
          description: External employee number
          example: AYU23
        workingWeek:
          $ref: '#/components/schemas/SimpleWorkingWeek'
        approvalFlow:
          $ref: '#/components/schemas/SimpleAcceptanceFlow'
        position:
          $ref: '#/components/schemas/SimplePosition'
        teams:
          type: array
          description: Teams
          items:
            $ref: '#/components/schemas/SimpleTeam'
        admin:
          type: boolean
          description: Is the employee is an admin?
        contractType:
          $ref: '#/components/schemas/SimpleContractType'
        language:
          type: string
          description: Employee language
          example: EN
        timezone:
          type: string
          description: Employee timezone
          example: Europe/Warsaw
        directManager:
          $ref: '#/components/schemas/SimpleEmployee'
        birthDate:
          type: string
          format: date
          description: Birth date
          example: '2017-02-20'
        hireDate:
          type: string
          format: date
          description: Hire date
          example: '2017-02-20'
        businessPhone:
          type: string
          description: Business phone
          example: '827032162'
        homePhone:
          type: string
          description: Home phone
          example: '826021237'
        personalEmail:
          type: string
          description: Personal email
          example: john.smith@personalDomain.com
        addressStreet:
          type: string
          description: Address street
          example: Small Street
        addressNumber:
          type: string
          description: Address building/flat number
          example: 2/12
        addressCity:
          type: string
          description: Address city
          example: Warsaw
        addressPostalCode:
          type: string
          description: Address postal code
          example: 15-322
        addressProvinceState:
          type: string
          description: Address province/state.
          example: Main province
        addressCountry:
          type: string
          description: Address country
          example: Poland
        emergencyContactName:
          type: string
          description: Emergency contact name
          example: Contact name
        emergencyContactRelationship:
          type: string
          description: Emergency contact relationship
          example: Contact relationship
        emergencyContactPhone:
          type: string
          description: Emergency contact phone
          example: '820321876'
        holidaysCalendar:
          $ref: '#/components/schemas/GetHolidayCalendarOut'
        maritalStatus:
          type: string
          description: Martial status
          enum:
            - SINGLE
            - MARRIED
            - WIDOWED
            - SEPARATED
            - DIVORCED
            - NOT_SET
        probationEndDate:
          type: string
          format: date
          description: Probation end date
          example: '2017-02-20'
        plannedFiring:
          type: string
          format: date
          description: Planned firing
          example: '2017-02-20'
        seniorityBeforeHireYears:
          type: integer
          format: int32
          description: Seniority before hire - years
        seniorityBeforeHireMonths:
          type: integer
          format: int32
          description: Seniority before hire - months
        childrenCount:
          type: integer
          format: int32
          description: Number of children
        youngestChildBirthDate:
          type: string
          format: date
          description: The youngest child birth date
          example: '2017-02-20'
        customNote:
          type: string
          description: Custom note
          example: Optional custom note
        sex:
          type: string
          description: Sex
          enum:
            - MALE
            - FEMALE
            - OTHER
            - NOT_SET
        archived:
          type: boolean
          description: Is employee archived?
      required:
        - addressCity
        - addressCountry
        - addressNumber
        - addressPostalCode
        - addressProvinceState
        - addressStreet
        - admin
        - approvalFlow
        - archived
        - birthDate
        - businessPhone
        - childrenCount
        - contractType
        - customNote
        - directManager
        - email
        - emergencyContactName
        - emergencyContactPhone
        - emergencyContactRelationship
        - externalNumber
        - firstName
        - hireDate
        - holidaysCalendar
        - homePhone
        - id
        - language
        - lastName
        - maritalStatus
        - personalEmail
        - plannedFiring
        - position
        - probationEndDate
        - seniorityBeforeHireMonths
        - seniorityBeforeHireYears
        - sex
        - teams
        - timezone
        - workingWeek
        - youngestChildBirthDate
    EmployeePresenceStatus:
      type: object
      properties:
        employee:
          type: string
          description: Employee full name
          example: John White
        status:
          type: string
          description: Employee presence status
          example: PTO
        email:
          type: string
          description: Employee email
          example: john.smith@domain.com
      required:
        - email
        - employee
        - status
    EmployeeSimpleOut:
      type: object
      properties:
        firstName:
          type: string
          description: Employee first name
          example: John
        lastName:
          type: string
          description: Employee last name
          example: Williams
        email:
          type: string
          description: Employee email
          example: john.williams@domain.com
        externalId:
          type: string
          description: Employee external identifier
          example: A12Y
      required:
        - email
        - firstName
        - lastName
    EmployeesOut:
      type: object
      properties:
        employees:
          type: array
          description: List of employees
          items:
            $ref: '#/components/schemas/EmployeeFullOut'
        currentPage:
          type: integer
          format: int32
          description: Current page
        totalPages:
          type: integer
          format: int32
          description: Total pages
      required:
        - currentPage
        - employees
        - totalPages
    ErrorResponse:
      type: object
      description: Error response.
      properties:
        message:
          type: string
          description: Human readable error explanation.
          example: Api error
        code:
          type: string
          description: Error code.
          example: INVALID_JSON_PAYLOAD
        field:
          type: string
          description: >-
            Which field of payload object caused error. NULL when error is not
            related to particular field
          example: field
    FilterBalanceEntriesIn:
      type: object
      description: Searching working time balances advanced filter.
      properties:
        from:
          type: string
          format: date
          description: Start date of dates range to search request in ISO format
          example: '2020-01-10'
        to:
          type: string
          format: date
          description: End date of dates range to search request in ISO format
          example: '2020-01-15'
        teams:
          type: array
          description: >-
            List of teams names or identifiers to search. As a result there will
            be absence requests of employees who are members of at least one of
            provided teams. Example: ["First Team", "Second Team", "Third Team"]
          items:
            type: string
        positions:
          type: array
          description: >-
            List of positions names or identifiers to search. As a result there
            will be absence requests of employees who have one of provided
            positions. Example: ["Developer", "Support", "Architect"]
          items:
            type: string
        contractTypes:
          type: array
          description: >-
            List of contract types names or identifiers to search. As a result
            there will be absence requests of employees who have one of contract
            type. Example: ["firstContract", "secondContract"]
          items:
            type: string
        employees:
          type: array
          description: >-
            List of employees e-mails or logins. Example:
            ["john.smith@domain.com", "mark.small@domain.com"]
          items:
            type: string
      required:
        - from
        - to
    FilterTimesheetEntriesIn:
      type: object
      description: Searching timesheet entries.
      properties:
        from:
          type: string
          format: date
          description: Start date of dates range to search timesheet entries in ISO format
          example: '2018-10-01'
        to:
          type: string
          format: date
          description: End date of dates range to search timesheet entries in ISO format
          example: '2018-10-01'
        teams:
          type: array
          description: >-
            List of teams names or identifiers to search. As a result there will
            be timesheet entries of employees who are members of at least one of
            provided teams. Example: ["First Team", "Second Team"]
          items:
            type: string
        positions:
          type: array
          description: >-
            List of positions names or identifiers to search. As a result there
            will be timesheet entries of employees who have one of provided
            positions. Example: ["Developer", "Support"]
          items:
            type: string
        contractTypes:
          type: array
          description: >-
            List of contract types names or identifiers to search. As a result
            there will be timesheet entries of employees who have one of
            contract type. Example: ["Full Time"]
          items:
            type: string
        employees:
          type: array
          description: >-
            List of employees e-mails or logins. Example:
            ["john.white@domain.com", "mark.smith@domain.com"]
          items:
            type: string
      required:
        - from
        - to
    FindAbsencesAdvancedIn:
      type: object
      description: Searching absence requests advanced filter.
      properties:
        from:
          type: string
          format: date
          description: Start date of dates range to search request in ISO format
          example: '2017-01-10'
        to:
          type: string
          format: date
          description: End date of dates range to search request in ISO format
          example: '2017-01-15'
        absenceTypes:
          type: array
          description: >-
            List of absence types names or identifiers to search. Example:
            ["Annual Leave", "Remote Work", "Sick Leave"]
          items:
            type: string
        teams:
          type: array
          description: >-
            List of teams names or identifiers to search. As a result there will
            be absence requests of employees who are members of at least one of
            provided teams. Example: ["First Team", "Second Team", "Third Team"]
          items:
            type: string
        positions:
          type: array
          description: >-
            List of positions names or identifiers to search. As a result there
            will be absence requests of employees who have one of provided
            positions. Example: ["Developer", "Support", "Architect"]
          items:
            type: string
        contractTypes:
          type: array
          description: >-
            List of contract types names or identifiers to search. As a result
            there will be absence requests of employees who have one of contract
            type. Example: ["firstContract", "secondContract"]
          items:
            type: string
        employees:
          type: array
          description: >-
            List of employees e-mails or logins. Example:
            ["john.smith@domain.com", "mark.small@domain.com"]
          items:
            type: string
        createdFrom:
          type: string
          format: date-time
          description: >-
            Filter absence requests by date of creation. As a result there will
            be absence requests created at the provided moment or later. Please
            provide the date and time in ISO 8601 format with time zone. 
          example: '2017-01-23T08:00:00+01:00'
        createdTo:
          type: string
          format: date-time
          description: >-
            Filter absence requests by date of creation. As a result there will
            be absence requests created before the provided moment. Please
            provide the date and time in ISO 8601 format with time zone.
          example: '2017-01-24T00:00:00+01:00'
        updatedFrom:
          type: string
          format: date-time
          description: >-
            Filter absence requests by date of last update. As a result there
            will be absence requests updated at the provided moment or later.
            Please provide the date and time in ISO 8601 format with time zone.
          example: '2017-01-23T08:00:00+01:00'
        updatedTo:
          type: string
          format: date-time
          description: >-
            Filter absence requests by date of last update. As a result there
            will be absence requests updated before the provided moment. Please
            provide the date and time in ISO 8601 format with time zone.
          example: '2017-01-24T00:00:00+01:00'
        absenceStatuses:
          type: array
          description: >-
            Filter absence requests by absence statuses. As a result there will
            be absence requests with chosen statuses. By default return all
            absence requests. Allowed values: ["PENDING",
            "PENDING_CANCELLATION", "REJECTED", "APPROVED", "CANCELED",
            "REVOKED"]
          example: '[PENDING, APPROVED]'
          items:
            type: string
      required:
        - from
        - to
    FindAbsencesInRangeIn:
      type: object
      description: Searching absence requests filter.
      properties:
        employee:
          type: string
          description: Employee e-mail or login
          example: john.white@mycompany.com
        from:
          type: string
          format: date
          description: Start date of dates range to search request in ISO format
          example: '2017-01-10'
        to:
          type: string
          format: date
          description: End date of dates range to search request in ISO format
          example: '2017-01-15'
      required:
        - employee
        - from
        - to
    FindHolidaysInRangeIn:
      type: object
      description: Searching public holidays for employee filter.
      properties:
        employee:
          type: string
          description: Employee e-mail or login
          example: john.white@mycompany.com
        from:
          type: string
          format: date
          description: Start date of dates range to search in ISO format
          example: '2017-01-10'
        to:
          type: string
          format: date
          description: End date of dates range to search in ISO format
          example: '2017-01-15'
      required:
        - employee
        - from
        - to
    GetAbsenceTypeOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Absence type ID
        name:
          type: string
          description: Absence type name
          example: Annual Leave
        durationUnit:
          type: string
          description: 'Entitlement amount unit '
          enum:
            - DAYS
            - HOURS
        externalId:
          type: string
          description: Absence type external ID
          example: P001
      required:
        - durationUnit
        - id
        - name
    GetBalanceOfEmployee:
      type: object
      properties:
        employee:
          type: string
          description: Employee e-mail or login
          example: john.white@mycompany.com
        date:
          type: string
          format: date
          description: Date in ISO format
          example: '2018-09-25'
      required:
        - date
        - employee
    GetBalanceOfEmployeeAndAbsenceType:
      type: object
      properties:
        absenceTypeId:
          type: string
          description: Absence type Id
          example: PTO
        employee:
          type: string
          description: Employee e-mail or login
          example: john.white@mycompany.com
        date:
          type: string
          format: date
          description: Date in ISO format
          example: '2018-09-25'
      required:
        - absenceTypeId
        - date
        - employee
    GetBreakTypeOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Break type id
        name:
          type: string
          description: Break type name
          example: Break name
      required:
        - id
        - name
    GetEmployeesBalancesIn:
      type: object
      properties:
        absenceTypeId:
          type: string
          description: Absence type Id
          example: PTO
        teams:
          type: array
          description: >-
            List of teams names or identifiers to search. As a result there will
            be balances of employees who are members of at least one of provided
            teams. Example: ["First Team", "Second Team", "Third Team"]
          items:
            type: string
        positions:
          type: array
          description: >-
            List of positions names or identifiers to search. As a result there
            will be balances of employees who have one of provided positions.
            Example: ["Developer", "Support", "Architect"]
          items:
            type: string
        contractTypes:
          type: array
          description: >-
            List of contract types names or identifiers to search. As a result
            there will be balances of employees who have one of contract type.
            Example: ["firstContract", "secondContract"]
          items:
            type: string
        employees:
          type: array
          description: >-
            List of employees e-mails or logins. Example:
            ["john.smith@domain.com", "mark.small@domain.com"]
          items:
            type: string
        date:
          type: string
          format: date
          description: Date in ISO format
          example: '2018-09-25'
      required:
        - absenceTypeId
        - date
    GetHolidayCalendarOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Holiday calendar id
        name:
          type: string
          description: Holiday calendar name
          example: Primary calendar
      required:
        - id
        - name
    GetPresenceReportRequest:
      type: object
      properties:
        dateFrom:
          type: string
          format: date
          description: Start date of dates range to generate presence report in ISO format
          example: '2017-01-10'
        dateTo:
          type: string
          format: date
          description: End date of dates range to  generate presence report in ISO format
          example: '2017-01-15'
        page:
          type: integer
          format: int32
          description: Number of result page
          example: 0
          minimum: 0
        limit:
          type: integer
          format: int32
          description: Number of results returned in one request
          example: 100
          maximum: 100
          minimum: 1
      required:
        - dateFrom
        - dateTo
        - limit
        - page
    HolidayOut:
      type: object
      properties:
        name:
          type: string
          description: Public holiday name
          example: Holiday name
        start:
          type: string
          format: date
          description: First day of the holiday
          example: '2017-02-20'
        end:
          type: string
          format: date
          description: Last day of the holiday
          example: '2017-02-20'
        halfDay:
          type: boolean
          description: Half day holiday
        halfdayPeriod:
          type: string
          description: >-
            If halfDay is true halfdayPeriod tells which part of day is
            non-working
          enum:
            - AM
            - PM
            - 'null'
      required:
        - end
        - halfDay
        - halfdayPeriod
        - name
        - start
    InvitationEmployeeIn:
      type: object
      properties:
        employee:
          type: string
          description: Employee e-mail or login
          example: john.white@mycompany.com
      required:
        - employee
    ModifyBalanceOut:
      type: object
      properties:
        result:
          type: string
          description: Result of modify entitlement
          enum:
            - ENTITLEMENT_MODIFIED
      required:
        - result
    Person:
      type: object
      properties:
        firstName:
          type: string
          description: Employee first name
          example: John
        lastName:
          type: string
          description: Employee first name
          example: White
      required:
        - firstName
        - lastName
    PersonForBreakTypes:
      type: object
      properties:
        person:
          type: string
          description: >-
            Employee identifier. You can use e-mail or external identifier in
            format (externalNumber:ABC123)
          example: john.white@mycompany.com
      required:
        - person
    PersonForProjects:
      type: object
      properties:
        person:
          type: string
          description: >-
            Employee identifier. You can use e-mail or external identifier in
            format (externalNumber:ABC123)
          example: john.white@mycompany.com
      required:
        - person
    PositionDto:
      type: object
      description: Position
      properties:
        id:
          type: integer
          format: int64
          description: Position id
        name:
          type: string
          description: Position name
          example: Manager
      required:
        - id
        - name
    ProjectDto:
      type: object
      properties:
        from:
          type: string
          format: date-time
          description: Date and time when employee started working on project
        to:
          type: string
          format: date-time
          description: >-
            Date and time when employee finished working on project. Has null
            value if work on project was not finished
        duration:
          type: integer
          format: int64
          description: >-
            Duration of time spent on a project in seconds. Has null value if
            work on project was not finished
          example: 28800
        project:
          $ref: '#/components/schemas/ProjectOut'
    ProjectDtoIn:
      type: object
      description: Projects
      properties:
        projectType:
          type: integer
          format: int64
          description: ID project type
          example: 1
        projectStart:
          type: string
          description: Date and time of project worklog start in ISO format
          example: '2020-03-15T09:30:00'
        projectEnd:
          type: string
          description: Date and time of project worklog end in ISO format
          example: '2020-03-15T10:30:00'
      required:
        - projectEnd
        - projectStart
        - projectType
    ProjectOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Project id
        name:
          type: string
          description: Project name
          example: Primary project
    ProjectOutWithAssignedEmployeesTeams:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Project id
        name:
          type: string
          description: Project name
          example: Primary project
        employees:
          type: array
          description: Assigned employees
          items:
            $ref: '#/components/schemas/EmployeeSimpleOut'
        teams:
          type: array
          description: Assigned teams
          items:
            $ref: '#/components/schemas/TeamOut'
    PublicArchiveEmployeeIn:
      type: object
      properties:
        employee:
          type: string
          description: Employee e-mail or login
          example: john.white@mycompany.com
      required:
        - employee
    PublicCreateEmployeeIn:
      type: object
      properties:
        firstName:
          type: string
          description: Employee first name
          example: John
        lastName:
          type: string
          description: Employee last name
          example: Williams
        email:
          type: string
          description: Employee email
          example: john.white@mycompany.com
        workingWeek:
          type: string
          description: Working week name or identifier
          example: Working week name
        approvalFlow:
          type: string
          description: Approval flow name or identifier
          example: Flow name
        position:
          type: string
          description: Position name or identifier.
          example: Developer
        teams:
          type: array
          description: 'List of teams names or identifiers. Example: ["Developers Team"]'
          items:
            type: string
        holidaysCalendar:
          type: string
          description: Holidays calendar name or identifier
          example: Primary calendar
        sex:
          type: string
          description: Sex
          enum:
            - MALE
            - FEMALE
            - OTHER
            - NOT_SET
        maritalStatus:
          type: string
          description: Martial status
          enum:
            - SINGLE
            - MARRIED
            - WIDOWED
            - SEPARATED
            - DIVORCED
            - NOT_SET
        admin:
          type: boolean
          description: Is the employee is an admin?
        contractType:
          type: string
          description: Contract type name or identifier
          example: Contract type
        externalNumber:
          type: string
          description: External number
          example: A12Y
        directManager:
          type: string
          description: Direct manager e-mail or login
          example: john.white@mycompany.com
        birthDate:
          type: string
          format: date
          description: Birth date in ISO format
          example: '2017-02-20'
        hireDate:
          type: string
          format: date
          description: Hire date in ISO format
          example: '2017-02-20'
        businessPhone:
          type: string
          description: Business phone
          example: '876234928'
        homePhone:
          type: string
          description: Home phone
          example: '283018271'
        personalEmail:
          type: string
          description: Personal email
          example: john.white@mycompany.com
        addressStreet:
          type: string
          description: Address street
          example: Buckfast Street
        addressNumber:
          type: string
          description: Address building/flat number
          example: 2/20
        addressCity:
          type: string
          description: Address city
          example: Warsaw
        addressPostalCode:
          type: string
          description: Address postal code
          example: 12-333
        addressProvinceState:
          type: string
          description: Address province/state
          example: Main Province
        addressCountry:
          type: string
          description: Address country
          example: Poland
        emergencyContactName:
          type: string
          description: Emergency contact name
          example: Contact name
        emergencyContactRelationship:
          type: string
          description: Emergency contact relationship
          example: Contact relationship
        emergencyContactPhone:
          type: string
          description: Emergency contact phone
          example: '198263098'
        probationEndDate:
          type: string
          format: date
          description: Probation end date in ISO format
          example: '2017-02-20'
        plannedFiring:
          type: string
          format: date
          description: Planned firing in ISO format
          example: '2017-02-20'
        seniorityBeforeHireYears:
          type: integer
          format: int32
          description: Seniority before hire - years
        seniorityBeforeHireMonths:
          type: integer
          format: int32
          description: Seniority before hire - months
        childrenCount:
          type: integer
          format: int32
          description: Number of children
        youngestChildBirthDate:
          type: string
          format: date
          description: The youngest child birth date in ISO format
          example: '2017-02-20'
        customNote:
          type: string
          description: Custom note
          example: Optional custom note about employee
      required:
        - admin
        - approvalFlow
        - email
        - firstName
        - holidaysCalendar
        - lastName
        - maritalStatus
        - sex
        - workingWeek
    PublicEditEmployeeIn:
      type: object
      properties:
        employee:
          type: string
          description: Employee e-mail or login
          example: john.white@mycompany.com
        firstName:
          type: string
          description: Employee first name to update.
          example: John
        lastName:
          type: string
          description: Employee last name to update.
          example: Williams
        email:
          type: string
          description: Employee email to update.
          example: john.williams@domain.com
        workingWeek:
          type: string
          description: Working week name or identifier to update.
          example: Working week name
        approvalFlow:
          type: string
          description: Approval flow name or identifier to update.
          example: Main Approval Flow
        position:
          type: string
          description: Position name or identifier to update.
          example: Developer
        teams:
          type: array
          description: List of teams names or identifiers to update.
          example:
            - '4'
            - '10'
          items:
            type: string
        holidaysCalendar:
          type: string
          description: Holidays calendar name or identifier to update.
          example: Primary calendar
        sex:
          type: string
          description: Sex
        maritalStatus:
          type: string
          description: Marital status to update
        admin:
          type: boolean
          description: Is the employee is an admin?
        contractType:
          type: string
          description: Contract type name or identifier.
          example: Full time
        externalNumber:
          type: string
          description: External number.
          example: A27D
        directManager:
          type: string
          description: Direct manager e-mail or login.
          example: mark.smith@domain.com
        birthDate:
          type: string
          description: Birth date to update in ISO format
          example: '2017-02-20'
        hireDate:
          type: string
          description: Hire date to update in ISO format
          example: '2017-02-20'
        businessPhone:
          type: string
          description: Business phone to update.
          example: '982027621'
        homePhone:
          type: string
          description: Home phone to update.
          example: '982027621'
        personalEmail:
          type: string
          description: 'Personal email to update. Example: '
          example: john.white@mycompany.com
        addressStreet:
          type: string
          description: Address street to update
          example: New Street
        addressNumber:
          type: string
          description: Address building/flat number to update
          example: 2/12
        addressCity:
          type: string
          description: Address city to update
          example: Warsaw
        addressPostalCode:
          type: string
          description: Address postal code to update
          example: 28-283
        addressProvinceState:
          type: string
          description: Address province/state to update
          example: Main province
        addressCountry:
          type: string
          description: Address country to update
          example: Poland
        emergencyContactName:
          type: string
          description: Emergency contact name to update
          example: Contact name
        emergencyContactRelationship:
          type: string
          description: Emergency contact relationship to update
          example: Contact relationship
        emergencyContactPhone:
          type: string
          description: Emergency contact phone to update
          example: '928196340'
        probationEndDate:
          type: string
          description: Probation end date to update in ISO format
          example: '2017-02-20'
        plannedFiring:
          type: string
          description: Planned firing to update in ISO format
          example: '2017-02-20'
        seniorityBeforeHireYears:
          type: integer
          format: int32
          description: Seniority before hire to update- years
        seniorityBeforeHireMonths:
          type: integer
          format: int32
          description: Seniority before hire to update- months
        childrenCount:
          type: integer
          format: int32
          description: Number of children to update
        youngestChildBirthDate:
          type: string
          description: The youngest child birth date to update in ISO format
          example: '2017-02-20'
        customNote:
          type: string
          description: Custom note to update
          example: Custom note about employee
      required:
        - employee
    PublicEmployeesIn:
      type: object
      properties:
        page:
          type: integer
          format: int32
          description: Page number
          example: 0
    PublicSearchEmployeesIn:
      type: object
      properties:
        employee:
          type: string
          description: >-
            Employee identifier. You can use e-mail or external identifier in
            format (externalNumber:ABC123)
          example: john.white@mycompany.com
        contractTypes:
          type: array
          description: Contract type name or identifier
          items:
            type: string
        positions:
          type: array
          description: List of Position names or identifiers.
          items:
            type: string
        teams:
          type: array
          description: List of teams names or identifiers
          items:
            type: string
        withArchived:
          type: boolean
          description: Should return also archived employees?
    PunchClockIn:
      type: object
      description: Punch clock in method payload.
      properties:
        person:
          type: string
          description: >-
            Employee identifier. You can use e-mail or external identifier in
            format (externalNumber:ABC123)
          example: john.white@mycompany.com
        time:
          type: string
          description: Date and time of event occurence in ISO format.
          example: '2015-11-10T08:30:00'
        projectId:
          type: integer
          format: int64
          description: Project id.
          example: 1
        description:
          type: string
          description: Description
          example: Example description
      required:
        - person
        - time
    PunchClockOut:
      type: object
      description: Punch clock out method payload.
      properties:
        person:
          type: string
          description: >-
            Employee identifier. You can use e-mail or external identifier in
            format (externalNumber:ABC123)
          example: john.white@mycompany.com
        time:
          type: string
          description: Date and time of event occurence in ISO format.
          example: '2015-11-10T08:30:00'
      required:
        - person
        - time
    PunchOut:
      type: object
      properties:
        person:
          $ref: '#/components/schemas/Person'
        shiftStatus:
          type: string
          description: Employee shift status after request
          enum:
            - STARTED
            - FINISHED
      required:
        - person
        - shiftStatus
    ShiftStatusRequest:
      type: object
      properties:
        person:
          type: string
          description: >-
            Employee identifier. You can use e-mail or external identifier in
            format (externalNumber:ABC123)
          example: john.white@mycompany.com
      required:
        - person
    SimpleAcceptanceFlow:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Approval flow id
        name:
          type: string
          description: Approval flow name
          example: Default Approval Flow
      required:
        - id
        - name
    SimpleContractType:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Contract type id
        name:
          type: string
          description: Contract type name
          example: Contract type
      required:
        - id
        - name
    SimpleEmployee:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Employee id
        email:
          type: string
          description: Employee email
          example: john.white@domain.com
      required:
        - email
        - id
    SimplePosition:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Position id
        name:
          type: string
          description: Position name
          example: Developer
      required:
        - id
        - name
    SimpleTeam:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Team id
        name:
          type: string
          description: Team name
          example: Main Team
      required:
        - id
        - name
    SimpleWorkingWeek:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Working week id
        name:
          type: string
          description: Working week name
          example: Full time
      required:
        - id
        - name
    TeamIdRequest:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Team ID
      required:
        - id
    TeamOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Team ID
        name:
          type: string
          description: Team name
          example: Primary team
      required:
        - id
        - name
    ThreeStateOptionalListString:
      type: object
      properties:
        value:
          type: array
          items:
            type: string
    ThreeStateOptionalString:
      type: object
      properties:
        value:
          type: string
    TimeZone:
      type: object
      properties:
        displayName:
          type: string
        id:
          type: string
        dstsavings:
          type: integer
          format: int32
        rawOffset:
          type: integer
          format: int32
    TimesheetEntryOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Timesheet entry ID
        started:
          type: string
          format: date-time
          description: Date and time of timesheet entry started
        finished:
          type: string
          format: date-time
          description: >-
            Date and time of timesheet entry finished. Has null value if
            employee does not clock out
        startedTimeZone:
          $ref: '#/components/schemas/TimeZone'
        finishedTimeZone:
          $ref: '#/components/schemas/TimeZone'
        duration:
          type: integer
          format: int64
          description: >-
            Duration of timesheet entry in seconds. Has 0 value if employee does
            not clock out
          example: 28800
        person:
          $ref: '#/components/schemas/EmployeeSimpleOut'
        breaks:
          type: array
          description: List of breaks
          items:
            $ref: '#/components/schemas/BreakDto'
        projects:
          type: array
          description: List of projects
          items:
            $ref: '#/components/schemas/ProjectDto'
        closed:
          type: boolean
          description: Is shift closed?
        description:
          type: string
          description: Shift description
      required:
        - breaks
        - closed
        - duration
        - id
        - person
        - projects
        - started
        - startedTimeZone
    WorkingDay:
      type: object
      properties:
        dayName:
          type: string
          description: Working day name.
          enum:
            - MONDAY
            - TUESDAY
            - WEDNESDAY
            - THURSDAY
            - FRIDAY
            - SATURDAY
            - SUNDAY
          example: MONDAY
        isWorkingDay:
          type: boolean
          description: Is it working day.
          example: false
        startTime:
          type: string
          description: >-
            Start of working time. Pattern: HH:mm:ss.SSS. Has null value when
            specified day is not working day.
          example: '09:00:00.000'
        finishTime:
          type: string
          description: >-
            Finish of working time. Pattern: HH:mm:ss.SSS. Has null value when
            specified day is not working day.
          example: '13:00:00.000'
        duration:
          type: integer
          format: int64
          description: >-
            Work duration in seconds >= 0 or has null value when specified day
            is not working day.
          example: 28800
      required:
        - dayName
        - duration
        - finishTime
        - isWorkingDay
        - startTime
    WorkingWeekOut:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Working week id.
          example: 1
        name:
          type: string
          description: Working week name.
          example: Full time
        workingDays:
          type: array
          description: Working week days.
          items:
            $ref: '#/components/schemas/WorkingDay'
      required:
        - id
        - name
        - workingDays
    AddPersonRequestSchema:
      $ref: '#/components/schemas/add-person-request-schema'
    AddPersonResponseSchema:
      $ref: '#/components/schemas/add-person-response-schema'
    UpdatePersonRequestSchema:
      $ref: '#/components/schemas/update-person-request-schema'
    BadRequestSchema:
      $ref: '#/components/schemas/bad-request-schema'
    NotFoundErrorSchema:
      $ref: '#/components/schemas/not-found-schema'
    ForbiddenSchema:
      $ref: '#/components/schemas/forbidden-schema'
    InternalServerErrorSchema:
      $ref: '#/components/schemas/internal-server-error-schema'
    sex-schema:
      type:
        - string
        - 'null'
      $schema: http://json-schema.org/draft-07/schema#
      description: Sex.
      enum:
        - MALE
        - FEMALE
        - OTHER
        - null
    martial-status-schema:
      type:
        - string
        - 'null'
      $schema: http://json-schema.org/draft-07/schema#
      description: Martial status.
      enum:
        - SINGLE
        - MARRIED
        - WIDOWED
        - SEPARATED
        - DIVORCED
        - null
    add-person-request-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      properties:
        firstName:
          type: string
          description: Person's first name.
          example: John
          maxLength: 255
          minLength: 1
        middleName:
          anyOf:
            - type: string
              example: Paul
              maxLength: 255
              minLength: 1
            - type: 'null'
          description: Person's middle name (Core HR module required).
        lastName:
          type: string
          description: Person's last name.
          example: Doe
          maxLength: 255
          minLength: 1
        email:
          type: string
          format: email
          description: Valid email address.
          example: john.doe@example.com
          maxLength: 255
          minLength: 1
        approvalProcess:
          anyOf:
            - type: string
              example: Basic Approval Flow
            - type: integer
              format: int64
              example: 1000
          description: Approval process name or identifier.
          maxLength: 255
          minLength: 1
        workSchedule:
          anyOf:
            - type: string
              example: Full-time - 40h
              maxLength: 255
              minLength: 1
            - type: integer
              format: int64
              example: 1
          description: Work schedule name or identifier.
        holidaysCalendar:
          anyOf:
            - type: string
              example: Default
              maxLength: 255
              minLength: 1
            - type: integer
              format: int64
              example: 100
          description: Holidays calendar name or identifier.
        contractType:
          anyOf:
            - type: string
              example: B2B
            - type: string
              format: uuid
              example: 1fd9c842-ff42-471b-9267-5c5812019df0
            - type: 'null'
          description: Contract type name or identifier.
          maxLength: 255
          minLength: 1
        hireDate:
          anyOf:
            - type: string
              format: date
              example: '2025-01-15'
            - type: 'null'
          description: Hire date in ISO 8601 format.
        birthdate:
          anyOf:
            - type: string
              format: date
              example: '1990-06-25'
            - type: 'null'
          description: Birthdate in ISO 8601 format (Core HR module required).
        sex:
          $ref: '#/components/schemas/sex-schema'
          description: Person's sex.
          example: MALE
        position:
          anyOf:
            - type: string
              example: Senior Accountant
              maxLength: 255
              minLength: 1
            - type: integer
              format: int64
              example: 1
            - type: 'null'
          description: Job position/title name or identifier.
        teams:
          anyOf:
            - type: array
              items:
                anyOf:
                  - type: string
                    example:
                      - Accountants
                      - Sellers
                    maxLength: 255
                    minLength: 1
                  - type: integer
                    format: int64
                    example:
                      - 1
                      - 3
            - type: 'null'
          description: List of team names or identifiers the person belongs to.
          example:
            - Accountants
            - 3
        maritalStatus:
          $ref: '#/components/schemas/martial-status-schema'
          description: Describes a person's relationship with a significant other.
          example: MARRIED
        terminationDate:
          anyOf:
            - type: string
              format: date
              example: '2026-12-31'
            - type: 'null'
          description: Termination date if applicable (ISO 8601 format).
        directManager:
          anyOf:
            - type: string
              format: email
              example: patricia.kite@example.com
            - type: string
              format: uuid
              example: 38715bd3-7ad5-4372-bcff-41a3c933af68
            - type: 'null'
          description: Unique e-mail address or UUID of the direct manager.
          maxLength: 255
          minLength: 1
        probationEndDate:
          anyOf:
            - type: string
              format: date
              example: 2025-07-1
            - type: 'null'
          description: End date of probation period (ISO 8601 format).
        externalNumber:
          anyOf:
            - type: string
              example: EMP-98765
              maxLength: 255
              minLength: 1
            - type: 'null'
          description: External reference number for the person.
        symfoniaGuid:
          anyOf:
            - type: string
              format: uuid
              example: 52601c08-b7e5-4c60-a57f-2b1d74942543
            - type: 'null'
          description: GUID from Symfonia system (Time Off module required).
        customNote:
          anyOf:
            - type: string
              example: Works remotely on Fridays.
              maxLength: 1024
              minLength: 1
            - type: 'null'
          description: Custom note or additional information
        businessContact:
          anyOf:
            - type: object
              properties:
                phone:
                  type: string
                  description: Business phone number.
                  example: +1-555-1234
                  maxLength: 255
                  minLength: 1
            - type: 'null'
          description: Business contact information (Core HR module required).
        personalContact:
          anyOf:
            - type: object
              properties:
                phone:
                  anyOf:
                    - type: string
                      description: Personal phone number.
                      example: +1-555-5678
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                email:
                  anyOf:
                    - type: string
                      format: email
                      description: Personal e-mail address.
                      example: john.doe.personal@example.com
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
            - type: 'null'
          description: Personal contact information (Core HR module required).
        seniorityBeforeHire:
          anyOf:
            - type: integer
              format: int64
              example: 24
              maxLength: 1200
            - type: 'null'
          description: Seniority in months before the hire date.
        address:
          anyOf:
            - type: object
              properties:
                street:
                  anyOf:
                    - type: string
                      description: Street name.
                      example: Main Street
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                number:
                  anyOf:
                    - type: string
                      description: Building or apartment number.
                      example: '123'
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                city:
                  anyOf:
                    - type: string
                      description: City name.
                      example: New York
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                provinceState:
                  anyOf:
                    - type: string
                      description: Province or state.
                      example: NY
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                postalCode:
                  anyOf:
                    - type: string
                      description: Postal code.
                      example: '10001'
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                country:
                  anyOf:
                    - type: string
                      description: Country name.
                      example: USA
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
            - type: 'null'
          description: Person's home address (Core HR module required).
        emergencyContact:
          anyOf:
            - type: object
              properties:
                name:
                  anyOf:
                    - type: string
                      description: Emergency contact name.
                      example: Jane Doe
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                relationship:
                  anyOf:
                    - type: string
                      description: Relationship to the person.
                      example: Spouse
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                phone:
                  anyOf:
                    - type: string
                      description: Emergency contact phone number.
                      example: +1-555-9999
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
            - type: 'null'
          description: Emergency contact details (Core HR module required).
        bankAccountNumber:
          anyOf:
            - type: string
              example: US12345678901234567890
              maxLength: 255
              minLength: 1
            - type: 'null'
          description: Person's bank account number (Core HR module required).
        contractorDetails:
          anyOf:
            - type: object
              properties:
                taxNumber:
                  anyOf:
                    - type: string
                      description: Tax identification number.
                      example: 123-45-6789
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                companyName:
                  anyOf:
                    - type: string
                      description: Company name.
                      example: Tech Solutions Inc.
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                companyAddress:
                  anyOf:
                    - type: string
                      description: Company registered address.
                      example: 456 Business St, San Francisco, CA, USA
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
            - type: 'null'
          description: Contractor-related details (Core HR module required).
        shirtSize:
          anyOf:
            - type: string
              enum:
                - XS
                - S
                - M
                - L
                - XL
                - 2XL
                - 3XL
                - 4XL
                - null
              example: M
            - type: 'null'
          description: Shirt size (Core HR module required).
        children:
          type: array
          description: List of persons' children (Core HR module required).
          items:
            type: object
            properties:
              firstName:
                anyOf:
                  - type: string
                    description: Child's first name.
                    example: Emily
                    maxLength: 255
                    minLength: 1
                  - type: 'null'
              lastName:
                anyOf:
                  - type: string
                    description: Child's last name.
                    example: Doe
                    maxLength: 255
                    minLength: 1
                  - type: 'null'
              birthdate:
                anyOf:
                  - type: string
                    format: date
                    description: Child's birthdate in ISO 8601 format.
                    example: '2015-09-10'
                  - type: 'null'
              sex:
                $ref: '#/components/schemas/sex-schema'
                description: Child's sex.
                example: FEMALE
              parent:
                anyOf:
                  - type: string
                    description: Other parent's name.
                    example: Kathryn Doe
                    maxLength: 255
                    minLength: 1
                  - type: 'null'
        customFields:
          type: array
          description: >-
            Custom attributes assigned to the person (Core HR module required).
            One of `text`, `multiline text`, `date`, `single-choice list`,
            `multiple choice list`, `numerical`, `boolean`.
          items:
            type: object
            properties:
              name:
                anyOf:
                  - type: string
                    format: uuid
                    description: Custom field unique identifier.
                    example: a0eae510-1fe5-46d4-a46d-b98a20bb5ae1
                  - type: string
                    description: >-
                      Custom field unique name. The unique name should be the
                      Qualified Name of field by pattern: `Category/Group/Field`
                    example: Skills/Languages spoken/Speaks fluently
                example: Skills/Languages spoken/Speaks fluently
                minLength: 1
              value:
                anyOf:
                  - type: string
                    description: Restricted to `text` and `multiline text`.
                    example: English
                  - type: string
                    format: date
                    description: Restricted to `date`.
                    example: '2020-07-24'
                  - type: number
                    description: Restricted to `numerical`.
                    example: 100.5
                  - type: boolean
                    description: Restricted to `boolean`.
                    example: true
                  - type: array
                    description: >-
                      Restricted to `single-choice list`, `multiple choice
                      list`. The value must be name or UUID.
                    example:
                      - French
                      - Spanish
                    items:
                      anyOf:
                        - type: string
                          example:
                            - French
                            - Spanish
                        - type: string
                          format: uuid
                          example:
                            - 4f9082a3-1ebd-4062-8215-3eec1b7b2fda
                            - a60115f7-8464-41c2-9852-88dfc3f141ba
                description: >-
                  Custom field value. Can be single value or array of values in
                  case Single Choice Custom Field or Multi Choice Custom Field.
                  The value is restricted by selected type.
            required:
              - name
              - value
      required:
        - approvalProcess
        - email
        - firstName
        - holidaysCalendar
        - lastName
        - workSchedule
    add-person-response-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      properties:
        id:
          type: string
          format: uuid
          example: 2c11e9ec-77d2-49fe-81aa-fab21f7b5aed
        legacyId:
          type: integer
          example: 1001
      required:
        - id
        - legacyId
    bad-request-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      description: >-
        The request is invalid due to syntax errors or incorrect parameters.
        Check the request structure and data format.
      properties:
        type:
          type: string
          example: about:blank
        title:
          type: string
          example: One or more validation errors occurred.
        detail:
          type: string
          example: Please refer to the errors property for additional details.
        status:
          type: number
          example: 400
        instance:
          type: number
          example: publicapi
        errors:
          type: object
          example:
            lastName:
              - must not be blank
      required:
        - detail
        - instance
        - status
        - title
        - type
    forbidden-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      properties:
        type:
          type: string
          example: about:blank
        title:
          type: string
          example: Licence error.
        detail:
          type: string
          example: Time Off module required.
        status:
          type: number
          example: 402
        instance:
          type: number
          example: publicapi
      required:
        - detail
        - instance
        - status
        - title
        - type
    internal-server-error-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      additionalProperties: false
      properties:
        title:
          type: string
          description: General title of error
          example: Internal Server Error
        detail:
          type:
            - string
            - 'null'
          description: Detailed error message explaining the issue
          example: An unexpected error occurred
      required:
        - title
    update-person-request-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      properties:
        email:
          type: string
          format: email
          description: Valid email address.
          example: john.doe@example.com
          maxLength: 255
          minLength: 1
        firstName:
          type: string
          description: Person's first name.
          example: John
          maxLength: 255
          minLength: 1
        middleName:
          anyOf:
            - type: string
              example: Paul
              maxLength: 255
              minLength: 1
            - type: 'null'
          description: Person's middle name (Core HR module required).
        lastName:
          type: string
          description: Person's last name.
          example: Doe
          maxLength: 255
          minLength: 1
        approvalProcess:
          anyOf:
            - type: string
              example: Basic Approval Flow
            - type: integer
              format: int64
              example: 1000
          description: Approval process name or identifier.
          maxLength: 255
          minLength: 1
        workSchedule:
          anyOf:
            - type: string
              example: Full-time - 40h
              maxLength: 255
              minLength: 1
            - type: integer
              format: int64
              example: 1
          description: Work schedule name or identifier.
        holidaysCalendar:
          anyOf:
            - type: string
              example: Default
              maxLength: 255
              minLength: 1
            - type: integer
              format: int64
              example: 100
          description: Holidays calendar name or identifier.
        contractType:
          anyOf:
            - type: string
              example: B2B
            - type: string
              format: uuid
              example: 1fd9c842-ff42-471b-9267-5c5812019df0
            - type: 'null'
          description: Contract type name or identifier.
          maxLength: 255
          minLength: 1
        hireDate:
          anyOf:
            - type: string
              format: date
              example: '2025-01-15'
            - type: 'null'
          description: Hire date in ISO 8601 format.
        birthdate:
          anyOf:
            - type: string
              format: date
              example: '1990-06-25'
            - type: 'null'
          description: Birthdate in ISO 8601 format (Core HR module required).
        sex:
          $ref: '#/components/schemas/sex-schema'
          description: Person's sex.
          example: MALE
        position:
          anyOf:
            - type: string
              example: Senior Accountant
              maxLength: 255
              minLength: 1
            - type: integer
              format: int64
              example: 1
            - type: 'null'
          description: Job position/title name or identifier.
        teams:
          anyOf:
            - type: array
              items:
                anyOf:
                  - type: string
                    example:
                      - Accountants
                      - Sellers
                    maxLength: 255
                    minLength: 1
                  - type: integer
                    format: int64
                    example:
                      - 1
                      - 3
            - type: 'null'
          description: List of team names or identifiers the person belongs to.
          example:
            - Accountants
            - 3
        maritalStatus:
          $ref: '#/components/schemas/martial-status-schema'
          description: Describes a person's relationship with a significant other.
          example: MARRIED
        terminationDate:
          anyOf:
            - type: string
              format: date
              example: '2026-12-31'
            - type: 'null'
        directManager:
          anyOf:
            - type: string
              format: email
              example: patricia.kite@example.com
            - type: string
              format: uuid
              example: 38715bd3-7ad5-4372-bcff-41a3c933af68
            - type: 'null'
          description: Unique e-mail address or UUID of the direct manager.
          maxLength: 255
          minLength: 1
        probationEndDate:
          anyOf:
            - type: string
              format: date
              example: 2025-07-1
            - type: 'null'
          description: End date of probation period (ISO 8601 format).
        externalNumber:
          anyOf:
            - type: string
              example: EMP-98765
              maxLength: 255
              minLength: 1
            - type: 'null'
          description: External reference number for the person.
        symfoniaGuid:
          anyOf:
            - type: string
              format: uuid
              example: 52601c08-b7e5-4c60-a57f-2b1d74942543
            - type: 'null'
          description: GUID from Symfonia system.
        customNote:
          anyOf:
            - type: string
              example: Works remotely on Fridays.
              maxLength: 1024
              minLength: 1
            - type: 'null'
          description: Custom note or additional information
        businessContact:
          anyOf:
            - type: object
              properties:
                phone:
                  anyOf:
                    - type: string
                      description: Business phone number.
                      example: +1-555-1234
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
            - type: 'null'
          description: Business contact information (Core HR module required).
        personalContact:
          anyOf:
            - type: object
              properties:
                phone:
                  anyOf:
                    - type: string
                      description: Personal phone number.
                      example: +1-555-5678
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                email:
                  anyOf:
                    - type: string
                      format: email
                      description: Personal e-mail address.
                      example: john.doe.personal@example.com
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
            - type: 'null'
          description: Personal contact information (Core HR module required).
        seniorityBeforeHire:
          anyOf:
            - type: integer
              format: int64
              example: 24
              maxLength: 1200
            - type: 'null'
          description: Seniority in months before the hire date.
        address:
          anyOf:
            - type: object
              properties:
                street:
                  anyOf:
                    - type: string
                      description: Street name.
                      example: Main Street
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                number:
                  anyOf:
                    - type: string
                      description: Building or apartment number.
                      example: '123'
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                city:
                  anyOf:
                    - type: string
                      description: City name.
                      example: New York
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                provinceState:
                  anyOf:
                    - type: string
                      description: Province or state.
                      example: NY
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                postalCode:
                  anyOf:
                    - type: string
                      description: Postal code.
                      example: '10001'
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                country:
                  anyOf:
                    - type: string
                      description: Country name.
                      example: USA
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
            - type: 'null'
          description: Person's home address (Core HR module required).
        emergencyContact:
          anyOf:
            - type: object
              properties:
                name:
                  anyOf:
                    - type: string
                      description: Emergency contact name.
                      example: Jane Doe
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                relationship:
                  anyOf:
                    - type: string
                      description: Relationship to the person.
                      example: Spouse
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                phone:
                  anyOf:
                    - type: string
                      description: Emergency contact phone number.
                      example: +1-555-9999
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
            - type: 'null'
          description: Emergency contact details (Core HR module required).
        bankAccountNumber:
          anyOf:
            - type: string
              example: US12345678901234567890
              maxLength: 255
              minLength: 1
            - type: 'null'
          description: Person's bank account number (Core HR module required).
        contractorDetails:
          anyOf:
            - type: object
              properties:
                taxNumber:
                  anyOf:
                    - type: string
                      description: Tax identification number.
                      example: 123-45-6789
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                companyName:
                  anyOf:
                    - type: string
                      description: Company name.
                      example: Tech Solutions Inc.
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
                companyAddress:
                  anyOf:
                    - type: string
                      description: Company registered address.
                      example: 456 Business St, San Francisco, CA, USA
                      maxLength: 255
                      minLength: 1
                    - type: 'null'
            - type: 'null'
          description: Contractor-related details (Core HR module required).
        shirtSize:
          anyOf:
            - type: string
              enum:
                - XS
                - S
                - M
                - L
                - XL
                - 2XL
                - 3XL
                - 4XL
                - null
              example: M
            - type: 'null'
          description: Shirt size (Core HR module required).
        children:
          type: array
          description: >-
            List of persons' children (Core HR module required).


            Note: Include all active children. The excluded item will be
            removed.
          items:
            type: object
            properties:
              firstName:
                anyOf:
                  - type: string
                    description: Child's first name.
                    example: Emily
                    maxLength: 255
                    minLength: 1
                  - type: 'null'
              lastName:
                anyOf:
                  - type: string
                    description: Child's last name.
                    example: Doe
                    maxLength: 255
                    minLength: 1
                  - type: 'null'
              birthdate:
                anyOf:
                  - type: string
                    format: date
                    description: Child's birthdate in ISO 8601 format.
                    example: '2015-09-10'
                  - type: 'null'
              sex:
                $ref: '#/components/schemas/sex-schema'
                description: Child's sex.
                example: FEMALE
              parent:
                anyOf:
                  - type: string
                    description: Other parent's name.
                    example: Kathryn Doe
                    maxLength: 255
                    minLength: 1
                  - type: 'null'
        customFields:
          type: array
          description: Custom attributes assigned to the person (Core HR module required).
          items:
            type: object
            properties:
              name:
                anyOf:
                  - type: string
                    format: uuid
                    description: Custom field unique identifier.
                    example: a0eae510-1fe5-46d4-a46d-b98a20bb5ae1
                  - type: string
                    description: >-
                      Custom field unique name. The unique name should be the
                      Qualified Name of field by pattern: `Category/Group/Field`
                    example: Skills/Languages spoken/Speaks fluently
                example: Skills/Languages spoken/Speaks fluently
                minLength: 1
              value:
                anyOf:
                  - type: string
                    description: Restricted to `text` and `multiline text`.
                    example: English
                  - type: string
                    format: date
                    description: Restricted to `date`.
                    example: '2020-07-24'
                  - type: number
                    description: Restricted to `numerical`.
                    example: 100.5
                  - type: boolean
                    description: Restricted to `boolean`.
                    example: true
                  - type: array
                    description: >-
                      Restricted to `single-choice list`, `multiple choice
                      list`. The value must be name or UUID.
                    example:
                      - French
                      - Spanish
                    items:
                      anyOf:
                        - type: string
                          example:
                            - French
                            - Spanish
                        - type: string
                          format: uuid
                          example:
                            - 4f9082a3-1ebd-4062-8215-3eec1b7b2fda
                            - a60115f7-8464-41c2-9852-88dfc3f141ba
                description: >-
                  Custom field value. Can be single value or array of values in
                  case Single Choice Custom Field or Multi Choice Custom Field.
                  The value is restricted by selected type.
            required:
              - name
              - value
    not-found-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      properties:
        type:
          type: string
          example: about:blank
        title:
          type: string
          example: Person not found.
        detail:
          type: string
          example: The requested resource could not be found.
        status:
          type: number
          example: 404
        instance:
          type: number
          example: publicapi
      required:
        - detail
        - instance
        - status
        - title
        - type
    SearchPeopleResponseSchema:
      $ref: '#/components/schemas/search-people-response-schema'
    BadRequestErrorSchema:
      $ref: '#/components/schemas/bad-request-error-schema'
    ForbiddenErrorSchema:
      $ref: '#/components/schemas/forbidden-request-error-schema'
    paginated-results-response-template-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      additionalProperties: false
      properties:
        data:
          type: array
          description: Collection of items.
          items:
            type: object
            description: Item.
        meta:
          type: object
          description: Collection of items.
          parameters:
            limit:
              type: integer
              format: int64
              description: Current limit
              minimum: 1
              example: 1
            offset:
              type: integer
              format: int64
              description: Current offset
              minimum: 1
              example: 10
            total:
              type: integer
              format: int64
              description: Total items
              minimum: 0
              example: 100
      required:
        - data
        - meta
      title: PaginatedResultsResponseTemplate
    sex-optional-schema:
      type:
        - string
        - 'null'
      $schema: http://json-schema.org/draft-07/schema#
      description: Sex.
      enum:
        - MALE
        - FEMALE
        - OTHER
        - null
    martial-status-optional-schema:
      type:
        - string
        - 'null'
      $schema: http://json-schema.org/draft-07/schema#
      description: Martial status.
      enum:
        - SINGLE
        - MARRIED
        - WIDOWED
        - SEPARATED
        - DIVORCED
        - NOT_SET
        - null
    single-person-response-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier (UUID format).
          example: 52601c08-b7e5-4c60-a57f-2b1d74942543
        legacyId:
          type: integer
          format: int64
          description: Legacy numerical identifier.
          example: '1337'
        firstName:
          anyOf:
            - type: string
              example: John
            - type: 'null'
          description: The first name of the person.
        middleName:
          anyOf:
            - type: string
              example: Gary
            - type: 'null'
          description: The middle name of the person.
        lastName:
          anyOf:
            - type: string
              example: Smith
            - type: 'null'
          description: The last name of the person.
        email:
          anyOf:
            - type: string
              format: email
              example: john.smith@example.com
            - type: 'null'
          description: Primary business email address.
        roles:
          anyOf:
            - type: array
              example:
                - direct-manager
              items:
                type: string
            - type: 'null'
          description: System roles assigned to this person.
        archived:
          type:
            - boolean
            - 'null'
        archivedDate:
          anyOf:
            - type: string
              format: date-time
              example: '2025-01-29T10:15:30Z'
            - type: 'null'
          description: Archiving timestamp in ISO-8601 format.
        position:
          anyOf:
            - type: object
              properties:
                id:
                  type:
                    - integer
                    - 'null'
                  anyOf:
                    - type: integer
                      format: int64
                      example: 8
                    - type: 'null'
                name:
                  type:
                    - string
                    - 'null'
                  anyOf:
                    - type: string
                      example: Software Engineer
                    - type: 'null'
            - type: 'null'
          description: Current position held by the person.
        birthdate:
          anyOf:
            - type: string
              format: date
            - type: 'null'
        businessContact:
          anyOf:
            - type: object
              properties:
                phone:
                  anyOf:
                    - type: string
                    - type: 'null'
            - type: 'null'
        personalContact:
          anyOf:
            - type: object
              properties:
                phone:
                  anyOf:
                    - type: string
                    - type: 'null'
                email:
                  anyOf:
                    - type: string
                      format: email
                    - type: 'null'
            - type: 'null'
        address:
          anyOf:
            - type: object
              properties:
                street:
                  anyOf:
                    - type: string
                    - type: 'null'
                number:
                  anyOf:
                    - type: string
                    - type: 'null'
                city:
                  anyOf:
                    - type: string
                    - type: 'null'
                provinceState:
                  anyOf:
                    - type: string
                    - type: 'null'
                postalCode:
                  anyOf:
                    - type: string
                    - type: 'null'
                country:
                  anyOf:
                    - type: string
                    - type: 'null'
            - type: 'null'
        sex:
          $ref: '#/components/schemas/sex-optional-schema'
        maritalStatus:
          $ref: '#/components/schemas/martial-status-optional-schema'
        hireDate:
          anyOf:
            - type: string
              format: date
            - type: 'null'
        probationEndDate:
          anyOf:
            - type: string
              format: date
            - type: 'null'
        terminationDate:
          anyOf:
            - type: string
              format: date
            - type: 'null'
        seniorityBeforeHire:
          anyOf:
            - type: integer
              example: '15'
            - type: 'null'
        externalNumber:
          anyOf:
            - type: string
            - type: 'null'
        symfoniaGuid:
          anyOf:
            - type: string
              format: uuid
              example: 52601c08-b7e5-4c60-a57f-2b1d74942543
            - type: 'null'
        customNote:
          anyOf:
            - type: string
            - type: 'null'
        emergencyContact:
          anyOf:
            - type: object
              properties:
                name:
                  anyOf:
                    - type: string
                    - type: 'null'
                relationship:
                  anyOf:
                    - type: string
                    - type: 'null'
                phone:
                  anyOf:
                    - type: string
                    - type: 'null'
            - type: 'null'
        approvalFlow:
          anyOf:
            - type: object
              properties:
                id:
                  anyOf:
                    - type: integer
                      format: int64
                    - type: 'null'
                name:
                  anyOf:
                    - type: string
                    - type: 'null'
            - type: 'null'
        contractType:
          anyOf:
            - type: object
              properties:
                id:
                  anyOf:
                    - type: string
                      format: uuid
                      example: 52601c08-b7e5-4c60-a57f-2b1d74942543
                    - type: 'null'
                name:
                  anyOf:
                    - type: string
                    - type: 'null'
            - type: 'null'
        holidaysCalendar:
          anyOf:
            - type: object
              properties:
                id:
                  anyOf:
                    - type: integer
                      format: int64
                    - type: 'null'
                name:
                  anyOf:
                    - type: string
                    - type: 'null'
            - type: 'null'
        workSchedule:
          anyOf:
            - type: object
              properties:
                id:
                  anyOf:
                    - type: integer
                      format: int64
                    - type: 'null'
                name:
                  anyOf:
                    - type: string
                    - type: 'null'
            - type: 'null'
        teams:
          anyOf:
            - type: array
              items:
                type: object
                properties:
                  id:
                    anyOf:
                      - type: integer
                        format: int64
                      - type: 'null'
                  name:
                    anyOf:
                      - type: string
                      - type: 'null'
            - type: 'null'
        directManager:
          anyOf:
            - type: object
              properties:
                id:
                  anyOf:
                    - type: string
                      format: uuid
                      example: 52601c08-b7e5-4c60-a57f-2b1d74942543
                    - type: 'null'
                legacyId:
                  anyOf:
                    - type: integer
                      format: int64
                      example: '1337'
                    - type: 'null'
                firstName:
                  anyOf:
                    - type: string
                      example: John
                    - type: 'null'
                  description: The first name of the person.
                lastName:
                  anyOf:
                    - type: string
                      example: Smith
                    - type: 'null'
                  description: The last name of the person.
                email:
                  anyOf:
                    - type: string
                      format: email
                    - type: 'null'
            - type: 'null'
        bankAccountNumber:
          anyOf:
            - type: string
            - type: 'null'
        shirtSize:
          anyOf:
            - type: string
            - type: 'null'
        contractorDetails:
          anyOf:
            - type: object
              properties:
                taxNumber:
                  anyOf:
                    - type: string
                    - type: 'null'
                companyName:
                  anyOf:
                    - type: string
                    - type: 'null'
                companyAddress:
                  anyOf:
                    - type: string
                    - type: 'null'
            - type: 'null'
        children:
          type:
            - array
            - 'null'
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                example: 52601c08-b7e5-4c60-a57f-2b1d74942543
              firstName:
                anyOf:
                  - type: string
                  - type: 'null'
              lastName:
                anyOf:
                  - type: string
                  - type: 'null'
              birthdate:
                anyOf:
                  - type: string
                    format: date
                  - type: 'null'
              sex:
                $ref: '#/components/schemas/sex-optional-schema'
              parent:
                anyOf:
                  - type: string
                  - type: 'null'
            required:
              - id
        customFields:
          anyOf:
            - type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    example: 52601c08-b7e5-4c60-a57f-2b1d74942543
                  type:
                    anyOf:
                      - type: string
                        enum:
                          - TEXT
                          - DATE
                          - TEXT_AREA
                          - BOOLEAN
                          - SINGLE_CHOICE
                          - MULTI_CHOICE
                          - NUMERIC
                          - null
                      - type: 'null'
                    description: Custom field type.
                  name:
                    type: string
                  qualifiedName:
                    type: string
                  value:
                    type: string
                required:
                  - id
                  - name
                  - qualifiedName
                  - type
                  - value
            - type: 'null'
        timeZone:
          anyOf:
            - type: string
            - type: 'null'
      required:
        - id
      title: SinglePersonResponseSchema
    search-people-response-schema:
      $schema: http://json-schema.org/draft-07/schema#
      allOf:
        - $ref: '#/components/schemas/paginated-results-response-template-schema'
        - type: object
          description: Paginated collection of people records.
          properties:
            data:
              type: array
              description: List of people returned in the current page.
              items:
                $ref: '#/components/schemas/single-person-response-schema'
            meta:
              type: object
              properties:
                limit:
                  type: integer
                  format: int64
                offset:
                  type: integer
                  format: int64
                total:
                  type: integer
                  format: int64
    bad-request-error-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      additionalProperties: false
      properties:
        title:
          type: string
          description: General title of error
          example: Bad Request
        detail:
          type:
            - string
            - 'null'
          description: Detailed error message explaining the issue
          example: Invalid parameter value
      required:
        - title
    forbidden-request-error-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      additionalProperties: false
      properties:
        title:
          type: string
          description: General title of error
          example: Forbidden
        detail:
          type:
            - string
            - 'null'
          description: Detailed error message explaining the issue
          example: Token does not have the required scope
      required:
        - title
  parameters:
    ContractTypesParameter:
      name: contractTypes
      in: query
      description: >-
        Comma-separated list of contract type UUIDs used to filter people by
        contract types.
      required: false
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
          format: uuid
      example: >-
        41d2e841-7f1f-4545-be09-8a17606f0228,31d2e841-7f1f-4545-be09-8a17606f0228
    PositionsParameter:
      name: positions
      in: query
      description: Comma-separated list of position IDs used to filter people by positions.
      required: false
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
      example: 1,2,3,4
    TeamsParameter:
      name: teams
      in: query
      description: >-
        Comma-separated list of team IDs used to filter people by team
        membership.
      required: false
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
      example: 1,2,3,7,8
    ArchivedParameter:
      name: archived
      in: query
      description: >-
        Filter by archived status. Set to `true` to return only archived people,
        or `false` to return only active people.
      required: false
      style: form
      explode: true
      schema:
        type: boolean
      example: true
    ProjectionParameter:
      name: projection
      in: query
      description: >-
        Defines the projection strategy used for the response. 

        - `FULL` (default): returns all available fields. 

        - `BASIC`: returns a minimal subset of fields. 

        - `CUSTOM`: returns only the fields specified in the `fields` parameter.
        When `CUSTOM` is used, the `fields` parameter is required.


        Note: Regardless of projection type, the response always includes `id`,
        `legacyId` and `archived` fields.
      required: false
      style: form
      explode: false
      schema:
        type: string
        enum:
          - FULL
          - BASIC
          - CUSTOM
      example: CUSTOM
    ProjectionFieldsParameter:
      name: fields
      in: query
      description: >-
        Comma-separated list of field names to include in the response. Only
        applicable when `projection=CUSTOM`.


        Note: Regardless of the list, the fields `id`, `legacyId` and `archived`
        are always returned.
      required: false
      style: form
      explode: false
      schema:
        type: string
        items:
          type: string
      example: firstName,lastName,email
    LimitParameter:
      name: limit
      in: query
      description: >-
        The maximum number of items to return. Must be greater than or equal to
        1. Default is 100.
      required: false
      style: form
      explode: true
      schema:
        type: integer
        default: 100
        minimum: 1
      example: 50
    OffsetParameter:
      name: offset
      in: query
      description: >-
        The number of items to skip before returning the results. Must be
        greater than or equal to 0. Default is 0.
      required: false
      style: form
      explode: true
      schema:
        type: integer
        default: 0
        minimum: 0
      example: 10
    SortParameter:
      name: sort
      in: query
      description: >-
        Sorting criteria in the format `field,ASC` or `field,DESC`. Can be
        repeated to apply multi-level sorting.
      required: false
      style: form
      explode: true
      schema:
        type: array
        items:
          type: string
          description: Sorting expression, e.g., `id,DESC` or `name,ASC`.
      example:
        - id,DESC
        - name,ASC
    NullOrderingParameter:
      name: nullOrdering
      in: query
      description: >-
        Specifies how NULL values are sorted. Options: `NULLS_FIRST` or
        `NULLS_LAST`. Default is `NULLS_FIRST`.
      required: false
      style: form
      explode: true
      schema:
        type: string
        default: NULLS_FIRST
        enum:
          - NULLS_FIRST
          - NULLS_LAST
      example: NULLS_LAST
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
