openapi: 3.0.0
info:
  title: TimeCamp API
  version: '1.0'
  contact:
    email: support@timecamp.com
  termsOfService: https://www.timecamp.com/terms-conditions/
  description: |
    Documentation for the TimeCamp system.

    Get your API token here:
    https://app.timecamp.com/app#/settings/users/me

    Be aware that you can reach API calls limit. Once you do you will get HTTP code 429 response.

    Request example:

    ```
    GET https://app.timecamp.com/third_party/api/user?user_id=1234567

    Headers:
    Authorization: Bearer 87c21299960a88888888fe123
    Accept: application/json
    ```
servers:
  - url: https://app.timecamp.com/third_party/api
    description: PRODUCTION
  - url: https://v4.api.timecamp.com
    description: PRODUCTION
tags:
  - name: '[v1] User'
    x-displayName: User
  - name: '[v1] Entry'
    x-displayName: Entry
  - name: '[v1] Tags'
    x-displayName: Tags
  - name: '[v1] Group'
    x-displayName: Group
  - name: '[v1] Approvals'
    x-displayName: Approvals
  - name: '[v1] Computer Activities'
    x-displayName: Computer Activities
  - name: '[v1] Timer'
    x-displayName: Timer
  - name: '[v1] Task'
    x-displayName: Task
  - name: '[v1] Attendance'
    x-displayName: Attendance
  - name: '[v1] Roles & Permissions'
    x-displayName: Roles & Permissions
  - name: '[v1] Billing Rates'
    x-displayName: Billing Rates
  - name: '[v1] Userlog'
    x-displayName: Userlog
  - name: '[v1] Activity alert'
    x-displayName: Activity alert
  - name: '[v3] Timer'
    x-displayName: Timer
  - name: '[v3] Invoices'
    x-displayName: Invoices
  - name: '[v3] Computer Activities'
    x-displayName: Computer Activities
  - name: '[v3] Time Entry'
    x-displayName: Time Entry
  - name: '[v3] Time Entry Restriction'
    x-displayName: Time Entry Restriction
  - name: '[v3] Task Archive'
    x-displayName: Task Archive
  - name: '[v3] Expense'
    x-displayName: Expense
  - name: '[v3] Plan'
    x-displayName: Plan
  - name: '[v3] Storage'
    x-displayName: Storage
  - name: '[v3] Module'
    x-displayName: Module
  - name: '[v3] Marketplace'
    x-displayName: Marketplace
  - name: '[v3] Remote work detection'
    x-displayName: Remote work detection
  - name: '[v3] Data Export'
    x-displayName: Data Export
  - name: '[v3] Custom Fields'
    x-displayName: Custom Fields
  - name: '[v3] Approval'
    x-displayName: Approval
  - name: '[v3] Groups Stats'
    x-displayName: Groups Stats
  - name: '[v3] Location'
    x-displayName: Location
  - name: '[v3] Task Picker'
    x-displayName: TaskPicker
  - name: '[v3] Task'
    x-displayName: Task
  - name: '[v3] Tags'
    x-displayName: Tags
  - name: '[v3] Projects'
    x-displayName: Projects
  - name: '[v3] Pivot'
    x-displayName: Pivot
  - name: '[v3] Attendance'
    x-displayName: Attendance
  - name: '[v3] Attendance Requests'
    x-displayName: Attendance Requests
