openapi: 3.1.0
info:
  title: Calamari Public API
  description: API for Calamari, your HR tool
  contact:
    name: Calamari Team
    url: https://developers.calamari.dev
    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 type
    description: Absence Types API
  - name: Absence requests
    description: Absence Requests API
  - name: Current shift status
    description: Current Shift Status API
  - name: Projects
    description: Projects API
  - name: Shifts and breaks
    description: Shifts and Breaks API
  - name: Timesheet entries
    description: Timesheet entries API
  - name: Working Week
    description: Working Week API
  - name: Contract types
    description: Contract Types API
  - name: Employees
    description: Employees API
  - name: Holidays
    description: Holidays API
  - name: Positions
    description: Positions API
  - name: Teams
    description: Teams API
  - name: People
    description: Endpoints related to managing people records.
  - name: People
    description: Endpoints related to managing people records.
paths:
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AbsenceRequestId'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CommentOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AbsenceDto'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AbsenceDtoExtended'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '204':
          description: Removed successfully.
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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 are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CurrentShiftStatus'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DailyPresenceReport'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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 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_MARTIAL_STATUS</strong> - when provided marital
        status 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'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
      x-badges:
        - name: x-calamari-is-deprecated
          position: before
  /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 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 marital status 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'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
      x-badges:
        - name: x-calamari-is-deprecated
          position: before
  /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'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
      x-badges:
        - name: x-calamari-is-deprecated
          position: before
  /employees/v1/invite:
    post:
      tags:
        - Employees
      summary: Invite employee.
      description: Invite employee.
      operationId: inviteEmployee
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvitationEmployeeIn'
      responses:
        '204':
          description: Invited successfully.
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
      x-badges:
        - name: x-calamari-is-deprecated
          position: before
  /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'
      responses:
        '204':
          description: Successfully marked as archived.
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
      x-badges:
        - name: x-calamari-is-deprecated
          position: before
  /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'
      responses:
        '200':
          description: successful operation
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
      x-badges:
        - name: x-calamari-is-deprecated
          position: before
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/HolidayOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '204':
          description: No Content
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /clockin/projects/v1/create:
    post:
      tags:
        - Projects
      summary: Create project type.
      description: >-
        Create project type.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_NAME</strong> - when name is
        invalid</li><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'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectOutWithAssignedEmployeesTeams'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProjectOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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 are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /clockin/projects/v1/update:
    post:
      tags:
        - Projects
      summary: Update project type.
      description: >-
        Update project type.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_NAME</strong> - when name is
        invalid</li><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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectOutWithAssignedEmployeesTeams'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BreakOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BreakOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PunchOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PunchOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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 are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GetBreakTypeOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PunchOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '204':
          description: The team has been successfully removed.
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /teams/v1/update:
    post:
      tags:
        - Teams
      summary: Update chosen team.
      description: >-
        Update chosen team.<br /><br />Expect error
        codes:<ol><li><strong>INVALID_REQUEST</strong> - when invalid team data
        provided</li></ol>
      operationId: updateTeam
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateTeamIn'
      responses:
        '204':
          description: The team has been successfully updated.
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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><li><strong>SHIFT_DESCRIPTION_NOT_ALLOWED_FORMATTING</strong>
        - when description contains more not allowed HTML or Markdown
        formatting</li></ol>
      operationId: addTimeEntry
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTimesheetEntryIn'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: Removed successfully.
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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 />The query returns
        all matching records for the selected time range and filters, with no
        pagination applied.<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'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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 are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProjectOut'
        '400':
          description: Invalid input. Reason and description are returned in json response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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><li><strong>SHIFT_DESCRIPTION_NOT_ALLOWED_FORMATTING</strong>
        - when description contains more not allowed HTML or Markdown
        formatting</li></ol>
      operationId: updateTimeEntry
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditTimesheetEntryIn'
      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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /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: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema-legacy'
        '403':
          description: >-
            Authorization failure. Provided ApiKey is valid but does not contain
            a scope required to perform requested operation
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema-legacy'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema-legacy'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema-legacy'
  /people/v2:
    get:
      tags:
        - People
      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'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema'
        '403':
          description: You do not have permission to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/forbidden-request-error-schema'
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema'
    post:
      tags:
        - People
      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'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-401-schema'
        '403':
          description: The license is unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/forbidden-schema'
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema'
  /people/v2/{id}:
    patch:
      tags:
        - People
      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
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/person-identifier-param-schema'
      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'
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-401-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'
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema'
  /people/v2/{id}/archive:
    post:
      tags:
        - People
      summary: Archive a person
      description: |
        This endpoint allows you to archive a person in Calamari.
      operationId: archivePerson
      parameters:
        - name: id
          in: path
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/person-identifier-param-schema'
      responses:
        '204':
          description: Person archived successfully.
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-401-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'
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema'
  /people/v2/{id}/invite:
    post:
      tags:
        - People
      summary: Invite a person
      description: |
        This endpoint allows you to send an invitation email to Calamari.
      operationId: invitePerson
      parameters:
        - name: id
          in: path
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/person-identifier-param-schema'
      responses:
        '204':
          description: Person invited successfully.
        '401':
          description: >-
            Authorization error - e.g. invalid server url, no Authorization
            header, wrong user / API key
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-401-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'
        '429':
          description: >-
            Maximum number of requests was exceeded - either per second, hour or
            day.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-429-schema'
        '500':
          description: Internal server error - something went wrong!
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-500-schema'
        '504':
          description: >-
            Gateway timeout - call to downstream service exceeded maximum
            configured amount of time
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PAG-504-schema'
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
          format: date-time
          description: Local start date and start time of absence
        endTime:
          type: string
          format: date-time
          description: Local end date and end time of absence
        timeZone:
          type: string
          description: Absence reporter time zone
          example: Europe/Warsaw
        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
          format: date-time
          description: Local start date and start time of absence
        endTime:
          type: string
          format: date-time
          description: Local end date and end time of absence
        timeZone:
          type: string
          description: Absence reporter time zone
          example: Europe/Warsaw
        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:
            - DAYS
            - HOURS
        unlimited:
          type: boolean
          description: Is entitlement balance unlimited?
        amount:
          type: integer
          format: int32
          description: Entitlement balance amount
      required:
        - amount
        - unit
        - unlimited
    BalanceOutExtended:
      type: object
      properties:
        unit:
          type: string
          description: Duration unit
          enum:
            - DAYS
            - HOURS
        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
      description: List of breaks
      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
          format: date-time
          description: Date and time of break start in ISO format
        breakEnd:
          type: string
          format: date-time
          description: Date and time of break end in ISO format
      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
          format: date-time
          description: Date and time of event occurence in ISO format.
        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
      description: Break type.
      properties:
        id:
          type: integer
          format: int64
          description: Break id
        name:
          type: string
          description: Break name
          example: Primary break
    Chronology:
      type: object
      properties:
        zone:
          type: string
    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
            - 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
            - 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
        dateFrom:
          type: string
          format: date
        dateTo:
          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
            example: 123
      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
          maxLength: 255
          minLength: 0
        restrictedToPersons:
          type: array
          description: >-
            List of employees e-mails or logins. Example:
            ["john.smith@domain.com", "mark.small@domain.com"]
          items:
            type: string
            example: john.smith@domain.com
        restrictedToTeams:
          type: array
          description: 'List of teams names or ids. Example: ["Developers Team", "17"]'
          items:
            type: string
            example: Developers Team
      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
            example: 123
        managers:
          type: array
          description: Identifiers of team managers.
          items:
            type: integer
            format: int64
            example: 456
      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
          format: date-time
          description: Date and time of shift start in ISO format
        shiftEnd:
          type: string
          format: date-time
          description: Date and time of shift end in ISO format
        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
    DateTimeField:
      type: object
      properties:
        name:
          type: string
        type:
          $ref: '#/components/schemas/DateTimeFieldType'
        supported:
          type: boolean
        lenient:
          type: boolean
        durationField:
          $ref: '#/components/schemas/DurationField'
        minimumValue:
          type: integer
          format: int32
        maximumValue:
          type: integer
          format: int32
        rangeDurationField:
          $ref: '#/components/schemas/DurationField'
        leapDurationField:
          $ref: '#/components/schemas/DurationField'
    DateTimeFieldType:
      type: object
      properties:
        name:
          type: string
        rangeDurationType:
          $ref: '#/components/schemas/DurationFieldType'
        durationType:
          $ref: '#/components/schemas/DurationFieldType'
    DateTimeZone:
      type: string
    DeleteTimesheetEntryById:
      type: object
      description: Deleting timesheet entry by id
      properties:
        id:
          type: integer
          format: int64
      required:
        - id
    DurationField:
      type: object
      properties:
        name:
          type: string
        type:
          $ref: '#/components/schemas/DurationFieldType'
        supported:
          type: boolean
        precise:
          type: boolean
        unitMillis:
          type: integer
          format: int64
    DurationFieldType:
      type: object
      properties:
        name:
          type: string
    EditProjectRequestIn:
      type: object
      properties:
        projectId:
          type: integer
          format: int64
          description: Project ID
          example: 13
        name:
          type: string
          description: Project name
          example: PROJECT-123
          maxLength: 255
          minLength: 0
        restrictedToPersons:
          type: array
          description: List of employees e-mails or logins.
          items:
            type: string
            example: john.smith@domain.com
        restrictedToTeams:
          type: array
          description: List of teams names or ids.
          items:
            type: string
            example: Developers Team
      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
          format: date-time
          description: Date and time of shift start in ISO format
        shiftEnd:
          type: string
          format: date-time
          description: Date and time of shift end in ISO format
        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
      properties:
        id:
          type: integer
          format: int64
          writeOnly: true
        email:
          type: string
          writeOnly: true
        balance:
          $ref: '#/components/schemas/BalanceOutExtended'
    EmployeeFullOut:
      type: object
      description: List of employees
      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
            - DOMESTIC_PARTNERSHIP
            - COMMON_LAW
            - OTHER
            - 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
      description: Daily employees presence reports
      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
      description: Employee
      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
            example: First Team
        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
            example: Developer
        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
            example: Employment Contract
        employees:
          type: array
          description: >-
            List of employees e-mails or logins. Example:
            ["john.smith@domain.com", "mark.small@domain.com"]
          items:
            type: string
            example: john.smith@domain.com
      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
            example: First Team
        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
            example: Developer
        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
            example: Full Time
        employees:
          type: array
          description: >-
            List of employees e-mails or logins. Example:
            ["john.white@domain.com", "mark.smith@domain.com"]
          items:
            type: string
            example: john.white@domain.com
      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
            example: Annual Leave
        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
            example: First Team
        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
            example: Developer
        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
            example: firstContract
        employees:
          type: array
          description: >-
            List of employees e-mails or logins. Example:
            ["john.smith@domain.com", "mark.small@domain.com"]
          items:
            type: string
            example: john.smith@domain.com
        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"]
          items:
            type: string
            example: PENDING
      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
            example: First Team
        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
            example: Developer
        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
            example: Employment Contract
        employees:
          type: array
          description: >-
            List of employees e-mails or logins. Example:
            ["john.smith@domain.com", "mark.small@domain.com"]
          items:
            type: string
            example: john.smith@domain.com
        date:
          type: string
          format: date
          description: Date in ISO format
          example: '2018-09-25'
      required:
        - absenceTypeId
        - date
    GetHolidayCalendarOut:
      type: object
      description: Emergency contact name
      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
      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
    LocalTime:
      type: string
      format: time
      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'
    ModifyBalanceOut:
      type: object
      properties:
        result:
          type: string
          description: Result of modify entitlement
          enum:
            - ENTITLEMENT_MODIFIED
      required:
        - result
    Person:
      type: object
      description: Employee description
      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
      description: List of projects
      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
          format: date-time
          description: Date and time of project worklog start in ISO format
        projectEnd:
          type: string
          format: date-time
          description: Date and time of project worklog end in ISO format
      required:
        - projectEnd
        - projectStart
        - projectType
    ProjectOut:
      type: object
      description: Project properties
      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
            example: Developers Team
        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
            - DOMESTIC_PARTNERSHIP
            - COMMON_LAW
            - OTHER
            - 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.
          items:
            type: string
            example: Primary team
        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: >-
            List of contract types names or identifiers to search. As a result
            there will be employees who have one of selected contract types
            assigned. Example: ["Employment Contract", "B2B"]
          items:
            type: string
            example: Employment Contract
        positions:
          type: array
          description: >-
            List of positions names or identifiers to search. As a result there
            will be employees who have one of provided positions. Example:
            ["Developer", "Support", "Architect"]
          items:
            type: string
            example: Developer
        teams:
          type: array
          description: >-
            List of teams names or identifiers to search. As a result the result
            will contain employees who are members of at least one of provided
            teams. Example: ["First Team", "Second Team", "Third Team"]
          items:
            type: string
            example: First Team
        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
          format: date-time
          description: Date and time of event occurence in ISO format.
        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
          format: date-time
          description: Date and time of event occurence in ISO format.
      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
      description: Approval flow
      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
      description: Contract type
      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
      description: Employee direct manager
      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
      description: Position
      properties:
        id:
          type: integer
          format: int64
          description: Position id
        name:
          type: string
          description: Position name
          example: Developer
      required:
        - id
        - name
    SimpleTeam:
      type: object
      description: Teams
      properties:
        id:
          type: integer
          format: int64
          description: Team id
        name:
          type: string
          description: Team name
          example: Main Team
      required:
        - id
        - name
    SimpleWorkingWeek:
      type: object
      description: Working week
      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
    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:
          type: string
          description: Started work timzeone
          example: Europe/Warsaw
        finishedTimeZone:
          type: string
          description: >-
            Finished work timezone. Has null value if employee does not clock
            out
          example: Europe/Warsaw
        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
    UpdateTeamIn:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: Team ID
        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
            example: 123
        managers:
          type: array
          description: Identifiers of team managers.
          items:
            type: integer
            format: int64
            example: 456
      required:
        - id
        - managers
        - members
        - name
    WorkingDay:
      type: object
      description: Working week days.
      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: true
        startTime:
          type: string
          format: time
          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
          format: time
          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'
    PersonIdentifierParamSchema:
      $ref: '#/components/schemas/person-identifier-param-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
        - DOMESTIC_PARTNERSHIP
        - COMMON_LAW
        - OTHER
        - 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
                    examples:
                      - Accountants
                      - Sellers
                    maxLength: 255
                    minLength: 1
                  - type: integer
                    format: int64
                    examples:
                      - 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-01'
            - 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
              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
                          examples:
                            - French
                            - Spanish
                        - type: string
                          format: uuid
                          examples:
                            - 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: 1
        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: 1
      required:
        - detail
        - instance
        - status
        - title
        - type
    internal-server-error-schema:
      type: object
      $schema: http://json-schema.org/draft-07/schema#
      properties:
        type:
          type: string
          example: about:blank
        title:
          type: string
          example: Internal server error.
        detail:
          type: string
          example: Detailed error message explaining the issue.
        status:
          type: number
          example: 500
        instance:
          type: number
          example: 1
      required:
        - detail
        - instance
        - status
        - title
        - type
    person-identifier-param-schema:
      $schema: http://json-schema.org/draft-07/schema#
      anyOf:
        - type: string
          format: uuid
          description: UUID without prefix (default)
          example: 24dc4a05-ef40-4c30-9b95-554bf3be8741
        - type: string
          description: Legacy numeric ID
          example: id:12345
          pattern: ^[^#/?\s]+$
        - type: string
          description: External number
          example: number:12345
          pattern: ^[^#/?\s]+$
        - type: string
          description: Email address
          example: email:example@local.com
          pattern: ^[^#/?\s]+$
      description: >
        The person identifier. Supports:


        • `24dc4a05-ef40-4c30-9b95-554bf3be8741` (UUID)  

        • `id:12345` (legacy numeric ID)  

        • `number:AO-00710` (external number)  

        • `email:example@local.com` (email address)  


        **Reserved characters in path segments**  

        Any reserved or unsafe character—literal (`#`, `/`, `?`, space) or
        percent-encoded (`%23`, `%2F`, `%3F`, `%20`, etc.)—will be blocked or
        truncated by the server at that character and everything after it.


        **Recommendation**  

        • Use only unreserved characters in path identifiers (no `#`, `/`, `?`,
        spaces).  

        • If an identifier may contain reserved characters, pass it as a query
        parameter or in the request body instead.
    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: name:Basic Approval Flow
            - type: integer
              format: int64
              example: 1000
          description: Approval process name or identifier.
          maxLength: 255
          minLength: 1
        workSchedule:
          anyOf:
            - type: string
              example: name:Full-time - 40h
              maxLength: 255
              minLength: 1
            - type: integer
              format: int64
              example: 1
          description: Work schedule name or identifier.
        holidaysCalendar:
          anyOf:
            - type: string
              example: name:Default
              maxLength: 255
              minLength: 1
            - type: integer
              format: int64
              example: 100
          description: Holidays calendar name or identifier.
        contractType:
          anyOf:
            - type: string
              example: name: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
                    examples:
                      - name:Accountants
                      - name:Sellers
                    maxLength: 255
                    minLength: 1
                  - type: integer
                    format: int64
                    examples:
                      - 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: uuid
              example: 38715bd3-7ad5-4372-bcff-41a3c933af68
            - type: string
              example: id:12345
            - type: string
              example: email:patricia.kite@example.com
            - type: string
              example: number:AO-00710
            - type: 'null'
          description: Identifier of the direct manager.
          maxLength: 255
          minLength: 1
        probationEndDate:
          anyOf:
            - type: string
              format: date
              example: '2025-07-01'
            - 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
              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
                          examples:
                            - French
                            - Spanish
                        - type: string
                          format: uuid
                          examples:
                            - 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: 1
      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.
          properties:
            limit:
              type: integer
              format: int64
              description: Current limit
              example: 1
              minimum: 1
            offset:
              type: integer
              format: int64
              description: Current offset
              example: 10
              minimum: 1
            total:
              type: integer
              format: int64
              description: Total items
              example: 100
              minimum: 0
      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
        - DOMESTIC_PARTNERSHIP
        - COMMON_LAW
        - OTHER
        - 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
                      - 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
    PAG-401-schema:
      $schema: http://json-schema.org/draft-07/schema#
      properties:
        title:
          type: string
          description: Type of error
          example: Authentication failure
        status:
          type: string
          description: HTTP status code
          example: 401
        detail:
          type: string
          description: Detailed error message explaining the issue.
          example: Please check if valid API key was provided
      required:
        - detail
        - status
        - title
    PAG-401-schema-legacy:
      $schema: http://json-schema.org/draft-07/schema#
      additionalProperties: false
      properties:
        message:
          type: string
          description: Error details
          example: Authentication failure
        code:
          type: string
          description: General type of error
          example: AUTH
        field:
          type: string
          description: Leftover for backward compatibility
          example: null
      required:
        - code
        - message
    PAG-429-schema:
      $schema: http://json-schema.org/draft-07/schema#
      properties:
        title:
          type: string
          description: Type of error
          example: Request quota exceeded
        status:
          type: string
          description: HTTP status code
          example: 429
        detail:
          type: string
          description: Detailed error message explaining the issue.
          example: |-
            Your current usage is 101/day, 10/hour, 1/sec
            Your current limits 100/day, 10/hour, 1/sec.
      required:
        - detail
        - status
        - title
    PAG-429-schema-legacy:
      $schema: http://json-schema.org/draft-07/schema#
      additionalProperties: false
      properties:
        code:
          type: string
          description: General type of error
          example: QUOTA_EXCEEDED
        field:
          type: string
          description: Detailed info about quota and it's current usage
          example: |-
            Your current usage is 101/day, 10/hour, 1/sec
            Your current limits 100/day, 10/hour, 1/sec.
      required:
        - code
        - field
    PAG-500-schema:
      $schema: http://json-schema.org/draft-07/schema#
      properties:
        title:
          type: string
          description: Type of error
          example: Internal server error.
        status:
          type: string
          description: HTTP status code
          example: 500
        detail:
          type: string
          description: Detailed error message explaining the issue.
          example: >-
            Please try again later. If the issue persists, don't hesitate to
            reach to our Support via team@calamari.io
      required:
        - detail
        - status
        - title
    PAG-500-schema-legacy:
      $schema: http://json-schema.org/draft-07/schema#
      additionalProperties: false
      properties:
        message:
          type: string
          description: Error details
          example: An unexpected error occurred
        code:
          type: string
          description: General type of error
          example: INTERNAL_SERVER_ERROR
      required:
        - code
        - message
    PAG-504-schema:
      $schema: http://json-schema.org/draft-07/schema#
      properties:
        title:
          type: string
          description: Type of error
          example: Public API call exceeded timeout.
        status:
          type: string
          description: HTTP status code
          example: 504
        detail:
          type: string
          description: Detailed error message explaining the issue.
          example: >-
            Please try again later. If the issue persists, don't hesitate to
            reach to our Support via team@calamari.io
      required:
        - detail
        - status
        - title
    PAG-504-schema-legacy:
      $schema: http://json-schema.org/draft-07/schema#
      additionalProperties: false
      properties:
        message:
          type: string
          description: Error details
          example: Public API call exceeded timeout
        code:
          type: string
          description: General type of error
          example: TIMEOUT
      required:
        - code
        - message
  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