paths:
  /timer_running:
    get:
      summary: Get information about running timer
      tags:
        - '[v1] Timer'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                description: ''
                minItems: 1
                uniqueItems: true
                items:
                  type: object
                  properties:
                    timer_id:
                      oneOf:
                        - type: string
                        - type: number
                      minLength: 1
                    user_id:
                      oneOf:
                        - type: string
                        - type: number
                      minLength: 1
                    task_id:
                      oneOf:
                        - type: number
                        - type: string
                      nullable: true
                    started_at:
                      type: string
                      minLength: 1
                    name:
                      type: string
                      nullable: true
                  required:
                    - timer_id
                    - user_id
                    - started_at
              examples:
                info about running timer with no task:
                  value:
                    - timer_id: '18'
                      user_id: '123'
                      task_id: null
                      started_at: '2021-03-05 14:52:06'
                      name: null
      operationId: get-timer_running
      description: Returns information about running timer.
      security:
        - api_key_in_header: []
  /entries_merge:
    post:
      operationId: post--entries_merge
      description: Merge two time entries into one.
      tags:
        - '[v1] Entry'
      summary: Merge time entries
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                  description: 'first entry id to merge '
                to_id:
                  type: string
                  description: second entry id to merge
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  entry_id:
                    oneOf:
                      - type: string
                      - type: integer
                  user_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  date:
                    type: string
                    minLength: 1
                  task_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  time_span:
                    type: number
                  locked:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  last_modify:
                    type: string
                    minLength: 1
                  note:
                    type: string
                  start_time_hour:
                    type: string
                    minLength: 1
                  end_time_hour:
                    type: string
                    minLength: 1
                  invoiceId:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  billable:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
              examples:
                merged two entries:
                  value:
                    entry_id: 105445325
                    user_id: '5252'
                    date: '2020-02-02'
                    task_id: '0'
                    time_span: 4857
                    locked: '0'
                    last_modify: '2021-03-10 09:08:30'
                    note: ''
                    start_time_hour: '13:05:47'
                    end_time_hour: '14:24:41'
                    invoiceId: '0'
                    billable: '0'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                approval blocked:
                  value:
                    message: You can't edit time entry, because it is in approved or pending timesheet approval.
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                entry not found:
                  value:
                    message: Entry not found
        '406':
          description: Not Acceptable
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                provided same entries:
                  value:
                    message: You must provide different entries
                different users:
                  value:
                    message: Both entries must belong to the same user
      security:
        - api_key_in_header: []
  /entries_changes:
    get:
      operationId: get--entries_changes
      description: Get time enties changes.
      responses:
        '200':
          description: If task or tasks are not found then empty array is returned with 200 code.
          content:
            application/json:
              schema:
                type: array
                items: {}
              examples:
                empty:
                  value: []
                ok response:
                  value:
                    - old_time_span: 0
                      new_time_span: '0'
                      event_type: add
                      edited: '2020-02-10 05:05:05'
                      entry_id: '104950298'
                      duration: '0'
                      user_id: '5343'
                      description: ''
                      task_id: '77438101'
                      date: '2021-02-10'
                      start_time: '13:04:00'
                      end_time: '13:04:00'
                      locked: '0'
                      billable: 1
                      invoiceId: '0'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                dates not provided:
                  value:
                    message: 'you must provide "from" and "to" date like 2013-03-20 '
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                not permitted:
                  value:
                    message: you do not have permissions to get task with id {taskId} (you can set yourself as Time Tracking Administrator or Project Manager)
      tags:
        - '[v1] Entry'
      summary: Get time entries changes
      parameters:
        - schema:
            type: string
            example: 12,13,32
          in: query
          name: task_ids
          description: entry task id or ids
        - schema:
            type: string
            example: 45,55,64
          in: query
          name: user_ids
          description: entry user id or ids
        - schema:
            type: integer
          in: query
          name: limit
          description: number of results to get, if empty then get all of them
        - schema:
            type: string
            example: '2020-02-02'
          in: query
          name: from
          description: date in `YYYY-MM-DD` format
        - schema:
            type: string
            example: '2020-02-02'
          in: query
          name: to
          description: date in `YYYY-MM-DD` format
      security:
        - api_key_in_header: []
  /entries_deletions:
    get:
      operationId: get--entries_deletions
      description: Get time enties deletions.
      responses:
        '200':
          description: If task or tasks are not found then empty array is returned with 200 code.
          content:
            application/json:
              schema:
                type: array
                items: {}
              examples:
                empty:
                  value: []
                ok response:
                  value:
                    - old_time_span: 0
                      new_time_span: '0'
                      event_type: add
                      edited: '2020-02-10 05:05:05'
                      entry_id: '104950298'
                      duration: '0'
                      user_id: '5343'
                      description: ''
                      task_id: '77438101'
                      date: '2021-02-10'
                      start_time: '13:04:00'
                      end_time: '13:04:00'
                      locked: '0'
                      billable: 1
                      invoiceId: '0'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                dates not provided:
                  value:
                    message: 'you must provide "from" and "to" date like 2013-03-20 '
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                not permitted:
                  value:
                    message: you do not have permissions to get task with id {taskId} (you can set yourself as Time Tracking Administrator or Project Manager)
      tags:
        - '[v1] Entry'
      summary: Get time entries deletions
      parameters:
        - schema:
            type: string
            example: 12,13,32
          in: query
          name: task_ids
          description: entry task id or ids
        - schema:
            type: string
            example: 45,55,64
          in: query
          name: user_ids
          description: entry user id or ids
        - schema:
            type: integer
          in: query
          name: limit
          description: number of results to get, if empty then get all of them
        - schema:
            type: string
            example: '2020-02-02'
          in: query
          name: from
          description: date in `YYYY-MM-DD` format
        - schema:
            type: string
            example: '2020-02-02'
          in: query
          name: to
          description: date in `YYYY-MM-DD` format
      security:
        - api_key_in_header: []
    parameters: []
  /group:
    get:
      operationId: get--group
      description: Get all groups.
      responses:
        '200':
          description: OK - Array of groups
          content:
            application/json:
              schema:
                type: array
                description: ''
                minItems: 1
                uniqueItems: true
                items:
                  type: object
                  properties:
                    group_id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    name:
                      type: string
                      minLength: 1
                    parent_id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                  required:
                    - group_id
                    - name
                    - parent_id
              examples:
                example response:
                  value:
                    - group_id: '530222'
                      name: People
                      parent_id: '0'
                    - group_id: '1764'
                      name: '[Inactive]'
                      parent_id: '1208'
      tags:
        - '[v1] Group'
      summary: Get all groups
      security:
        - api_key_in_header: []
    post:
      operationId: post--group
      description: |-
        Modify existing group. Edit permission is required.

        WARNING: backend might not return a response, but changes will be applied!
      responses:
        '200':
          description: OK - returns empty response.
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
              examples:
                group fields not provided:
                  value:
                    message: 'You must send valid group fields to change: name, parent_id'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                group id not provided or you are not permitted:
                  value:
                    message: You can not change this group
      tags:
        - '[v1] Group'
      requestBody:
        content:
          application/json:
            schema:
              description: ''
              type: object
              properties:
                group_id:
                  oneOf:
                    - type: string
                    - type: integer
                  description: group id to modify
                  example: 421
                name:
                  type: string
                  description: group name to set
                  example: NewName
                parent_id:
                  type: string
                  description: parent_id to set
                  example: '11'
              required:
                - group_id
            examples:
              change group name:
                value:
                  group_id: 390672
                  name: NewName
      summary: Update group
      security:
        - api_key_in_header: []
    delete:
      operationId: delete--group
      description: |-
        Delete a group. Edit permission is required.

        Root Group (`parent_id == 0`) cannot be deleted.

        All subgroups of deleted group have their `parent_id` changed to `root_group_id`.


        WARNING: backend might not return a response, but changes will be applied!
      tags:
        - '[v1] Group'
      responses:
        '200':
          description: OK - empty response is returned.
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                not permitted to delete this group:
                  value:
                    message: You can not remove this group
      requestBody:
        content:
          application/json:
            schema:
              description: ''
              type: object
              properties:
                group_id:
                  type: number
                  description: group id to delete
                  example: 390673
              required:
                - group_id
            examples:
              example:
                value:
                  group_id: 390673
      summary: Delete group
      security:
        - api_key_in_header: []
    put:
      operationId: put--group
      description: |-
        Add new group. Edit permission is required.


        There cannot be more than one root group (with parent_id = 0).
        Maximum group tree depth is 4 levels.

        If you get an error 403 `You can not change this group` try to wait about one minute and retry.
      tags:
        - '[v1] Group'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  group_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  name:
                    type: string
                    minLength: 1
                  admin_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  parent_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  root_group_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
              examples:
                created group:
                  value:
                    group_id: '390673'
                    name: Name of New Group
                    admin_id: '0'
                    parent_id: '390672'
                    root_group_id: '390672'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                not permitted to create group:
                  value:
                    message: You can not change this group
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                create group too far:
                  value:
                    message: You can create groups only up to level 4
      requestBody:
        content:
          application/json:
            schema:
              description: ''
              type: object
              properties:
                parent_id:
                  oneOf:
                    - type: string
                    - type: integer
                  description: group parent id
                  example: 421
                name:
                  type: string
                  description: group name
                  example: NewName
              required:
                - name
            examples:
              create group:
                value:
                  parent_id: 390672
                  name: Name of New Group
              create root group:
                value:
                  parent_id: 0
                  name: Name of New Root Group
      summary: Create group
      security:
        - api_key_in_header: []
  /group/{group_id}/setting:
    get:
      operationId: get--group-setting
      description: Returns setting for given group_id.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  groupId:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  name:
                    type: string
                    minLength: 1
                  value:
                    type: string
                    minLength: 1
                  inherited:
                    type: boolean
                  inheritedFromGroup:
                    type: integer
              examples:
                companyAddress setting:
                  value:
                    groupId: '521'
                    name: companyAddress
                    value: |-
                      Some Street 24
                      51-521 City, Country
                      VAT EU: PL1231231212
                    inherited: true
                    inheritedFromGroup: 0
        '404':
          description: Not Found - returns empty array when setting not found.
          content:
            application/json:
              schema:
                type: array
                items: {}
              examples:
                Example:
                  value: []
      tags:
        - '[v1] Group'
      summary: Get group setting
      parameters:
        - schema:
            type: string
            example: companyAddress
          in: query
          name: name
          description: name of setting to get
          required: true
      security:
        - api_key_in_header: []
    put:
      operationId: put--group-setting
      description: Update group setting.
      tags:
        - '[v1] Group'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  groupId:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  name:
                    type: string
                    minLength: 1
                  value:
                    type: string
                    minLength: 1
                  inherited:
                    type: boolean
                  inheritedFromGroup:
                    type: integer
              examples:
                changed company address:
                  value:
                    groupId: '521'
                    name: companyAddress
                    value: Some...new...adress
                    inherited: true
                    inheritedFromGroup: 0
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                cannot change this setting:
                  value:
                    message: Setting [setting_name] cannot be changed
                your plan limits you:
                  value:
                    message: You can't use this feature due to your plan.
      summary: Update group setting
      requestBody:
        content:
          application/json:
            schema:
              description: ''
              type: object
              properties:
                name:
                  type: string
                  description: name of setting to be updated
                  example: companyAddress
                value:
                  oneOf:
                    - type: string
                    - type: integer
                  description: new value
                  example: NewAddress
              required:
                - name
                - value
            examples:
              change companyAddress:
                value:
                  name: companyAddress
                  value: Some...new...adress
        description: ''
      security:
        - api_key_in_header: []
    delete:
      operationId: delete--group-setting
      description: Delete group setting.
      tags:
        - '[v1] Group'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  groupId:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  name:
                    type: string
                    minLength: 1
                  value:
                    type: string
                    minLength: 1
                  inherited:
                    type: boolean
                  inheritedFromGroup:
                    type: integer
              examples:
                deleted company address:
                  value:
                    groupId: '552'
                    name: companyAddress
                    value: ''
                    inherited: true
                    inheritedFromGroup: 0
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                cannot delete setting or not permitted:
                  value:
                    message: Setting [setting_name] cannot be changed
      summary: Delete group setting
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: name of setting to be deleted
                  example: companyAddress
              required:
                - name
            examples:
              delete company address:
                value:
                  name: companyAddress
      security:
        - api_key_in_header: []
    parameters:
      - in: path
        name: group_id
        schema:
          type: integer
        description: group id
        required: true
  /group/{group_id}/user:
    summary: Manage users in a group
    get:
      operationId: get--group-user
      description: Get users from given group.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                description: ''
                uniqueItems: true
                items:
                  type: object
                  properties:
                    group_id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    user_id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    activated:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    role_id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    email:
                      type: string
                      minLength: 1
                    pass_hash:
                      type: string
                      minLength: 1
                    synch_time:
                      type: string
                      minLength: 1
                    login_time:
                      type: string
                      minLength: 1
                    register_time:
                      type: string
                      minLength: 1
                    time_zone:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    start_of_the_week:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    display_name:
                      type: string
                      minLength: 1
                    activation_code:
                      type: string
                    forgotten_password_code:
                      type: string
                      minLength: 1
                    os_username:
                      type: string
                    operating_system:
                      type: string
                      minLength: 1
                    login_count:
                      type: string
                      minLength: 1
                    plan:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    language:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    admin_pass:
                      type: string
                      nullable: true
                    admin_userid:
                      type: string
                      nullable: true
                    root_group_id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    last_session_id:
                      oneOf:
                        - type: string
                        - type: integer
                      nullable: true
                    already:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    additional_email:
                      type: string
              examples:
                returned users:
                  value:
                    - group_id: '111'
                      user_id: '23'
                      activated: '1'
                      role_id: '1'
                      id: '23'
                      email: john@smith.com
                      pass_hash: gx97b8z7f98as789dfasd
                      synch_time: '2021-03-18 12:47:10'
                      login_time: '2021-03-17 07:59:02'
                      register_time: '2009-03-25 11:35:52'
                      time_zone: '0'
                      start_of_the_week: '0'
                      display_name: John Smith
                      activation_code: ''
                      forgotten_password_code: XXXyyyy333
                      os_username: ''
                      operating_system: chrome-plugin
                      login_count: '22352'
                      plan: '100'
                      language: '0'
                      admin_pass: null
                      admin_userid: null
                      root_group_id: '111'
                      last_session_id: null
                      already: '1'
                      additional_email: ''
                    - group_id: '111'
                      user_id: '32'
                      activated: '1'
                      role_id: '1'
                      id: '32'
                      email: margaret@smith.com
                      pass_hash: xxx87sgf8g6as6896g89sa98
                      synch_time: '2021-03-15 14:26:19'
                      login_time: '2021-03-15 11:41:14'
                      register_time: '2018-07-04 08:39:25'
                      time_zone: '0'
                      start_of_the_week: '0'
                      display_name: Margaret Smith
                      activation_code: null
                      forgotten_password_code: ''
                      os_username: DESKTOP-NGFIM9L\msmith
                      operating_system: Windows 10 (build 19041), 64-bit edition
                      login_count: '1885'
                      plan: '0'
                      language: '1'
                      admin_pass: 88978fgs98a798s7adasxzbv
                      admin_userid: '23'
                      root_group_id: '111'
                      last_session_id: null
                      already: '1'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: array
                items: {}
              examples:
                group not found:
                  value: []
      tags:
        - '[v1] Group'
      summary: Get users in group
      security:
        - api_key_in_header: []
    post:
      operationId: post--group-user
      description: Invite user to a group.
      tags:
        - '[v1] Group'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  statuses:
                    type: object
                    properties:
                      '[invited_email]':
                        type: object
                        properties:
                          status:
                            type: string
                            minLength: 1
              examples:
                invited and send email:
                  value:
                    statuses:
                      some@emal.com:
                        status: Invite
                invited without email:
                  value:
                    statuses:
                      some@email.com:
                        status: Add to group
                invited two users:
                  value:
                    statuses:
                      some@email.com:
                        status: Add to group
                      another@email.com:
                        status: Add to group
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                invalid email or not provided any:
                  value:
                    message: 'invalid email '
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                not permitted to invite:
                  value:
                    message: You cannot invite people to this group
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                tt_global_admin:
                  type: integer
                  description: set invited users as time tracking administrators
                  enum:
                    - 0
                    - 1
                email:
                  type: array
                  description: emails to invite
                  items:
                    type: string
                dry_run:
                  type: integer
                  enum:
                    - 0
                    - 1
                  default: 0
                  description: used to simulate invite ie. check for errors in request, because it does not really invite user
                can_view_rates:
                  type: integer
                  description: can invited users view rates
                  enum:
                    - 0
                    - 1
                tt_can_create_level_1_tasks:
                  type: integer
                  description: can invited users create tasks at root level
                  enum:
                    - 0
                    - 1
                add_to_all_projects:
                  type: integer
                  description: adds invited users to all existing tasks
                  enum:
                    - 0
                    - 1
                projects:
                  type: array
                  description: array of tasks ids to add invited users to
                  items:
                    type: integer
                guests:
                  type: array
                  items:
                    type: object
                    properties:
                      guest:
                        type: boolean
                        description: is this user guest
                      email:
                        type: string
                        description: guest email
                send_mail:
                  type: integer
                  enum:
                    - 0
                    - 1
                  description: should send invitation email
                  default: 1
              required:
                - email
            encoding:
              tt_global_admin:
                style: form
                explode: true
              email:
                style: form
                explode: true
            examples:
              invite two users without sending email:
                value:
                  email:
                    - some@email.com
                    - another@email.com
                  send_email: 0
              add two guests:
                value:
                  email:
                    - some@email.com
                    - another@email.com
                  guests:
                    - guest: 1
                      email: some@email.com
                    - guest: 1
                      email: another@email.com
        description: If `tt_global_admin` is set to `1` then fields `tt_can_create_level_1_tasks` and `can_view_rates` are set to `1` too - this behavior is unchangeable.
      parameters: []
      summary: Invite user to a group
      security:
        - api_key_in_header: []
    delete:
      operationId: delete--group-user
      description: Delete user from group.
      tags:
        - '[v1] Group'
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  status:
                    type: string
                    minLength: 1
                  wiped:
                    type: boolean
              examples:
                deleted user:
                  value:
                    status: ok
                    wiped: true
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                not permitted:
                  value:
                    message: You cannot remove users from this group
                user to delete not found:
                  value:
                    message: User with specified ID wasn't found
                user is not in this group:
                  value:
                    message: User does not belong to this group
      summary: Delete user from group
      security:
        - api_key_in_header: []
    put:
      operationId: put--group-user
      description: Update user in group or move user to other group.
      tags:
        - '[v1] Group'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  user_id:
                    type: array
                    items:
                      type: integer
                  role_id:
                    type: number
                  group_id:
                    type: number
              examples:
                changed role to 1:
                  value:
                    user_id:
                      - 1723605
                    role_id: 1
                    group_id: 252
                moved 2 users to different group:
                  value:
                    user_id:
                      - 51256
                      - 6362
                    role_id: 0
                    group_id: 5526
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                not permitted to this group:
                  value:
                    message: You cannot change roles in this group
                not permitted to user:
                  value:
                    message: 'You cannot change roles of this user: [user_id]'
                not permitted to move to this group:
                  value:
                    message: You cannot move people to this group
      summary: Update user in group
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  oneOf:
                    - type: integer
                    - type: array
                  description: user or users to edit
                  example: 552
                  items: {}
                role_id:
                  type: integer
                  description: role id to set for user/users
                  enum:
                    - 1 - administrator
                    - 2 - supervisor
                    - 3 - user
                    - 5 - guest
                group_id:
                  type: integer
                  description: group id to move user to
            examples:
              move users to new group:
                value:
                  user_id:
                    - 1723605
                    - 1706128
                  group_id: 5526
              change user role:
                value:
                  user_id: 1723605
                  role_id: 1
      security:
        - api_key_in_header: []
    parameters:
      - in: path
        required: true
        name: group_id
        description: group_id
        schema:
          type: integer
  /group/{group_id}/scheduler:
    get:
      operationId: get--group-scheduler
      description: Get group scheduler.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                description: ''
                minItems: 1
                uniqueItems: true
                items:
                  type: object
                  properties:
                    event_id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    group_id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    start_time:
                      type: string
                      minLength: 1
                    end_time:
                      type: string
                      minLength: 1
                    day:
                      type: string
                      minLength: 1
                    recurring:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    type:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    variant:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
              examples:
                example response:
                  value:
                    - event_id: '674337'
                      group_id: '552'
                      start_time: '11:00:00'
                      end_time: '18:00:00'
                      day: '3'
                      recurring: '1'
                      type: '0'
                      variant: '0'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                not permitted:
                  value:
                    message: You cannot see scheduler in this group
      tags:
        - '[v1] Group'
      summary: Get group scheduler
      security:
        - api_key_in_header: []
    delete:
      operationId: delete--group-scheduler
      description: Delete group scheduler.
      tags:
        - '[v1] Group'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  event_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  group_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  start_time:
                    type: string
                    minLength: 1
                  end_time:
                    type: string
                    minLength: 1
                  day:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  recurring:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  type:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  variant:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
              examples:
                example response:
                  value:
                    event_id: '6567457'
                    group_id: '552'
                    start_time: '11:00:00'
                    end_time: '18:00:00'
                    day: '3'
                    recurring: '1'
                    type: '0'
                    variant: '0'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                not permitted:
                  value:
                    message: You cannot edit scheduler in this group
      summary: Delete group scheduler
      security:
        - api_key_in_header: []
    put:
      operationId: put--group-scheduler
      description: Create or update group scheduler.
      tags:
        - '[v1] Group'
      responses:
        '201':
          description: Created - empty response is returned with `Location` header.
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                not permitted:
                  value:
                    message: You cannot edit scheduler in this group
      summary: Create/Update group scheduler
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                day:
                  type: integer
                  description: day of scheduler (1 - monday, 7 - sunday)
                variant:
                  type: integer
                  description: scheduler variant
                  enum:
                    - 0
                    - 1
                start_time:
                  type: string
                  description: scheduler start time in `HH:mm:ss` format
                  example: '08:00:00'
                end_time:
                  type: string
                  description: scheduler end time in `HH:mm:ss` format
                  example: '15:00:00'
            examples:
              create new scheduler:
                value:
                  day: 3
                  variant: 0
                  start_time: '11:11:11'
                  end_time: '12:12:12'
              update times in scheduler:
                value:
                  day: 3
                  variant: 0
                  start_time: '13:13:13'
                  end_time: '18:18:18'
        description: If scheduler with given `day` and `variant` is found then this scheduler is updated by fields `day`, `variant`, `start_time` and `end_time`. If the scheduler is not found then new one is created with fields above.
      security:
        - api_key_in_header: []
    parameters:
      - in: path
        required: true
        name: group_id
        description: group id
        schema:
          type: integer
  /group/{group_id}/company_logo:
    get:
      operationId: get--group-company_logo
      description: Returns url to group logo.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: string
              examples:
                returned logo url:
                  value: https://url.to.logo/8b5b7c944368381316c8b3ad574f5a92.png
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                invalid user, not permitted or something went wrong:
                  value:
                    message: Invalid user
      tags:
        - '[v1] Group'
      summary: Get group logo
      security:
        - api_key_in_header: []
    parameters:
      - in: path
        required: true
        name: group_id
        schema:
          type: integer
        description: group id
  /users:
    get:
      summary: Get all users data
      tags:
        - '[v1] User'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                description: ''
                minItems: 1
                uniqueItems: true
                items:
                  type: object
                  properties:
                    group_id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    user_id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    email:
                      type: string
                      minLength: 1
                    login_count:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    login_time:
                      type: string
                      minLength: 1
                      description: last login time
                    display_name:
                      type: string
                      minLength: 1
                    synch_time:
                      type: string
                      minLength: 1
                      description: last desktop app synch time
              examples:
                example:
                  value:
                    - group_id: '1234'
                      user_id: '1231456'
                      email: mr@smith.com
                      login_count: '1402'
                      login_time: '2020-12-21 17:15:22'
                      display_name: Agent Smith
                      synch_time: '2020-12-21 17:10:21'
                    - group_id: '1234'
                      user_id: '1235213'
                      email: mrs@smith.com
                      login_count: '22084'
                      login_time: '2021-03-11 10:21:15'
                      display_name: Jan Kowalski
                      synch_time: '2020-12-21 23:29:09'
                    - group_id: '1234'
                      user_id: '5123213'
                      email: some@example.com
                      login_count: '1775'
                      login_time: '2020-12-21 13:43:12'
                      display_name: Example Name
                      synch_time: '2020-12-21 14:00:45'
          headers: {}
      operationId: get-users
      description: Retrieves information about all users in an account
      parameters:
        - schema:
            type: boolean
          in: query
          name: active_only
          description: If true returns only active users
      security:
        - api_key_in_header: []
  /user/{user_id}/setting:
    get:
      operationId: get-user-setting
      description: Return user's setting value.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  userId:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  name:
                    type: string
                    minLength: 1
                  value:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
              examples:
                getting tt_global_admin setting:
                  value:
                    userId: '123'
                    name: tt_global_admin
                    value: '1'
        '404':
          description: Not Found - if provided empty or non-existent setting an empty array is returned.
          content:
            application/json:
              schema:
                type: array
                items: {}
              examples:
                Example:
                  value: []
      tags:
        - '[v1] User'
      summary: Get user setting
      parameters:
        - schema:
            type: string
          in: query
          name: name
          description: setting name
      security:
        - api_key_in_header: []
    parameters:
      - in: path
        required: true
        name: user_id
        description: user id
        schema:
          type: integer
    put:
      summary: Update user setting
      operationId: put-user-user_id-setting
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  userId:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  name:
                    type: string
                    minLength: 1
                  value:
                    oneOf:
                      - type: string
                      - type: integer
              examples:
                changed setting value to empty:
                  value:
                    userId: '123'
                    name: tt_long_tracking_reminder
                    value: ''
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                bad setting name or cannot change this setting:
                  value:
                    message: Setting ss cannot be changed
      description: Update user setting.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: setting name
                value:
                  oneOf:
                    - type: string
                    - type: integer
                  description: setting value
              required:
                - name
      tags:
        - '[v1] User'
      security:
        - api_key_in_header: []
    delete:
      summary: Delete user setting
      operationId: delete-user-user_id-setting
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  userId:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  name:
                    type: string
                    minLength: 1
                  value:
                    type: string
                    minLength: 1
              examples:
                deleted setting:
                  value:
                    userId: '552'
                    name: hideChatWidget
                    value: '0'
      description: Delete user setting.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: setting name to delete
                  example: hideChatWidget
            examples:
              delete setting:
                value:
                  name: hideChatWidget
      tags:
        - '[v1] User'
      security:
        - api_key_in_header: []
  /tag:
    post:
      operationId: post--tag
      description: Create tag. Do not provide `tag_id` in url, because while creating new tag a new, unique `tag_id` will be made. If you provide `tag_id` in url, a 400 HTTP response is returned.
      parameters: []
      responses:
        '200':
          description: OK Response returns newly created tag id.
          content:
            application/json:
              schema:
                type: integer
              examples:
                created tag:
                  value: 16
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                tag_id provided in url:
                  value:
                    message: Bad request.
                tag list does not exists:
                  value:
                    message: Tag list does not exist.
                name not provided:
                  value:
                    message: You can't create new tag list. Name is empty.
      tags:
        - '[v1] Tags'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                list:
                  oneOf:
                    - type: string
                    - type: integer
                  description: tag list id - to this list a newly created tag will be added
                  example: 52
                name:
                  type: string
                  description: tag name
                  example: Development
              required:
                - list
                - name
      summary: Create tag
      security:
        - api_key_in_header: []
  /tag/{tag_id}:
    get:
      summary: Get tag data
      operationId: get-tag
      responses:
        '200':
          description: OK response
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  name:
                    type: string
                    minLength: 1
                  archived:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  tagListId:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  hasGroupRestrictions:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
              examples:
                returned tag info:
                  value:
                    id: '13'
                    name: '111'
                    archived: '0'
                    tagListId: '8'
                    hasGroupRestrictions: '0'
        '400':
          description: Bad Request is returned when tag_id is not provided or tag does not exist.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                tag id no provided:
                  value:
                    message: Bad request.
                tag doesnt exist:
                  value:
                    message: Tag does not exist.
      description: Get tag data.
      parameters:
        - in: path
          required: true
          name: tag_id
          description: tag id
          schema:
            type: integer
      tags:
        - '[v1] Tags'
      security:
        - api_key_in_header: []
    put:
      summary: Update tag
      operationId: put-tag-tag_id
      parameters:
        - in: path
          required: true
          name: tag_id
          description: tag id
          schema:
            type: integer
      responses:
        '200':
          description: OK - tag updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                updated tag data:
                  value:
                    message: OK
        '201':
          description: Created
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                tag id not provided:
                  value:
                    message: Bad request.
                tag not found:
                  value:
                    message: Tag with id 123 not found
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                tag is in active integration:
                  value:
                    message: You cannot edit tag from active integration
      description: Modify tag data.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: new tag name
                archived:
                  oneOf:
                    - type: string
                    - type: integer
                  description: set if tag is archived
      tags:
        - '[v1] Tags'
      security:
        - api_key_in_header: []
    parameters: []
  /tag/{tag_id}/groups:
    get:
      operationId: get--tag-groups
      description: |-
        Get tag allowed groups

        Returns tags available in a group
      responses:
        '200':
          description: OK Response
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  '':
                    type: object
                    required:
                      - id
                      - name
                      - hasSubgroups
                    properties:
                      id:
                        type: string
                        minLength: 1
                      name:
                        type: string
                        minLength: 1
                      hasSubgroups:
                        type: string
                        minLength: 1
                required:
                  - ''
              examples:
                returned data:
                  value:
                    '5525':
                      id: '5525'
                      name: TimeCamp / Development
                      hasSubgroups: '0'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                tag does not exist:
                  value:
                    message: Tag does not exist.
      tags:
        - '[v1] Tags'
      summary: Get tag allowed groups
      security:
        - api_key_in_header: []
    parameters:
      - in: path
        required: true
        name: tag_id
        description: tag id
        schema:
          type: integer
  /tag/{tag_id}/group/{group_id}:
    post:
      operationId: post--tag-group
      description: Add allowed group to tag. Do not provide `group_id` in url.
      responses:
        '200':
          description: OK Response
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                added allowed gropu to tag:
                  value:
                    message: OK
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                example:
                  value:
                    message: Bad request.
      tags:
        - '[v1] Tags'
      summary: Add allowed group to tag
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                group:
                  oneOf:
                    - type: string
                    - type: integer
                  description: group id which will be allowed to use given tag
      security:
        - api_key_in_header: []
    delete:
      operationId: delete--tag-group
      description: Delete allowed group from tag.
      responses:
        '200':
          description: OK Response
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                deleted group from tag:
                  value:
                    message: OK
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                wrong parameters:
                  value:
                    message: Bad request.
                delete fails:
                  value:
                    message: Delete fails
      tags:
        - '[v1] Tags'
      summary: Delete allowed group from tag
      security:
        - api_key_in_header: []
    parameters:
      - in: path
        required: true
        name: tag_id
        description: tag id
        schema:
          type: integer
      - schema:
          type: integer
        name: group_id
        in: path
        required: true
        description: group id to delete (only for DELETE option)
  /tag_list:
    get:
      operationId: get--tag_list-
      description: Get tag list data.
      responses:
        '200':
          description: OK Response - returns array of tag lists.
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  '[id]':
                    type: object
                    properties:
                      id:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      name:
                        type: string
                        minLength: 1
                      archived:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
              examples:
                Example:
                  value:
                    '3':
                      id: '3'
                      name: Tags 1
                      archived: '0'
                    '4':
                      id: '4'
                      name: Tags 2
                      archived: '0'
                    '5':
                      id: '5'
                      name: Tags 3
                      archived: '0'
                    '8':
                      id: '8'
                      name: Other tag list
                      archived: '0'
      tags:
        - '[v1] Tags'
      summary: Get tag list
      parameters:
        - schema:
            type: integer
            example: 523
          in: query
          name: task_id
          description: get tag list data from task
        - schema:
            type: integer
            enum:
              - 0
              - 1
          in: query
          name: archived
          description: include archived tag lists
        - schema:
            type: integer
            enum:
              - 0
              - 1
          in: query
          name: tags
          description: include tags
        - schema:
            type: integer
            enum:
              - 0
              - 1
          in: query
          name: exclude_empty_tag_lists
          description: include empty tag lists
        - schema:
            type: integer
            enum:
              - 0
              - 1
          in: query
          name: use_restrictions
          description: get group tag list -> default option (1) or root group tag lists (0)
      security:
        - api_key_in_header: []
    post:
      operationId: post--tag_list-
      description: Create new tag list.
      responses:
        '200':
          description: OK Response - returns tag list id
          content:
            application/json:
              schema:
                oneOf:
                  - type: string
                  - type: integer
              examples:
                created new tag list:
                  value: 15
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                name not provided:
                  value:
                    message: You can't create new tag list. Name is empty.
      tags:
        - '[v1] Tags'
      summary: Create new tag list
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: tag list name
                  example: tag list
        description: ''
      security:
        - api_key_in_header: []
  /tag_list/{tag_list_id}:
    get:
      operationId: get--tag_list
      description: Get tag list tags.
      responses:
        '200':
          description: OK Response, `tags` is an array of tags included in tag list.
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  name:
                    type: string
                    minLength: 1
                  archived:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  tags:
                    type: object
                    properties:
                      '':
                        type: object
                        properties:
                          id:
                            oneOf:
                              - type: string
                              - type: integer
                            minLength: 1
                          name:
                            type: string
                            minLength: 1
                          archived:
                            oneOf:
                              - type: string
                              - type: integer
                            minLength: 1
                          hasGroupRestrictions:
                            oneOf:
                              - type: string
                              - type: integer
                            minLength: 1
              examples:
                Example response:
                  value:
                    id: '8'
                    name: My tag list
                    archived: '0'
                    tags:
                      '13':
                        id: '13'
                        name: First tag
                        archived: '0'
                        hasGroupRestrictions: '0'
                      '14':
                        id: '14'
                        name: Second Tag
                        archived: '0'
                        hasGroupRestrictions: '0'
                      '15':
                        id: '15'
                        name: Third Tag
                        archived: '0'
                        hasGroupRestrictions: '0'
                      '16':
                        id: '16'
                        name: Fourth Tag
                        archived: '0'
                        hasGroupRestrictions: '0'
                Tag list not found:
                  value: []
      tags:
        - '[v1] Tags'
      summary: Get tag list with tags
      security:
        - api_key_in_header: []
    put:
      operationId: put--tag_list
      description: Update tag list data.
      tags:
        - '[v1] Tags'
      responses:
        '200':
          description: OK Response
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                updated tag list:
                  value:
                    message: OK
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                tag list not found:
                  value:
                    message: Tag list does not exist.
      summary: Update tag list data
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Newer Tag list
                  example: New tag list name
                archived:
                  type: integer
                  description: set archived status
                  enum:
                    - 0
                    - 1
        description: ''
      security:
        - api_key_in_header: []
    parameters:
      - in: path
        required: true
        name: tag_list_id
        description: tag list id
        schema:
          type: integer
  /tag_list/{tag_list_id}/tags:
    get:
      operationId: get--tag_list-tags
      description: |
        Get tags from a specific tag list.
      responses:
        '200':
          description: OK Response
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  '':
                    type: object
                    properties:
                      id:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      name:
                        type: string
                        minLength: 1
                      archived:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      hasGroupRestrictions:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
              examples:
                Returned tags:
                  value:
                    '13':
                      id: '13'
                      name: First tag
                      archived: '0'
                      hasGroupRestrictions: '0'
                    '14':
                      id: '14'
                      name: Second Tag
                      archived: '0'
                      hasGroupRestrictions: '0'
                    '15':
                      id: '15'
                      name: Third tag
                      archived: '0'
                      hasGroupRestrictions: '0'
                    '16':
                      id: '16'
                      name: Fourth Tag
                      archived: '0'
                      hasGroupRestrictions: '0'
                Tag list not found:
                  value: []
      tags:
        - '[v1] Tags'
      summary: Get only tags of a tag list
      security:
        - api_key_in_header: []
    parameters:
      - schema:
          type: integer
        name: tag_list_id
        in: path
        required: true
        description: tag list id
  /entries:
    get:
      operationId: get--entries
      description: |-
        Get time entry or entries.

        If both `modify_from` and `modify_to` parameters are provided, `from` and `to` are not required.
      responses:
        '200':
          description: OK response
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  id:
                    type: integer
                    description: time entry id
                  duration:
                    type: string
                    minLength: 1
                    description: time entry duration
                  user_id:
                    type: string
                    minLength: 1
                  user_name:
                    type: string
                    minLength: 1
                  task_id:
                    type: string
                    minLength: 1
                    description: task connected to this time entry
                  last_modify:
                    type: string
                    minLength: 1
                  date:
                    type: string
                    minLength: 1
                    description: time entry date
                  start_time:
                    type: string
                    minLength: 1
                    description: time entry start time
                  end_time:
                    type: string
                    minLength: 1
                    description: time entry end time
                  locked:
                    type: string
                    minLength: 1
                    description: is this time entry locked
                  name:
                    type: string
                    minLength: 1
                    description: connected task name
                  addons_external_id:
                    type: string
                  billable:
                    type: integer
                    description: is this time entry billable
                  invoiceId:
                    type: string
                    minLength: 1
                    description: is this time entry invoiced
                  color:
                    type: string
                    minLength: 1
                    description: time entry color
                  description:
                    type: string
                    minLength: 1
                    description: time entry note
                  tags:
                    type: array
                    uniqueItems: true
                    minItems: 1
                    items:
                      type: object
                      properties:
                        tagListName:
                          type: string
                          minLength: 1
                        tagListId:
                          type: string
                          minLength: 1
                        tagId:
                          type: string
                          minLength: 1
                        name:
                          type: string
                          minLength: 1
                        mandatory:
                          type: string
                          minLength: 1
                  hasEntryLocationHistory:
                    type: boolean
              examples:
                Example:
                  value:
                    id: 77181352
                    duration: '2700'
                    user_id: '123'
                    user_name: John Kowalski
                    task_id: '51218281'
                    last_modify: '2020-02-02 00:03:50'
                    date: '2020-02-03'
                    start_time: '09:00:00'
                    end_time: '09:45:00'
                    locked: '0'
                    name: Development projects
                    addons_external_id: ''
                    billable: 1
                    invoiceId: '0'
                    color: '#5DCB73'
                    description: my description
                    tags:
                      - tagListName: tagList
                        tagListId: '8'
                        tagId: '13'
                        name: Dev
                        mandatory: '0'
                    hasEntryLocationHistory: false
        '403':
          description: When given `user_ids` are not found empty response is retured with code 403. 403 is also returned when you don't have sufficient permissions.
          content:
            application/json:
              schema:
                type: string
                description: ''
                example: '[]'
              examples: {}
      tags:
        - '[v1] Entry'
      summary: Get time entries
      parameters:
        - schema:
            type: boolean
            enum:
              - 'true'
              - 'false'
          in: query
          name: billable
          description: get billable entries
        - schema:
            type: string
            example: '2021-03-01'
            format: date
          in: query
          name: from
          description: from date in `YYYY-MM-DD` format
          required: true
        - schema:
            type: string
            example: '2021-03-11'
            format: date
          in: query
          name: to
          description: to date in `YYYY-MM-DD` format
          required: true
        - schema:
            type: string
            format: date
            example: '2022-02-06'
          in: query
          name: modify_from
          description: minimal latest modification date in `YYYY-MM-DD` format
        - schema:
            type: string
            example: '2022-02-12'
            format: date
          in: query
          name: modify_to
          description: maximal latest modification date in `YYYY-MM-DD` format
        - schema:
            type: integer
            example: '12, if you want multiple tag ids then you need to repeat the query with different id as in: ...?tags_filter[items][][tag]=12&tags_filter[items][][tag]=15'
          in: query
          name: tags_filter[items][][tag]
          description: filter entries with tag id
        - schema:
            type: boolean
            enum:
              - 'true'
              - 'false'
          in: query
          name: approvalMode
          description: get only users that user has acl permissions for
        - schema:
            type: string
            enum:
              - tags
              - breadcrumps
          in: query
          name: opt_fields
          description: include fields like `tags` or `breadcrumbs`
        - schema:
            type: boolean
            enum:
              - 'true'
              - 'false'
          in: query
          name: include_project
          description: include project/task information
        - schema:
            type: boolean
            enum:
              - 'true'
              - 'false'
          in: query
          name: include_rates
          description: include rates
        - schema:
            type: boolean
            enum:
              - 'true'
              - 'false'
          in: query
          name: with_subtasks
          description: include subtasks
        - schema:
            type: boolean
            enum:
              - 'true'
              - 'false'
          in: query
          name: ignoreInvoiced
          description: ignore invoiced entries
        - schema:
            type: boolean
            enum:
              - 'true'
              - 'false'
          in: query
          name: round_duration
          description: round entry duration
        - schema:
            type: boolean
            enum:
              - 'true'
              - 'false'
          in: query
          name: active_only
          description: return active entries only, only when `with_subtask` = `true`
        - schema:
            type: string
            example: '`me` for your entries or user_ids like `123,5213,1223`'
          in: query
          name: user_ids
          description: get entries of given user ids
      security:
        - api_key_in_header: []
    delete:
      operationId: delete--entries
      description: Delete time entries.
      tags:
        - '[v1] Entry'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                deleted entry:
                  value:
                    message: removed
        '204':
          description: No Content
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                no such entry:
                  value:
                    message: No such entry
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                entry id not provided:
                  value:
                    message: Missing entry ID
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                approval blocked:
                  value:
                    message: You can't edit time entry, because it is in approved or pending timesheet approval.
                insufficient permission:
                  value:
                    message: You don't have access to this entry
      summary: Delete time entry
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: integer
                  description: entry id to delete
      security:
        - api_key_in_header: []
    post:
      operationId: post--entries
      description: Create time entry.
      tags:
        - '[v1] Entry'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  entry_id:
                    type: number
                required:
                  - entry_id
              examples:
                created entry:
                  value:
                    entry_id: 1563234
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                Date not  provided:
                  value:
                    message: You must provide a date for the time entry
                Not allowed to edit manually:
                  value:
                    message: It is not allowed to enter projects time manually in timesheet on the website. Administrator can disable this option in Settings.
                Duration not provided (if `start` and `end` are not provided):
                  value:
                    message: you must provide a duration in seconds for time entry
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                Not permitted if guest:
                  value:
                    message: Sorry, you don’t have permissions to track time as a guest
                Start time is after end time:
                  value:
                    message: Start time (2021-03-05 09:12:52) can not be after end time (2021-03-05 08:23:10).
      summary: Create time entry
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                get_entries:
                  type: integer
                  enum:
                    - 0
                    - 1
                  description: if `true` then this works like `GET`
                date:
                  type: string
                  description: entry will be created on this date
                  example: '2021-03-02'
                start:
                  type: string
                  description: entry start time, this has higher priority than `start_time` if provided both
                  example: '2020-02-02 13:05:47'
                start_time:
                  type: string
                  description: entry start time
                  example: '2020-02-02 13:05:47'
                end:
                  type: string
                  description: entry end time, this has higher priority than `end_time` if provided both
                  example: '2020-02-02 15:21:31'
                end_time:
                  type: string
                  description: entry end time
                  example: '2020-02-02 15:21:31'
                duration:
                  type: integer
                  description: duration in seconds, required if `start` and `end` are not given
                  example: 7200
                user_id:
                  oneOf:
                    - type: string
                    - type: integer
                  description: user id for which you create the entry
                  example: 52315
                task_id:
                  type: number
                  description: entry task
                  example: 1523
                tags:
                  type: array
                  description: array of tags ids to add to entry
                  items:
                    type: object
                    properties:
                      tagId:
                        type: integer
                        example: '"tags": [         {"tagId": 1},         {"tagId": 4}     ]'
                note:
                  type: string
                  description: note for entry, same as `description`
                description:
                  type: string
                  description: description for entry, same as `note`
                billable:
                  type: boolean
                  description: is entry billable
                  example: true
              required:
                - date
      security:
        - api_key_in_header: []
    put:
      operationId: put--entries
      description: Update time entries.
      tags:
        - '[v1] Entry'
      responses:
        '200':
          description: OK response
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  time_span:
                    type: number
                    description: entry duration
                  entry_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  user_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  date:
                    type: string
                    minLength: 1
                  task_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  locked:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  last_modify:
                    type: string
                    minLength: 1
                  note:
                    type: string
                  start_time_hour:
                    type: string
                    minLength: 1
                  end_time_hour:
                    type: string
                    minLength: 1
                  invoiceId:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  billable:
                    oneOf:
                      - type: string
                      - type: boolean
                    minLength: 1
              examples:
                Changed duration:
                  value:
                    time_span: 1800
                    entry_id: '10544326'
                    user_id: '425'
                    date: '2020-02-02'
                    task_id: '0'
                    locked: '0'
                    last_modify: '2021-03-10 10:21:40'
                    note: ''
                    start_time_hour: '13:05:47'
                    end_time_hour: '14:24:41'
                    invoiceId: '0'
                    billable: '0'
        '400':
          description: some examples of Bad Request responses
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                bad date format:
                  value:
                    message: unrecognized {format_name} format
                vacation limit time exceeded:
                  value:
                    message: Vacation limit time exceeded.
        '403':
          description: some examples of Forbidden response
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                entry blocked by approval:
                  value:
                    message: You can't edit time entry, because it is in approved or pending timesheet approval.
                not permitted to edit entry:
                  value:
                    message: You do not have permissions to edit this entry
                guest not permitted:
                  value:
                    message: Sorry, you don’t have permissions to track time as a guest
                entry in archived task:
                  value:
                    message: Tracking time for archived tasks is not available. Please select another task.
      summary: Update time entry
      requestBody:
        content:
          application/json:
            schema:
              description: ''
              type: object
              properties:
                id:
                  type: integer
                  description: entry id
                  example: 52321
                start_time:
                  type: string
                  description: entry start hour
                  example: '14:03:21'
                end_time:
                  type: string
                  description: entry end time
                  example: '16:02:15'
                duration:
                  description: entry duration in seconds
                  type: integer
                date:
                  type: string
                  description: entry date in `YYYY-MM-DD` format
                  example: '2021-03-06'
                note:
                  type: string
                  description: note for entry, same as `description`
                description:
                  type: string
                  description: description for entry, same as `note`
                invoiceId:
                  type: integer
                  description: entry invoice id
                task_id:
                  type: integer
                  description: entry task id
                billable:
                  type: boolean
                  description: is entry billable
                  example: true
              required:
                - id
        description: ''
      security:
        - api_key_in_header: []
  /activity:
    get:
      operationId: get--activity
      description: Get computer activities.
      tags:
        - '[v1] Computer Activities'
      responses:
        '200':
          description: Array of computer activities.
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  user_id:
                    oneOf:
                      - type: string
                      - type: integer
                  application_id:
                    oneOf:
                      - type: string
                      - type: integer
                  end_time:
                    type: string
                    minLength: 1
                  time_span:
                    type: integer
                    description: number of seconds
                  window_title_id:
                    oneOf:
                      - type: string
                      - type: integer
                  end_date:
                    type: string
                    minLength: 1
                  task_id:
                    oneOf:
                      - type: string
                      - type: integer
                  entry_id:
                    oneOf:
                      - type: string
                      - type: integer
                  application:
                    type: string
                    description: Field with application name if DTO was extended with include parameter
                  window_title:
                    type: string
                    description: Field with window title if DTO was extended with include parameter
              examples:
                Example:
                  value:
                    - user_id: '123'
                      application_id: '795630'
                      end_time: '2020-02-02 09:30:07'
                      time_span: 9
                      window_title_id: '26079668'
                      end_date: '2020-02-02'
                      task_id: '0'
                      entry_id: '0'
                    - user_id: '123'
                      application_id: '795630'
                      end_time: '2020-02-02 09:30:11'
                      time_span: 4
                      window_title_id: '23745620'
                      end_date: '2020-02-02'
                      task_id: '0'
                      entry_id: '0'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                dates not provided:
                  value:
                    message: 'you must provide "date" like 2013-03-20 '
      summary: Get computer activities
      parameters:
        - schema:
            type: string
            example: 123, 124
          in: query
          name: user_id
          description: user ids separated by commas
        - schema:
            type: string
            example: '2021-03-02'
            format: date
          in: query
          name: dates[]
          description: dates (you can provide max 20 dates)
          required: true
        - schema:
            type: string
            example: application,window_title
          in: query
          name: include
          description: 'Join additional data to result, possible options are: application and window_title'
      x-internal: false
      security:
        - api_key_in_header: []
  /entries/{entry_id}/tags:
    get:
      operationId: get--entries-tags
      description: Get tags for a given time entry ID.
      responses:
        '200':
          description: An object with entry ID as key and an array of tag-objects
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  '101434259':
                    type: array
                    uniqueItems: true
                    minItems: 1
                    items:
                      type: object
                      properties:
                        tagListName:
                          type: string
                          minLength: 1
                        tagListId:
                          oneOf:
                            - type: string
                            - type: integer
                          minLength: 1
                        tagId:
                          oneOf:
                            - type: string
                            - type: integer
                          nullable: true
                          minLength: 1
                        name:
                          oneOf:
                            - type: string
                            - type: integer
                          nullable: true
                          minLength: 1
                        mandatory:
                          oneOf:
                            - type: string
                            - type: integer
                          minLength: 1
              examples:
                example response:
                  value:
                    '101434259':
                      - tagListName: Not important tags
                        tagListId: '8'
                        tagId: '13'
                        name: '111'
                        mandatory: '0'
      tags:
        - '[v1] Tags'
      parameters: []
      summary: Get time entry tags
      security:
        - api_key_in_header: []
    put:
      operationId: put--entries-tags
      description: Assing tags to time entry or entries.
      tags:
        - '[v1] Tags'
      responses:
        '200':
          description: OK response is returned when successfully added tag and when given tag id or tag ids are not found.
          content:
            application/json:
              schema:
                type: array
                items:
                  oneOf:
                    - type: string
                    - type: integer
              examples:
                successfully added tag to entry:
                  value:
                    - '13'
                given tags not found:
                  value: []
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: string
              examples:
                no tags provided:
                  value: Empty tags
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                tags:
                  type: string
                  description: tag ids to set
                  example: 21 or 21,214,123 if multiple
      summary: Add tags to time entry
      security:
        - api_key_in_header: []
    delete:
      operationId: delete--entries-tags
      description: Delete tags from time entry.
      tags:
        - '[v1] Tags'
      responses:
        '200':
          description: OK response is returned when successfully removed tags from time entry and when given tag id or tag ids are not found.
          content:
            application/json:
              schema:
                type: array
                items:
                  oneOf:
                    - type: string
                    - type: integer
              examples:
                successfully deleted tag from entry:
                  value:
                    - '15'
                given tags not found:
                  value: []
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: string
              examples:
                no tags provided:
                  value: Empty tags
      summary: Delete tags from time entry
      security:
        - api_key_in_header: []
    parameters:
      - schema:
          type: integer
          example: 52512
        name: entry_id
        in: path
        required: true
        description: entry id, possible multiple in GET method ie. `123,124,125`
  /entries/{entry_id}/tag_lists:
    parameters:
      - in: path
        required: true
        name: entry_id
        schema:
          type: integer
          example: 213
        description: entry id
  /me:
    get:
      operationId: get--me
      description: Get your user data.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  user_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  email:
                    type: string
                    minLength: 1
                  register_time:
                    type: string
                    minLength: 1
                  display_name:
                    type: string
                    nullable: true
                  synch_time:
                    type: string
                    nullable: true
                  root_group_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  permissions:
                    type: object
                    properties:
                      time_tracking_admin:
                        type: boolean
                      create_projects:
                        type: boolean
                      can_view_rates:
                        type: boolean
              examples:
                example:
                  value:
                    user_id: '1234123'
                    email: john@smith.com
                    register_time: '2021-03-25 11:35:52'
                    display_name: John Smith
                    synch_time: '2020-12-21 23:29:09'
                    root_group_id: '552'
                    permissions:
                      time_tracking_admin: true
                      create_projects: true
                      can_view_rates: true
      tags:
        - '[v1] User'
      summary: Get your user data
      security:
        - api_key_in_header: []
  /approval:
    get:
      operationId: get--approval
      description: Get approval or approvals
      responses:
        '200':
          description: OK - even if no approvals match given filters, an empty array is returned
          content:
            application/json:
              schema:
                type: array
                description: ''
                minItems: 1
                uniqueItems: true
                items:
                  type: object
                  properties:
                    id:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    status:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    for:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    by:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    from:
                      type: string
                      minLength: 1
                    to:
                      type: string
                      minLength: 1
                    projects:
                      type: string
                      nullable: true
                    auto:
                      oneOf:
                        - type: string
                        - type: integer
                      minLength: 1
                    comments:
                      type: string
                      nullable: true
                    attendance:
                      type: object
                      properties:
                        '[date]':
                          type: object
                          properties:
                            should_be:
                              oneOf:
                                - type: string
                                - type: integer
                              minLength: 1
                            day_type:
                              oneOf:
                                - type: string
                                - type: integer
                              minLength: 1
              examples:
                Response with attendance:
                  value:
                    - id: '87769'
                      status: '0'
                      for: '1234'
                      by: '0'
                      from: '2020-01-01'
                      to: '2020-01-01'
                      projects: null
                      auto: '0'
                      comments: null
                      attendance:
                        '2020-01-01':
                          should_be: '480'
                          day_type: normal
      tags:
        - '[v1] Approvals'
      summary: Get approvals
      parameters:
        - schema:
            type: string
            example: '2021-03-01'
          in: query
          name: from
          description: date in `YYYY-MM-DD` format
        - schema:
            type: string
            example: '2021-03-05'
          in: query
          name: to
          description: date in `YYYY-MM-DD` format
        - schema:
            type: integer
            enum:
              - 0
              - 1
          in: query
          name: with_attendance
          description: 'return with attendance, default: 0'
      security:
        - api_key_in_header: []
    post:
      operationId: post--approval
      description: Create new approval or update existing one.
      tags:
        - '[v1] Approvals'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  approval_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  status:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  for:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  by:
                    oneOf:
                      - type: string
                      - type: integer
                    nullable: true
                  from:
                    type: string
                    minLength: 1
                  to:
                    type: string
                    minLength: 1
                  projects:
                    type: string
                    minLength: 1
                  comments:
                    type: array
                    uniqueItems: true
                    minItems: 1
                    items:
                      type: object
                      properties:
                        approval_comment_id:
                          oneOf:
                            - type: string
                            - type: integer
                          minLength: 1
                        user_date_time:
                          type: string
                          minLength: 1
                        user_id:
                          oneOf:
                            - type: string
                            - type: integer
                          minLength: 1
                        comment:
                          type: string
                          minLength: 1
                        approval_id:
                          oneOf:
                            - type: string
                            - type: integer
                          minLength: 1
                        event:
                          oneOf:
                            - type: string
                            - type: integer
                          minLength: 1
              examples:
                created/modified approval:
                  value:
                    id: '176189'
                    approval_id: '176189'
                    status: '0'
                    for: '552'
                    by: null
                    from: '2021-03-18'
                    to: '2021-03-18'
                    projects: '0'
                    comments:
                      - approval_comment_id: '2'
                        user_date_time: '2021-03-02 15:19:07'
                        user_id: '225'
                        comment: comment by approver
                        approval_id: '176189'
                        event: '3'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                not permitted for this user:
                  value:
                    message: you dont have permissions to change timesheet for this user
                approval does not exist:
                  value:
                    message: there is no timesheet approval with id [id]
                approvals for this user are disabled:
                  value:
                    message: Timesheet approvals for requested user are disabled
      summary: Create/Update approval
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                from:
                  type: string
                  description: date in `YYYY-MM-DD` format
                  example: '2021-03-04'
                to:
                  type: string
                  description: date in `YYYY-MM-DD` format
                  example: '2021-03-15'
                status:
                  type: integer
                  description: approval status
                  enum:
                    - 0 - open
                    - 1 - approved
                    - 2 - pending
                    - 3 - rejected
                user_id:
                  type: string
                  description: user id which approval is for
                  example: '32'
              required:
                - from
                - to
                - status
                - user_id
            examples:
              create approved approval:
                value:
                  user_id: 522
                  from: '2021-03-17'
                  to: '2021-03-17'
                  status: 1
              update approval status:
                value:
                  approval_id: 176189
                  user_id: 522
                  from: '2021-03-18'
                  to: '2021-03-18'
                  status: 3
        description: When updating approval you must provide all the fields, otherwise they will be empty.
      security:
        - api_key_in_header: []
  /attendance:
    get:
      operationId: get--attendance
      description: Get attendance
      responses:
        '200':
          description: OK - even if no attendance match given filters, an empty array is returned
          content:
            application/json:
              schema:
                type: array
                description: ''
                minItems: 1
                uniqueItems: true
                items:
                  type: object
                  properties:
                    user_id:
                      type: string
                    user_name:
                      type: string
                    start_time:
                      type: string
                    end_time:
                      type: string
                    total_time:
                      type: string
                    date:
                      type: string
                    approved:
                      type: boolean
              examples:
                example response:
                  value:
                    - user_id: '640'
                      user_name: Test User
                      start_time: '12:38:05'
                      end_time: '17:46:45'
                      total_time: '2717'
                      date: '2021-12-01'
                    - user_id: '1933'
                      user_name: Test User2
                      start_time: '08:24:31'
                      end_time: '18:10:37'
                      total_time: '27359'
                      date: '2021-12-01'
      summary: Get attendance
      parameters:
        - schema:
            type: string
            example: '2021-03-01'
          in: query
          name: from
          description: date in `YYYY-MM-DD` format
          required: true
        - schema:
            type: string
            example: '2021-03-05'
          in: query
          name: to
          description: date in `YYYY-MM-DD` format
          required: true
        - schema:
            type: string
            example: 1234,321,4567
          in: query
          name: users
          description: user Id's separated by coma
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
          description: Header for json data format
      security:
        - api_key_in_header: []
      tags:
        - '[v1] Attendance'
    parameters: []
  /approval_users:
    get:
      operationId: get--approval_users
      description: Returns list with user ids which you are able to either approve or reject.
      responses:
        '200':
          description: 'OK '
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  '[user_id]':
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
              examples:
                Example:
                  value:
                    '552525': '552525'
                    '552526': '552526'
                    '552527': '552527'
                    '552528': '552528'
                    '552529': '552529'
      tags:
        - '[v1] Approvals'
      summary: Get approval users
      security:
        - api_key_in_header: []
  /tasks:
    get:
      operationId: get--tasks
      description: |-
        Returns information about task or tasks.

        If asked about specific task (`task_id` or `external_task_id` was provided) and no task was found it returns error status of `404 Not Found`.
      responses:
        '200':
          description: It returns an object of objects keyed with ID of a task in a tree structure.
          content:
            application/json:
              schema:
                type: object
                properties:
                  '[task_id]':
                    type: object
                    properties:
                      task_id:
                        type: integer
                      parent_id:
                        type: integer
                        nullable: true
                      assigned_by:
                        type: integer
                        nullable: true
                      name:
                        type: string
                        minLength: 1
                      external_task_id:
                        type: string
                        nullable: true
                      external_parent_id:
                        type: string
                        nullable: true
                      level:
                        type: integer
                      archived:
                        type: integer
                      tags:
                        type: string
                        deprecated: true
                        nullable: true
                      budgeted:
                        type: integer
                      budget_unit:
                        type: string
                        minLength: 1
                      root_group_id:
                        type: integer
                        nullable: true
                      billable:
                        type: integer
                      note:
                        type: string
                        nullable: true
                      public_hash:
                        type: string
                        nullable: true
                      add_date:
                        type: string
                        minLength: 1
                      modify_time:
                        type: string
                        minLength: 1
                        nullable: true
                      color:
                        type: string
                        minLength: 1
                      users:
                        type: object
                        properties:
                          '[user_id]':
                            type: object
                            properties:
                              user_id:
                                type: integer
                              role_id:
                                type: integer
                      perms:
                        type: object
                        minProperties: 6
                        maxProperties: 6
                        properties:
                          '1':
                            type: integer
                          '2':
                            type: integer
                          '3':
                            type: integer
                          '5':
                            type: integer
                          '6':
                            type: integer
                          '7':
                            type: integer
                      user_access_type:
                        type: integer
                      keywords:
                        type: string
                        nullable: true
              examples:
                Example:
                  value:
                    '73479227':
                      task_id: '12312'
                      parent_id: '424244'
                      assigned_by: '1513337'
                      name: task name
                      external_task_id: null
                      external_parent_id: null
                      level: '2'
                      archived: '1'
                      tags: ''
                      keywords: ''
                      budgeted: '0'
                      budget_unit: fee
                      root_group_id: '123'
                      billable: '1'
                      note: null
                      public_hash: null
                      add_date: '2020-07-03 09:14:21'
                      modify_time: '2020-07-03 12:36:10'
                      color: '#4B5A74'
                      users:
                        '5551':
                          user_id: '5551'
                          role_id: '1'
                        '5552':
                          user_id: '5552'
                          role_id: '3'
                      user_access_type: 4
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                required:
                  - message
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
      tags:
        - '[v1] Task'
      summary: Get task info
      parameters:
        - schema:
            type: string
          in: query
          name: task_id
          description: asks for specific task with `task_id` that is number, can be multiple tasks separated by ,
        - schema:
            type: string
          in: query
          name: external_task_id
          description: asks for specific task with `external_task_id`
        - schema:
            type: string
            enum:
              - create_subtask
              - edit_task_settings
              - track_time
              - view_detailed_data
            example: create_subtask,track_time
          in: query
          name: perms
          description: comma separated permission names to filter tasks by
        - schema:
            type: integer
            enum:
              - 0
              - 1
          in: query
          name: exclude_archived
          deprecated: true
          description: '`0` -> show only archived, `1` -> show all tasks'
        - schema:
            type: string
            enum:
              - active
              - archived
              - all
            default: active
          in: query
          name: status
          description: filters tasks by status
        - schema:
            type: string
            enum:
              - '0'
              - '1'
            default: '0'
          in: query
          description: returns minimal tasks info - works only if specific task **was not** requested
          name: minimal
        - schema:
            type: boolean
          in: query
          name: ignoreAdminRights
          description: only return tasks that user would have access to regardless of being a time tracking admin
      security:
        - api_key_in_header: []
    post:
      operationId: post--tasks
      description: Create new task. To ceate new task you should have proper permissions.
      tags:
        - '[v1] Task'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  '[task_id]':
                    type: object
                    properties:
                      task_id:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      parent_id:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      name:
                        type: string
                        minLength: 1
                      external_task_id:
                        oneOf:
                          - type: string
                          - type: integer
                        nullable: true
                      external_parent_id:
                        oneOf:
                          - type: string
                          - type: integer
                        nullable: true
                      level:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      add_date:
                        type: string
                        minLength: 1
                      archived:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      color:
                        type: string
                        minLength: 1
                      tags:
                        type: string
                        deprecated: true
                      budgeted:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      checked_date:
                        type: string
                        nullable: true
                      root_group_id:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      assigned_to:
                        oneOf:
                          - type: string
                          - type: integer
                        nullable: true
                      assigned_by:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      due_date:
                        type: string
                        nullable: true
                      note:
                        type: string
                        nullable: true
                      context:
                        type: string
                        nullable: true
                      folder:
                        type: string
                        nullable: true
                      repeat:
                        oneOf:
                          - type: string
                          - type: integer
                        nullable: true
                      billable:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      budget_unit:
                        type: string
                        minLength: 1
                      public_hash:
                        type: string
                        nullable: true
                      modify_time:
                        type: string
                        nullable: true
                      keywords:
                        type: string
              examples:
                Created task named "API TEST":
                  value:
                    '81278270':
                      task_id: '81278270'
                      parent_id: '0'
                      name: API TEST
                      external_task_id: null
                      external_parent_id: null
                      level: '1'
                      add_date: '2021-03-15 14:36:06'
                      archived: '0'
                      color: '#34C644'
                      tags: ''
                      budgeted: '0'
                      checked_date: null
                      root_group_id: '123'
                      assigned_to: null
                      assigned_by: '111'
                      due_date: null
                      note: null
                      context: null
                      folder: null
                      repeat: null
                      billable: '1'
                      budget_unit: hours
                      public_hash: null
                      modify_time: null
                      keywords: ''
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                task name not provided:
                  value:
                    message: 'You must provide a name for the task with post field: name'
      summary: Create new task
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - name
              properties:
                name:
                  type: string
                  description: task name
                  example: Development
                tags:
                  type: string
                  description: comma separated tags' names
                  example: IT, R&D
                  deprecated: true
                parent_id:
                  oneOf:
                    - type: string
                    - type: integer
                  description: task parent id
                  example: 523
                external_task_id:
                  type: string
                  description: external task id ie. id of task in other system/integration
                  example: xero_g8g89s78ds8
                external_parent_id:
                  type: string
                  description: external parent id ie. id of parent task in other system/integration
                  example: xero_2b5b26tb295bb9
                budgeted:
                  type: integer
                  description: task budget value, defined in the unit specified by `budget_unit`
                  example: 1000
                note:
                  type: string
                  description: description for task
                  example: Development task note
                archived:
                  type: integer
                  description: is task archived
                  enum:
                    - '0'
                    - '1'
                billable:
                  type: integer
                  description: is task billable
                  enum:
                    - 0
                    - 1
                budget_unit:
                  type: string
                  description: 'budget unit: `hours`, `fee` or empty'
                  enum:
                    - hours
                    - fee
                user_ids:
                  type: string
                  description: comma separated user ids to add to task
                  example: 22,521,2,25
                role:
                  description: works only if `user_ids` are provided - sets given role to given `user_ids` in created task
                  example: '5325'
                  type: integer
                keywords:
                  type: string
                  example: IT, R&D
                  description: comma separated keywords
      security:
        - api_key_in_header: []
    put:
      operationId: put--tasks
      description: Modify existing task. To modify a task you should have proper permissions.
      tags:
        - '[v1] Task'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  task_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  parent_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  name:
                    type: string
                    minLength: 1
                  external_task_id:
                    oneOf:
                      - type: string
                      - type: integer
                    nullable: true
                  external_parent_id:
                    oneOf:
                      - type: string
                      - type: integer
                    nullable: true
                  level:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  add_date:
                    type: string
                    minLength: 1
                  archived:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  color:
                    type: string
                    minLength: 1
                  tags:
                    type: string
                    minLength: 1
                    deprecated: true
                  budgeted:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                    deprecated: true
                    description: |
                      Deprecated — use `GET /v3/task/{taskId}/billing-settings` (`budget` field) instead.
                  checked_date:
                    type: string
                    nullable: true
                  root_group_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  assigned_to:
                    oneOf:
                      - type: string
                      - type: integer
                    nullable: true
                  assigned_by:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  due_date:
                    type: string
                    nullable: true
                  note:
                    type: string
                    nullable: true
                  context:
                    type: string
                    nullable: true
                  folder:
                    type: string
                    nullable: true
                  repeat:
                    type: string
                    nullable: true
                  billable:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                    deprecated: true
                    description: |
                      Deprecated — use `GET /v3/task/{taskId}/billing-settings` (`billable` field) instead.
                  budget_unit:
                    type: string
                    minLength: 1
                    deprecated: true
                    description: |
                      Deprecated — use `GET /v3/task/{taskId}/billing-settings` (`budgetUnit` field) instead.
                  public_hash:
                    type: string
                    nullable: true
                  modify_time:
                    type: string
                    minLength: 1
                  keywords:
                    type: string
              examples:
                changed name and tags:
                  value:
                    task_id: '81278276'
                    parent_id: '0'
                    name: new name
                    external_task_id: null
                    external_parent_id: null
                    level: '1'
                    add_date: '2021-03-16 09:00:03'
                    archived: '0'
                    color: '#34C644'
                    tags: new tags
                    budgeted: '0'
                    checked_date: null
                    root_group_id: '1234'
                    assigned_to: null
                    assigned_by: '24'
                    due_date: null
                    note: null
                    context: null
                    folder: null
                    repeat: null
                    billable: '1'
                    budget_unit: hours
                    public_hash: null
                    modify_time: '2021-03-16 10:54:59'
                    keywords: new tags
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                not permitted to edit this task:
                  value:
                    message: You do not have permissions to modify this task or it does not exist
        '404':
          description: Not Found is returned with empty body when given `task_id` is not found.
      summary: Update task info
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - task_id
              properties:
                task_id:
                  oneOf:
                    - type: string
                    - type: integer
                  description: task id to update
                  example: '52525'
                name:
                  type: string
                  description: new task name
                  example: SomeNewTaskName
                tags:
                  type: string
                  description: comma separated tags' names
                  example: IT,R&D
                  deprecated: true
                parent_id:
                  oneOf:
                    - type: string
                    - type: integer
                  description: new parent id
                  example: 5252
                external_task_id:
                  type: string
                  description: external task id ie. id of task in other system/integration
                  example: xero_g8g89s78ds8
                external_parent_id:
                  type: string
                  description: external parent id ie. id of parent task in other system/integration
                  example: xero_2b5b26tb295bb9
                budgeted:
                  type: integer
                  description: |
                    Deprecated — use `PATCH /v3/task/{taskId}/billing-settings` with `budget` field instead. Task budget value, defined in the unit specified by `budget_unit`.
                  example: 1000
                  deprecated: true
                note:
                  type: string
                  description: description for task
                  example: SomeNewNote
                archived:
                  type: integer
                  description: is task archived
                  enum:
                    - 0
                    - 1
                billable:
                  type: integer
                  description: |
                    Deprecated — use `PATCH /v3/task/{taskId}/billing-settings` with `billable` field instead. Is task billable.
                  enum:
                    - 0
                    - 1
                  deprecated: true
                budget_unit:
                  type: string
                  description: |
                    Deprecated — use `PATCH /v3/task/{taskId}/billing-settings` with `budgetUnit` field instead. Budget unit: `hours`, `fee` or empty.
                  enum:
                    - hours
                    - fee
                  deprecated: true
                user_ids:
                  type: string
                  description: comma separated user ids to update role in task
                  example: 22,521,2,25
                role:
                  type: integer
                  description: works only if `user_ids` are provided - updates role for`user_ids`
                  example: 5215
                keywords:
                  type: string
                  example: IT,R&D
                  description: comma separated keywords
            examples:
              change name and tags:
                value:
                  task_id: 81209723
                  name: new name
                  tags: new,tags,added
        description: ''
      security:
        - api_key_in_header: []
    delete:
      deprecated: true
      operationId: delete--tasks
      description: |-
        >Endpoint deprecated instead use <a href="/#/operations/post-task-remove">this</a>
        Delete task. To delete a task you should have proper permissions. You need to include `task_id` in GET.
      tags:
        - '[v1] Task'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  task_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  parent_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  name:
                    type: string
                    minLength: 1
                  external_task_id:
                    oneOf:
                      - type: string
                      - type: integer
                    nullable: true
                  external_parent_id:
                    oneOf:
                      - type: string
                      - type: integer
                    nullable: true
                  level:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  add_date:
                    type: string
                    minLength: 1
                  archived:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  color:
                    type: string
                    minLength: 1
                  tags:
                    type: string
                    deprecated: true
                  budgeted:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  checked_date:
                    type: string
                    nullable: true
                  root_group_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  assigned_to:
                    oneOf:
                      - type: string
                      - type: integer
                    nullable: true
                  assigned_by:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  due_date:
                    type: string
                    nullable: true
                  note:
                    type: string
                    nullable: true
                  context:
                    type: string
                    nullable: true
                  folder:
                    type: string
                    nullable: true
                  repeat:
                    type: string
                    nullable: true
                  billable:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  budget_unit:
                    type: string
                    minLength: 1
                  public_hash:
                    type: string
                    nullable: true
                  modify_time:
                    type: string
                    nullable: true
                  keywords:
                    type: string
              examples:
                deleted task:
                  value:
                    task_id: '81278270'
                    parent_id: '0'
                    name: API TEST
                    external_task_id: null
                    external_parent_id: null
                    level: '1'
                    add_date: '2021-03-15 14:36:06'
                    archived: '0'
                    color: '#34C644'
                    tags: ''
                    budgeted: '0'
                    checked_date: null
                    root_group_id: '1234'
                    assigned_to: null
                    assigned_by: '12'
                    due_date: null
                    note: null
                    context: null
                    folder: null
                    repeat: null
                    billable: '1'
                    budget_unit: hours
                    public_hash: null
                    modify_time: null
                    keywords: ''
        '403':
          description: Forbidden
        '404':
          description: Not Found
      summary: Delete task
      parameters:
        - schema:
            type: string
          in: query
          name: task_id
          description: task id to delete
          required: true
      security:
        - api_key_in_header: []
  /task_color:
    put:
      operationId: put--task_color
      description: Creates job to add/change a task color (for everyone).
      tags:
        - '[v1] Task'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  changedTasks:
                    type: object
                    properties:
                      '[hex_color]':
                        type: array
                        items:
                          type: object
                  taskJobResultId:
                    type: boolean
              examples:
                successfully changed color:
                  value:
                    changedTasks:
                      '#688fe3':
                        - '81278276'
                    taskJobResultId: false
                changing color failed - note lack of task_id in response:
                  value:
                    changedTasks:
                      '#688fe3':
                        - null
                    taskJobResultId: false
      summary: Add/change color in task
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                task_id:
                  oneOf:
                    - type: string
                    - type: integer
                  description: task id
                  example: 521523
                color:
                  type: string
                  description: color in hex
                  example: '#688fe3'
                is_for_all_subtasks:
                  type: boolean
                  description: 'is color for all subtasks, default: `false`'
              required:
                - task_id
                - color
            examples:
              change color in task:
                value:
                  task_id: 81278276
                  color: '#688fe3'
        description: ''
      security:
        - api_key_in_header: []
  /task_details:
    get:
      operationId: get--task_details
      description: Get task details.
      responses:
        '200':
          description: OK - if given ids are not found an empty array is returned.
          content:
            application/json:
              schema:
                type: array
                description: ''
                minItems: 1
                uniqueItems: true
                items:
                  type: object
                  properties:
                    task_id:
                      type: number
                    parent_id:
                      type: number
                    name:
                      type: string
                      minLength: 1
                    color:
                      type: string
                      minLength: 1
                    breadcrumb:
                      type: string
              examples:
                Tasks info:
                  value:
                    - task_id: 81278274
                      parent_id: 0
                      name: TEST3
                      color: '#34C644'
                      breadcrumb: ''
                    - task_id: 81278275
                      parent_id: 0
                      name: TEST4
                      color: '#34C644'
                      breadcrumb: ''
                Task not found:
                  value: []
      tags:
        - '[v1] Task'
      summary: Get task details
      parameters:
        - schema:
            type: string
          in: query
          name: tasks
          description: comma separated tasks ids to get
          required: true
      security:
        - api_key_in_header: []
  /tt_role:
    get:
      operationId: get--tt_role
      description: Returns roles allowed for your root group with permissions.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  '[tt_role_id]':
                    type: object
                    properties:
                      tt_role_id:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      tt_role_name:
                        type: string
                        minLength: 1
                      overridden_role_id:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      root_group_id:
                        oneOf:
                          - type: string
                          - type: integer
                        minLength: 1
                      tt_role_sort:
                        type: integer
                      perms:
                        type: object
                        description: array of permissions
                        properties:
                          '[tt_perm_id]':
                            type: object
                            description: ''
                            properties:
                              tt_perm_id:
                                oneOf:
                                  - type: string
                                  - type: integer
                                minLength: 1
                              tt_perm_text:
                                type: string
                                minLength: 1
              examples:
                returned role with permissions:
                  value:
                    '1':
                      tt_role_id: '1'
                      tt_role_name: Project Manager
                      overridden_role_id: '0'
                      root_group_id: '0'
                      tt_role_sort: 0
                      perms:
                        '1':
                          tt_perm_id: '1'
                          tt_perm_text: create subtasks
                        '2':
                          tt_perm_id: '2'
                          tt_perm_text: edit task
                        '3':
                          tt_perm_id: '3'
                          tt_perm_text: track time
                        '5':
                          tt_perm_id: '5'
                          tt_perm_text: see other people time in reports
                        '6':
                          tt_perm_id: '6'
                          tt_perm_text: change inherited role to lower
                        '7':
                          tt_perm_id: '7'
                          tt_perm_text: create invoice
                    '3':
                      tt_role_id: '3'
                      tt_role_name: Regular User
                      overridden_role_id: '0'
                      root_group_id: '0'
                      tt_role_sort: 2
                      perms:
                        '3':
                          tt_perm_id: '3'
                          tt_perm_text: track time
                    '4':
                      tt_role_id: '4'
                      tt_role_name: Guest
                      overridden_role_id: '0'
                      root_group_id: '0'
                      tt_role_sort: 3
                      perms:
                        '5':
                          tt_perm_id: '5'
                          tt_perm_text: see other people time in reports
      summary: Get time tracking roles
      tags:
        - '[v1] Roles & Permissions'
      security:
        - api_key_in_header: []
    delete:
      operationId: delete--tt_role
      description: Delete time tracking role.
      responses:
        '200':
          description: OK - returns all roles (before update), just like in GET option.
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                users assigned:
                  value:
                    message: You can not delete role because there are users assigned to tasks with that role.
                cannot delete:
                  value:
                    message: You can not delete this role!
                not permitted:
                  value:
                    message: Role couldn't be saved
      summary: Delete time tracking role
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                tt_role_id:
                  type: integer
                  description: role it to delete
              required:
                - tt_role_id
      tags:
        - '[v1] Roles & Permissions'
      security:
        - api_key_in_header: []
    post:
      operationId: post--tt_role
      description: Create time tracking role.
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  tt_role_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  tt_role_name:
                    type: string
                    minLength: 1
                  root_group_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  overridden_role_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  tt_role_sort:
                    type: integer
              examples:
                created role:
                  value:
                    tt_role_id: '7159'
                    tt_role_name: New role created by api
                    root_group_id: '5262'
                    overridden_role_id: '0'
                    tt_role_sort: 4
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                could not save new role:
                  value:
                    message: Role could not be saved
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                role exists:
                  value:
                    message: This role already exists
                not permitted:
                  value:
                    message: Role couldn't be saved
      summary: Create time tracking role
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                tt_role_name:
                  type: string
                  description: name of the role
                tt_role_sort:
                  type: integer
                  description: role priority (lower number means higher priority)
                perms:
                  type: object
                  description: array of permissions to add to role
                  properties:
                    '[perm_id]':
                      type: integer
                      description: '[perm-id] as key and `1` as value to add given [perm-id] to role'
            examples:
              creating new role with some permissions:
                value:
                  tt_role_name: New role created by api
                  tt_role_sort: 4
                  perms:
                    '6': 1
                    '7': 1
      tags:
        - '[v1] Roles & Permissions'
      security:
        - api_key_in_header: []
    put:
      operationId: put--tt_role
      description: Update time tracking role. Note you can't edit `Regular User` role.
      responses:
        '200':
          description: OK - returns all roles (before update), just like in GET option.
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                not permitted:
                  value:
                    message: Role couldn't be saved
                editing regular user role:
                  value:
                    message: You can't modify regular user role!
        '406':
          description: Not Acceptable
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                setting priority failed:
                  value:
                    message: Error while setting priority.
      summary: Update time tracking role
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                tt_role_id:
                  type: integer
                  description: role id to update
                tt_role_sort:
                  type: integer
                  description: role priority (lower number means higher priority)
                perms:
                  type: object
                  description: array of permissions to add to role
                  properties:
                    '[perm_id]':
                      type: integer
                      description: '[perm-id] as key and `1` as value to add given [perm-id] to role'
            examples:
              add two permissions to role and set role priority:
                value:
                  tt_role_id: 7157
                  tt_role_sort: 4
                  perms:
                    '6': 1
                    '7': 1
        description: ''
      tags:
        - '[v1] Roles & Permissions'
      security:
        - api_key_in_header: []
  /timer:
    summary: Timer manipulation
    post:
      operationId: post-timer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  isTimerRunning:
                    type: boolean
                  elapsed:
                    type: number
                  entry_id:
                    oneOf:
                      - type: number
                      - type: string
                  timer_id:
                    oneOf:
                      - type: number
                      - type: string
                  start_time:
                    type: string
                    minLength: 1
              examples:
                status when timer is stopped:
                  value:
                    isTimerRunning: false
                    elapsed: 0
                response to action start:
                  value:
                    new_timer_id: 2
                    entry_id: 103217709
                status when timer is running:
                  value:
                    isTimerRunning: true
                    elapsed: 55
                    entry_id: '103217709'
                    timer_id: '2'
                    start_time: '2020-01-01 12:34:56'
                response to action stop:
                  value:
                    elapsed: 224
                    entry_id: '103217709'
                    entry_time: 224
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                required:
                  - message
              examples:
                bad request:
                  value:
                    message: This action is not allowed.
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                not permitted to task:
                  value:
                    message: You cannot track time to this task
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                task not found:
                  value:
                    message: No task with such ID
      tags:
        - '[v1] Timer'
      description: Get timer status, start new timer or stop one.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                action:
                  type: string
                  description: either `status`, `start` or `stop`
                  enum:
                    - status
                    - start
                    - stop
                  default: status
                task_id:
                  type: integer
                  description: start a task with a given task
                started_at:
                  type: string
                  description: timer will count time since this date only when `action` = `start`
                  example: '2021-03-05 08:54:12'
                stopped_at:
                  type: string
                  description: timer will count time to this date only when `action` = `stop`
                  example: '2021-03-05 09:54:12'
              required:
                - action
            examples:
              status:
                value:
                  action: status
              start:
                value:
                  action: start
              stop:
                value:
                  action: stop
              start with task:
                value:
                  action: start
                  task_id: 12345
              start with start date:
                value:
                  action: start
                  started_at: '2021-03-05 08:54:12'
              stop with stop date:
                value:
                  action: stop
                  stopped_at: '2021-03-05 09:54:12'
        description: ''
      parameters: []
      summary: Start, stop, get timer
      security:
        - api_key_in_header: []
    delete:
      summary: Delete timer
      operationId: delete-timer
      responses:
        '200':
          description: OK - response body is empty
          content:
            application/json:
              schema:
                type: object
                properties:
                  '""': {}
      description: Deletes timer without saving tracked time.
      tags:
        - '[v1] Timer'
      security:
        - api_key_in_header: []
  /user:
    post:
      summary: Update user
      operationId: post-user-user_id
      responses:
        '200':
          description: OK - returns empty response when everything went ok
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                no data to update provided:
                  value:
                    message: 'You must send valid group fields to change: language, display_name, email, time_zone, current_password, new_password, confirm_new_password, summary'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
              examples:
                cant edit multiple users:
                  value:
                    message: You can change one user at time
                not permitted to edit user or user does not exist:
                  value:
                    message: You can not change this user
      description: |
        Update user's data. If `user_id` is not provided, the data for the user associated with the API key will be updated.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                get_users:
                  type: boolean
                  description: if provided then returns users data
                user_id:
                  type: string
                  description: user id to update or comma-separated user ids to get if `get_users` is `true`
                  example: '13'
                display_name:
                  type: string
                  description: user display name, typically name and surname
        description: ''
      tags:
        - '[v1] User'
      security:
        - api_key_in_header: []
    parameters: []
  /user/{user_id}:
    get:
      summary: Get user
      tags:
        - '[v1] User'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  user_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  language:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  email:
                    type: string
                    minLength: 1
                  login_count:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  login_time:
                    type: string
                    minLength: 1
                  display_name:
                    type: string
                    minLength: 1
                  time_zone:
                    type: string
                    minLength: 1
                  root_group_id:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  summary:
                    oneOf:
                      - type: string
                      - type: integer
                    minLength: 1
                  agent:
                    type: string
                    minLength: 1
                  primary_group_id:
                    type: integer
              examples:
                Example:
                  value:
                    user_id: '4213'
                    language: '0'
                    email: example@email.com
                    login_count: '22084'
                    login_time: '2021-03-11 10:21:15'
                    display_name: John Smith
                    time_zone: '0'
                    root_group_id: '552'
                    summary: '1'
                    agent: 1.7.1.2|
                    primary_group_id: 552
      operationId: get-user-s
      description: Returns user's information. If `user_id` is not provided then returns current user data. Provide comma separated ids for multiple users ie. `132,423,456`.
      security:
        - api_key_in_header: []
    parameters:
      - schema:
          type: integer
        name: user_id
        in: path
        required: true
        description: user id
  /task/{task_id}/rate:
    parameters:
      - schema:
          type: string
          example: 44 or 44,45,252
        name: task_id
        in: path
        required: true
        description: task id
    get:
      summary: Get billing rate for task
      tags:
        - '[v1] Billing Rates'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    '75091248':
                      - rateId: 145996
                        rateTypeId: 12
                        value: '21.00'
                        refType: task
                        addDate: '2000-01-01'
                        refId: '75091248'
                properties:
                  '[task_id]':
                    type: array
                    uniqueItems: true
                    items:
                      type: object
                      properties:
                        rateId:
                          type: number
                        rateTypeId:
                          type: number
                        value:
                          type: string
                        refType:
                          type: string
                        addDate:
                          type: string
                        refId:
                          type: string
              examples:
                returned all billing rates for task 75091248:
                  value:
                    '75091248':
                      - rateId: 145996
                        rateTypeId: 12
                        value: '21.00'
                        refType: task
                        addDate: '2000-01-01'
                        refId: '75091248'
                      - rateId: 145995
                        rateTypeId: 13
                        value: '12.00'
                        refType: task
                        addDate: '2000-01-01'
                        refId: '75091248'
                returned billing rate with given rate_id 13 for task 75091248:
                  value:
                    '75091248':
                      - rateId: 145995
                        rateTypeId: 13
                        value: '12.00'
                        refType: task
                        addDate: '2000-01-01'
                        refId: '75091248'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
                x-examples:
                  example-1:
                    message: You are not allowed to browse rates
              examples:
                not allowed:
                  value:
                    message: You are not allowed to browse rates
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
                x-examples:
                  example-1:
                    message: Task 23 not found
              examples:
                task not found:
                  value:
                    message: Task 23 not found
      operationId: get-task-task_id-rate
      description: Returns all billing rates for given `task_id` or returns specific `rate_id` data for given `task_id`.
      parameters:
        - schema:
            type: string
          in: query
          name: rate_id
          description: rateTypeId to get (can be empty, `all` or comma-separated)
      security:
        - api_key_in_header: []
    post:
      summary: Update/create billing rate for task
      operationId: post-task-task_id-rate
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    rateId: 145999
                    rateTypeId: 23
                    value: 333
                    refType: task
                    addDate: '2021-09-09'
                    refId: '75091248'
                properties:
                  rateId:
                    type: number
                  rateTypeId:
                    type: number
                  value:
                    type: number
                  refType:
                    type: string
                  addDate:
                    type: string
                  refId:
                    type: string
              examples:
                created/updated rate:
                  value:
                    rateId: 145999
                    rateTypeId: 23
                    value: 333
                    refType: task
                    addDate: '2021-09-09'
                    refId: '75091248'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    message: Task 3 not found
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                not allowed because of permissions:
                  value:
                    message: You are not allowed to browse rates
                not allowed because of your plan:
                  value:
                    message: You are not allowed to use specific billing rates. Please upgrade Your plan.
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    message: Task 3 not found
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                task id not found:
                  value:
                    message: Task 3 not found
                rateTypeId not found:
                  value:
                    message: RateType 123 not found
      description: This endpoint updates value or creates new rate for given `rateTypeId` and `task_id`.
      requestBody:
        content:
          application/json:
            schema:
              description: ''
              type: object
              x-examples:
                example-1:
                  rateTypeId: 23
                  value: 333
                  addDate: '2021-09-09'
              properties:
                rateTypeId:
                  type: number
                  description: rateTypeId for rate to modify or create new one
                value:
                  type: number
                  description: value of rate
                addDate:
                  type: string
                  description: optional date in `YY-MM-DD` format
                  example: '2021-09-09'
              required:
                - rateTypeId
            examples:
              create new rate, which type id is `23` and value `333` with date:
                value:
                  rateTypeId: 23
                  value: 333
                  addDate: '2021-09-09'
      tags:
        - '[v1] Billing Rates'
      security:
        - api_key_in_header: []
  /user/{user_id}/rate:
    parameters:
      - schema:
          type: string
        name: user_id
        in: path
        required: true
        description: user id or comma-separated users ids
    get:
      summary: Get billing rate for user
      tags:
        - '[v1] Billing Rates'
      responses:
        '200':
          description: OK - returns empty array when given `user_id` does not exist or given `rate_id` does not exist or simply billing rates were not found.
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    '1787724':
                      - rateId: 146002
                        rateTypeId: 12
                        value: '22.00'
                        refType: user
                        addDate: '2000-01-01'
                        refId: '1787724'
                properties:
                  '[user_id]':
                    type: array
                    uniqueItems: true
                    minItems: 1
                    items:
                      type: object
                      properties:
                        rateId:
                          type: number
                        rateTypeId:
                          type: number
                        value:
                          type: string
                        refType:
                          type: string
                        addDate:
                          type: string
                        refId:
                          type: string
                required:
                  - '[user_id]'
              examples:
                returned billing rates for user 1787724:
                  value:
                    '1787724':
                      - rateId: 146002
                        rateTypeId: 12
                        value: '22.00'
                        refType: user
                        addDate: '2000-01-01'
                        refId: '1787724'
                      - rateId: 146001
                        rateTypeId: 13
                        value: '11.00'
                        refType: user
                        addDate: '2000-01-01'
                        refId: '1787724'
                returned billing rate for rateTypeId 12 for user 1787724:
                  value:
                    '1787724':
                      - rateId: 146002
                        rateTypeId: 12
                        value: '22.00'
                        refType: user
                        addDate: '2000-01-01'
                        refId: '1787724'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
                x-examples:
                  example-1:
                    message: You are not allowed to browse rates
              examples:
                not allowed:
                  value:
                    message: You are not allowed to browse rates
      operationId: get-user-user_id-rate
      description: Returns billing rate for given user or users.
      parameters:
        - schema:
            type: string
          in: query
          name: rate_id
          description: rateTypeId or comma-separated rateTypeIds
      security:
        - api_key_in_header: []
    post:
      summary: Update/create billing rate for user
      tags:
        - '[v1] Billing Rates'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  rateId:
                    type: number
                  rateTypeId:
                    type: number
                  value:
                    type: number
                  refType:
                    type: string
                    minLength: 1
                  addDate:
                    type: string
                    minLength: 1
                  refId:
                    type: string
                    minLength: 1
                required:
                  - rateId
                  - rateTypeId
                  - value
                  - refType
                  - addDate
                  - refId
                x-examples:
                  example-1:
                    rateId: 146003
                    rateTypeId: 23
                    value: 3
                    refType: user
                    addDate: '2021-05-27'
                    refId: '1787724'
              examples:
                updated/created rate:
                  value:
                    rateId: 146003
                    rateTypeId: 23
                    value: 3
                    refType: user
                    addDate: '2021-05-27'
                    refId: '1787724'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
                x-examples:
                  example-1:
                    message: You are not allowed to browse rates
              examples:
                not allowed due to permissions:
                  value:
                    message: You are not allowed to browse rates
                not allowed due to plan:
                  value:
                    message: You are not allowed to use specific billing rates. Please upgrade Your plan.
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                description: ''
                type: string
                x-examples:
                  example-1: RateType 1 not found
              examples:
                given rateTypeId not found:
                  value: RateType 1 not found
      operationId: post-user-user_id-rate
      description: This endpoint updates value or creates new rate for given `rateTypeId` and `user_id`.
      requestBody:
        content:
          application/json:
            schema:
              description: ''
              type: object
              x-examples:
                example-1:
                  rateTypeId: 23
                  value: 333
                  addDate: '2021-09-09'
              properties:
                rateTypeId:
                  type: number
                  description: rateTypeId to add or update
                value:
                  type: number
                  description: rate's value
                addDate:
                  type: string
                  minLength: 1
                  description: date in `YY-MM-DD` format
              required:
                - rateTypeId
            examples:
              create rateTypeId 23 to value 333 with date 2021-09-09:
                value:
                  rateTypeId: 23
                  value: 333
                  addDate: '2021-09-09'
              update rateTypeId 23 to value 3:
                value:
                  rateTypeId: 23
                  value: 3
      security:
        - api_key_in_header: []
  /task/{task_id}/user/{user_id}/rate:
    parameters:
      - schema:
          type: string
          example: 44 or 44,45,252
        name: task_id
        in: path
        required: true
        description: task id
      - schema:
          type: string
          example: 12 or 12,15,16 or all
        name: user_id
        in: path
        required: true
        description: user id or comma-separated users ids or "all"
    get:
      summary: Get billing rate for "task user"
      tags:
        - '[v1] Billing Rates'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    '75091248':
                      - rateId: 145996
                        rateTypeId: 12
                        value: '21.00'
                        refType: task_user
                        addDate: '2000-01-01'
                        refId: '75091248'
                properties:
                  '[rate]':
                    type: array
                    uniqueItems: true
                    items:
                      type: object
                      properties:
                        rateId:
                          type: number
                        rateTypeId:
                          type: number
                        value:
                          type: string
                        refType:
                          type: string
                        addDate:
                          type: string
                        refId:
                          type: string
              examples:
                returned all billing rates for task 75091248 and user 12343:
                  value:
                    '75091248':
                      - rateId: 145996
                        rateTypeId: 12
                        value: '21.00'
                        refType: task_user
                        addDate: '2000-01-01'
                        refId: '75091248_12343'
                      - rateId: 145995
                        rateTypeId: 13
                        value: '12.00'
                        refType: task_user
                        addDate: '2000-01-01'
                        refId: '75091248_12343'
                returned billing rate with given rate_id 13 for task 75091248 and user 12343:
                  value:
                    '75091248':
                      - rateId: 145995
                        rateTypeId: 13
                        value: '12.00'
                        refType: task_user
                        addDate: '2000-01-01'
                        refId: '75091248_12343'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
                x-examples:
                  example-1:
                    message: You are not allowed to browse rates
              examples:
                not allowed:
                  value:
                    message: You are not allowed to browse rates
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
                x-examples:
                  example-1:
                    message: Task 23 not found
              examples:
                task not found:
                  value:
                    message: Task 23 not found
      operationId: get-task-user-rate
      description: Returns all billing rates for given `task_id` and `user_id` or returns specific `rate_id` data for given `task_id` and `user_id`.
      parameters:
        - schema:
            type: string
          in: query
          name: rate_id
          description: rateTypeId to get (can be empty, `all` or comma-separated)
      security:
        - api_key_in_header: []
    post:
      summary: Update/create billing rate for "task user"
      operationId: post-task-user-rate
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    rateId: 145999
                    rateTypeId: 23
                    value: 333
                    refType: task_user
                    addDate: '2021-09-09'
                    refId: '75091248_12343'
                properties:
                  rateId:
                    type: number
                  rateTypeId:
                    type: number
                  value:
                    type: number
                  refType:
                    type: string
                  addDate:
                    type: string
                  refId:
                    type: string
              examples:
                created/updated rate:
                  value:
                    rateId: 145999
                    rateTypeId: 23
                    value: 333
                    refType: task_user
                    addDate: '2021-09-09'
                    refId: '75091248_12343'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    message: Task 3 not found
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                not allowed because of permissions:
                  value:
                    message: You are not allowed to browse rates
                not allowed because of your plan:
                  value:
                    message: You are not allowed to use specific billing rates. Please upgrade Your plan.
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    message: Task 3 not found
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                task id not found:
                  value:
                    message: Task 3 not found
                rateTypeId not found:
                  value:
                    message: RateType 123 not found
      description: This endpoint updates value or creates new rate for given `rateTypeId` and `task_id`.
      requestBody:
        content:
          application/json:
            schema:
              description: ''
              type: object
              x-examples:
                example-1:
                  rateTypeId: 23
                  value: 333
                  addDate: '2021-09-09'
              properties:
                rateTypeId:
                  type: number
                  description: rateTypeId for rate to modify or create new one
                value:
                  type: number
                  description: value of rate
                addDate:
                  type: string
                  description: optional date in `YY-MM-DD` format
                  example: '2021-09-09'
              required:
                - rateTypeId
            examples:
              create new rate, which type id is `23` and value `333` with date:
                value:
                  rateTypeId: 23
                  value: 333
                  addDate: '2021-09-09'
      tags:
        - '[v1] Billing Rates'
      security:
        - api_key_in_header: []
  /group/{group_id}/rate:
    parameters:
      - schema:
          type: string
          example: 11 or 11,12,17
        name: group_id
        in: path
        required: true
        description: group id
    get:
      summary: Get billing rate for group
      tags:
        - '[v1] Billing Rates'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    '75091248':
                      - rateId: 145996
                        rateTypeId: 12
                        value: '21.00'
                        refType: task
                        addDate: '2000-01-01'
                        refId: '75091248'
                properties:
                  '[group_id]':
                    type: array
                    uniqueItems: true
                    items:
                      type: object
                      properties:
                        rateId:
                          type: number
                        rateTypeId:
                          type: number
                        value:
                          type: string
                        refType:
                          type: string
                        addDate:
                          type: string
                        refId:
                          type: string
              examples:
                returned all billing rates for group 75091248:
                  value:
                    '75091248':
                      - rateId: 145996
                        rateTypeId: 12
                        value: '21.00'
                        refType: group
                        addDate: '2000-01-01'
                        refId: '75091248'
                      - rateId: 145995
                        rateTypeId: 13
                        value: '12.00'
                        refType: group
                        addDate: '2000-01-01'
                        refId: '75091248'
                returned billing rate with given rate_id 13 for group 75091248:
                  value:
                    '75091248':
                      - rateId: 145995
                        rateTypeId: 13
                        value: '12.00'
                        refType: group
                        addDate: '2000-01-01'
                        refId: '75091248'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
                x-examples:
                  example-1:
                    message: You are not allowed to browse rates
              examples:
                not allowed:
                  value:
                    message: You are not allowed to browse rates
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                description: ''
                type: object
                properties:
                  message:
                    type: string
                    minLength: 1
                required:
                  - message
                x-examples:
                  example-1:
                    message: Group 23 not found
              examples:
                task not found:
                  value:
                    message: Group 23 not found
      operationId: get-group-rate
      description: Returns all billing rates for given `group_id` or returns specific `rate_id` data for given `group_id`.
      parameters:
        - schema:
            type: string
          in: query
          name: rate_id
          description: rateTypeId to get (can be empty, `all` or comma-separated)
      security:
        - api_key_in_header: []
    post:
      summary: Update/create billing rate for group
      operationId: post-group-rate
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    rateId: 145999
                    rateTypeId: 23
                    value: 333
                    refType: group
                    addDate: '2021-09-09'
                    refId: '75091248'
                properties:
                  rateId:
                    type: number
                  rateTypeId:
                    type: number
                  value:
                    type: number
                  refType:
                    type: string
                  addDate:
                    type: string
                  refId:
                    type: string
              examples:
                created/updated rate:
                  value:
                    rateId: 145999
                    rateTypeId: 23
                    value: 333
                    refType: group
                    addDate: '2021-09-09'
                    refId: '75091248'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    message: Group 3 not found
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                not allowed because of permissions:
                  value:
                    message: You are not allowed to browse rates
                not allowed because of your plan:
                  value:
                    message: You are not allowed to use specific billing rates. Please upgrade Your plan.
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                description: ''
                type: object
                x-examples:
                  example-1:
                    message: Group 3 not found
                properties:
                  message:
                    type: string
                    minLength: 1
              examples:
                task id not found:
                  value:
                    message: Group 3 not found
                rateTypeId not found:
                  value:
                    message: RateType 123 not found
      description: This endpoint updates value or creates new rate for given `rateTypeId` and `group_id`.
      requestBody:
        content:
          application/json:
            schema:
              description: ''
              type: object
              x-examples:
                example-1:
                  rateTypeId: 23
                  value: 333
                  addDate: '2021-09-09'
              properties:
                rateTypeId:
                  type: number
                  description: rateTypeId for rate to modify or create new one
                value:
                  type: number
                  description: value of rate
                addDate:
                  type: string
                  description: optional date in `YY-MM-DD` format
                  example: '2021-09-09'
              required:
                - rateTypeId
            examples:
              create new rate, which type id is `23` and value `333` with date:
                value:
                  rateTypeId: 23
                  value: 333
                  addDate: '2021-09-09'
      tags:
        - '[v1] Billing Rates'
      security:
        - api_key_in_header: []
  /logged_time_in_week:
    get:
      summary: Get logged time in a week
      tags:
        - '[v1] Entry'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                description: ''
                x-examples:
                  example-1:
                    '2019-12-02': 17130
                    '2019-12-03': 27300
                    '2019-12-04': 36365
                    '2019-12-05': 198900
                    '2019-12-06': 27300
                    '2019-12-07': 4835
                    '2019-12-08': 1800
                type: object
                properties:
                  '[day]':
                    type: number
                    description: number of seconds logged on this day
              examples:
                example response for given `day` = "2019-12-05":
                  value:
                    '2019-12-02': 17130
                    '2019-12-03': 27300
                    '2019-12-04': 36365
                    '2019-12-05': 198900
                    '2019-12-06': 27300
                    '2019-12-07': 4835
                    '2019-12-08': 1800
      operationId: get-logged_time_in_week
      description: This endpoint gets a `day` and returns array with summarized entries time per day for this week. The time is returned in seconds.
      parameters:
        - schema:
            type: string
            example: '2019-12-07'
          in: query
          name: day
          required: true
          description: day in `YYYY-MM-DD` format
      security:
        - api_key_in_header: []
  /attendance/day_type:
    get:
      summary: Retrieves day types declared by users in given timeframe
      tags:
        - '[v1] Attendance'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  Example 1:
                    '1700567':
                      '2022-10-10':
                        day_type: Remote work
                properties:
                  userId:
                    type: object
                    properties:
                      date:
                        type: object
                        properties:
                          day_type:
                            type: string
                      '':
                        type: string
              examples:
                Example 1:
                  value: {}
            application/xml:
              examples:
                Example 1:
                  value: |-
                    {
                        "userId": {
                            "2022-10-10": {
                                "day_type": "Remote work"
                            },
                        }
                    }
            multipart/form-data:
              schema:
                type: object
                properties: {}
      operationId: get-attendance-day_type
      parameters:
        - schema:
            type: string
          in: query
          name: from
          description: date in `YYYY-MM-DD` format
          required: true
        - schema:
            type: string
          in: query
          name: to
          description: date in `YYYY-MM-DD` format
          required: true
        - schema:
            type: string
          in: header
          name: Accept
          description: Header for json data format
        - schema:
            type: string
          in: query
          name: usersIds
          description: user Id's separated by comma
      description: Get day types for giver period for team
      security:
        - api_key_in_header: []
  /attendance/{userId}/user:
    get:
      operationId: get-attendance-for-user
      summary: Retrieve attendance data for a user within a date range
      parameters:
        - name: userId
          in: path
          required: true
          description: ID of the user whose attendance is being retrieved
          schema:
            type: integer
        - name: start
          in: query
          required: true
          description: Start date in YYYY-MM-DD format
          schema:
            type: string
            format: date
        - name: end
          in: query
          required: true
          description: End date in YYYY-MM-DD format
          schema:
            type: string
            format: date
      responses:
        '200':
          description: Successfully retrieved attendance data
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    additionalProperties:
                      type: object
                      properties:
                        userId:
                          type: integer
                        day:
                          type: string
                          format: date
                        dayTypeId:
                          type: integer
                        dayType:
                          type: string
                        shouldBe:
                          type: integer
                        vacationTime:
                          type: integer
        '400':
          description: Bad request due to missing or invalid parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  error:
                    type: string
        '403':
          description: Forbidden access due to permissions or disabled module
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  error:
                    type: string
        '404':
          description: User not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  error:
                    type: string
      security:
        - api_key_in_header: []
      tags:
        - '[v1] Attendance'
    post:
      summary: Insert or update user attendance records
      operationId: post-attendance-for-user
      description: |
        Inserts or updates attendance records for a user. Each entry corresponds to one day.
        The `shouldBe` and `vacationTime` fields are optional.

        **Important:** The date range constraint does not mean a limit of 100 entries, but rather that the maximum range between the earliest and latest dates in the payload must not exceed 100 days.
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
          description: ID of the user whose attendance is being updated
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                properties:
                  day:
                    type: string
                    format: date
                    example: '2025-03-01'
                  dayTypeId:
                    type: integer
                    example: 12
                  shouldBe:
                    type: integer
                    example: 480
                    description: Optional - expected working time in minutes
                  vacationTime:
                    type: integer
                    example: 0
                    description: Optional - vacation time in minutes
              description: List of attendance records to insert or update
      responses:
        '200':
          description: Attendance was updated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Attendance was updated successfully.
        '400':
          description: Bad Request - Invalid payload
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid payload.
                  error:
                    type: string
                    example: 'The provided date range exceeds the allowed limit of 100 days. Given range: 385 days.'
        '403':
          description: Forbidden - Not allowed to modify attendance or attendance module is disabled
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '404':
          description: Not Found - User was not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
      security:
        - api_key_in_header: []
      tags:
        - '[v1] Attendance'
  /attendance/day_types:
    get:
      operationId: get-attendance-day-types
      summary: Retrieve all possible day types for attendance
      description: Returns a list of all possible day types to declare in attendance.
      responses:
        '200':
          description: A list of day types.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    additionalProperties:
                      type: object
                      properties:
                        id:
                          type: integer
                          example: 12
                        slug:
                          type: string
                          example: normal
                        name:
                          type: string
                          example: Working Day
                        isDayOff:
                          type: boolean
                          example: false
                        isDefault:
                          type: boolean
                          example: true
                        isActive:
                          type: boolean
                          example: true
                        options:
                          type: object
                          properties:
                            color:
                              type: string
                              example: eeeeee
        '403':
          description: Forbidden - Attendance module is not enabled
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
      security:
        - api_key_in_header: []
      tags:
        - '[v1] Attendance'
  /task/{task_id}/tag:
    parameters:
      - schema:
          type: string
        name: task_id
        in: path
        required: true
    delete:
      summary: Remove tags from task
      tags:
        - '[v1] Task'
        - '[v1] Tags'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
      operationId: delete-task-task_id-tag
      security:
        - api_key_in_header: []
    post:
      summary: Add tags to task
      tags:
        - '[v1] Task'
        - '[v1] Tags'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
      operationId: post-task-task_id-tag
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                tags:
                  type: array
                  description: |-
                    {
                        "tag_id": integer,
                        "mandatory" boolean
                    }
                  items: {}
            examples:
              Example 1:
                value:
                  tags:
                    - tag_id: 1
                      mandatory: 'false'
      security:
        - api_key_in_header: []
    put:
      summary: Edit tags assignment type
      tags:
        - '[v1] Task'
        - '[v1] Tags'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
      operationId: put-task-task_id-tag
      description: ''
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                tags:
                  type: array
                  description: |-
                    {
                        "tag_id": integer,
                        "mandatory" boolean
                    }
                  items: {}
            examples:
              Example 1:
                value:
                  tags:
                    - tag_id: 1
                      mandatory: true
      security:
        - api_key_in_header: []
  /v3/task-archive/archive-batch:
    patch:
      summary: Archive a batch of tasks
      description: |
        Queues multiple active tasks for archiving. Tasks that are already archived are skipped.
      tags:
        - '[v3] Task Archive'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                taskIds:
                  type: array
                  items:
                    type: integer
                  description: List of task IDs to archive.
              required:
                - taskIds
            examples:
              Example 1:
                value:
                  taskIds:
                    - 1
                    - 2
                    - 3
                    - 4
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example 1:
                  value:
                    message: 4 tasks out of 4 has been queued for archiving
      operationId: patch-task-archive-archive-batch
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/task-archive/restore-batch:
    patch:
      summary: Restore a batch of archived tasks and their parent hierarchy
      description: |
        Restores a batch of archived tasks. When restoring tasks, their parent tasks (if archived) will also be restored to maintain task tree consistency. However, siblings of restored tasks will remain archived unless explicitly included in the batch. This endpoint ensures that the recalculation of the task tree hierarchy is performed once per batch, preventing inconsistencies and race conditions that may occur if multiple single-task restore requests are made concurrently.
      tags:
        - '[v3] Task Archive'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                taskIds:
                  type: array
                  items:
                    type: integer
                  description: List of archived task IDs to restore.
              required:
                - taskIds
            examples:
              Example 1:
                value:
                  taskIds:
                    - 1
                    - 2
                    - 3
                    - 4
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              x-examples:
                Example 1:
                  message: ok
              examples:
                Example 1:
                  value:
                    message: ok
      operationId: patch-task-archive-restore-batch
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/task/remove:
    post:
      summary: Task remove
      tags:
        - '[v3] Task'
      operationId: post-task-remove
      security:
        - api_key_in_header: []
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                taskIds:
                  type: array
                  items:
                    type: integer
              required:
                - taskIds
              x-examples:
                Example 1:
                  taskIds:
                    - 2500464
                    - 91423694
            examples:
              Example 1:
                value:
                  taskIds:
                    - 2500464
                    - 91423694
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                x-examples:
                  Example 1:
                    message: Tasks have been queued for removal
              examples:
                Example 1:
                  value:
                    message: Tasks have been queued for removal
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                x-examples:
                  Example 1:
                    message: Can't remove task
              examples:
                Example 1:
                  value:
                    message: Can't remove task
  /v3/task/duplicate:
    post:
      summary: Task duplicate
      tags:
        - '[v3] Task'
      operationId: post-task-duplicate
      security:
        - api_key_in_header: []
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                taskId:
                  type: integer
              required:
                - taskId
              x-examples:
                Example 1:
                  taskId: 2500464
            examples:
              Example 1:
                value:
                  taskId: 2500464
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                x-examples:
                  Example 1:
                    message: Task has been queued for duplication
              examples:
                Example 1:
                  value:
                    message: Task has been queued for duplication
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                x-examples:
                  Example 1:
                    message: Can't duplicate task
              examples:
                Example 1:
                  value:
                    message: Can't duplicate task
  /v3/task/{taskId}:
    parameters:
      - schema:
          type: integer
          example: 2500464
        name: taskId
        in: path
        required: true
        description: Task ID.
  /v3/task/duplicate-batch:
    post:
      summary: Task duplicate batch
      tags:
        - '[v3] Task'
      operationId: post-task-duplicate-batch
      security:
        - api_key_in_header: []
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                taskIds:
                  type: array
                  items:
                    type: integer
                  minItems: 1
                  description: If both an ancestor task ID and its descendant task ID are provided, only the highest selected ancestor is queued for duplication.
              required:
                - taskIds
              x-examples:
                Example 1:
                  taskIds:
                    - 2500464
                    - 2500465
            examples:
              Example 1:
                value:
                  taskIds:
                    - 2500464
                    - 2500465
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                x-examples:
                  Example 1:
                    message: 1 tasks out of 2 have been queued for duplication
              examples:
                Example 1:
                  value:
                    message: 1 tasks out of 2 have been queued for duplication
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                x-examples:
                  Example 1:
                    message: Can't duplicate tasks
              examples:
                Example 1:
                  value:
                    message: Can't duplicate tasks
  /v3/task/{id}/worklogs/move:
    post:
      summary: Task worklog move
      tags:
        - '[v3] Task'
      operationId: post-task-worklog-move
      security:
        - api_key_in_header: []
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
        - schema:
            type: integer
          name: id
          in: path
          required: true
          description: Source task ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                destinationTaskId:
                  type: integer
                  description: Destination task ID.
                from:
                  type: string
                  format: date
                  description: Start date of the period to move in `Y-m-d` format.
                to:
                  type: string
                  format: date
                  description: End date of the period to move in `Y-m-d` format.
                userIds:
                  type: array
                  items:
                    type: integer
              required:
                - destinationTaskId
            examples:
              MoveSelectedPeriod:
                value:
                  destinationTaskId: 2500465
                  from: '2026-04-01'
                  to: '2026-04-10'
                  userIds:
                    - 15
              MoveAllAvailableTime:
                value:
                  destinationTaskId: 2500465
                  userIds:
                    - 15
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  entriesMoved:
                    type: integer
                  userLogsMoved:
                    type: integer
              examples:
                Example 1:
                  value:
                    message: Task worklogs have been moved.
                    entriesMoved: 12
                    userLogsMoved: 24
        '400':
          description: Validation failure or payload processing error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        property:
                          type: string
                        message:
                          type: string
              examples:
                ValidationError:
                  value:
                    message: Request validation failed
                    errors:
                      - property: from
                        message: Invalid time range
                PayloadProcessingError:
                  value:
                    message: There was an internal error while trying to save this payload
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example 1:
                  value:
                    message: You are not allowed to move worklogs
  /v3/task/{id}/change-parent:
    post:
      summary: Task change parent
      tags:
        - '[v3] Task'
      operationId: post-task-change-parent
      security:
        - api_key_in_header: []
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
        - schema:
            type: integer
          name: id
          in: path
          required: true
          description: Task ID to move.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                parentId:
                  type: integer
                  description: New parent task ID. Use `0` to move the task to the root level.
              required:
                - parentId
            examples:
              MoveUnderParent:
                value:
                  parentId: 2500465
              MoveToRoot:
                value:
                  parentId: 0
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example 1:
                  value:
                    message: Task has been queued for change parent
        '400':
          description: Validation failure
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        property:
                          type: string
                        message:
                          type: string
              examples:
                Example 1:
                  value:
                    message: Request validation failed
                    errors:
                      - property: parentId
                        message: Parent task ID must be an integer.
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example 1:
                  value:
                    message: You are not allowed to change parent task
        '409':
          description: Change parent job already in progress
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example 1:
                  value:
                    message: Task change parent is already in progress for taskId 2500465.
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example 1:
                  value:
                    message: An unspecified error occurred.
  /v3/task/{taskId}/billing-settings:
    parameters:
      - schema:
          type: integer
          example: 2500464
        name: taskId
        in: path
        required: true
        description: Task ID.
  /v3/task/{taskId}/tag-list/{tagListId}:
    parameters:
      - schema:
          type: integer
          example: 2500464
        name: taskId
        in: path
        required: true
        description: Task ID the tag list assignment relates to.
      - schema:
          type: integer
          example: 1234
        name: tagListId
        in: path
        required: true
        description: Tag list ID being assigned to or detached from the task.
    put:
      summary: Assign or update a tag list assignment for a task
      description: Idempotent upsert of a direct assignment between a tag list and a task in the `tc_tt_task_tag_lists` table. If a direct row for the given pair `(taskId, tagListId)` already exists, only the `mandatory` flag is updated. If no direct row exists, a new one is created — even when the tag list is already inherited from an ancestor task. This mirrors legacy behaviour from `time_tracking/ajax_edit_save` (`TtModel::updateAssignedTags`) and allows a child task to override or extend an inherited tag list. Single tag assignments (`tc_tt_task_tags`) are out of scope for this endpoint.
      tags:
        - '[v3] Tags'
      operationId: put-task-tag-list-assignment
      security:
        - api_key_in_header: []
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - mandatory
              properties:
                mandatory:
                  type: boolean
                  description: Whether the tag list is mandatory for time entries logged on this task.
            examples:
              Example 1:
                value:
                  mandatory: true
      responses:
        '200':
          description: OK — assignment was created or updated.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example 1:
                  value:
                    message: Tag list assignment saved.
        '403':
          description: Forbidden — user lacks permission to edit task settings.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '404':
          description: Not found — task or tag list does not exist within the user's root group.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '422':
          description: Unprocessable entity — tag list belongs to a different root group than the task, or payload is invalid.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
    delete:
      summary: Detach a tag list from a task
      description: Idempotent deletion of the direct assignment row between a tag list and a task in `tc_tt_task_tag_lists`. Only the row with `task_id = taskId` is deleted; rows on ancestor tasks remain untouched, so an inherited tag list will still be visible via `getForTask` after this operation. Returns `204 No Content` even when no direct row existed (mirrors legacy `TtModel::removeTagList`).
      tags:
        - '[v3] Tags'
      operationId: delete-task-tag-list-assignment
      security:
        - api_key_in_header: []
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
      responses:
        '204':
          description: No Content — direct assignment removed (or no-op if it did not exist).
        '403':
          description: Forbidden — user lacks permission to edit task settings.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '404':
          description: Not found — task does not exist within the user's root group.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
  /v3/time-entries:
    post:
      operationId: tc2--get--time--entries
      deprecated: true
      description: |
        Deprecated. This endpoint is being moved to `/time-entries/list`.
        Get time entries by user access and permissions.
      summary: Get time entries by user permissions
      security:
        - api_key_in_header: []
      requestBody:
        content:
          application/json:
            schema:
              description: ''
              type: object
              x-examples:
                example-1:
                  startDate: '2021-12-01'
                  endDate: '2022-01-31'
                  userIds:
                    - 640
                    - 1961631
                  taskIds:
                    - 85753039
                  tagIds:
                    - 1
              properties:
                startDate:
                  type: string
                  description: Start date
                  format: date
                  example: '2022-01-01'
                endDate:
                  type: string
                  description: End date
                  format: date
                  example: '2022-01-31'
                userIds:
                  type: array
                  uniqueItems: true
                  description: Array of user ids
                  items:
                    type: integer
                    example: 0
                taskIds:
                  type: array
                  uniqueItems: true
                  description: Array of task ids
                  items:
                    type: integer
                    example: 0
                    default: 0
                tagIds:
                  type: array
                  uniqueItems: true
                  description: Array of tag ids
                  items:
                    type: integer
                    example: 0
              required:
                - startDate
                - endDate
            examples:
              'Example #1':
                value:
                  startDate: '2022-01-01'
                  endDate: '2022-01-31'
              'Example #2':
                value:
                  startDate: '2022-01-01'
                  endDate: '2022-01-31'
                  userIds:
                    - 1
                    - 2
                    - 3
                  taskIds:
                    - 1
                    - 10
                  tagIds:
                    - 5
      responses:
        '200':
          description: OK response
          content:
            application/json:
              schema:
                type: array
                description: Array of time entry objects
                minItems: 0
                uniqueItems: true
                x-examples:
                  example-1:
                    - id: 1
                      duration: 4210
                      invoice_id: 0
                      last_modify: '2022-01-01 14:28:30'
                      date: '2022-01-01'
                      start_time: '10:54'
                      end_time: '12:28'
                      billable: true
                      description: null
                      user:
                        id: 1
                        email: john.doe@timecamp.com
                        display_name: John Doe
                      task:
                        id: 1
                        name: First task
                        color: '#4DC2E8'
                        billable: true
                      tags: []
                items:
                  type: object
                  description: Time entry object
                  properties:
                    id:
                      type: integer
                      description: Entry id
                      example: 1
                      format: int32
                    duration:
                      type: integer
                      description: Duration in seconds
                      format: int32
                      example: 300
                    invoice_id:
                      type: integer
                      description: Invoice id
                      format: int32
                      example: 1
                    last_modify:
                      type: string
                      format: date-time
                      example: '2022-01-01 10:05:00'
                      description: Last modify date
                    date:
                      type: string
                      format: date
                      example: '2022-01-01'
                      description: Time entry date
                    start_time:
                      type: string
                      example: '15:00'
                      description: Start time
                    end_time:
                      type: string
                      description: End time
                      example: '16:00'
                    billable:
                      type: boolean
                      description: Is billable
                    description:
                      type: string
                      description: Time entry description
                      nullable: true
                    user:
                      type: object
                      description: Related user data
                      nullable: true
                      properties:
                        id:
                          type: integer
                          description: User id
                          example: 1
                        email:
                          type: string
                          description: User email
                          example: john.doe@example.com
                        display_name:
                          type: string
                          description: User display name
                          example: John Doe
                    task:
                      type: object
                      description: Related task data
                      nullable: true
                      properties:
                        id:
                          type: number
                          description: Task id
                          example: 1
                        name:
                          type: string
                          description: Task name
                          example: My task
                        color:
                          type: string
                          description: Task color
                          example: '#000000'
                        billable:
                          type: boolean
                          description: Task is billable
                    tags:
                      type: array
                      description: Related tags data
                      items:
                        type: object
                        properties:
                          id:
                            type: integer
                            description: Tag id
                            example: 1
                          name:
                            type: string
                            description: Tag name
                            example: My first tag
                          tag_list:
                            type: object
                            properties:
                              id:
                                type: integer
                                description: Tag list id
                                example: 1
                              name:
                                type: string
                                description: Tag list name
                                example: Tag list
                  required:
                    - id
                    - duration
                    - invoice_id
                    - last_modify
                    - date
                    - start_time
                    - end_time
                    - billable
                    - user
                    - task
                    - tags
              examples:
                'Example #1':
                  value:
                    - id: 1
                      duration: 4210
                      invoice_id: 0
                      last_modify: '2022-01-01 14:28:30'
                      date: '2022-01-01'
                      start_time: '10:54'
                      end_time: '12:28'
                      billable: true
                      description: null
                      user:
                        id: 1
                        email: john.doe@timecamp.com
                        display_name: John Doe
                      task:
                        id: 1
                        name: First task
                        color: '#4DC2E8'
                        billable: true
                      tags:
                        - id: 1
                          name: My first tag
                          tag_list:
                            id: 1
                            name: My tag list
                'Example #2':
                  value:
                    - id: 2
                      duration: 900
                      invoice_id: 0
                      last_modify: '2022-01-01 16:00:00'
                      date: '2022-01-01'
                      start_time: '13:00'
                      end_time: '13:15'
                      billable: true
                      description: null
                      user:
                        id: 1
                        email: john.doe@timecamp.com
                        display_name: John Doe
                      task: null
                      tags: []
                'Example #3':
                  value: []
          headers:
            Content-Type:
              schema:
                type: string
              description: application/json
      tags:
        - '[v3] Time Entry'
    parameters: []
  /v3/time-entries/list:
    post:
      operationId: tc2--get--time--entries-list
      description: Get time entries by user access and permissions.
      summary: Get time entries by user permissions
      security:
        - api_key_in_header: []
      requestBody:
        content:
          application/json:
            schema:
              description: ''
              type: object
              x-examples:
                example-1:
                  startDate: '2021-12-01'
                  endDate: '2022-01-31'
                  userIds:
                    - 640
                    - 1961631
                  taskIds:
                    - 85753039
                  tagIds:
                    - 1
              properties:
                startDate:
                  type: string
                  description: Start date
                  format: date
                  example: '2022-01-01'
                endDate:
                  type: string
                  description: End date
                  format: date
                  example: '2022-01-31'
                userIds:
                  type: array
                  uniqueItems: true
                  description: Array of user ids
                  items:
                    type: integer
                    example: 0
                taskIds:
                  type: array
                  uniqueItems: true
                  description: Array of task ids
                  items:
                    type: integer
                    example: 0
                    default: 0
                tagIds:
                  type: array
                  uniqueItems: true
                  description: Array of tag ids
                  items:
                    type: integer
                    example: 0
              required:
                - startDate
                - endDate
            examples:
              'Example #1':
                value:
                  startDate: '2022-01-01'
                  endDate: '2022-01-31'
              'Example #2':
                value:
                  startDate: '2022-01-01'
                  endDate: '2022-01-31'
                  userIds:
                    - 1
                    - 2
                    - 3
                  taskIds:
                    - 1
                    - 10
                  tagIds:
                    - 5
      responses:
        '200':
          description: OK response
          content:
            application/json:
              schema:
                type: array
                description: Array of time entry objects
                minItems: 0
                uniqueItems: true
                x-examples:
                  example-1:
                    - id: 1
                      duration: 4210
                      invoice_id: 0
                      last_modify: '2022-01-01 14:28:30'
                      date: '2022-01-01'
                      start_time: '10:54'
                      end_time: '12:28'
                      billable: true
                      description: null
                      user:
                        id: 1
                        email: john.doe@timecamp.com
                        display_name: John Doe
                      task:
                        id: 1
                        name: First task
                        color: '#4DC2E8'
                        billable: true
                      tags: []
                items:
                  type: object
                  description: Time entry object
                  properties:
                    id:
                      type: integer
                      description: Entry id
                      example: 1
                      format: int32
                    duration:
                      type: integer
                      description: Duration in seconds
                      format: int32
                      example: 300
                    invoice_id:
                      type: integer
                      description: Invoice id
                      format: int32
                      example: 1
                    last_modify:
                      type: string
                      format: date-time
                      example: '2022-01-01 10:05:00'
                      description: Last modify date
                    date:
                      type: string
                      format: date
                      example: '2022-01-01'
                      description: Time entry date
                    start_time:
                      type: string
                      example: '15:00'
                      description: Start time
                    end_time:
                      type: string
                      description: End time
                      example: '16:00'
                    billable:
                      type: boolean
                      description: Is billable
                    description:
                      type: string
                      description: Time entry description
                      nullable: true
                    user:
                      type: object
                      description: Related user data
                      nullable: true
                      properties:
                        id:
                          type: integer
                          description: User id
                          example: 1
                        email:
                          type: string
                          description: User email
                          example: john.doe@example.com
                        display_name:
                          type: string
                          description: User display name
                          example: John Doe
                    task:
                      type: object
                      description: Related task data
                      nullable: true
                      properties:
                        id:
                          type: number
                          description: Task id
                          example: 1
                        name:
                          type: string
                          description: Task name
                          example: My task
                        color:
                          type: string
                          description: Task color
                          example: '#000000'
                        billable:
                          type: boolean
                          description: Task is billable
                    tags:
                      type: array
                      description: Related tags data
                      items:
                        type: object
                        properties:
                          id:
                            type: integer
                            description: Tag id
                            example: 1
                          name:
                            type: string
                            description: Tag name
                            example: My first tag
                          tag_list:
                            type: object
                            properties:
                              id:
                                type: integer
                                description: Tag list id
                                example: 1
                              name:
                                type: string
                                description: Tag list name
                                example: Tag list
                  required:
                    - id
                    - duration
                    - invoice_id
                    - last_modify
                    - date
                    - start_time
                    - end_time
                    - billable
                    - user
                    - task
                    - tags
              examples:
                'Example #1':
                  value:
                    - id: 1
                      duration: 4210
                      invoice_id: 0
                      last_modify: '2022-01-01 14:28:30'
                      date: '2022-01-01'
                      start_time: '10:54'
                      end_time: '12:28'
                      billable: true
                      description: null
                      user:
                        id: 1
                        email: john.doe@timecamp.com
                        display_name: John Doe
                      task:
                        id: 1
                        name: First task
                        color: '#4DC2E8'
                        billable: true
                      tags:
                        - id: 1
                          name: My first tag
                          tag_list:
                            id: 1
                            name: My tag list
                'Example #2':
                  value:
                    - id: 2
                      duration: 900
                      invoice_id: 0
                      last_modify: '2022-01-01 16:00:00'
                      date: '2022-01-01'
                      start_time: '13:00'
                      end_time: '13:15'
                      billable: true
                      description: null
                      user:
                        id: 1
                        email: john.doe@timecamp.com
                        display_name: John Doe
                      task: null
                      tags: []
                'Example #3':
                  value: []
          headers:
            Content-Type:
              schema:
                type: string
              description: application/json
      tags:
        - '[v3] Time Entry'
    parameters: []
  /v3/time-entries/create:
    post:
      summary: Create time entry
      description: Create a time entry.
      tags:
        - '[v3] Time Entry'
      operationId: create-time-entry
      security:
        - api_key_in_header: []
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: tc_web
          in: header
          name: Tc-service
          description: Optional service name used for activity and analytics context.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - date
              properties:
                date:
                  type: string
                  format: date
                  example: '2026-06-18'
                startTime:
                  type: string
                  example: '09:00:00'
                endTime:
                  type: string
                  example: '10:00:00'
                duration:
                  type: integer
                  format: int32
                  description: Duration in seconds. If omitted, duration is calculated from start and end.
                  example: 3600
                taskId:
                  type: integer
                  format: int32
                  example: 123
                externalTaskId:
                  type: string
                  example: card_123
                assignedUserId:
                  type: integer
                  format: int32
                  example: 456
                userEmail:
                  type: string
                  format: email
                  example: user@example.com
                taskNameSearch:
                  type: string
                  example: Project task
                note:
                  type: string
                  example: Work note
                description:
                  type: string
                  example: Work note
                customId:
                  type: string
                  example: EXT-123
                billable:
                  type: boolean
                  example: true
                tags:
                  type: array
                  items:
                    oneOf:
                      - type: integer
                      - type: object
                        properties:
                          tagId:
                            type: integer
                baseEntryId:
                  type: integer
                  format: int32
                  example: 100
                place:
                  type: string
                  example: timesheet
            examples:
              Create:
                value:
                  date: '2026-06-18'
                  startTime: '09:00:00'
                  endTime: '10:00:00'
                  taskId: 123
                  note: Work note
                  billable: true
      responses:
        '201':
          description: Time entry created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        format: int32
                        example: 123
                      duration:
                        type: integer
                        format: int32
                        example: 3600
                      userId:
                        type: integer
                        format: int32
                        example: 456
                      taskId:
                        type: integer
                        format: int32
                        example: 123
                      date:
                        type: string
                        format: date
                        example: '2026-06-18'
                      startTime:
                        type: string
                        example: '09:00:00'
                      endTime:
                        type: string
                        example: '10:00:00'
                      description:
                        type: string
                        nullable: true
                        example: Work note
                      billable:
                        type: boolean
                        example: true
                      tags:
                        type: array
                        nullable: true
                        items:
                          type: integer
                          format: int32
                          example: 7
                  meta:
                    type: object
                    properties:
                      tags:
                        type: array
                        description: Tag metadata for tags assigned to the created time entry.
                        items:
                          type: object
                          required:
                            - id
                            - name
                          properties:
                            id:
                              type: integer
                              format: int32
                              example: 7
                            name:
                              type: string
                              example: My tag
              examples:
                Success Response:
                  value:
                    data:
                      id: 123
                      duration: 3600
                      userId: 456
                      taskId: 123
                      date: '2026-06-18'
                      startTime: '09:00:00'
                      endTime: '10:00:00'
                      description: Work note
                      billable: true
                      tags:
                        - 7
                    meta:
                      tags:
                        - id: 7
                          name: My tag
        '400':
          description: Invalid request payload.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '401':
          description: Unauthorized.
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
  /v3/time-entries/{id}:
    put:
      summary: Update time entry
      description: Update a time entry by id.
      tags:
        - '[v3] Time Entry'
      operationId: update-time-entry
      security:
        - api_key_in_header: []
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: tc_web
          in: header
          name: Tc-service
          description: Optional service name used for activity and analytics context.
        - schema:
            type: integer
            minimum: 1
            example: 123
          in: path
          required: true
          name: id
          description: Time entry id.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              minProperties: 1
              properties:
                date:
                  type: string
                  format: date
                  example: '2026-06-18'
                startTime:
                  type: string
                  example: '09:00:00'
                endTime:
                  type: string
                  example: '10:00:00'
                duration:
                  type: integer
                  format: int32
                  description: Duration in seconds.
                  example: 3600
                increase:
                  type: boolean
                  description: When true, adds duration to the current time entry duration instead of replacing it.
                  example: false
                note:
                  type: string
                  description: Time entry note. Takes precedence over description when both are provided.
                  example: Updated work note
                description:
                  type: string
                  description: Time entry description. Used when note is not provided.
                  example: Updated work note
                billable:
                  type: boolean
                  example: true
                invoiceId:
                  type: integer
                  format: int32
                  example: 44
                taskId:
                  type: integer
                  format: int32
                  example: 123
                analyticsPlace:
                  type: string
                  example: report_detailed
                analyticsElement:
                  type: string
                  example: duration
            examples:
              Update:
                value:
                  date: '2026-06-18'
                  startTime: '09:00:00'
                  endTime: '10:00:00'
                  duration: 3600
                  increase: false
                  taskId: 123
                  note: Updated work note
                  billable: true
      responses:
        '200':
          description: Time entry updated successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    additionalProperties: true
                    properties:
                      entry_id:
                        type: integer
                        format: int32
                        example: 123
                      task_id:
                        type: integer
                        format: int32
                        example: 456
                      time_span:
                        type: integer
                        format: int32
                        description: Duration in seconds.
                        example: 3600
                      user_id:
                        type: integer
                        format: int32
                        example: 789
                      date:
                        type: string
                        format: date
                        example: '2026-06-18'
                      start_time_hour:
                        type: string
                        example: '09:00:00'
                      end_time_hour:
                        type: string
                        example: '10:00:00'
                      note:
                        type: string
                        nullable: true
                        example: Updated work note
                      billable:
                        type: boolean
                        example: true
                      invoiceId:
                        type: integer
                        format: int32
                        example: 44
                      color:
                        type: string
                        nullable: true
                        example: '#4DC2E8'
                      tags:
                        type: array
                        items:
                          type: integer
                          format: int32
                          example: 7
                  meta:
                    type: object
                    properties:
                      tags:
                        type: array
                        description: Tag metadata for tags assigned to the updated time entry.
                        items:
                          type: object
                          required:
                            - id
                            - name
                          properties:
                            id:
                              type: integer
                              format: int32
                              example: 7
                            name:
                              type: string
                              example: My tag
              examples:
                Success Response:
                  value:
                    data:
                      entry_id: 123
                      task_id: 456
                      time_span: 3600
                      user_id: 789
                      date: '2026-06-18'
                      start_time_hour: '09:00:00'
                      end_time_hour: '10:00:00'
                      note: Updated work note
                      billable: true
                      invoiceId: 44
                      color: '#4DC2E8'
                      tags:
                        - 7
                    meta:
                      tags:
                        - id: 7
                          name: My tag
        '400':
          description: Invalid request payload.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Bad Request:
                  value:
                    message: unrecognized date or time format
        '401':
          description: Unauthorized.
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Forbidden:
                  value:
                    message: You do not have permission to update this time entry.
        '404':
          description: Time entry not found.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Not Found:
                  value:
                    message: No entry found
      x-internal: false
    delete:
      summary: Delete time entry
      description: Delete a time entry by id.
      tags:
        - '[v3] Time Entry'
      operationId: delete-time-entry
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: tc_web
          in: header
          name: Tc-service
          description: Optional service name used for activity and analytics context.
        - schema:
            type: integer
            minimum: 1
            example: 123
          in: path
          required: true
          name: id
          description: Time entry id.
        - schema:
            type: string
            example: report_detailed
          in: query
          required: false
          name: source
          description: Optional UI source for analytics context.
        - schema:
            type: string
            example: tracked_time
          in: query
          required: false
          name: element
          description: Optional UI element for analytics context.
      responses:
        '200':
          description: Time entry deleted successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: removed
              examples:
                Success Response:
                  value:
                    message: removed
        '204':
          description: Time entry does not exist or was already deleted.
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Forbidden:
                  value:
                    message: You do not have permission to delete this time entry.
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/time-entry-restriction/list:
    post:
      summary: List restrictions
      operationId: post-time-entry-restriction-list
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                        restrictionType:
                          type: string
                        restrictedEntityType:
                          type: string
                        restrictedEntityId:
                          type: integer
                        rootGroupId:
                          type: integer
                        endDate:
                          type: string
                        getRestrictionApplyOffset:
                          type: integer
                  pagination:
                    type: object
                    properties:
                      page:
                        type: integer
                      limit:
                        type: integer
                      total:
                        type: integer
                x-examples:
                  Example 1:
                    data:
                      - id: 1
                        restrictionType: customPeriod
                        restrictedEntityType: group
                        restrictedEntityId: 1208
                        rootGroupId: 1208
                        endDate: '2023-12-06T00:00:00+01:00'
                        getRestrictionApplyOffset: 1
                      - id: 2
                        restrictionType: customPeriod
                        restrictedEntityType: group
                        restrictedEntityId: 1208
                        rootGroupId: 1208
                        endDate: '2023-12-05T00:00:00+01:00'
                        getRestrictionApplyOffset: 0
                      - id: 3
                        restrictionType: customPeriod
                        restrictedEntityType: group
                        restrictedEntityId: 1208
                        rootGroupId: 1208
                        endDate: '2023-12-05T00:00:00+01:00'
                        getRestrictionApplyOffset: 0
                      - id: 4
                        restrictionType: customPeriod
                        restrictedEntityType: group
                        restrictedEntityId: 1208
                        rootGroupId: 1208
                        endDate: '2023-12-05T00:00:00+01:00'
                        getRestrictionApplyOffset: 0
                    pagination:
                      page: 1
                      limit: 10
                      total: 4
      description: List all time entry restriction filtered by given params. An additional setting must be enabled for this endpoint to work - please contact support if you would like us to enable it.
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              type: object
              properties:
                restrictionType:
                  enum:
                    - customPeriod
                restrictedEntityType:
                  enum:
                    - group
                restrictedEntityId:
                  type: integer
                page:
                  type: integer
                  description: default 1
                limit:
                  type: number
                  description: default 10
                restrictionData:
                  type: object
                  minProperties: 0
                  description: You have to specify restrictionType to  set additional filters
                  properties:
                    fromEndDate:
                      type: string
                      description: only in ``customPeriod`` restrictionType
                      pattern: YYYY-mm-dd
                      example: '2023-06-06'
                    toEndDate:
                      type: string
                      pattern: YYYY-mm-dd
                      example: '2023-06-06'
                      description: only in ``customPeriod`` restrictionType
      tags:
        - '[v3] Time Entry Restriction'
      security:
        - api_key_in_header: []
    parameters: []
  /v3/time-entry-restriction:
    post:
      summary: Create Time Entry restriction
      description: Create specific restriction. An additional setting must be enabled for this endpoint to work - please contact support if you would like us to enable it.
      operationId: post-time-entry-restriction
      responses:
        '200':
          description: OK
        '403':
          description: Forbidden
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                restrictionType:
                  enum:
                    - customPeriod
                restrictedEntityType:
                  enum:
                    - group
                restrictedEntityId:
                  type: integer
                restrictionData:
                  type: object
                  properties:
                    endDate:
                      type: string
                      description: only in ``customPeriod`` restrictionType, tells, about date till which entries won't be allowed to be modified, required in this restrictionType
                      pattern: YYYY-mm-dd
                    restrictionApplyOffset:
                      type: number
                      description: only in ``customPeriod`` restrictionType, tells, how much days timesheet is available to modifying after endDate required in this restrictionType
              required:
                - restrictionType
                - restrictedEntityType
                - restrictedEntityId
                - restrictionData
      tags:
        - '[v3] Time Entry Restriction'
      parameters: []
      security:
        - api_key_in_header: []
  /v3/time-entry-restriction/{id}:
    delete:
      summary: Delete Time Entry restriction
      operationId: delete-time-entry-restriction
      responses:
        '200':
          description: OK
        '403':
          description: Forbidden
      parameters: []
      description: Delete specific restriction. If you don't know id of restriction you want to delete see time-entry-restriction/list endpoint. An additional setting must be enabled for this endpoint to work - please contact support if you would like us to enable it.
      tags:
        - '[v3] Time Entry Restriction'
      security:
        - api_key_in_header: []
    parameters:
      - schema:
          type: number
        name: id
        in: path
        required: true
  /v3/activity-category/{id}:
    parameters:
      - schema:
          type: integer
          example: 245
        name: id
        in: path
        required: true
        description: Activity category identifier.
  /v3/activity-category/{groupId}/productivity:
    parameters:
      - schema:
          type: integer
          example: 56
        name: groupId
        in: path
        required: true
        description: Group identifier from the current user's root group tree.
  /v3/activity-category/{groupId}/applications:
    parameters:
      - schema:
          type: integer
          example: 56
        name: groupId
        in: path
        required: true
        description: Group identifier from the current user's root group tree.
  /v3/activity-category/{groupId}/applications/search:
    parameters:
      - schema:
          type: integer
          example: 56
        name: groupId
        in: path
        required: true
        description: Group identifier from the current user's root group tree.
  /v3/activity-category/{groupId}/applications/restore-default:
    parameters:
      - schema:
          type: integer
          example: 56
        name: groupId
        in: path
        required: true
        description: Group identifier from the current user's root group tree.
  /v3/activity-category/{groupId}/productivity/restore-default:
    parameters:
      - schema:
          type: integer
          example: 56
        name: groupId
        in: path
        required: true
        description: Group identifier from the current user's root group tree.
  /v3/expense/category/{id}:
    put:
      description: ' '
      summary: Update expense category
      operationId: put-expense-category
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  Example 1:
                    message: ok
                    data:
                      id: 50
                      name: My category
                      color: '#4DC2E8'
                      unitPrice: 1000
                      unitName: my unit
                      currencyId: 2
                      createdAt: '2023-10-23 16:06:01'
                      updatedAt: '2023-10-27 08:24:07'
                properties:
                  message:
                    type: string
                  data:
                    $ref: '#/components/schemas/Expense-category-response'
              examples:
                Example 1:
                  value:
                    message: ok
                    data:
                      id: 53
                      name: My category
                      color: '#4DC2E8'
                      unitPrice: 1000
                      unitName: my unit
                      currencyId: 2
                      createdAt: '2023-09-07 12:26:34'
                      updatedAt: null
      security:
        - api_key_in_header: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Expense-category-request'
            examples:
              Example 1:
                value:
                  name: My category
                  color: '#4DC2E8'
                  currencyId: 2
                  unitPrice: 1000
                  unitName: my unit
      x-internal: false
      tags:
        - '[v3] Expense'
    parameters:
      - schema:
          type: string
          example: '50'
        name: id
        in: path
        required: true
  /v3/expense/category:
    get:
      summary: List expense category
      tags:
        - '[v3] Expense'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Expense-category-response'
              examples:
                Example 1:
                  value:
                    - id: 50
                      rootGroupId: 12345
                      name: My category
                      color: '#4DC2E8'
                      unitPrice: 1000
                      unitName: my unit
                      currencyId: 2
                      createdAt: '2023-08-29 16:58:56'
                      updatedAt: 'null'
          headers: {}
      operationId: get-expense-category
      security:
        - api_key_in_header: []
      x-internal: false
    post:
      summary: Create expense category
      operationId: post-expense-category
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  Example 1:
                    message: ok
                    data:
                      id: 53
                      name: My category
                      color: '#4DC2E8'
                      unitPrice: 1000
                      unitName: my unit
                      currencyId: 2
                      createdAt: '2023-10-27 08:26:34'
                      updatedAt: null
                properties:
                  message:
                    type: string
                  data:
                    $ref: '#/components/schemas/Expense-category-response'
      description: ' '
      parameters: []
      security:
        - api_key_in_header: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Expense-category-request'
            examples:
              Example 1:
                value:
                  name: My category
                  color: '#4DC2E8'
                  unitPrice: 1000
                  unitName: my unit
                  currencyId: 2
      x-internal: false
      tags:
        - '[v3] Expense'
  /v3/available-plans:
    parameters: []
  /v3/expense/category/{id}/archive:
    patch:
      summary: Archive expense category
      tags:
        - '[v3] Expense'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                x-examples:
                  Example 1:
                    message: ok
              examples:
                Example 1:
                  value:
                    message: ok
      operationId: patch-expense-category-43-archive
      x-internal: false
      security:
        - api_key_in_header: []
    parameters:
      - schema:
          type: string
          example: '50'
        name: id
        in: path
        required: true
  /v3/expense/list:
    get:
      summary: List expense
      tags:
        - '[v3] Expense'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  Example 1:
                    data: []
                    pagination:
                      totalItemQuantity: 0
                      page: 1
                      limit: 25
                    metadata:
                      totalAmount: 0
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Expense-response'
                  pagination:
                    type: object
                    properties:
                      totalItemQuantity:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                  metadata:
                    type: object
                    properties:
                      totalAmount:
                        type: integer
              examples:
                Example 1:
                  value:
                    data:
                      - id: 74
                        currencyId: 2
                        expenseCategory:
                          id: 53
                          name: My category
                          color: '#4DC2E8'
                          unitPrice: 1000
                          unitName: my unit
                          currencyId: 2
                          createdAt: '2023-09-07 12:26:34'
                          updatedAt: null
                        taskId: 128
                        amount: 2522
                        description: My description...
                        status: 0
                        isBillable: true
                        invoiceId: null
                        madeBy: 256
                        madeAt: '2023-09-12 10:32:22'
                        createdBy: 512
                        updatedBy: null
                        createdAt: '2023-10-17 09:41:33'
                        updatedAt: null
                      - id: 75
                        currencyId: 2
                        expenseCategory:
                          id: 53
                          name: My category
                          color: '#4DC2E8'
                          unitPrice: 1000
                          unitName: my unit
                          currencyId: 2
                          createdAt: '2023-09-07 12:26:34'
                          updatedAt: null
                        taskId: 256
                        amount: 2000
                        description: My description...
                        status: 0
                        isBillable: true
                        invoiceId: null
                        madeBy: 256
                        madeAt: '2023-09-12 14:33:47'
                        createdBy: 512
                        updatedBy: null
                        createdAt: '2023-10-17 19:33:23'
                        updatedAt: null
                    pagination:
                      totalItemQuantity: 2
                      page: 1
                      limit: 25
                    metadata:
                      totalAmount: 4522
      operationId: get-expense-list
      x-internal: false
      parameters:
        - schema:
            type: string
          in: query
          name: timeFrameStart
        - schema:
            type: string
          in: query
          name: timeFrameEnd
        - schema:
            type: array
            items:
              type: integer
          in: query
          name: taskIds
        - schema:
            type: array
            items:
              type: integer
          in: query
          name: expenseCategoryIds
        - schema:
            type: integer
          in: query
          name: invoiced
        - schema:
            type: boolean
          in: query
          name: billable
        - schema:
            type: integer
          in: query
          name: invoiceId
        - schema:
            type: string
            default: desc
          in: query
          name: sortOrder
        - schema:
            type: string
            default: made_at
          in: query
          name: sortBy
        - schema:
            type: integer
            default: 25
          in: query
          name: limit
        - schema:
            type: integer
            default: 1
          in: query
          name: page
      security:
        - api_key_in_header: []
    post:
      summary: List expense
      tags:
        - '[v3] Expense'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  Example 1:
                    data: []
                    pagination:
                      totalItemQuantity: 0
                      page: 1
                      limit: 25
                    metadata:
                      totalAmount: 0
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Expense-response'
                  pagination:
                    type: object
                    properties:
                      totalItemQuantity:
                        type: integer
                      page:
                        type: integer
                      limit:
                        type: integer
                  metadata:
                    type: object
                    properties:
                      totalAmount:
                        type: integer
              examples:
                Example 1:
                  value:
                    data:
                      - id: 74
                        currencyId: 2
                        expenseCategory:
                          id: 53
                          name: My category
                          color: '#4DC2E8'
                          unitPrice: 1000
                          unitName: my unit
                          currencyId: 2
                          createdAt: '2023-09-07 12:26:34'
                          updatedAt: null
                        taskId: 128
                        amount: 2522
                        description: My description...
                        status: 0
                        isBillable: true
                        invoiceId: null
                        madeBy: 256
                        madeAt: '2023-09-12 10:32:22'
                        createdBy: 512
                        updatedBy: null
                        createdAt: '2023-10-17 09:41:33'
                        updatedAt: null
                      - id: 75
                        currencyId: 2
                        expenseCategory:
                          id: 53
                          name: My category
                          color: '#4DC2E8'
                          unitPrice: 1000
                          unitName: my unit
                          currencyId: 2
                          createdAt: '2023-09-07 12:26:34'
                          updatedAt: null
                        taskId: 256
                        amount: 2000
                        description: My description...
                        status: 0
                        isBillable: true
                        invoiceId: null
                        madeBy: 256
                        madeAt: '2023-09-12 14:33:47'
                        createdBy: 512
                        updatedBy: null
                        createdAt: '2023-10-17 19:33:23'
                        updatedAt: null
                    pagination:
                      totalItemQuantity: 2
                      page: 1
                      limit: 25
                    metadata:
                      totalAmount: 4522
      operationId: post-expense-list
      x-internal: false
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-examples:
                Example 1:
                  timeFrameStart: '2023-09-01'
                  timeFrameEnd: '2023-10-31'
                  taskIds:
                    - 1
                    - 2
                  expenseCategoryIds:
                    - 1
                    - 2
                  invoiced: true
                  billable: true
                  invoiceId: 1
                  sortOrder: asc
                  sortBy: madeAt
              properties:
                timeFrameStart:
                  type: string
                  nullable: true
                timeFrameEnd:
                  type: string
                  nullable: true
                taskIds:
                  type: array
                  nullable: true
                  items: {}
                expenseCategoryIds:
                  type: array
                  nullable: true
                  items: {}
                invoiced:
                  type: boolean
                  nullable: true
                billable:
                  type: boolean
                  nullable: true
                invoiceId:
                  type: integer
                  nullable: true
                sortOrder:
                  type: string
                  default: desc
                  nullable: true
                sortBy:
                  type: string
                  default: made_at
                  nullable: true
                limit:
                  type: number
                  default: 1
                page:
                  type: number
                  default: 25
            examples:
              Example 1:
                value:
                  timeFrameStart: '2023-09-01'
                  timeFrameEnd: '2023-10-31'
                  taskIds:
                    - 128
                    - 256
                  expenseCategoryIds:
                    - 74
                    - 75
                  invoiced: false
                  billable: true
                  invoiceId: null
                  sortOrder: asc
                  sortBy: madeAt
                  limit: 25
                  page: 1
      security:
        - api_key_in_header: []
  /v3/expense:
    post:
      summary: Create expense
      tags:
        - '[v3] Expense'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense-response'
              examples:
                Example 1:
                  value:
                    message: ok
                    data:
                      id: 74
                      currencyId: 2
                      expenseCategory:
                        id: 53
                        name: My category
                        color: '#4DC2E8'
                        unitPrice: 1000
                        unitName: my unit
                        currencyId: 2
                        createdAt: '2023-09-07 12:26:34'
                        updatedAt: null
                      taskId: 512
                      amount: 2522
                      description: My description...
                      status: 0
                      isBillable: true
                      invoiceId: null
                      madeBy: 256
                      madeAt: '2023-09-12 10:32:22'
                      createdBy: 256
                      updatedBy: 256
                      createdAt: '2023-10-21 09:41:33'
                      updatedAt: '2023-10-21 09:41:41'
      operationId: post-expense
      security:
        - api_key_in_header: []
      x-internal: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Expense-request'
            examples:
              Example 1:
                value:
                  currencyId: 2
                  expenseCategoryId: '50'
                  taskId: 512
                  amount: 2522
                  description: My description...
                  isBillable: true
                  madeBy: 256
                  madeAt: '2023-09-12 10:32:22'
  /v3/expense/{id}:
    put:
      summary: Update expense
      tags:
        - '[v3] Expense'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense-response'
              examples:
                Example 1:
                  value:
                    message: ok
                    data:
                      id: 74
                      currencyId: 2
                      expenseCategory:
                        id: 53
                        name: My category
                        color: '#4DC2E8'
                        unitPrice: 1000
                        unitName: my unit
                        currencyId: 2
                        createdAt: '2023-09-07 12:26:34'
                        updatedAt: null
                      taskId: 512
                      amount: 2522
                      description: My description...
                      status: 0
                      isBillable: true
                      invoiceId: null
                      madeBy: 256
                      madeAt: '2023-09-12 10:32:22'
                      createdBy: 256
                      updatedBy: 256
                      createdAt: '2023-10-21 09:41:33'
                      updatedAt: '2023-10-21 09:41:41'
      operationId: put-expesne
      x-internal: false
      security:
        - api_key_in_header: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Expense-request'
            examples:
              Example 1:
                value:
                  currencyId: 2
                  expenseCategoryId: '50'
                  taskId: 512
                  amount: 2522
                  description: My description...
                  isBillable: true
                  madeBy: 256
                  madeAt: '2023-09-12 10:32:22'
    delete:
      summary: Delete expense
      tags:
        - '[v3] Expense'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                x-examples:
                  Example 1:
                    message: ok
              examples:
                Example 1:
                  value:
                    message: ok
      operationId: delete-expesne
      security:
        - api_key_in_header: []
      x-internal: false
    parameters:
      - schema:
          type: string
          example: '74'
        name: id
        in: path
        required: true
  /v3/expense/{id}/attachment/upload:
    parameters:
      - schema:
          type: string
          example: '74'
        name: id
        in: path
        required: true
    post:
      summary: Upload expense attachment
      tags:
        - '[v3] Expense'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  Example 1:
                    message: ok
                    data:
                      - id: 14
                        userFilename: 02.pdf
                        mimeType: application/pdf
                        url: /internal/api/v3/storage/download/14
                properties:
                  message:
                    type: string
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Attachment'
              examples:
                Example 1:
                  value:
                    message: ok
                    data:
                      - id: 14
                        userFilename: 02.pdf
                        mimeType: application/pdf
                        url: /internal/api/v3/storage/download/14
      operationId: post-expense-id-attachment-upload
      x-internal: false
      security:
        - api_key_in_header: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
        description: ''
  /v3/expense/{id}/attachment:
    parameters:
      - schema:
          type: string
          example: '74'
        name: id
        in: path
        required: true
    get:
      summary: Get expense attachment
      tags:
        - '[v3] Expense'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  Example 1:
                    message: ok
                    data:
                      - id: 14
                        userFilename: 02.pdf
                        mimeType: application/pdf
                        url: /internal/api/v3/storage/download/14
                properties:
                  message:
                    type: string
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Attachment'
              examples:
                Example 1:
                  value:
                    message: ok
                    data:
                      - id: 14
                        userFilename: 02.pdf
                        mimeType: application/pdf
                        url: /internal/api/v3/storage/download/14
      operationId: get-expense-id-attachment
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/expense/{id}/attachment/{id_attachment}/delete:
    parameters:
      - schema:
          type: string
          example: '74'
        name: id
        in: path
        required: true
      - schema:
          type: string
          example: '14'
        name: id_attachment
        in: path
        required: true
    delete:
      summary: Delete expense attachment
      tags:
        - '[v3] Expense'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                x-examples:
                  Example 1:
                    message: ok
              examples:
                Example 1:
                  value:
                    message: ok
      operationId: delete-expense-id-attachment-id_attachment-delete
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/expense/invoice/unassign:
    put:
      summary: Invoice unassign from expense
      tags:
        - '[v3] Expense'
        - '[v3] Invoices'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  Example 1:
                    message: ok
                    data:
                      - id: 74
                        currencyId: 2
                        expenseCategory:
                          id: 50
                          name: My category
                          color: '#4DC2E8'
                          unitPrice: 1000
                          unitName: my unit
                          currencyId: 2
                          createdAt: '2023-10-23 16:06:01'
                          updatedAt: '2023-10-27 09:18:31'
                        taskId: 868
                        amount: 2522
                        description: ABCD
                        status: 0
                        isBillable: true
                        invoiceId: null
                        madeBy: 640
                        madeAt: '2023-09-12 10:32:22'
                        createdBy: 640
                        updatedBy: 640
                        createdAt: '2023-10-27 09:41:33'
                        updatedAt: '2023-10-27 09:47:51'
                properties:
                  message:
                    type: string
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                        currencyId:
                          type: integer
                        expenseCategory:
                          $ref: '#/components/schemas/Expense-response'
                        taskId:
                          type: integer
                        amount:
                          type: integer
                        description:
                          type: string
                        status:
                          type: integer
                        isBillable:
                          type: boolean
                        invoiceId:
                          type: integer
                          nullable: true
                        madeBy:
                          type: integer
                        madeAt:
                          type: string
                        createdBy:
                          type: integer
                        updatedBy:
                          type: integer
                        createdAt:
                          type: string
                        updatedAt:
                          type: string
              examples:
                Example 1:
                  value:
                    message: ok
                    data:
                      id: 74
                      currencyId: 2
                      expenseCategory:
                        id: 53
                        name: My category
                        color: '#4DC2E8'
                        unitPrice: 1000
                        unitName: my unit
                        currencyId: 2
                        createdAt: '2023-09-07 12:26:34'
                        updatedAt: null
                      taskId: 512
                      amount: 2522
                      description: My description...
                      status: 0
                      isBillable: true
                      invoiceId: null
                      madeBy: 256
                      madeAt: '2023-09-12 10:32:22'
                      createdBy: 256
                      updatedBy: 256
                      createdAt: '2023-10-21 09:41:33'
                      updatedAt: '2023-10-21 09:41:41'
      operationId: put-expense-invoice-unassign
      x-internal: false
      security:
        - api_key_in_header: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                expenseIds:
                  type: array
                  items:
                    type: integer
              x-examples:
                Example 1:
                  expenseIds:
                    - 45
                    - 46
            examples:
              Example 1:
                value:
                  expenseIds:
                    - 45
                    - 46
  /v3/expense/invoice/assign:
    put:
      summary: Invoice assign to expense
      tags:
        - '[v3] Expense'
        - '[v3] Invoices'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  Example 1:
                    message: ok
                    data:
                      id: 74
                      currencyId: 2
                      expenseCategory:
                        id: 53
                        name: My category
                        color: '#4DC2E8'
                        unitPrice: 1000
                        unitName: my unit
                        currencyId: 2
                        createdAt: '2023-09-07 12:26:34'
                        updatedAt: null
                      taskId: 512
                      amount: 2522
                      description: My description...
                      status: 0
                      isBillable: true
                      invoiceId: null
                      madeBy: 256
                      madeAt: '2023-09-12 10:32:22'
                      createdBy: 256
                      updatedBy: 256
                      createdAt: '2023-10-21 09:41:33'
                      updatedAt: '2023-10-21 09:41:41'
                properties:
                  message:
                    type: string
                  data:
                    $ref: '#/components/schemas/Expense-response'
              examples:
                Example 1:
                  value:
                    message: ok
                    data:
                      id: 74
                      currencyId: 2
                      expenseCategory:
                        id: 53
                        name: My category
                        color: '#4DC2E8'
                        unitPrice: 1000
                        unitName: my unit
                        currencyId: 2
                        createdAt: '2023-09-07 12:26:34'
                        updatedAt: null
                      taskId: 512
                      amount: 2522
                      description: My description...
                      status: 0
                      isBillable: true
                      invoiceId: 236
                      madeBy: 256
                      madeAt: '2023-09-12 10:32:22'
                      createdBy: 256
                      updatedBy: 256
                      createdAt: '2023-10-21 09:41:33'
                      updatedAt: '2023-10-21 09:41:41'
      operationId: put-expense-invoice-assign
      security:
        - api_key_in_header: []
      x-internal: false
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                invoiceId:
                  type: integer
                expenseIds:
                  type: array
                  items:
                    type: integer
              x-examples:
                Example 1:
                  invoiceId: 236
                  expenseIds:
                    - 45
                    - 46
            examples:
              Example 1:
                value:
                  invoiceId: 236
                  expenseIds:
                    - 45
                    - 46
  /v3/pivot/tabs/{id}:
    parameters:
      - schema:
          type: integer
          example: 1
        name: id
        in: path
        required: true
  /v3/storage/download/{id}:
    parameters:
      - schema:
          type: string
          example: '15'
        name: id
        in: path
        required: true
    get:
      summary: Storage get file
      tags:
        - '[v3] Storage'
      responses:
        '200':
          description: Successful file download
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
              examples:
                exampleFile:
                  summary: Example file download
                  value: Binary file content
      operationId: get-storage-download-id
      security:
        - api_key_in_header: []
  /v3/storage/file/list/root-group:
    get:
      summary: Get the list of files from the user's main group
      tags:
        - '[v3] Storage'
      parameters:
        - name: createdFrom
          in: query
          schema:
            type: string
            format: date-time
          description: Optional timestamp from which files are searched. ISO 8601 format
        - name: createdTo
          in: query
          schema:
            type: string
            format: date-time
          description: Optional timestamp to which files are searched. ISO 8601 format
      responses:
        '200':
          description: List of files in the main group
          content:
            application/json:
              schema:
                type: object
                properties:
                  files:
                    type: array
                    items:
                      type: object
                      properties:
                        userId:
                          type: integer
                          description: Identifier of owner of the file
                        name:
                          type: string
                          description: File Identifier.
                        createdAt:
                          type: string
                          format: date-time
                          description: File creation time.
                        lastModifiedAt:
                          type: string
                          format: date-time
                          description: File last modification time
        '403':
          description: Access denied, the user does not have the appropriate permissions.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Operation forbidden
        '500':
          description: Server error while retrieving the file list.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: There was an internal error while trying to fetch the list of files.
      operationId: get-storage-file-root-group
      security:
        - api_key_in_header: []
  /v3/module/core:
    parameters: []
  /v3/module/user:
    parameters: []
  /v3/module/dependencies/{module}:
    parameters:
      - schema:
          type: string
        name: module
        in: path
        required: true
  /v3/remote-work-detection/{id}/update:
    parameters:
      - schema:
          type: string
        name: id
        in: path
        required: true
  /v3/remote-work-detection/{id}/remove:
    parameters:
      - schema:
          type: string
        name: id
        in: path
        required: true
  /v3/remote-work-detection/{ip_address}/check:
    parameters:
      - schema:
          type: string
        name: ip_address
        in: path
        required: true
  /v3/activity-log/sites-and-apps:
    post:
      summary: List of sites and apps
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                        time:
                          type: string
                          description: Format according to settings
                        time_seconds:
                          type: integer
                        time_percentage:
                          type: integer
                        category:
                          type: string
                        productivity:
                          type: integer
                        type:
                          type: string
                          description: 'One of: apps, www, offline'
                        application_id:
                          type: integer
                        category_id:
                          type: integer
      operationId: post-activity-log-sites-and-apps
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - startDate
                - endDate
              properties:
                startDate:
                  type: string
                  format: date
                  example: '2025-03-01'
                endDate:
                  type: string
                  format: date
                  example: '2025-03-31'
                userIds:
                  type: array
                  uniqueItems: true
                  description: If not provided, the details of the user executing the request are returned.
                  items:
                    type: integer
      tags:
        - '[v3] Computer Activities'
      security:
        - api_key_in_header: []
  /v3/custom-fields/template/list:
    get:
      summary: List Custom Field Templates
      description: List Custom Field Templates
      tags:
        - '[v3] Custom Fields'
      operationId: get-custom-fields-template-list
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      responses:
        '200':
          description: List of active custom fields templates
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      properties:
                        id:
                          type: integer
                          description: ID of the created template
                        name:
                          type: string
                          description: Name of the template
                        resourceType:
                          type: string
                          description: Resource type
                        required:
                          type: boolean
                          description: Whether the field is required
                        status:
                          type: integer
                          description: Template status
                        fieldType:
                          type: string
                          description: Field type
                        defaultValue:
                          type: string
                          nullable: true
                          description: Default value
                        fieldOptions:
                          type: array
                          nullable: true
                          description: Field options
                          items:
                            type: object
              examples:
                Success Response:
                  value:
                    data:
                      - id: 15
                        name: Customer Priority
                        resourceType: user
                        required: true
                        status: 1
                        fieldType: string
                        defaultValue: Medium
                        fieldOptions: []
                      - id: 16
                        name: Customer Category
                        resourceType: user
                        required: false
                        status: 1
                        fieldType: string
                        defaultValue: null
                        fieldOptions: []
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/custom-fields/template/create:
    post:
      summary: Create Custom Field Template
      description: Create Custom Field Template
      tags:
        - '[v3] Custom Fields'
      operationId: post-custom-fields-template-create
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - resourceType
                - fieldType
              properties:
                name:
                  type: string
                  description: Name of the custom field template
                  example: Customer Priority
                resourceType:
                  type: string
                  description: Key of the resource type this template applies to
                  enum:
                    - user
                    - task
                    - entry
                  example: user
                required:
                  type: boolean
                  description: Whether this field is required
                  default: false
                  example: true
                status:
                  type: integer
                  description: Status of the template
                  example: 0
                fieldType:
                  type: string
                  description: Type of the custom field
                  enum:
                    - number
                    - string
                  example: number
                defaultValue:
                  type: string
                  nullable: true
                  description: Default value for the field (must match field type), must be provided if field is required
                  example: Medium
                fieldOptions:
                  type: array
                  nullable: true
                  description: Configuration options for the field
                  items:
                    type: object
                  example: []
            examples:
              Text Field Example:
                value:
                  name: Customer Notes
                  resourceType: user
                  required: false
                  status: 0
                  fieldType: string
                  defaultValue: ''
                  fieldOptions: []
              Required Number Field:
                value:
                  name: Priority Score
                  resourceType: task
                  required: true
                  status: 0
                  fieldType: number
                  defaultValue: '5'
                  fieldOptions: []
      responses:
        '200':
          description: Custom field template created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: ID of the created template
                      name:
                        type: string
                        description: Name of the template
                      resourceType:
                        type: string
                        description: Resource type
                      required:
                        type: boolean
                        description: Whether the field is required
                      status:
                        type: integer
                        description: Template status
                      fieldType:
                        type: string
                        description: Field type
                      defaultValue:
                        type: string
                        nullable: true
                        description: Default value
                      fieldOptions:
                        type: array
                        nullable: true
                        description: Field options
                        items:
                          type: object
              examples:
                Success Response:
                  value:
                    data:
                      id: 15
                      name: Customer Priority
                      resourceType: user
                      required: true
                      status: 1
                      fieldType: text
                      defaultValue: Medium
                      fieldOptions: []
        '400':
          description: Bad Request - Validation errors
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        message:
                          type: string
              examples:
                Validation Error:
                  value:
                    errors:
                      - field: name
                        message: This value should not be blank.
                      - field: fieldType
                        message: Choose a valid type
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/custom-fields/template/{templateId}/modify:
    put:
      summary: Modify Custom Field Template
      description: Modify Custom Field Template
      tags:
        - '[v3] Custom Fields'
      operationId: put-custom-fields-template-modify
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: templateId
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Name of the custom field template
                  example: Customer Priority
                required:
                  type: boolean
                  description: Whether this field is required
                  default: false
                  example: true
                status:
                  type: integer
                  description: Status of the template
                  example: 0
                defaultValue:
                  type: string
                  nullable: true
                  description: Default value for the field (must match field type), must be provided if field is required
                  example: Medium
                fieldOptions:
                  type: array
                  nullable: true
                  description: Configuration options for the field
                  items:
                    type: object
                  example: []
            examples:
              Text Field Example:
                value:
                  name: Customer Notes
                  required: false
                  status: 0
                  defaultValue: ''
                  fieldOptions: []
              Required Number Field:
                value:
                  name: Priority Score
                  required: true
                  status: 0
                  defaultValue: '5'
                  fieldOptions: []
      responses:
        '200':
          description: Custom field template modified successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: ID of the created template
                      name:
                        type: string
                        description: Name of the template
                      resourceType:
                        type: string
                        description: Resource type
                      required:
                        type: boolean
                        description: Whether the field is required
                      status:
                        type: integer
                        description: Template status
                      fieldType:
                        type: string
                        description: Field type
                      defaultValue:
                        type: string
                        nullable: true
                        description: Default value
                      fieldOptions:
                        type: array
                        nullable: true
                        description: Field options
                        items:
                          type: object
              examples:
                Success Response:
                  value:
                    data:
                      id: 15
                      name: Customer Priority
                      resourceType: user
                      required: true
                      status: 1
                      fieldType: text
                      defaultValue: Medium
                      fieldOptions: []
        '400':
          description: Bad Request - Validation errors
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        message:
                          type: string
              examples:
                Validation Error:
                  value:
                    errors:
                      - field: defaultValue
                        message: 'Value NULL is not valid for this field (Type: number, Required: true)'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/custom-fields/template/{templateId}/remove:
    delete:
      summary: Remove Custom Field Template
      description: Remove Custom Field Template
      tags:
        - '[v3] Custom Fields'
      operationId: delete-custom-fields-template-remove
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: templateId
      responses:
        '200':
          description: Custom field template removed successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: string
              examples:
                Success Response:
                  value:
                    data: ok
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/custom-fields/{templateId}/assign/{resourceId}:
    post:
      summary: Assign value to custom fields
      description: Assign value to custom fields
      tags:
        - '[v3] Custom Fields'
      operationId: post-custom-fields-resource-assign
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: templateId
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: resourceId
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - value
              properties:
                value:
                  type: string
                  description: New value for this custom field in a resource
                  example: In Progress
            examples:
              Assigned Value:
                value:
                  value: In Progress
      responses:
        '200':
          description: Custom field value assigned successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: Unique identifier for the custom field assignment
                        example: 66
                      resourceId:
                        type: integer
                        description: ID of the resource this custom field is assigned to
                        example: 610
                      resourceType:
                        type: string
                        description: Type of the resource
                        example: user
                      required:
                        type: boolean
                        description: Whether this custom field is required
                        example: true
                      value:
                        type: string
                        description: The assigned value for this custom field
                        example: In Progress
                      fieldType:
                        type: string
                        description: Type of the custom field
                        example: string
                      startDate:
                        type: string
                        format: date-time
                        description: Start date for the custom field assignment
                        example: '2025-07-08 10:45:15'
                      endDate:
                        type: string
                        format: date-time
                        nullable: true
                        description: End date for the custom field assignment (null means it's active value, date is for values in the past)
                        example: null
                      createdBy:
                        type: integer
                        description: ID of the user who created this assignment
                        example: 610
                      createdAt:
                        type: string
                        format: date-time
                        description: DateTime when the assignment was created
                        example: '2025-07-08 10:45:15'
                      updatedAt:
                        type: string
                        format: date-time
                        description: DateTime when the assignment was last updated
                        example: '2025-07-08 10:45:15'
              examples:
                Success Response:
                  value:
                    data:
                      id: 66
                      resourceId: 610
                      resourceType: user
                      required: true
                      value: In Progress
                      fieldType: string
                      startDate: '2025-07-08 10:45:15'
                      endDate: null
                      createdBy: 610
                      createdAt: '2025-07-08 10:45:15'
                      updatedAt: '2025-07-08 10:45:15'
        '400':
          description: Bad Request - Validation errors
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        message:
                          type: string
              examples:
                Validation Error:
                  value:
                    errors:
                      - field: value
                        message: 'Value NULL is not valid for this field (Type: number, Required: true)'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/custom-fields/{templateId}/unassign/{resourceId}:
    delete:
      summary: Unassign value from custom fields
      description: Unassign value from custom fields
      tags:
        - '[v3] Custom Fields'
      operationId: delete-custom-fields-resource-unassign
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: templateId
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: resourceId
      responses:
        '200':
          description: Custom field value was unassigned successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: Unique identifier for the custom field assignment
                        example: 66
                      resourceId:
                        type: integer
                        description: ID of the resource this custom field is assigned to
                        example: 610
                      resourceType:
                        type: string
                        description: Type of the resource
                        example: user
                      required:
                        type: boolean
                        description: Whether this custom field is required
                        example: true
                      value:
                        type: string
                        description: The assigned value for this custom field
                        example: In Progress
                      fieldType:
                        type: string
                        description: Type of the custom field
                        example: string
                      startDate:
                        type: string
                        format: date-time
                        description: Start date for the custom field assignment
                        example: '2025-07-08 10:45:15'
                      endDate:
                        type: string
                        format: date-time
                        nullable: true
                        description: End date for the custom field assignment (null means it's active value, date is for values in the past)
                        example: '2025-07-08 12:45:15'
                      createdBy:
                        type: integer
                        description: ID of the user who created this assignment
                        example: 610
                      createdAt:
                        type: string
                        format: date-time
                        description: DateTime when the assignment was created
                        example: '2025-07-08 10:45:15'
                      updatedAt:
                        type: string
                        format: date-time
                        description: DateTime when the assignment was last updated
                        example: '2025-07-08 10:45:15'
              examples:
                Success Response:
                  value:
                    data:
                      id: 66
                      resourceId: 610
                      resourceType: user
                      required: true
                      value: In Progress
                      fieldType: string
                      startDate: '2025-07-08 10:45:15'
                      endDate: '2025-07-08 12:45:15'
                      createdBy: 610
                      createdAt: '2025-07-08 10:45:15'
                      updatedAt: '2025-07-08 10:45:15'
        '400':
          description: Bad Request - Validation errors
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        message:
                          type: string
              examples:
                Validation Error:
                  value:
                    errors:
                      - field: value
                        message: 'Value NULL is not valid for this field (Type: number, Required: true)'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/custom-fields/{templateId}/value/{resourceId}:
    get:
      summary: Retrieve value for custom field in resource
      description: Retrieve value for custom field in resource
      tags:
        - '[v3] Custom Fields'
      operationId: get-custom-fields-resource-value
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: templateId
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: resourceId
      responses:
        '200':
          description: Value of the custom field
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: Unique identifier for the custom field assignment
                        example: 66
                      resourceId:
                        type: integer
                        description: ID of the resource this custom field is assigned to
                        example: 610
                      resourceType:
                        type: string
                        description: Type of the resource
                        example: user
                      required:
                        type: boolean
                        description: Whether this custom field is required
                        example: true
                      value:
                        type: string
                        description: The assigned value for this custom field
                        example: In Progress
                      fieldType:
                        type: string
                        description: Type of the custom field
                        example: string
                      startDate:
                        type: string
                        format: date-time
                        description: Start date for the custom field assignment
                        example: '2025-07-08 10:45:15'
                      endDate:
                        type: string
                        format: date-time
                        nullable: true
                        description: End date for the custom field assignment (null means it's active value, date is for values in the past)
                        example: null
                      createdBy:
                        type: integer
                        description: ID of the user who created this assignment
                        example: 610
                      createdAt:
                        type: string
                        format: date-time
                        description: DateTime when the assignment was created
                        example: '2025-07-08 10:45:15'
                      updatedAt:
                        type: string
                        format: date-time
                        description: DateTime when the assignment was last updated
                        example: '2025-07-08 10:45:15'
              examples:
                Success Response:
                  value:
                    data:
                      id: 66
                      resourceId: 610
                      resourceType: user
                      required: true
                      value: In Progress
                      fieldType: string
                      startDate: '2025-07-08 10:45:15'
                      endDate: null
                      createdBy: 610
                      createdAt: '2025-07-08 10:45:15'
                      updatedAt: '2025-07-08 10:45:15'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/custom-fields/values/resource/{resourceId}/type/{resourceType}:
    get:
      summary: Retrieve values for all custom fields in resource
      description: Retrieve values for all custom fields in resource
      tags:
        - '[v3] Custom Fields'
      operationId: get-custom-fields-resource-values
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
        - schema:
            type: string
            example: user
          in: path
          required: true
          name: resourceType
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: resourceId
      responses:
        '200':
          description: Custom Fields values for the resource
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      properties:
                        templateId:
                          type: integer
                          description: ID of the Custom Field template this value corresponds to
                          example: 66
                        name:
                          type: string
                          description: Name of the Custom Field Template
                          example: Client Status
                        resourceType:
                          type: string
                          description: Type of the resource
                          example: user
                        required:
                          type: boolean
                          description: Whether this custom field value is required
                          example: true
                        fieldType:
                          type: string
                          description: Type of the custom field
                          example: string
                        defaultValue:
                          type: string
                          description: Default value for this Custom Field if none was provided and field is required
                          example: In Progress
                        value:
                          type: string
                          description: The assigned value for this custom field (if field is required and there was no assignment yet it'll show defaultValue)
                          example: In Progress
              examples:
                Success Response:
                  value:
                    data:
                      - templateId: 66
                        name: Client Status
                        resourceType: user
                        required: true
                        fieldType: string
                        defaultValue: In Progress
                        value: In Progress
                      - templateId: 69
                        name: Progress
                        resourceType: user
                        required: false
                        fieldType: number
                        defaultValue: null
                        value: '75'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      x-internal: false
      security:
        - api_key_in_header: []
  /v3/data-export/exports:
    get:
      summary: Get exports
      description: Get exports
      tags:
        - '[v3] Data Export'
      operationId: get-data-export-exports
      parameters:
        - name: Accept
          in: header
          schema:
            type: string
            example: application/json
        - name: limit
          in: query
          schema:
            type: integer
            default: 100
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: sortBy
          in: query
          schema:
            type: string
            default: created_at
            enum:
              - created_at
              - id
        - name: sortOrder
          in: query
          schema:
            type: string
            default: desc
            enum:
              - desc
              - asc
      responses:
        '200':
          description: Data exports
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                  - pagination
                properties:
                  data:
                    type: object
                    required:
                      - id
                      - datasets
                      - file_format
                      - from
                      - to
                      - status
                    properties:
                      id:
                        type: integer
                        description: ID of data export
                      datasets:
                        type: array
                        description: Datasets of export
                        items:
                          type: string
                          enum:
                            - computer_activity
                        example:
                          - computer_activity
                      file_format:
                        type: string
                        description: Format of the exported file
                        enum:
                          - csv
                          - xls
                      from:
                        type: string
                        description: Start date of the export
                        example: '2022-01-01'
                      to:
                        type: string
                        description: End date of the export
                        example: '2022-12-31'
                      status:
                        type: string
                        description: Status of data export
                        enum:
                          - created
                          - pending
                          - processing
                          - failed
                          - completed
                          - unstable
                          - disabled
                  pagination:
                    type: object
                    required:
                      - totalItemQuantity
                      - page
                      - limit
                    properties:
                      totalItemQuantity:
                        type: integer
                        description: total count of items
                      page:
                        type: integer
                        description: current results page
                      limit:
                        type: integer
                        description: current limit on the page
              examples:
                Success response:
                  value:
                    data:
                      - id: 15
                        created_at: '2025-05-01 10:00:00'
                        datasets:
                          - computer_activity
                        file_format: csv
                        from: '2025-04-01 07:00:00'
                        to: '2025-04-30 20:00:00'
                        status: failed
                      - id: 16
                        created_at: '2025-05-01 10:00:00'
                        datasets:
                          - computer_activity
                        file_format: csv
                        from: '2025-03-01 07:00:00'
                        to: '2025-03-31 20:00:00'
                        status: pending
                    pagination:
                      totalItemQuantity: 20
                      page: 1
                      limit: 2
        '400':
          description: Invalid request
          content:
            application/json:
              examples:
                Validation error:
                  value:
                    message: Request validation failed
                    errors:
                      '0':
                        property: limit
                        message: Limit must be greater than 1
                      value: 0
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
          content:
            application/json:
              examples:
                Invalid permissions:
                  value:
                    message: You are not allowed to get exports
      security:
        - api_key_in_header: []
  /v3/data-export/open-exports:
    get:
      summary: Get open exports
      description: Get open exports
      tags:
        - '[v3] Data Export'
      operationId: get-data-export-open-exports
      parameters:
        - name: Accept
          in: header
          schema:
            type: string
            example: application/json
      responses:
        '200':
          description: Open data exports
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  data:
                    type: object
                    required:
                      - id
                      - status
                    properties:
                      id:
                        type: integer
                        description: ID of data export
                      status:
                        type: string
                        description: Status of data export
                        enum:
                          - created
                          - pending
                          - processing
              examples:
                Success response:
                  value:
                    data:
                      - id: 15
                        status: processing
                      - id: 16
                        status: pending
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
          content:
            application/json:
              examples:
                Invalid permissions:
                  value:
                    message: You are not allowed to get open exports
      security:
        - api_key_in_header: []
  /v3/data-export/export/{exportId}:
    get:
      summary: Get export by ID
      description: Get export by ID
      tags:
        - '[v3] Data Export'
      operationId: get-data-export-id
      parameters:
        - name: Accept
          in: header
          schema:
            type: string
            example: application/json
        - schema:
            type: integer
          name: exportId
          in: path
          required: true
      responses:
        '200':
          description: Data export
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - status
                properties:
                  id:
                    type: integer
                    description: ID of data export
                  status:
                    type: string
                    description: Status of data export
                    enum:
                      - created
                      - pending
                      - processing
                      - failed
                      - completed
                      - unstable
                      - disabled
              examples:
                Success response:
                  value:
                    id: 16
                    status: pending
        '400':
          description: Invalid request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - api_key_in_header: []
  /v3/data-export/dataset-availability:
    get:
      summary: Get list of dataset availability
      description: Get list of dataset availability
      tags:
        - '[v3] Data Export'
      operationId: get-dataset-availability
      parameters:
        - name: Accept
          in: header
          schema:
            type: string
            example: application/json
      responses:
        '200':
          description: List dataset availability
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  data:
                    type: array
                    items:
                      properties:
                        dataset:
                          type: string
                          enum:
                            - computer_activity
                            - time_entry
                        isAvailable:
                          type: boolean
        '401':
          description: Unauthorized
      security:
        - api_key_in_header: []
  /v3/export-request:
    post:
      summary: Create export request
      description: Create export request
      tags:
        - '[v3] Data Export'
      operationId: post-export-request
      parameters:
        - name: Accept
          in: header
          schema:
            type: string
            example: application/json
        - name: Content-Type
          in: header
          schema:
            type: string
            example: application/json
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - from
                - to
                - fileFormat
                - formatterType
                - datasets
              properties:
                from:
                  type: string
                  description: Start date of the export
                  example: '2022-01-01'
                to:
                  type: string
                  description: End date of the export
                  example: '2022-12-31'
                fileFormat:
                  type: string
                  description: Format of the exported file
                  enum:
                    - csv
                    - xlsx
                formatterType:
                  type: string
                  description: Formatter type
                  enum:
                    - default
                datasets:
                  type: array
                  description: Datasets to export
                  items:
                    type: string
                    enum:
                      - computer_activity
                      - time_entry
                  example:
                    - computer_activity
                filters:
                  type: array
                  description: Filters to apply to the export
                  items:
                    type: object
                    properties:
                      usePrivileges:
                        type: integer
                        description: Whether to use privileges
                        enum:
                          - 0
                          - 1
            examples:
              Export request:
                value:
                  from: '2025-01-01'
                  to: '2025-12-31'
                  fileFormat: csv
                  formatterType: default
                  datasets:
                    - computer_activity
                    - time_entry
      responses:
        '200':
          description: Export requested
          content:
            application/json:
              schema:
                type: object
                properties:
                  requestId:
                    type: integer
        '400':
          description: Invalid request
          content:
            application/json:
              examples:
                Invalid permissions:
                  value:
                    message: You are not allowed to create export for provided data sets
                Internal error:
                  value:
                    message: There was an internal error while trying to save this payload
                Validation error:
                  value:
                    message: Request validation failed
                    errors:
                      '0':
                        field: fileFormat
                        message: Choose a valid file format
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - api_key_in_header: []
  /v3/approval/{resourceId}:
    get:
      summary: Get approval
      description: Get approval by id
      tags:
        - '[v3] Approval'
      operationId: get-approval
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      approvalId:
                        type: integer
                      status:
                        type: integer
                      addTime:
                        type: string
                      approvalTime:
                        type: string
                      modificationTime:
                        type: string
                      approvedBy:
                        type: integer
                      from:
                        type: string
                      to:
                        type: string
                      userId:
                        type: integer
                      projects:
                        type: string
                      rootGroupId:
                        type: integer
                      auto:
                        type: string
                      approvedBy2:
                        type: integer
                      messages:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                            approvalId:
                              type: integer
                            userId:
                              type: integer
                            message:
                              type: string
                            event:
                              type: integer
                            addTime:
                              type: string
              examples:
                Example 1:
                  value:
                    data:
                      approvalId: 34523534
                      status: 0
                      addTime: '2025-06-09 00:00:00'
                      approvalTime: ''
                      modificationTime: ''
                      approvedBy: 0
                      from: '2025-06-09'
                      to: '2025-06-15'
                      userId: 364263
                      projects: ''
                      rootGroupId: 264933
                      auto: '0'
                      approvedBy2: 0
                      messages:
                        - id: 124234
                          approvalId: 34523534
                          userId: 2217515
                          message: My message
                          event: 0
                          addTime: '2025-06-09 00:00:00'
                        - id: 124235
                          approvalId: 34523534
                          userId: 2217515
                          message: My other message
                          event: 0
                          addTime: '2025-06-10 00:00:00'
        default:
          description: Default
      parameters:
        - schema:
            type: integer
            example: 254954325
          in: path
          required: true
          name: resourceId
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      security:
        - api_key_in_header: []
  /v3/approval/list:
    post:
      summary: List approval
      description: Get approval list by filters
      tags:
        - '[v3] Approval'
      operationId: list-approval
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - from
                - to
              properties:
                from:
                  type: string
                  description: Date of start
                  example: '2025-06-09'
                to:
                  type: string
                  description: Date of end
                  example: '2025-06-15'
                userIds:
                  type: array
                  description: List of user IDs to filter
                  example: []
                statuses:
                  type: array
                  description: List of approval statuses to filter
                  enum:
                    - 0
                    - 1
                    - 2
                    - 3
                    - 5
                    - 6
                    - 7
                  example: []
                page:
                  type: integer
                  description: Page number for pagination
                  example: 1
                limit:
                  type: integer
                  description: Number of items per page
                  example: 25
            examples:
              Example:
                value:
                  from: '2025-06-09'
                  to: '2025-06-15'
                  userIds:
                    - 23145
                  statuses: []
                  page: 1
                  limit: 25
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        approvalId:
                          type: integer
                        status:
                          type: integer
                        addTime:
                          type: string
                        approvalTime:
                          type: string|null
                        modificationTime:
                          type: string|null
                        approvedBy:
                          type: integer
                        from:
                          type: string
                        to:
                          type: string
                        userId:
                          type: integer
                        projects:
                          type: string
                        rootGroupId:
                          type: integer
                        auto:
                          type: string
                        approvedBy2:
                          type: integer
                        totalTime:
                          type: integer
                  pagination:
                    type: object
                    properties:
                      page:
                        type: integer
                      totalPages:
                        type: integer
              examples:
                Example 1:
                  value:
                    data:
                      - approvalId: 34523534
                        status: 0
                        addTime: '2025-06-09 00:00:00'
                        approvalTime: ''
                        modificationTime: '2025-06-10 15:24:33'
                        approvedBy: 0
                        from: '2025-06-09'
                        to: '2025-06-15'
                        userId: 364263
                        projects: ''
                        rootGroupId: 264933
                        auto: '0'
                        approvedBy2: 0
                        totalTime: 1231
                    pagination:
                      page: 1
                      totalPages: 5
        default:
          description: Default
      security:
        - api_key_in_header: []
  /v3/approval/{id}/change-status:
    put:
      summary: Change status of approval
      description: Change status of approval
      tags:
        - '[v3] Approval'
      operationId: change-approval-status
      parameters:
        - schema:
            type: string
            example: '74356654'
          name: id
          in: path
          required: true
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - status
              properties:
                status:
                  type: integer
                  description: |
                    New status:

                    0 - Open

                    1 - Approved

                    2 - Pending

                    3 - Rejected
                  example: 1
                message:
                  type: string
                  description: Comment send in mail
                  example: this is message
            examples:
              Example:
                value:
                  status: 1
                  message: this is message
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        approvalId:
                          type: integer
                        status:
                          type: integer
                        modificationTime:
                          type: string
                        approvedBy:
                          type: integer
                        approvedBy2:
                          type: integer
              examples:
                Example 1:
                  value:
                    data:
                      - approvalId: 34523534
                        status: 0
                        modificationTime: '2025-06-09 00:00:00'
                        approvedBy: 234522
                        approvedBy2: 0
        default:
          description: Default
      security:
        - api_key_in_header: []
  /v3/approval/bulk-change-status:
    put:
      summary: Bulk change status of approval
      description: Bulk change status of approval
      tags:
        - '[v3] Approval'
      operationId: bulk-change-approval-status
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - approvalIds
                - status
              properties:
                approvalIds:
                  type: array
                  description: Array of approval ids
                  example:
                    - 34523534
                    - 34535345
                status:
                  type: integer
                  description: |
                    New status:

                    0 - Open

                    1 - Approved

                    2 - Pending

                    3 - Rejected
                  example: 1
            examples:
              Example:
                value:
                  status: 1
                  approvalIds:
                    - 34523534
                    - 34535345
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      bulkItemsChanged:
                        type: array
                        items:
                          type: object
                          properties:
                            approvalId:
                              type: integer
                            status:
                              type: integer
                            modificationTime:
                              type: string
                            approvedBy:
                              type: integer
                            approvedBy2:
                              type: integer
              examples:
                Example 1:
                  value:
                    data:
                      bulkItemsChanged:
                        - approvalId: 34523534
                          status: 1
                          modificationTime: '2025-06-09 00:00:00'
                          approvedBy: 234522
                          approvedBy2: 0
                        - approvalId: 34535345
                          status: 1
                          modificationTime: '2025-06-09 00:00:00'
                          approvedBy: 234522
                          approvedBy2: 0
        default:
          description: Default
      security:
        - api_key_in_header: []
  /v3/approval/{id}/activities:
    post:
      summary: List approval activities
      description: Get approval activities by filters
      tags:
        - '[v3] Approval'
      operationId: approval-activity-list
      parameters:
        - schema:
            type: string
            example: '74356654'
          name: id
          in: path
          required: true
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: integer
                  description: Page number for pagination
                  example: 1
                limit:
                  type: integer
                  description: Number of items per page
                  example: 25
            examples:
              Example:
                value:
                  page: 1
                  limit: 25
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                        actionTime:
                          type: string
                        userId:
                          type: integer
                        approvalId:
                          type: integer
                        activity:
                          type: string
                  pagination:
                    type: object
                    properties:
                      page:
                        type: integer
                      totalPages:
                        type: integer
              examples:
                Example 1:
                  value:
                    data:
                      - id: 123
                        actionTime: '2025-06-09 00:00:00'
                        userId: 364263
                        approvalId: 456789
                        activity: '0'
                    pagination:
                      page: 1
                      totalPages: 5
        default:
          description: Default
      security:
        - api_key_in_header: []
  /v3/approval/{id}/create-message:
    post:
      summary: Create approval message
      description: Create approval message
      tags:
        - '[v3] Approval'
      operationId: create-approval-message
      parameters:
        - schema:
            type: string
            example: '74356654'
          name: id
          in: path
          required: true
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - from
                - to
              properties:
                message:
                  type: string
                  description: message
                  example: this is example message
                event:
                  type: integer
                  description: |
                    0 - Open

                    1 - Approved

                    2 - Pending

                    3 - Rejected
                  enum:
                    - 0
                    - 1
                    - 2
                    - 3
                  example: 2
            examples:
              Example:
                value:
                  message: some message
                  event: 2
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                      approvalId:
                        type: integer
                      userId:
                        type: integer
                      message:
                        type: string
                      event:
                        type: integer
                      addTime:
                        type: string
              examples:
                Example 1:
                  value:
                    data:
                      - id: 1323435
                        approvalId: 34523534
                        userId: 2346445
                        message: some message
                        event: 2
                        addTime: '2025-06-09 00:00:00'
        default:
          description: Default
      security:
        - api_key_in_header: []
  /v3/approval/send-reminder:
    post:
      summary: Send reminder
      description: Send reminder
      tags:
        - '[v3] Approval'
      operationId: send-reminder
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - approvalIds
              properties:
                approvalIds:
                  type: array
                  description: Array of approval ids
                  example:
                    - 34523534
                    - 34535345
                message:
                  type: string
                  description: Comment send in mail
                  example: this is message
            examples:
              Example:
                value:
                  approvalIds:
                    - 34523534
                    - 34535345
                  message: this is message
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ok
              examples:
                Example 1:
                  value:
                    message: ok
        default:
          description: Default
      security:
        - api_key_in_header: []
  /v3/taskPicker/favourites:
    get:
      summary: List of favorite tasks
      tags:
        - '[v3] Task Picker'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      favourites:
                        type: array
                        items:
                          $ref: '#/components/schemas/TaskPicker-favourite-list-response'
                      suggested:
                        type: array
                  message:
                    type: string
                  meta:
                    type: object
                    properties:
                      favourites:
                        type: object
                        properties:
                          limit:
                            type: integer
              examples:
                Example 1:
                  value:
                    data:
                      favourites:
                        - taskId: 123456
                          name: My task
                          parentId: 98765
                          level: 3
                          note: my note
                          rootGroupId: integer
                          archived: 0
                          billable: false,
                          color: '#4DC2E8'
                          hasChildren: false
                          disabled: false
                          disableReason: ''
                          isMatched: true
                      suggested: []
                    message: ok
                    meta:
                      favourites:
                        limit: 10
          headers: {}
      operationId: get-task-picker-favourite-list
      security:
        - api_key_in_header: []
  /v3/taskPicker/favourites/add/{taskId}:
    post:
      summary: Add task to favorite tasks list
      tags:
        - '[v3] Task Picker'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      favourites:
                        type: array
                        items:
                          $ref: '#/components/schemas/TaskPicker-favourite-list-response'
                      suggested:
                        type: array
                  message:
                    type: string
                  meta:
                    type: object
                    properties:
                      favourites:
                        type: object
                        properties:
                          limit:
                            type: integer
              examples:
                Example 1:
                  value:
                    data:
                      favourites:
                        - taskId: 123456
                          name: My task
                          parentId: 98765
                          level: 3
                          note: my note
                          rootGroupId: integer
                          archived: 0
                          billable: false,
                          color: '#4DC2E8'
                          hasChildren: false
                          disabled: false
                          disableReason: ''
                          isMatched: true
                      suggested: []
                    message: ok
                    meta:
                      favourites:
                        limit: 10
          headers: {}
      operationId: post-task-picker-favourite-add
      security:
        - api_key_in_header: []
      parameters:
        - schema:
            type: integer
            example: 123456
          name: taskId
          in: path
          required: true
  /v3/taskPicker/favourites/delete/{taskId}:
    delete:
      summary: Delete task from favorite tasks list
      tags:
        - '[v3] Task Picker'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      favourites:
                        type: array
                        items:
                          $ref: '#/components/schemas/TaskPicker-favourite-list-response'
                      suggested:
                        type: array
                  message:
                    type: string
                  meta:
                    type: object
                    properties:
                      favourites:
                        type: object
                        properties:
                          limit:
                            type: integer
              examples:
                Example 1:
                  value:
                    data:
                      favourites:
                        - taskId: 123456
                          name: My task
                          parentId: 98765
                          level: 3
                          note: my note
                          rootGroupId: integer
                          archived: 0
                          billable: false,
                          color: '#4DC2E8'
                          hasChildren: false
                          disabled: false
                          disableReason: ''
                          isMatched: true
                      suggested: []
                    message: ok
                    meta:
                      favourites:
                        limit: 10
          headers: {}
      operationId: delete-task-picker-favourite-delete
      security:
        - api_key_in_header: []
      parameters:
        - schema:
            type: integer
            example: 123456
          name: taskId
          in: path
          required: true
  /v3/projects:
    post:
      summary: List projects tree
      description: List projects tree
      tags:
        - '[v3] Projects'
      operationId: projects-list
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - parentId
                - status
              properties:
                parentId:
                  type: integer
                  description: Parent ID to search (0 for root task)
                  example: 0
                status:
                  type: string
                  description: Filter tasks by status
                  enum:
                    - all
                    - active
                  example: active
                context:
                  type: string
                  description: Project tree context
                  enum:
                    - invoice
                    - time_tracking
                    - reports
                    - edit_settings
                    - create_subtask
                  default: reports
                  example: time_tracking
                include:
                  type: array
                  description: List of additional fields to include. The users field contains active assigned users only.
                  enum:
                    - color
                    - users
                    - groups
                    - last_used
                  example:
                    - color
                    - users
                page:
                  type: integer
                  description: Page number for pagination
                  example: 1
                limit:
                  type: integer
                  description: Number of items per page
                  example: 25
            examples:
              Example:
                value:
                  parentId: 0
                  status: active
                  context: reports
                  include:
                    - color
                    - users
                  page: 1
                  limit: 25
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      $ref: '#/components/schemas/Projects-item'
                  pagination:
                    type: object
                    properties:
                      page:
                        type: integer
                      totalPages:
                        type: integer
              examples:
                Example 1:
                  value:
                    data:
                      - taskId: 34523534
                        name: Calendars
                        parentId: 0
                        level: 1
                        note: Personal calendars
                        rootGroupId: 66
                        archived: 0
                        billable: true
                        hasChildren: false
                        children: []
                        disabled: false
                        disableReason: ''
                    pagination:
                      page: 1
                      totalPages: 5
        default:
          description: Default
      security:
        - api_key_in_header: []
  /v3/projects/search:
    post:
      summary: Search in projects tree
      description: Search in projects tree
      tags:
        - '[v3] Projects'
      operationId: projects-search
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - status
              properties:
                searchText:
                  type: string
                  description: Phrase to search for. At least one of `searchText` or `userIds` is required.
                  minLength: 2
                  example: searching for this
                userIds:
                  type: array
                  description: User IDs directly assigned to returned projects. At least one of `searchText` or `userIds` is required.
                  minItems: 1
                  maxItems: 500
                  items:
                    type: integer
                  example:
                    - 123
                    - 456
                status:
                  type: string
                  description: Filter tasks by status
                  enum:
                    - all
                    - active
                  example: active
                context:
                  type: string
                  description: Project tree context
                  enum:
                    - invoice
                    - time_tracking
                    - reports
                    - edit_settings
                    - create_subtask
                  default: reports
                  example: time_tracking
                include:
                  type: array
                  description: List of additional fields to include
                  items:
                    type: string
                    enum:
                      - color
                      - users
                      - groups
                      - last_used
                  example:
                    - color
                    - users
            examples:
              Example:
                value:
                  status: active
                  searchText: searching for this
                  context: reports
                  include:
                    - color
                    - users
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      $ref: '#/components/schemas/Projects-item'
                  meta:
                    type: object
                  searchInfo:
                    type: object
                    properties:
                      items:
                        type: integer
                      total:
                        type: integer
              examples:
                Example 1:
                  value:
                    data:
                      - taskId: 34523534
                        name: Calendars
                        parentId: 0
                        level: 1
                        note: Personal calendars
                        rootGroupId: 66
                        archived: 0
                        billable: true
                        hasChildren: false
                        children: []
                        disabled: false
                        disableReason: ''
                        isMatching: true
                    meta: {}
                    searchInfo:
                      items: 1
                      total: 5
        default:
          description: Default
      security:
        - api_key_in_header: []
  /v3/projects/{taskId}/assigned-users:
    get:
      summary: List assigned users for project task
      description: Returns active users assigned to a task, including inherited assignments metadata.
      tags:
        - '[v3] Projects'
      operationId: projects-assigned-users
      parameters:
        - schema:
            type: integer
            example: 34523534
          in: path
          required: true
          name: taskId
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        userId:
                          type: integer
                        displayName:
                          type: string
                        email:
                          type: string
                        roleId:
                          type: integer
                        taskId:
                          type: integer
                          nullable: true
                  meta:
                    type: object
                    properties:
                      roles:
                        type: array
                        items:
                          type: object
                          properties:
                            roleId:
                              type: integer
                            name:
                              type: string
                            sort:
                              type: integer
                      tasks:
                        type: array
                        items:
                          type: object
                          properties:
                            taskId:
                              type: integer
                            name:
                              type: string
              examples:
                Example 1:
                  value:
                    data:
                      - userId: 364263
                        displayName: John Smith
                        email: john.smith@example.com
                        roleId: 2
                        taskId: null
                      - userId: 364264
                        displayName: Jane Doe
                        email: jane.doe@example.com
                        roleId: 3
                        taskId: 123456
                    meta:
                      roles:
                        - roleId: 2
                          name: Manager
                          sort: 10
                        - roleId: 3
                          name: Member
                          sort: 20
                      tasks:
                        - taskId: 123456
                          name: Parent task
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example 1:
                  value:
                    message: You are not allowed to use this endpoint.
      security:
        - api_key_in_header: []
  /v3/projects/{taskId}/assign:
    put:
      summary: Assign users to project task
      description: Assigns one or more users to the selected project task with the provided project role.
      tags:
        - '[v3] Projects'
      operationId: projects-assign-users
      parameters:
        - schema:
            type: integer
            example: 34523534
          in: path
          required: true
          name: taskId
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - userIds
                - roleId
              properties:
                userIds:
                  type: array
                  description: List of user IDs to assign to the task.
                  minItems: 1
                  items:
                    type: integer
                    minimum: 1
                roleId:
                  type: integer
                  description: Project role ID to assign to all listed users.
                  minimum: 1
            examples:
              Example 1:
                value:
                  userIds:
                    - 364263
                    - 364264
                  roleId: 3
      responses:
        '200':
          description: Users assigned successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: string
                    example: ok
              examples:
                Example 1:
                  value:
                    data: ok
        '400':
          description: Bad request or exposed business error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  message_code:
                    type: string
                  message_params:
                    type: object
                    additionalProperties: true
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        property:
                          type: string
                        message:
                          type: string
              examples:
                Validation error:
                  value:
                    message: Request validation failed
                    errors:
                      - property: userIds
                        message: This value should not be blank.
                User does not exist:
                  value:
                    message: At least one of users provided in payload does not exist
                    message_code: projects.error.user_does_not_exist
                    message_params: []
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  message_code:
                    type: string
                  message_params:
                    type: object
                    additionalProperties: true
              examples:
                No endpoint access:
                  value:
                    message: You are not allowed to use this endpoint.
                Access to task denied:
                  value:
                    message: You have no rights in task 34523534
                    message_code: projects.error.assign.access_to_task_denied
                    message_params:
                      task_id: 34523534
                Role higher than owned:
                  value:
                    message: You can not set role 4 as this role is higher than your own
                    message_code: projects.error.assign.permission_higher_than_owned
                    message_params:
                      role_id: 4
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example 1:
                  value:
                    message: An unspecified error occurred.
      security:
        - api_key_in_header: []
  /v3/projects/{taskId}/unassign:
    put:
      summary: Unassign users from project task
      description: Removes direct user assignments from the selected project task.
      tags:
        - '[v3] Projects'
      operationId: projects-unassign-users
      parameters:
        - schema:
            type: integer
            example: 34523534
          in: path
          required: true
          name: taskId
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - userIds
              properties:
                userIds:
                  type: array
                  description: List of user IDs to unassign from the task.
                  minItems: 1
                  items:
                    type: integer
                    minimum: 1
            examples:
              Example 1:
                value:
                  userIds:
                    - 364263
                    - 364264
      responses:
        '200':
          description: Users unassigned successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: string
                    example: ok
              examples:
                Example 1:
                  value:
                    data: ok
        '400':
          description: Bad request or exposed business error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  message_code:
                    type: string
                  message_params:
                    type: object
                    additionalProperties: true
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        property:
                          type: string
                        message:
                          type: string
              examples:
                Validation error:
                  value:
                    message: Request validation failed
                    errors:
                      - property: userIds
                        message: This value should not be blank.
                User does not exist:
                  value:
                    message: At least one of users provided in payload does not exist
                    message_code: projects.error.user_does_not_exist
                    message_params: []
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  message_code:
                    type: string
                  message_params:
                    type: object
                    additionalProperties: true
              examples:
                No endpoint access:
                  value:
                    message: You are not allowed to use this endpoint.
                Access to task denied:
                  value:
                    message: You have no rights in task 34523534
                    message_code: projects.error.assign.access_to_task_denied
                    message_params:
                      task_id: 34523534
                Cannot override role:
                  value:
                    message: Cannot override role for user John Smith
                    message_code: projects.error.assign.cannot_override_role_for_user
                    message_params:
                      user_display_name: John Smith
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example 1:
                  value:
                    message: An unspecified error occurred.
      security:
        - api_key_in_header: []
  /v3/attendance/predefined-days/{groupId}:
    get:
      summary: Predefined Days Assigned To Group [beta]
      description: 'List of all predefined days assigned directly to given group. Note: This is a beta version.'
      tags:
        - '[v3] Attendance'
      operationId: attendance-predefined-days
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: groupId
      responses:
        '200':
          description: List of all predefined days assigned directly to given group
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      properties:
                        id:
                          type: integer
                          description: ID of the assignment
                        groupId:
                          type: integer
                          description: ID of the group day is assigned to
                        date:
                          type: string
                          description: Date
                        dateTypeId:
                          type: integer
                          description: Id of the day type
                        dayTypeSlug:
                          type: string
                          description: String identifier of the day type
              examples:
                Success Response:
                  value:
                    data:
                      - id: 15
                        groupId: 66
                        date: '2026-01-01'
                        dayTypeId: 12
                        dayTypeSlug: holidays
                      - id: 16
                      - groupId: 66
                      - date: '2026-01-06'
                      - dayTypeId: 9
                      - dayTypeSlug: remote_work
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      security:
        - api_key_in_header: []
  /v3/attendance/predefined-days/{groupId}/effective:
    get:
      summary: Effective Predefined Days Assigned To Group [beta]
      description: 'List of all day types assigned to a group along with inheritance from parent groups. Note: This is a beta version.'
      tags:
        - '[v3] Attendance'
      operationId: attendance-effective-predefined-days
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: groupId
      responses:
        '200':
          description: List of all day types assigned to a group along with inheritance from parent groups
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      properties:
                        id:
                          type: integer
                          description: ID of the assignment
                        groupId:
                          type: integer
                          description: ID of the group day was assigned to (if different than ID in path assignment was inherited)
                        date:
                          type: string
                          description: Date
                        dateTypeId:
                          type: integer
                          description: Id of the day type
                        dayTypeSlug:
                          type: string
                          description: String identifier of the day type
              examples:
                Success Response:
                  value:
                    data:
                      - id: 15
                        groupId: 66
                        date: '2026-01-01'
                        dayTypeId: 12
                        dayTypeSlug: holidays
                      - id: 16
                      - groupId: 420
                      - date: '2026-01-06'
                      - dayTypeId: 9
                      - dayTypeSlug: remote_work
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      security:
        - api_key_in_header: []
  /v3/attendance/predefined-days/create:
    post:
      summary: Create Predefined Days [beta]
      description: 'Create predefined days for a group. Note: This is a beta version.'
      tags:
        - '[v3] Attendance'
      operationId: attendance-predefined-days-create
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - dayType
                - dates
                - groupId
              properties:
                dayType:
                  type: string
                  description: String identifier of the day type to assign
                  example: holidays
                dates:
                  type: array
                  description: List of dates to assign
                  example:
                    - '2026-01-01'
                    - '2026-01-06'
                groupId:
                  type: integer
                  description: ID of the group for the assignment
                  example: 66
      responses:
        '200':
          description: Dates assignment was completed
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: string
              examples:
                Success Response:
                  value:
                    data: ok
        '400':
          description: Bad Request - Validation errors
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      security:
        - api_key_in_header: []
  /v3/attendance/predefined-days/{groupId}/remove/{date}:
    delete:
      summary: Remove Predefined Day [beta]
      description: 'Remove predefined day from a group. Note: This is a beta version.'
      tags:
        - '[v3] Attendance'
      operationId: attendance-predefined-days-remove
      parameters:
        - schema:
            type: string
            example: application/json
          in: header
          name: Accept
        - schema:
            type: string
            example: application/json
          in: header
          name: Content-Type
        - schema:
            type: integer
            example: 1
          in: path
          required: true
          name: groupId
        - schema:
            type: string
            example: '2026-01-29'
          in: path
          required: true
          name: date
      responses:
        '200':
          description: Dates assignment removal was completed
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: string
              examples:
                Success Response:
                  value:
                    data: ok
        '400':
          description: Bad Request - Validation errors
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      security:
        - api_key_in_header: []
  /v3/attendance/calendar/search:
    post:
      summary: Attendance calendar search [beta]
      description: 'Returns attendance calendar data for users in a date range. Note: This is a beta version.'
      tags:
        - '[v3] Attendance'
      operationId: attendance-calendar-search
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                periodStart:
                  type: string
                  format: date
                  example: '2025-03-01'
                periodEnd:
                  type: string
                  format: date
                  example: '2025-03-07'
                userIds:
                  type: array
                  items:
                    type: integer
                includeDisabled:
                  type: boolean
                  default: false
              required:
                - periodStart
                - periodEnd
      responses:
        '200':
          description: Calendar data
          content:
            application/json:
              schema:
                type: object
                properties:
                  meta:
                    type: object
                    properties:
                      users:
                        type: object
                        additionalProperties:
                          type: object
                          properties:
                            id:
                              type: integer
                            email:
                              type: string
                            displayName:
                              type: string
                      dayTypes:
                        type: object
                        additionalProperties:
                          type: object
                          properties:
                            id:
                              type: integer
                            name:
                              type: string
                            slug:
                              type: string
                  data:
                    type: object
                    additionalProperties:
                      type: object
                      additionalProperties:
                        type: object
                        properties:
                          date:
                            type: string
                            format: date
                            description: Date in ISO format (Y-m-d)
                          dayTypeId:
                            type: integer
                            description: ID of the day type
                          shouldBe:
                            type: integer
                            description: Expected work time in minutes
                          vacationTime:
                            type: integer
                            description: Vacation time in minutes
                          note:
                            type: string
                            description: Optional note for the day
                          workStartTime:
                            type: string
                            description: Work start time (HH:mm:ss)
                          workEndTime:
                            type: string
                            description: Work end time (HH:mm:ss)
                          workTime:
                            type: string
                            description: Total work time in minutes
                          requestStatus:
                            type: string
                            nullable: true
                            description: Attendance request status (e.g., "pending", "approved", "rejected") or null if no request
                          pendingDayTypeId:
                            type: integer
                            nullable: true
                            description: ID of the day type from the pending attendance request or null if there is no pending request
                          hasRequestHistory:
                            type: integer
                            description: Whether attendance record exists (was modified) - 0 or 1
                          isAttendanceApproved:
                            type: integer
                            description: Whether attendance is approved - 0 or 1
              examples:
                Success Response:
                  value:
                    meta:
                      users:
                        '123':
                          id: 123
                          email: user@example.com
                          displayName: Test User
                      dayTypes:
                        '1':
                          id: 1
                          name: Normal
                          slug: normal
                    data:
                      '123':
                        '2025-03-01':
                          date: '2025-03-01'
                          dayTypeId: 1
                          shouldBe: 480
                          vacationTime: 0
                          note: ''
                          workStartTime: '08:00:00'
                          workEndTime: '16:00:00'
                          workTime: '480'
                          requestStatus: pending
                          pendingDayTypeId: 5
                          hasRequestHistory: 1
                          isAttendanceApproved: 0
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
        - api_key_in_header: []
  /attendance-request/has-pending:
    get:
      summary: Has Pending Attendance Requests [beta]
      description: 'Checks if the current user has any pending attendance requests to process. Note: This is a beta version.'
      tags:
        - '[v3] Attendance Requests'
      operationId: attendance-requests-has-pending
      responses:
        '200':
          description: Returns information whether the user has pending attendance requests.
          content:
            application/json:
              schema:
                type: object
                properties:
                  has_pending:
                    type: boolean
                    description: True if there are pending requests, false otherwise.
              examples:
                Success Response:
                  value:
                    has_pending: true
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: unauthorized
      security:
        - api_key_in_header: []
  /attendance-request:
    post:
      summary: Create attendance request [beta]
      tags:
        - '[v3] Attendance'
      description: |
        Creates an attendance request for a specified user and date.
        The request can be created by the user themselves or by an administrator/supervisor for another user.
        Depending on permissions and day type settings, the request may be auto-approved or require manual approval.
        Note: This is a beta version.
      operationId: post-attendance-request
      x-internal: false
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - targetUserId
                - date
                - dayTypeId
                - shouldBe
                - vacationHours
              properties:
                targetUserId:
                  type: integer
                  description: ID of the user for whom the attendance request is created
                  example: 123
                date:
                  type: string
                  format: date
                  pattern: ^\d{4}-\d{2}-\d{2}$
                  description: Date in YYYY-MM-DD format
                  example: '2026-03-20'
                dayTypeId:
                  type: integer
                  description: ID of the day type (must exist in the user's root group)
                  example: 5
                shouldBe:
                  type: integer
                  minimum: 0
                  description: Expected time for this day in minutes (e.g., 480 = 8 hours)
                  example: 480
                vacationHours:
                  type: integer
                  minimum: 0
                  description: Time to deduct from vacation limit in minutes
                  example: 0
                note:
                  type: string
                  description: Optional note for the request
                  example: Vacation request
                  nullable: true
                eraseComputerActivities:
                  type: boolean
                  description: Whether to erase computer activities for this day. Requires allowErasingData setting enabled for the root group.
                  example: false
                  default: false
            examples:
              Example - Vacation request:
                value:
                  targetUserId: 123
                  date: '2026-03-20'
                  dayTypeId: 5
                  shouldBe: 480
                  vacationHours: 480
                  note: Annual vacation
                  eraseComputerActivities: false
              Example - Sick leave:
                value:
                  targetUserId: 123
                  date: '2026-03-21'
                  dayTypeId: 3
                  shouldBe: 480
                  vacationHours: 0
                  note: Medical appointment
                  eraseComputerActivities: false
              Example - Sick leave with erase:
                value:
                  targetUserId: 123
                  date: '2026-03-22'
                  dayTypeId: 3
                  shouldBe: 480
                  vacationHours: 0
                  note: Medical appointment
                  eraseComputerActivities: true
      responses:
        '201':
          description: Attendance request created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    description: ID of the created request
                  user_id:
                    type: integer
                    description: ID of the user
                  date:
                    type: string
                    format: date
                    description: Date of the request
                  day_type_id:
                    type: integer
                    description: ID of the day type
                  status:
                    type: string
                    enum:
                      - pending
                      - approved
                      - rejected
                    description: Status of the request
                  time:
                    type: integer
                    description: Expected time in minutes
                  vacation_time:
                    type: integer
                    description: Vacation time in minutes
                  note:
                    type: string
                    description: Request note
                  erase_computer_activities:
                    type: boolean
                    description: Whether computer activities should be erased. Only included in response if allowErasingData setting is enabled for the root group.
                  processed_by:
                    type: integer
                    nullable: true
                    description: ID of the user who processed the request (null if pending)
              examples:
                Auto-approved request:
                  value:
                    id: 456
                    user_id: 123
                    date: '2026-03-20'
                    day_type_id: 5
                    status: approved
                    time: 480
                    vacation_time: 480
                    note: Annual vacation
                    erase_computer_activities: false
                    processed_by: 123
                Pending request:
                  value:
                    id: 457
                    user_id: 123
                    date: '2026-03-21'
                    day_type_id: 3
                    status: pending
                    time: 480
                    vacation_time: 0
                    note: Medical appointment
                    erase_computer_activities: false
                    processed_by: null
        '400':
          description: Bad request - validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error message
              examples:
                Invalid date format:
                  value:
                    message: Date must be in YYYY-MM-DD format
                Invalid day type:
                  value:
                    message: Day type does not exist in this group.
                Erasing not allowed:
                  value:
                    message: Erasing computer activities is not allowed for this user.
        '401':
          description: Unauthorized - user not authenticated
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example:
                  value:
                    message: Unauthorized
        '403':
          description: Forbidden - user does not have permission to create this request
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example:
                  value:
                    message: You do not have permission to create this attendance request.
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example:
                  value:
                    message: An unspecified error occurred.
      security:
        - api_key_in_header: []
components:
  schemas:
    Expense-category-request:
      type: object
      x-examples:
        Example 1:
          name: My category
          color: '#4DC2E8'
          unitPrice: 1000
          unitName: my unit
          currencyId: 2
      x-internal: false
      title: Expense-category request
      x-tags:
        - Expense
      properties:
        name:
          type: string
        color:
          type: string
        unitPrice:
          type: integer
          nullable: true
        unitName:
          type: string
          nullable: true
        currencyId:
          type: integer
      required:
        - name
        - color
        - currencyId
    Expense-category-response:
      type: object
      x-examples:
        Example 1:
          id: 53
          name: My category
          color: '#4DC2E8'
          unitPrice: 1000
          unitName: my unit
          currencyId: 2
          createdAt: '2023-09-07 12:26:34'
          updatedAt: null
      properties:
        id:
          type: integer
        name:
          type: string
        color:
          type: string
        unitPrice:
          type: integer
          nullable: true
        unitName:
          type: string
          nullable: true
        currencyId:
          type: integer
        createdAt:
          type: string
        updatedAt:
          type: string
          nullable: true
      x-internal: false
      title: Expense-category response
      x-tags:
        - Expense
    Expense-response:
      type: object
      x-examples:
        Example 1:
          message: ok
          data:
            id: 74
            currencyId: 2
            expenseCategory:
              id: 53
              name: My category
              color: '#4DC2E8'
              unitPrice: 1000
              unitName: my unit
              currencyId: 2
              createdAt: '2023-09-07 12:26:34'
              updatedAt: null
            taskId: 512
            amount: 2522
            description: My description...
            status: 0
            isBillable: true
            invoiceId: null
            madeBy: 256
            madeAt: '2023-09-12 10:32:22'
            createdBy: 256
            updatedBy: 256
            createdAt: '2023-10-21 09:41:33'
            updatedAt: '2023-10-21 09:41:41'
      x-internal: false
      properties:
        id:
          type: integer
        currencyId:
          type: integer
        expenseCategory:
          $ref: '#/components/schemas/Expense-category-response'
        taskId:
          type: integer
        amount:
          type: integer
        description:
          type: string
          nullable: true
        status:
          type: integer
        isBillable:
          type: boolean
        invoiceId:
          type: integer
          nullable: true
        madeBy:
          type: integer
        madeAt:
          type: string
        createdBy:
          type: integer
        updatedBy:
          type: integer
          nullable: true
        createdAt:
          type: string
        updatedAt:
          type: string
          nullable: true
    Expense-request:
      type: object
      x-examples:
        Example 1:
          currencyId: 2
          expenseCategoryId: '50'
          taskId: 512
          amount: 2522
          description: My description...
          isBillable: true
          madeBy: 256
          madeAt: '2023-09-12 10:32:22'
      title: Expense request
      x-internal: false
      properties:
        currencyId:
          type: integer
        expenseCategoryId:
          type: integer
        taskId:
          type: integer
        amount:
          type: integer
        description:
          type: string
        isBillable:
          type: boolean
        madeBy:
          type: integer
        madeAt:
          type: string
      required:
        - currencyId
        - expenseCategoryId
        - taskId
        - amount
        - isBillable
        - madeBy
        - madeAt
      x-tags:
        - Expense
    Attachment:
      type: object
      properties:
        id:
          type: integer
        userFilename:
          type: string
        mimeType:
          type: string
        url:
          type: string
      x-examples:
        Example 1:
          id: 14
          userFilename: 02.pdf
          mimeType: application/pdf
          url: /internal/api/v3/storage/download/14
      x-internal: false
      x-tags:
        - Expense
    TaskPicker-favourite-list-response:
      type: object
      x-examples:
        Example 1:
          data:
            favourites:
              - taskId: 123456
                name: My task
                parentId: 98765
                level: 3
                note: my note
                rootGroupId: integer
                archived: 0
                billable: false,
                color: '#4DC2E8'
                hasChildren: false
                disabled: false
                disableReason: ''
                isMatched: true
            suggested: []
          message: ok
          meta:
            favourites:
              limit: 10
      properties:
        taskId:
          type: integer
        name:
          type: string
        parentId:
          type: integer
        level:
          type: integer
        note:
          type: string
        rootGroupId:
          type: integer
        archived:
          type: integer
        billable:
          type: boolean
        color:
          type: string
        hasChildren:
          type: boolean
        disabled:
          type: boolean
        disableReason:
          type: string
        isMatched:
          type: boolean
      title: Favourite task
      x-tags:
        - TaskPicker
    Projects-item:
      x-examples:
        Example 1:
          taskId: 123456
          name: My task
          parentId: 98765
          level: 3
          note: my note
          rootGroupId: 66
          archived: 0
          billable: false
          hasChildren: false
          children: []
          disabled: false
          disableReason: ''
          isMatched: true
      type: object
      properties:
        taskId:
          type: integer
        name:
          type: string
        parentId:
          type: integer
        level:
          type: integer
        note:
          type: string|null
        rootGroupId:
          type: integer
        archived:
          type: integer
        billable:
          type: bool
        hasChildren:
          type: bool
        children:
          type: array
        disabled:
          type: bool
        disableReason:
          type: string
      title: Project Item
      x-tags:
        - Projects
    Common-validation-error-item:
      type: object
      properties:
        property:
          type: string
        message:
          type: string
      required:
        - property
        - message
  securitySchemes:
    api_key_in_header:
      type: http
      scheme: bearer
      description: ''
    OIDC:
      type: openIdConnect
      openIdConnectUrl: authenticate/oidc
  parameters:
    format:
      name: format
      in: path
      required: true
      schema:
        type: string
        enum:
          - json
          - xml
          - php
          - csv
        example: json
        default: json
      description: response format
    group_id:
      name: group_id
      in: path
      required: true
      schema:
        type: number
        minimum: 1
    rate_id:
      name: rate_id
      in: path
      required: true
      schema:
        type: number
        minimum: 1
    rate_type_id:
      name: rate_type_id
      in: path
      required: true
      schema:
        type: number
    user_id:
      name: user_id
      in: path
      required: true
      schema:
        type: string
    tag_id:
      name: tag_id
      in: path
      required: true
      schema:
        type: number
    tag_list_id:
      name: tag_list_id
      in: path
      required: true
      schema:
        type: number
    entry_id:
      name: entry_id
      in: path
      required: true
      schema:
        type: number
    task_id:
      name: task_id
      in: path
      required: true
      schema:
        type: number
    feature_id:
      name: feature_id
      in: path
      required: true
      schema:
        type: number
  responses:
    notoken:
      description: Example response when no token is given
      content:
        application/json:
          schema:
            description: ''
            type: object
            properties:
              message:
                type: string
                minLength: 1
            required:
              - message
          examples:
            no token:
              value:
                message: authentication required - api token not found
  examples: {}
x-tagGroups:
  - name: TimeCamp API
    tags:
      - '[v1] User'
      - '[v1] Entry'
      - '[v1] Tags'
      - '[v1] Group'
      - '[v1] Approvals'
      - '[v1] Computer Activities'
      - '[v1] Timer'
      - '[v1] Task'
      - '[v1] Attendance'
      - '[v1] Roles & Permissions'
      - '[v1] Billing Rates'
      - '[v1] Userlog'
      - '[v1] Activity alert'
      - '[v3] Timer'
      - '[v3] Invoices'
      - '[v3] Computer Activities'
      - '[v3] Time Entry'
      - '[v3] Task Archive'
      - '[v3] Time Entry Restriction'
      - '[v3] Expense'
      - '[v3] Plan'
      - '[v3] Storage'
      - '[v3] Module'
      - '[v3] Marketplace'
      - '[v3] Remote work detection'
      - '[v3] Data Export'
      - '[v3] Custom Fields'
      - '[v3] Approval'
      - '[v3] Task'
      - '[v3] Projects'
      - '[v3] Attendance'
      - '[v3] Attendance Requests'
