{
  "openapi": "3.0.4",
  "info": {
    "title": "decidalo V3 import API",
    "version": "v1"
  },
  "paths": {
    "/importapi/Absence/Import": {
      "post": {
        "tags": [
          "Absence"
        ],
        "summary": "Endpoint to import absences. Can also be used to create, update or delete absences.",
        "requestBody": {
          "description": "Object with list of Decidalo.Domain.Models.ResourceManagement.AbsenceImportItem",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportAbsencesCommand"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportAbsencesCommand"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportAbsencesCommand"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AbsenceImportResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AbsenceImportResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AbsenceImportResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Absence": {
      "get": {
        "tags": [
          "Absence"
        ],
        "summary": "Returns all absences within the given timeframe.\r\nIf no timeframe is provided, all absences are returned.",
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "description": "If provided, only absences occurring after the start date will be returned.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "If provided, only absences occurring before the end date will be returned.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AbsenceOutputResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AbsenceOutputResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AbsenceOutputResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/ActivityType": {
      "get": {
        "tags": [
          "ActivityType"
        ],
        "summary": "Returns all activity types in the system.",
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "description": "Only activity types carrying this aggregation category (exact, case-insensitive). Omitted or\r\nblank returns every type.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The activity types.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ActivityTypeResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ActivityTypeResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ActivityTypeResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "ActivityType"
        ],
        "summary": "Creates, updates, or deletes an activity type.",
        "requestBody": {
          "description": "The activity type to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ActivityTypeImportItem"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ActivityTypeImportItem"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ActivityTypeImportItem"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The imported activity type; empty on delete.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ActivityTypeResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActivityTypeResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActivityTypeResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Booking/ImportAsync": {
      "post": {
        "tags": [
          "Booking"
        ],
        "summary": "Imports a batch of bookings.",
        "description": "When the booking type property is not send at all, it won't be changed through the import. The default value on creation is 'Reservation'.\r\nA booking can be linked to a project via ProjectId or ProjectCode, but the referenced project must already exist — an unresolved id/code fails that item instead of creating a project.",
        "requestBody": {
          "description": "The data to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/BookingBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of users to import."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/BookingBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of users to import."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/BookingBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of users to import."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingImportResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingImportResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingImportResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Booking/ByProject": {
      "get": {
        "tags": [
          "Booking"
        ],
        "summary": "Returns a list of booking which are linked to a certain project.",
        "parameters": [
          {
            "name": "projectId",
            "in": "query",
            "description": "The internal id of the project for which the bookings are loaded. Can be null, if a project code is provided.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectCode",
            "in": "query",
            "description": "The external id of the project for which the bookings are loaded. If a project id is provided the project code is ignored.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingItemOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingItemOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingItemOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Booking": {
      "get": {
        "tags": [
          "Booking"
        ],
        "summary": "Get all bookings.",
        "description": "The booked user can be filtered by UserID, EmployeeID, or Email, in that precedence order (the first one provided wins). An unknown or ambiguous Email (shared by more than one user) yields a 400, matching EmployeeID's not-found behavior.",
        "parameters": [
          {
            "name": "BookingID",
            "in": "query",
            "description": "Filter on the internal booking ID. Null means no filter. When provided, only the booking with this ID is returned.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "BookingCode",
            "in": "query",
            "description": "Filter on the external booking code. Null or empty means no filter. If BookingID is provided this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ProjectID",
            "in": "query",
            "description": "Filter on the project linked to the booking. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "ProjectCode",
            "in": "query",
            "description": "Filter on the project linked to the booking. Null means no filter. If ProjectID is provided this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "RequestID",
            "in": "query",
            "description": "Filter on the resource-request ID linked to the booking. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "UserID",
            "in": "query",
            "description": "Filter on the booked user. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "EmployeeID",
            "in": "query",
            "description": "Filter on the booked user. Null means no filter. If UserID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "UsersBusinessUnitID",
            "in": "query",
            "description": "Filter on the business unit of the booked user. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "UsersBusinessUnitName",
            "in": "query",
            "description": "Filter on the business unit of the booked user. Null means no filter. If UsersBusinessUnitID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "UsersPracticeAreaID",
            "in": "query",
            "description": "Filter on the practice area of the booked user. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "UsersPracticeAreaName",
            "in": "query",
            "description": "Filter on the practice area of the booked user. Null means no filter. If UsersPracticeAreaID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "UsersTeamID",
            "in": "query",
            "description": "Filter on the team of the booked user. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "UsersTeamCode",
            "in": "query",
            "description": "Filter on the team of the booked user by team code. Null means no filter. If UsersTeamID is provided this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "UsersLegalEntityID",
            "in": "query",
            "description": "Filter on the legal entity of the booked user. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "UsersLegalEntityName",
            "in": "query",
            "description": "Filter on the legal entity of the booked user by name (case-insensitive). Null or empty means no filter. Ignored when UsersLegalEntityID has a value.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "StartDateBefore",
            "in": "query",
            "description": "Filter on the start date of the booking. Null mean no filter. Also returns bookings where the start date is null.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "EndDateAfter",
            "in": "query",
            "description": "Filter on the end date of the booking. Null means no filter. Also returns bookings where the end date is null.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "CreatedOnOrAfter",
            "in": "query",
            "description": "Filter on the creation date of the booking: returns only bookings that have been created on or after the entered\r\ntimestamp. Null means no filter. Expected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601). Please indicate the\r\ntimezone (\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "LastUpdatedOnOrAfter",
            "in": "query",
            "description": "Incremental-sync filter: returns only bookings where LastEditDate >= this value\r\n(equivalent to a \"ModifiedSince\" filter). Null means no filter.\r\nExpected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601).\r\nPlease indicate the timezone (\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "LastImportedOnOrAfter",
            "in": "query",
            "description": "Incremental-sync filter: returns only bookings where LastImportedDate >= this value.\r\nBookings without a LastImportedDate (never imported with the IsImported flag set) are excluded. Null means no filter.\r\nExpected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601).\r\nPlease indicate the timezone (\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "PlanningGranularity",
            "in": "query",
            "description": "Selects which planning granularity is included in the response. Only one can be returned at a time, mirroring the booking import endpoint. When omitted, defaults to Daily (or None if the deprecated ExcludeDailyPlanning is true).",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ImportPlanningGranularity"
                }
              ]
            }
          },
          {
            "name": "PlanningStartDate",
            "in": "query",
            "description": "Optional inclusive lower bound for planning data. Applies to daily (by CalendarDate), weekly (by the week's Monday) and monthly (by the first of the month). If no planning is included, this date has no effect.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "PlanningEndDate",
            "in": "query",
            "description": "Optional inclusive upper bound for planning data. Applies to daily (by CalendarDate), weekly (by the week's Monday) and monthly (by the first of the month). If no planning is included, this date has no effect.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "ExcludeDailyPlanning",
            "in": "query",
            "description": "Deprecated: use PlanningGranularity instead. If true, daily planning is not included in the response. Only honored when PlanningGranularity is not provided; ignored when PlanningGranularity is set.",
            "schema": {
              "type": "boolean",
              "deprecated": true
            }
          },
          {
            "name": "Top",
            "in": "query",
            "description": "Optional number of bookings to return. Returning all data at once, might be too much.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Optional number of bookings to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Email",
            "in": "query",
            "description": "Filter on the booked user's e-mail address (case-insensitive). Null or empty means no filter. Ignored if UserID or EmployeeID is provided. Precedence is UserID > EmployeeID > Email. An unknown or ambiguous e-mail (more than one user shares it) yields HTTP 400.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of bookings.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingItemOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingItemOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingItemOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative, or if EmployeeID/Email cannot be resolved to exactly one user.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Booking/BookingAccountingTypes": {
      "get": {
        "tags": [
          "Booking"
        ],
        "summary": "Lists all possible booking accounting types.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingAccountingType"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingAccountingType"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingAccountingType"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Booking/RejectionReasons": {
      "get": {
        "tags": [
          "Booking"
        ],
        "summary": "Lists all possible booking rejection reasons.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RejectionReasonType"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RejectionReasonType"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RejectionReasonType"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Booking/CustomProperties": {
      "get": {
        "tags": [
          "Booking"
        ],
        "summary": "Returns a description of all possible custom properies for bookings.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Booking/Comments/Batch": {
      "post": {
        "tags": [
          "Booking"
        ],
        "summary": "Creates, updates or deletes a batch of booking comments.",
        "description": "Comments are allowed to belong to different bookings within the same batch. Comments are imported\r\nin order. Items are processed sequentially and independently: each item captures its own outcome,\r\nso a failure on one item does not abort the rest. The response always returns 200 with one result\r\nper item, in the same order as the input.",
        "requestBody": {
          "description": "The comment rows to import. Each row resolves its own booking independently.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/BookingCommentBatchInput"
                  }
                ],
                "description": "The envelope for a batch of booking-comment import rows. Comments are allowed to belong to\r\ndifferent bookings within the same batch and are imported in request order."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/BookingCommentBatchInput"
                  }
                ],
                "description": "The envelope for a batch of booking-comment import rows. Comments are allowed to belong to\r\ndifferent bookings within the same batch and are imported in request order."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/BookingCommentBatchInput"
                  }
                ],
                "description": "The envelope for a batch of booking-comment import rows. Comments are allowed to belong to\r\ndifferent bookings within the same batch and are imported in request order."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingCommentImportResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingCommentImportResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BookingCommentImportResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Certificate": {
      "get": {
        "tags": [
          "Certificate"
        ],
        "summary": "Get all certificates.",
        "parameters": [
          {
            "name": "certificateID",
            "in": "query",
            "description": "Optional filter on a specific certificate by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of certificates to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of certificates to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of certificates.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CertificateExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CertificateExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CertificateExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Company/Import": {
      "post": {
        "tags": [
          "Company"
        ],
        "summary": "Creates, updates or deletes a company.",
        "description": "The endpoint uses the company id, the company code and the company name to match with existing companies.\r\nSet `Delete = true` to remove the matched company instead of creating/updating it; the request is\r\nrejected if no matching company is found.",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportCompanyCommand"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportCompanyCommand"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportCompanyCommand"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Company": {
      "get": {
        "tags": [
          "Company"
        ],
        "summary": "Returns all companies.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CompanyCompleteOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CompanyCompleteOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CompanyCompleteOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/Company/Import": {
      "post": {
        "tags": [
          "CompanyDeprecated"
        ],
        "summary": "Creates or updates a company. Will be removed in a future version.",
        "description": "The endpoint uses the company id, the company code and the company name to match with existing companies.",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportCompanyCommand"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportCompanyCommand"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportCompanyCommand"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportCompanyResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/importapi/GeneralActivity": {
      "get": {
        "tags": [
          "GeneralActivity"
        ],
        "summary": "Returns all general activities in the system.",
        "responses": {
          "200": {
            "description": "The general activities.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GeneralActivityResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GeneralActivityResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GeneralActivityResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "GeneralActivity"
        ],
        "summary": "Creates, updates, or deletes a general activity.",
        "requestBody": {
          "description": "The general activity to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/GeneralActivityImportItem"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/GeneralActivityImportItem"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/GeneralActivityImportItem"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The imported general activity; empty on delete.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GeneralActivityResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeneralActivityResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeneralActivityResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/HolidayCalendar/Import": {
      "post": {
        "tags": [
          "HolidayCalendar"
        ],
        "summary": "Imports custom holiday calendars. Can be used to create, update or delete calendars.",
        "description": "Calendars are identified by their internal HolidayListID or, when no ID is provided, by their\r\nHolidayListCode; a differing code alongside a matching ID renames the calendar's code.\r\nStandard calendars provided by the external\r\nholiday API (e.g. \"DE\", \"DE-NW\") cannot be created, changed or deleted through this endpoint.\r\nThe optional CountryCode determines the flag icon the web app shows next to the calendar.\r\nThe provided holidays always replace the calendar's complete holiday set; all holidays are full days.\r\nDeletion fails while the calendar is still assigned to users; the blocking user IDs are part of the error message.",
        "requestBody": {
          "description": "Object with a list of Decidalo.Domain.Models.Holidays.Import.HolidayCalendarImportItem.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportHolidayCalendarsCommand"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportHolidayCalendarsCommand"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportHolidayCalendarsCommand"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HolidayCalendarImportResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HolidayCalendarImportResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HolidayCalendarImportResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/HolidayCalendar": {
      "get": {
        "tags": [
          "HolidayCalendar"
        ],
        "summary": "Returns the holiday calendars with their holidays.",
        "description": "Returns both custom calendars (Custom = true) and standard calendars sourced from the external\r\nholiday API (Custom = false). A standard calendar appears once it is in use, i.e. it has been\r\nassigned to a user at least once. Only custom calendars can be modified via the import endpoint.",
        "parameters": [
          {
            "name": "holidayListID",
            "in": "query",
            "description": "Optional filter on a specific calendar by its internal ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "holidayListCode",
            "in": "query",
            "description": "Optional filter on a specific calendar by its code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "custom",
            "in": "query",
            "description": "Optional filter: true returns only custom calendars, false only standard ones.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of calendars to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of calendars to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of holiday calendars.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HolidayCalendarOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HolidayCalendarOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HolidayCalendarOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Order": {
      "get": {
        "tags": [
          "Order"
        ],
        "summary": "Returns orders with their positions. Every filter is optional and AND-combined. The project\r\nfilter accepts several values (repeat the parameter) and matches an order linked to any of them.\r\nThe date filters compare the order's own dates, so an order that has none drops out of them —\r\nexcept validOn, which treats a missing valid-from / expiry as an open bound,\r\nand lastUpdatedOnOrAfter, which also reports changes beneath the order.",
        "description": "<b>JSON or CSV is chosen by the `Accept` header alone</b> — there is no query parameter for\r\n            it. `text/csv` returns CSV; `application/json`, a wildcard or no header returns JSON,\r\n            the default; quality values are honoured. CSV uses ',' as field terminator, \\r\\n as row\r\n            terminator, ISO-8601 dates and timestamps, and a fixed column order:\r\n            <c>OrderID, OrderCode, OrderName, OrderDate, OrderDescription, OrderCurrencyCode, CompanyID,\r\n            DeliveryDate, ValidFromDate, ExpiryDate, BillingAddress, ShippingAddress, PaymentTerms,\r\n            ShippingTerms, GoodsRecipient, Notes, ProjectReferenceIDs, OrderRateEntries, OrderCreatorUserID,\r\n            OrderCreatorEmployeeID, OrderCreatorEmail, OrderCreationDate, OrderLastEditorUserID,\r\n            OrderLastEditorEmployeeID, OrderLastEditorEmail, OrderLastEditDate</c>, then — with\r\n            includePositions — <c>OrderPositionID, OrderPositionCode, PositionName,\r\n            PositionType, FixedPriceAmount, PositionRate, PositionUnit, PositionRateID, PositionRateCode,\r\n            SoldQuantity, PositionCurrencyCode,\r\n            SortOrder, PositionCreatorUserID, PositionCreatorEmployeeID, PositionCreatorEmail,\r\n            PositionCreationDate, PositionLastEditorUserID, PositionLastEditorEmployeeID,\r\n            PositionLastEditorEmail, PositionLastEditDate</c>,\r\n            then one trailing column per custom order field named by its column name. In those trailing\r\n            columns a multi-select renders as its comma-separated labels and a money field as an amount and\r\n            its ISO currency code (`1500.5 EUR`).\r\n            \r\nTwo CSV cells hold a list: `ProjectReferenceIDs` is comma-separated ids, and\r\n            `OrderRateEntries` is the order's own rate card — prefilled from the framework contract at\r\n            creation, then editable per order — as comma-separated `Label|Rate|CurrencyCode|Unit`\r\n            entries in their sort order (a separator inside a label is not escaped, and an entry carries its\r\n            own currency, which need not match `OrderCurrencyCode`). It is a price list and is\r\n            <b>independent of the position columns</b>: a position's `PositionRate` is that position's\r\n            own agreed figure, not necessarily one of these entries. Every creator / editor is flattened into\r\n            three columns — user id, employee id and email — so the export resolves people without a second\r\n            call.\r\nThe position columns `PositionRate` and `PositionUnit` are the legacy work-time price. Pricing moved to\r\n            per-recording-type rates (see `Order/Position/RecordingTypeRates`), which this export does\r\n            not carry, so these two may be removed in a future release. `FixedPriceAmount` and\r\n            `SoldQuantity` are unaffected.\r\nPaging counts orders, not CSV rows. `x-row-count` is the number of orders matching the\r\n            filter, `x-page-row-count` the number of items in this body — orders for JSON, rows for CSV.",
        "parameters": [
          {
            "name": "top",
            "in": "query",
            "description": "Orders to return. Without one this returns every matching order — set it. A negative value is rejected; `0` returns an empty page with `x-row-count: 0` without querying.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Number of orders to skip, for paging.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includePositions",
            "in": "query",
            "description": "Whether each order carries its positions. Default `true`. With `false` the JSON reports\r\nno `positions` and the CSV omits the position columns and returns one row per order — a\r\ncheaper read when only the order headers are wanted. POSTing such a body back leaves the order's\r\nexisting positions untouched.",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "projectReferenceId",
            "in": "query",
            "description": "Optional project filter by internal id; repeat the parameter for several projects.",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "projectCode",
            "in": "query",
            "description": "Optional project filter by code; repeat the parameter for several projects (the ids win when both are given).",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "validFromOnOrAfter",
            "in": "query",
            "description": "Only orders whose valid-from date is on or after this day.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "validFromOnOrBefore",
            "in": "query",
            "description": "Only orders whose valid-from date is on or before this day.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "expiryOnOrAfter",
            "in": "query",
            "description": "Only orders whose expiry date is on or after this day (e.g. not yet expired).",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "expiryOnOrBefore",
            "in": "query",
            "description": "Only orders whose expiry date is on or before this day.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "orderDateOnOrAfter",
            "in": "query",
            "description": "Only orders whose order date is on or after this day.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "orderDateOnOrBefore",
            "in": "query",
            "description": "Only orders whose order date is on or before this day.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "deliveryDateOnOrAfter",
            "in": "query",
            "description": "Only orders whose delivery date is on or after this day.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "deliveryDateOnOrBefore",
            "in": "query",
            "description": "Only orders whose delivery date is on or before this day.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "validOn",
            "in": "query",
            "description": "Only orders that were valid on this day (valid-from <= day <= expiry, each bound open when unset).",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "lastUpdatedOnOrAfter",
            "in": "query",
            "description": "Incremental-sync filter: returns only orders where LastEditDate >= this value.\r\nNull means no filter.\r\n\r\nThe order's LastEditDate reports a change to the order <b>or to anything returned beneath it</b> —\r\nits positions (added, edited, repriced, removed) and its rate entries — as well as to the position\r\nsub-resources served by `Position/RecordingTargets`, `Position/RecordingTypeRates` and\r\n`Position/WorkPackages`, which have no such filter of their own. Polling this endpoint and\r\nre-fetching the sub-resources of the orders it returns is therefore a complete incremental read,\r\nand the highest LastEditDate returned is a safe watermark for the next poll.\r\nEach nested position carries its own CreationDate / LastEditDate / Creator / LastEditor, so a\r\nconsumer can tell <i>which</i> positions moved. A deleted position leaves no row to report, which\r\nis why the order's own date moves for it too.\r\nExpected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601).\r\nPlease indicate the timezone (\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The orders — JSON, or CSV when `Accept` asks for `text/csv`.",
            "headers": {
              "x-row-count": {
                "description": "The number of orders matching the filter, not just the current page."
              },
              "x-page-row-count": {
                "description": "The number of items in the current response body: orders for JSON, rows for CSV."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderImportOutputBatch"
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/OrderImportOutputBatch"
                }
              }
            }
          },
          "400": {
            "description": "A negative `top` or `skip`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Order"
        ],
        "summary": "Creates, updates, or deletes orders with their positions.",
        "requestBody": {
          "description": "The orders to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderImportBatch"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderImportBatch"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderImportBatch"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Per-item import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OrderImportBatchResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderImportBatchResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderImportBatchResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Order/Single": {
      "get": {
        "tags": [
          "Order"
        ],
        "summary": "Returns a single order (with its positions) by its id or per-tenant code.",
        "parameters": [
          {
            "name": "orderId",
            "in": "query",
            "description": "Internal order id (wins over the code when both are given).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "code",
            "in": "query",
            "description": "The order's per-tenant external code.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The order.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OrderImportOutput"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderImportOutput"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderImportOutput"
                }
              }
            }
          },
          "400": {
            "description": "If neither an id nor a code is provided.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "404": {
            "description": "If no matching order exists."
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Order/Position/Single": {
      "get": {
        "tags": [
          "Order"
        ],
        "summary": "Returns a single order position by its id, or by its per-tenant-unique code (the parent order is optional and only narrows the lookup).",
        "parameters": [
          {
            "name": "orderPositionId",
            "in": "query",
            "description": "Internal order-position id (wins over the code when both are given).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderPositionCode",
            "in": "query",
            "description": "The position's code (unique per tenant); resolves on its own, or within the parent order when one is given.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "description": "Optional parent order id; narrows a code lookup to that order.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderCode",
            "in": "query",
            "description": "Optional parent order code (used when the OrderId is unknown).",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The order position.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionImportOutput"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionImportOutput"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionImportOutput"
                }
              }
            }
          },
          "400": {
            "description": "If neither an id nor a code is provided.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "404": {
            "description": "If no matching order position exists."
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Order/Position": {
      "post": {
        "tags": [
          "Order"
        ],
        "summary": "Creates, updates, or deletes order positions (each names its parent order by id or code).",
        "requestBody": {
          "description": "The positions to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionImportBatch"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionImportBatch"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionImportBatch"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Per-item import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionImportBatchResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionImportBatchResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionImportBatchResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Order/Position/RecordingTargets": {
      "get": {
        "tags": [
          "Order"
        ],
        "summary": "Returns an order position's allowed activity types (direct-recording targets).",
        "parameters": [
          {
            "name": "orderPositionId",
            "in": "query",
            "description": "Position id (wins over the code when both are given).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "description": "Optional parent order id; narrows a code lookup to that order.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderCode",
            "in": "query",
            "description": "Optional parent order code (used when the OrderId is unknown).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderPositionCode",
            "in": "query",
            "description": "Position's code (unique per tenant); resolves on its own, or within the parent order when one is given.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The recording targets in the import shape (re-postable).",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderPositionRecordingTargetOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderPositionRecordingTargetOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderPositionRecordingTargetOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Order"
        ],
        "summary": "Creates, updates, or removes order positions' allowed activity types (direct-recording targets), one row per (position, activity type).",
        "requestBody": {
          "description": "The recording targets to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionRecordingTargetImportBatch"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionRecordingTargetImportBatch"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionRecordingTargetImportBatch"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Per-row import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionRecordingTargetImportBatchResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionRecordingTargetImportBatchResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionRecordingTargetImportBatchResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Order/Position/RecordingTypeRates": {
      "get": {
        "tags": [
          "Order"
        ],
        "summary": "Returns what each recording type costs on an order position.",
        "parameters": [
          {
            "name": "orderPositionId",
            "in": "query",
            "description": "Position id (wins over the code when both are given).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "description": "Parent order id (when resolving the position by its code).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderCode",
            "in": "query",
            "description": "Parent order's code (fallback when the OrderId is unknown).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderPositionCode",
            "in": "query",
            "description": "Position's code (unique per tenant); resolved within the parent order here.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The prices in the import shape (re-postable).",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderPositionRecordingTypeRateOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderPositionRecordingTypeRateOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderPositionRecordingTypeRateOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Order"
        ],
        "summary": "Sets or removes what each recording type costs on an order position, one row per (position, recording type).",
        "requestBody": {
          "description": "The prices to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionRecordingTypeRateImportBatch"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionRecordingTypeRateImportBatch"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionRecordingTypeRateImportBatch"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Per-row import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionRecordingTypeRateImportBatchResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionRecordingTypeRateImportBatchResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionRecordingTypeRateImportBatchResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Order/Position/WorkPackages": {
      "get": {
        "tags": [
          "Order"
        ],
        "summary": "Returns the work packages currently linked to an order position.",
        "parameters": [
          {
            "name": "orderPositionId",
            "in": "query",
            "description": "Position id (wins over the code when both are given).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "description": "Optional parent order id; narrows a code lookup to that order.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderCode",
            "in": "query",
            "description": "Optional parent order code (used when the OrderId is unknown).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderPositionCode",
            "in": "query",
            "description": "Position's code (unique per tenant); resolves on its own, or within the parent order when one is given.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The linked work packages in the import shape (re-postable).",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderPositionWorkPackageOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderPositionWorkPackageOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderPositionWorkPackageOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Order"
        ],
        "summary": "Adds or removes order-position ↔ work-package links, one row per (position, work package).",
        "requestBody": {
          "description": "The links to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionWorkPackageImportBatch"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionWorkPackageImportBatch"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrderPositionWorkPackageImportBatch"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Per-row import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionWorkPackageImportBatchResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionWorkPackageImportBatchResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPositionWorkPackageImportBatchResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Order/CustomProperties": {
      "get": {
        "tags": [
          "Order"
        ],
        "summary": "Returns the tenant's custom order fields.",
        "responses": {
          "200": {
            "description": "The custom-field schema.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Profile/Roles": {
      "get": {
        "tags": [
          "Profile"
        ],
        "summary": "Returns users with their assigned roles.",
        "parameters": [
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter on a specific user by their internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter on a specific user by their employee id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "roleID",
            "in": "query",
            "description": "Optional filter — returns only users that hold this role (matched by internal id). Each matched user is returned with their full role list.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "roleCode",
            "in": "query",
            "description": "Optional filter — returns only users that hold this role (matched by external code). Each matched user is returned with their full role list.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of users to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of users to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of users with roles.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserRoleExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserRoleExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserRoleExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Profile/Certificates": {
      "get": {
        "tags": [
          "Profile"
        ],
        "summary": "Returns users with their assigned certificates.",
        "parameters": [
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter on a specific user by their internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter on a specific user by their employee id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "certificateID",
            "in": "query",
            "description": "Optional filter — returns only users that hold this certificate. Each matched user is returned with their full certificate list.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of users to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of users to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of users with certificates.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserCertificateExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserCertificateExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserCertificateExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Profile/Languages": {
      "get": {
        "tags": [
          "Profile"
        ],
        "summary": "Returns users with their spoken languages.",
        "parameters": [
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter on a specific user by their internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter on a specific user by their employee id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "languageID",
            "in": "query",
            "description": "Optional filter — returns only users that speak this language. Each matched user is returned with their full language list.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of users to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of users to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of users with languages.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserLanguageExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserLanguageExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserLanguageExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Profile/Trainings": {
      "get": {
        "tags": [
          "Profile"
        ],
        "summary": "Returns users with their trainings.",
        "parameters": [
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter on a specific user by their internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter on a specific user by their employee id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "trainingReferenceID",
            "in": "query",
            "description": "Optional filter — returns only users that have this training. Each matched user is returned with their full training list.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of users to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of users to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of users with trainings.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserTrainingExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserTrainingExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserTrainingExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Profile/Publications": {
      "get": {
        "tags": [
          "Profile"
        ],
        "summary": "Returns users with their publications.",
        "parameters": [
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter on a specific user by their internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter on a specific user by their employee id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of users to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of users to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of users with publications.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserPublicationExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserPublicationExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserPublicationExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Profile/Testimonials": {
      "get": {
        "tags": [
          "Profile"
        ],
        "summary": "Returns users with their testimonials.",
        "parameters": [
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter on a specific user by their internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter on a specific user by their employee id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of users to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of users to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of users with testimonials.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserTestimonialExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserTestimonialExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserTestimonialExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Profile/Industries": {
      "get": {
        "tags": [
          "Profile"
        ],
        "summary": "Returns users with their assigned industries.",
        "parameters": [
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter on a specific user by their internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter on a specific user by their employee id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "industryID",
            "in": "query",
            "description": "Optional filter — returns only users that have this industry (matched by internal id). Each matched user is returned with their full industry list.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "industryCode",
            "in": "query",
            "description": "Optional filter — returns only users that have this industry (matched by external code). Each matched user is returned with their full industry list.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of users to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of users to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of users with industries.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserIndustryExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserIndustryExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserIndustryExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Profile/ProfessionalExperience": {
      "get": {
        "tags": [
          "Profile"
        ],
        "summary": "Returns users with their professional experiences.",
        "parameters": [
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter on a specific user by their internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter on a specific user by their employee id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of users to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of users to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of users with professional experiences.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserProfessionalExperienceExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserProfessionalExperienceExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserProfessionalExperienceExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Profile/UserSkills": {
      "get": {
        "tags": [
          "Profile"
        ],
        "summary": "Get users with their assessed skills.",
        "parameters": [
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter on a specific user by their internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter on a specific user by their employee id. If userID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "teamID",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific team by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "teamCode",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific team by its code. If teamID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "businessUnitID",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific business unit by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "businessUnitName",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific business unit by its name. If businessUnitID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "Optional filter to return only users from a specific country by its code (e.g. \"DE\", \"US\").",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "legalEntityID",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific legal entity by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "legalEntityName",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific legal entity by its name. If legalEntityID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "practiceAreaID",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific practice area by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "practiceAreaName",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific practice area by its name. If practiceAreaID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serviceLineID",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific service line by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "serviceLineName",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific service line by its name. If serviceLineID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of users to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of users to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "modifiedSince",
            "in": "query",
            "description": "When provided, returns only users who have at least one skill with EditDate >= this value.\r\nExpected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601). Please indicate the timezone (\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of users with their assessed skills.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserSkillsOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserSkillsOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserSkillsOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Profile"
        ],
        "summary": "Adds, updates or removes the assessed skills of a batch of users.",
        "requestBody": {
          "description": "The users with the skills to add, update or remove.",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UserSkillsImportInput"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UserSkillsImportInput"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UserSkillsImportInput"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Returns the import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserSkillsImportResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserSkillsImportResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserSkillsImportResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Returns the core project data.",
        "description": "Either projectid or projectcode must be provided.\r\n\r\nFor a quick existence check use the http method HEAD instead instead of GET.",
        "parameters": [
          {
            "name": "projectid",
            "in": "query",
            "description": "decídalo id of the project.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectcode",
            "in": "query",
            "description": "External id of the project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the project data.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectReferenceOutput"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectReferenceOutput"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectReferenceOutput"
                }
              }
            }
          },
          "400": {
            "description": "If neither projectid nor projectcode is provided.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "404": {
            "description": "If no project with the given projectid or projectcode is found."
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "tags": [
          "Project"
        ],
        "summary": "Checks if a project exists.",
        "description": "Only checks if the project exists, but does not return any body content.\r\n            \r\nIf you want to get the project data, use the GET method instead.",
        "parameters": [
          {
            "name": "projectid",
            "in": "query",
            "description": "decídalo id of the project.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectcode",
            "in": "query",
            "description": "External id of the project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "If the project exists."
          },
          "400": {
            "description": "If neither projectid nor projectcode is provided."
          },
          "404": {
            "description": "If no project is found."
          },
          "500": {
            "description": "Unexpected errors."
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/importapi/Project/AllProjects": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Returns the core project data for all existing projects.",
        "description": "If 'onlyProjectsWithProjectCode' is true, only projects with a project code are returned.\r\nOtherwise, all projects will be returned.\r\nAll applied filters are connected with an AND condition.\r\n            \r\nCountry code, business unit, practice area, legal entity, service line and delivery model are the criteria resource groups are matched on.",
        "parameters": [
          {
            "name": "projectID",
            "in": "query",
            "description": "Filter on a single project by its internal id. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectCode",
            "in": "query",
            "description": "Filter on a single project by its external project code. Ignored when projectID is provided. An unknown code returns an empty list, it is matched as a column value and not resolved.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "onlyProjectsWithProjectCode",
            "in": "query",
            "description": "Optional flag that filters out projects without a project code.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "isCentralProject",
            "in": "query",
            "description": "When true, returns only central projects. When false, returns only non-central projects. Null means no filter.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "companyID",
            "in": "query",
            "description": "Filter on the project's company. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "companyCode",
            "in": "query",
            "description": "Filter on the project's company by its external code. Ignored when companyID is provided. Company codes are not unique, so every company carrying the code is matched.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "Case-insensitive exact match. Null or empty means no filter.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "businessUnitID",
            "in": "query",
            "description": "Filter on the project's business unit. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "businessUnitName",
            "in": "query",
            "description": "Filter on the project's business unit by name (internal or translated name, case-insensitive). Ignored when businessUnitID is provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "practiceAreaID",
            "in": "query",
            "description": "Filter on the project's practice area. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "practiceAreaName",
            "in": "query",
            "description": "Filter on the project's practice area by name (internal or translated name, case-insensitive). Ignored when practiceAreaID is provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "legalEntityID",
            "in": "query",
            "description": "Filter on the project's legal entity. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "legalEntityName",
            "in": "query",
            "description": "Filter on the project's legal entity by name (internal or translated name, case-insensitive). Ignored when legalEntityID is provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serviceLineID",
            "in": "query",
            "description": "Filter on the project's service line. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "serviceLineName",
            "in": "query",
            "description": "Filter on the project's service line by name (internal or translated name, case-insensitive). Ignored when serviceLineID is provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryModelID",
            "in": "query",
            "description": "Filter on the project's delivery model. Null means no filter.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "deliveryModelName",
            "in": "query",
            "description": "Filter on the project's delivery model by name (internal or translated name, case-insensitive). Ignored when deliveryModelID is provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDateBefore",
            "in": "query",
            "description": "Returns only projects starting on or before this date. Projects without a start date are also returned.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "endDateAfter",
            "in": "query",
            "description": "Returns only projects ending on or after this date. Projects without an end date are also returned.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "When provided, returns only projects with CreationDate >= this value.\r\nExpected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601). Please indicate the timezone (\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedSince",
            "in": "query",
            "description": "When provided, returns only projects with LastEditDate >= this value.\r\nExpected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601). Please indicate the timezone (\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "lastImportedOnOrAfter",
            "in": "query",
            "description": "When provided, returns only projects with LastImportedDate >= this value; projects without a LastImportedDate (never imported with the IsImported flag set) are excluded.\r\nExpected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601). Please indicate the timezone (\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of projects to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of projects to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the project data of all projects.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectReferenceOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectReferenceOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectReferenceOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If top or skip is negative, if a name-based filter (businessUnitName, practiceAreaName, legalEntityName,\r\nserviceLineName, deliveryModelName) matches no or several options, or if companyCode matches no company.\r\nNote that projectCode is not resolved, so an unknown projectCode returns an empty list instead.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/TeamMembers": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Returns projects with their team members.",
        "parameters": [
          {
            "name": "projectId",
            "in": "query",
            "description": "Optional filter on a specific project by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectCode",
            "in": "query",
            "description": "Optional filter on a specific project by its external project code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "Optional filter — returns only projects that include this user as a team member. Each matched project is returned with its full team-member list.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "query",
            "description": "Optional filter — returns only projects that include the user with this external employee id as a team member. Each matched project is returned with its full team-member list.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of projects to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of projects to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of projects with team members.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectTeamMembersExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectTeamMembersExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectTeamMembersExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/Contacts": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Returns projects with their contacts.",
        "parameters": [
          {
            "name": "projectId",
            "in": "query",
            "description": "Optional filter on a specific project by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectCode",
            "in": "query",
            "description": "Optional filter on a specific project by its external project code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "Optional filter — returns only projects that include this user as a contact. Each matched project is returned with its full contact list.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "query",
            "description": "Optional filter — returns only projects that include the user with this external employee id as a contact. Each matched project is returned with its full contact list.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of projects to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of projects to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of projects with contacts.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectContactsExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectContactsExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectContactsExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/ProjectStatus": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Lists all possible working status of a project.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectStatusOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectStatusOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectStatusOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/ReferenceStatus": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Lists all possible publication status of a project as a reference.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferenceStatusOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferenceStatusOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferenceStatusOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/Priorities": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Lists all possible priorities.",
        "description": "Use this endpoint to check which priorities are available.\r\n\r\nUse the display name in property \"Priority\" to reference the priority in projects or ResourceRequests.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PriorityEntry"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PriorityEntry"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PriorityEntry"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/DeliveryModels": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Lists all possible delivery models.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DeliveryModel"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DeliveryModel"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DeliveryModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/BusinessUnits": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Lists all possible business units.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BusinessUnit"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BusinessUnit"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BusinessUnit"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/PracticeAreas": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Lists all possible practice areas.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PracticeArea"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PracticeArea"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PracticeArea"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/ServiceLines": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Lists all possible service lines.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServiceLine"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServiceLine"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServiceLine"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/LegalEntities": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Lists all possible legal entities.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LegalEntity"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LegalEntity"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LegalEntity"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/ResourceGroups": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Lists all possible resource groups.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResourceGroupLite"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResourceGroupLite"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResourceGroupLite"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/Import": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Creates or updates a project.",
        "parameters": [
          {
            "name": "bookingExtendOption",
            "in": "query",
            "description": "Controls which booking extension logic is applied when the project dates change.\r\nUpdateBookingDatesOnly — only bookings ending exactly on the previous project end date have their end date moved.\r\nOn prolonging, no new planning entries are generated.\r\nOn shortening, planning entries beyond the new end date are zeroed out and removed (weekly, daily, and monthly).\r\nRedistributePersonDays — bookings ending within the last week of the previous project end date (within 6 days) are moved and their total person days are redistributed evenly over the new period by overwriting all planning entries with a uniform weekly capacity.\r\nUpdateBookingsAndPlanning — bookings ending within the last week of the previous project end date (within 6 days) are extended or shortened and planning entries are updated using the existing capacity pattern.\r\nWhen omitted, nothing happens, only project end date is updated.",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/BookingExtendOption"
                }
              ]
            }
          }
        ],
        "requestBody": {
          "description": "The project data to create or update.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectReferenceInput"
                  }
                ],
                "description": "Input data to import a project."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectReferenceInput"
                  }
                ],
                "description": "Input data to import a project."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectReferenceInput"
                  }
                ],
                "description": "Input data to import a project."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectReferenceImportResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectReferenceImportResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectReferenceImportResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/ImportBatch": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Creates, updates or deletes a batch of projects.",
        "description": "Items are processed sequentially and independently: each item captures its own outcome, so a failure\r\non one item does not abort the rest. The response always returns 200 with one result per item (in\r\nrequest order); inspect each result's Success flag and ErrorMessage for the per-item outcome.",
        "parameters": [
          {
            "name": "bookingExtendOption",
            "in": "query",
            "description": "Controls which booking extension logic is applied when a project's dates change. Applies to every item in the batch.\r\nSee the single project import endpoint (POST Import) for the detailed behaviour of each option.",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/BookingExtendOption"
                }
              ]
            }
          }
        ],
        "requestBody": {
          "description": "The batch of projects to import. Each item follows the same contract as the single project import endpoint.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of projects to import."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of projects to import."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of projects to import."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectReferenceImportResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectReferenceImportResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectReferenceImportResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/RecordingTargets": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Returns a project's allowed activity types (project-direct recording targets).",
        "parameters": [
          {
            "name": "projectReferenceId",
            "in": "query",
            "description": "Project id (wins over the code when both are given).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectCode",
            "in": "query",
            "description": "Project code.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The recording targets in the import shape (re-postable).",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectRecordingTargetOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectRecordingTargetOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectRecordingTargetOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Creates, updates, or removes a project's allowed activity types (project-direct recording targets), one row per (project, activity type).",
        "requestBody": {
          "description": "The recording targets to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectRecordingTargetImportBatch"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectRecordingTargetImportBatch"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectRecordingTargetImportBatch"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Per-row import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectRecordingTargetImportBatchResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectRecordingTargetImportBatchResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectRecordingTargetImportBatchResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/Comments/Batch": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Creates, updates, or deletes a batch of project comments.",
        "description": "Comments are allowed to belong to different projects within the same batch. Comments are imported\r\nin order. Items are processed sequentially and independently: each item captures its own outcome,\r\nso a failure on one item does not abort the rest. The response always returns 200 with one result\r\nper item, in the same order as the input.",
        "requestBody": {
          "description": "The comment rows to import. Each row resolves its own project independently.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectCommentBatchInput"
                  }
                ],
                "description": "The envelope for a batch of project-comment import rows. Comments are allowed to belong to\r\ndifferent projects within the same batch and are imported in request order."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectCommentBatchInput"
                  }
                ],
                "description": "The envelope for a batch of project-comment import rows. Comments are allowed to belong to\r\ndifferent projects within the same batch and are imported in request order."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProjectCommentBatchInput"
                  }
                ],
                "description": "The envelope for a batch of project-comment import rows. Comments are allowed to belong to\r\ndifferent projects within the same batch and are imported in request order."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectCommentImportResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectCommentImportResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProjectCommentImportResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Project/CustomProperties": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Returns a description of all possible custom properies for projects.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Rate": {
      "get": {
        "tags": [
          "Rate"
        ],
        "summary": "Returns the whole rate catalog, active and inactive.",
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "description": "Only rates carrying this aggregation category (exact, case-insensitive). Omitted or blank\r\nreturns every rate. To reach a rate from an exported recording entry, resolve the entry's order\r\nposition via `GET importapi/Order/Position/RecordingTypeRates`, which reports the catalog\r\nrate each of the position's recording types is priced from.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The rates.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RateResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RateResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RateResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Rate"
        ],
        "summary": "Creates, updates, or deletes a rate.",
        "requestBody": {
          "description": "The rate to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RateImportItem"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RateImportItem"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RateImportItem"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The imported rate; empty on delete.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/RateResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/RecordingType": {
      "get": {
        "tags": [
          "RecordingType"
        ],
        "summary": "Returns the whole recording-type catalog, active and inactive.",
        "responses": {
          "200": {
            "description": "The recording types.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecordingTypeResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecordingTypeResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecordingTypeResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "RecordingType"
        ],
        "summary": "Creates, updates, or deletes a recording type.",
        "requestBody": {
          "description": "The recording type to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RecordingTypeImportItem"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RecordingTypeImportItem"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RecordingTypeImportItem"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The imported recording type; empty on delete.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/RecordingTypeResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordingTypeResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordingTypeResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/ResourceRequest": {
      "get": {
        "tags": [
          "ResourceRequest"
        ],
        "summary": "Returns a (filtered) list of resource requests.",
        "description": "The applied filters are connected with an \"AND\" condition.",
        "parameters": [
          {
            "name": "requestid",
            "in": "query",
            "description": "Filters for a specific request by the decidalo internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "requestcode",
            "in": "query",
            "description": "Filters for a specific request by the decidalo request code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Limits the number of results returned.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Skips the specified number of results.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "enddateafter",
            "in": "query",
            "description": "Filters for requests with an end date after the specified date.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "startdatebefore",
            "in": "query",
            "description": "Filters for requests with a start date before the specified date.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "resourcegroupid",
            "in": "query",
            "description": "Filters for requests belonging to a specific resource group by ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "resourcegroupname",
            "in": "query",
            "description": "Filters for requests belonging to a specific resource group by name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectid",
            "in": "query",
            "description": "Filters for requests belonging to a specific project by ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectcode",
            "in": "query",
            "description": "Filters for requests belonging to a specific project by code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "modifiedSince",
            "in": "query",
            "description": "When provided, returns only resource requests with LastEditDate >= this value.\r\nExpected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601). Please indicate the timezone (\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "Case-insensitive exact match on CountryCode. Null or empty means no filter.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeCandidates",
            "in": "query",
            "description": "When true, candidates are loaded and included in each resource request.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResourceRequestOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResourceRequestOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResourceRequestOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "ResourceRequest"
        ],
        "summary": "Creates, updates or deletes a resource request.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ResourceRequestInput"
                  }
                ],
                "description": "The input data for a resource request."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ResourceRequestInput"
                  }
                ],
                "description": "The input data for a resource request."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ResourceRequestInput"
                  }
                ],
                "description": "The input data for a resource request."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImportResourceRequestCommandResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportResourceRequestCommandResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportResourceRequestCommandResult"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "headers": {
              "Location": {
                "description": "Contains a url to the new created resource request."
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImportResourceRequestCommandResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportResourceRequestCommandResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportResourceRequestCommandResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/ResourceRequest/{requestid}": {
      "get": {
        "tags": [
          "ResourceRequest"
        ],
        "summary": "Returns a specific resource request.",
        "operationId": "GetResourceRequest",
        "parameters": [
          {
            "name": "requestid",
            "in": "path",
            "description": "decidalo identifier of the resource request.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeCandidates",
            "in": "query",
            "description": "When true, candidates are loaded and included in the resource request.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceRequestOutput"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceRequestOutput"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceRequestOutput"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/ResourceRequest/Contacts": {
      "get": {
        "tags": [
          "ResourceRequest"
        ],
        "summary": "Returns a (filtered) list of resource request contacts.",
        "description": "All filter parameters are optional and combined with AND semantics.\r\nWhen both requestid and requestcode are provided, requestid takes precedence.\r\nWhen both userid and employeeid are provided, userid takes precedence.",
        "parameters": [
          {
            "name": "requestid",
            "in": "query",
            "description": "Filters contacts by the decidalo internal resource request ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "requestcode",
            "in": "query",
            "description": "Filters contacts by the external request code. Empty or whitespace-only value is treated as not provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userid",
            "in": "query",
            "description": "Filters contacts by the decidalo internal user ID.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeid",
            "in": "query",
            "description": "Filters contacts by the external employee ID. Empty or whitespace-only value is treated as not provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Skips the specified number of results.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Limits the number of results returned.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResourceRequestContactOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResourceRequestContactOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResourceRequestContactOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/ResourceRequest/ServiceCategories": {
      "get": {
        "tags": [
          "ResourceRequest"
        ],
        "summary": "Lists all possible service categories (called \"Career Level\" in the application UI).",
        "description": "Each option carries its id, internal name, and all translated names.\r\nReference an option in imports by its id (stable across renames), its internal name, or any translated name.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServiceCategory"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServiceCategory"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServiceCategory"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/ResourceRequest/CustomProperties": {
      "get": {
        "tags": [
          "ResourceRequest"
        ],
        "summary": "Returns a description of all possible custom properties for resource requests.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Role": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "Get all roles with their skills and certificates.",
        "parameters": [
          {
            "name": "roleID",
            "in": "query",
            "description": "Optional filter on a specific role by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "roleCode",
            "in": "query",
            "description": "Optional filter on a specific role by its external code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of roles to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of roles to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of roles.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoleExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoleExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoleExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Role"
        ],
        "summary": "Updates or creates a role and sets the corresponding skills and certificates.",
        "description": "Can also create new skills and certificates if the name is provided.",
        "requestBody": {
          "description": "The data to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RoleImportInput"
                  }
                ],
                "description": "Defines a role with associated certificates and skills."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RoleImportInput"
                  }
                ],
                "description": "Defines a role with associated certificates and skills."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RoleImportInput"
                  }
                ],
                "description": "Defines a role with associated certificates and skills."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImportRoleResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportRoleResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportRoleResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Skill": {
      "get": {
        "tags": [
          "Skill"
        ],
        "summary": "Get all skills.",
        "parameters": [
          {
            "name": "skillID",
            "in": "query",
            "description": "Optional filter on a specific skill by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skillCode",
            "in": "query",
            "description": "Optional filter on a specific skill by its external code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "onlyCoreSkills",
            "in": "query",
            "description": "Optional filter to return only core skills. Null and false both result in no filter.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of skills to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of skills to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of skills.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SkillItemOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SkillItemOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SkillItemOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Skill/UserSkills": {
      "get": {
        "tags": [
          "Skill"
        ],
        "summary": "Get users with their assessed skills.",
        "description": "Deprecated: use `GET importapi/profile/UserSkills` in the Profile section instead.\r\nThis endpoint is kept for backwards compatibility and will be removed in the future.",
        "parameters": [
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter on a specific user by their internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter on a specific user by their employee id. If userID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "teamID",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific team by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "teamCode",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific team by its code. If teamID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "businessUnitID",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific business unit by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "businessUnitName",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific business unit by its name. If businessUnitID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "Optional filter to return only users from a specific country by its code (e.g. \"DE\", \"US\").",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "legalEntityID",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific legal entity by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "legalEntityName",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific legal entity by its name. If legalEntityID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "practiceAreaID",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific practice area by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "practiceAreaName",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific practice area by its name. If practiceAreaID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serviceLineID",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific service line by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "serviceLineName",
            "in": "query",
            "description": "Optional filter to return only users belonging to a specific service line by its name. If serviceLineID is provided, this will be ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of users to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of users to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "modifiedSince",
            "in": "query",
            "description": "When provided, returns only users who have at least one skill with EditDate >= this value.\r\nExpected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601). Please indicate the timezone (\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of users with their assessed skills.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserSkillsOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserSkillsOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserSkillsOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Team/ImportAsync": {
      "post": {
        "tags": [
          "Team"
        ],
        "summary": "Imports a batch of teams.",
        "description": "The import is processed asynchronously. \r\nThe caller can provide a callback URL to be notified about the completion of the import.\r\nOtherwise the returned BatchID might be used to poll the status of the import.",
        "requestBody": {
          "description": "The data to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TeamBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of teams."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TeamBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of teams."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TeamBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of teams."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Import has been accepted and is being processed in the background. \r\nThe reponse contains the designated id.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TeamImportAcceptedResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamImportAcceptedResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamImportAcceptedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "callbacks": {
          "completion": {
            "$request.body#/Callback": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/UserImportBatchResult"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": null
                  }
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Team/ImportSync": {
      "post": {
        "tags": [
          "Team"
        ],
        "summary": "Imports a batch of teams synchronously.",
        "description": "The import is processed synchronously. The callback URL is ignored.",
        "requestBody": {
          "description": "The data to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TeamBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of teams."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TeamBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of teams."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TeamBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of teams."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Import has finished.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TeamImportResults"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamImportResults"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamImportResults"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TeamImportResults"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamImportResults"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamImportResults"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/importapi/Team/ImportStatus": {
      "get": {
        "tags": [
          "Team"
        ],
        "summary": "Returns data about past imports.",
        "parameters": [
          {
            "name": "top",
            "in": "query",
            "description": "Return only the top few. Ordering is done by CreationDate desc.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "batchid",
            "in": "query",
            "description": "Filter for a specific import.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter for imports in a specific status.",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ImportBatchStatusType"
                }
              ]
            }
          },
          {
            "name": "includeRowResults",
            "in": "query",
            "description": "Whether to include individual row results in the response.\r\n            The response might get very big, depending on the number of imported rows. (Default: false)",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BatchImportMetadata"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BatchImportMetadata"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BatchImportMetadata"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Team": {
      "get": {
        "tags": [
          "Team"
        ],
        "summary": "Returns all teams in the system.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamOverview"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamOverview"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamOverview"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/Team/Managers": {
      "get": {
        "tags": [
          "Team"
        ],
        "summary": "Returns team manager assignments.",
        "parameters": [
          {
            "name": "teamID",
            "in": "query",
            "description": "Optional filter on a specific team by its internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "teamCode",
            "in": "query",
            "description": "Optional filter on a specific team by its external code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter to return only assignments of this manager user.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter to return only assignments of the manager with this employee id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of team manager assignments to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of team manager assignments to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the list of team manager assignments.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamManagerExportOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamManagerExportOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamManagerExportOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Team"
        ],
        "summary": "Edits managers of teams in batch.\r\nMore than one manager per team is allowed.",
        "requestBody": {
          "description": "Batch data.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TeamManagerInputBatch"
                  }
                ],
                "description": "Batch of team managers to add or remove."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TeamManagerInputBatch"
                  }
                ],
                "description": "Batch of team managers to add or remove."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TeamManagerInputBatch"
                  }
                ],
                "description": "Batch of team managers to add or remove."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamManagerImportResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamManagerImportResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamManagerImportResult"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamManagerImportResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamManagerImportResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeamManagerImportResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/importapi/TimeRecording/UserTimeSheet": {
      "get": {
        "tags": [
          "TimeRecording"
        ],
        "summary": "Returns a user's timesheet. Every filter besides the owner is optional and AND-combined; the\r\nentry filters (order / project / work package / order position / general activity / activity type /\r\nstatus / the audit bounds) narrow the recording entries only — the working times always follow the\r\ndate range alone.",
        "description": "workDateOnOrAfter, workDateOnOrBefore,\r\n            createdOnOrAfter, lastUpdatedOnOrAfter and\r\n            lastImportedOnOrAfter are the filter names the rest of the Import API uses, so\r\n            this endpoint and `RecordingEntries` can be filtered identically. The older\r\n            startDate, endDate and modifiedAfter keep\r\n            working unchanged and are honoured when their counterpart is not passed.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "Owner user id (or use employeeId / email).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "query",
            "description": "Owner external employee id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "email",
            "in": "query",
            "description": "Owner email.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Optional inclusive lower bound on the work date. Prefer workDateOnOrAfter; ignored when that is set.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Optional inclusive upper bound on the work date. Prefer workDateOnOrBefore; ignored when that is set.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "workDateOnOrAfter",
            "in": "query",
            "description": "Inclusive lower bound on the work date. Wins over startDate.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "workDateOnOrBefore",
            "in": "query",
            "description": "Inclusive upper bound on the work date. Wins over endDate.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "description": "Only entries recorded against a position of this order (wins over orderCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderCode",
            "in": "query",
            "description": "Only entries recorded against a position of the order with this code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectReferenceId",
            "in": "query",
            "description": "Only entries whose subject belongs to this project — directly, through its work package, or through its order position (wins over projectCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectCode",
            "in": "query",
            "description": "Same as projectReferenceId, addressed by the project's code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workPackageId",
            "in": "query",
            "description": "Only entries recorded against this work package (wins over workPackageCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "workPackageCode",
            "in": "query",
            "description": "Only entries recorded against the work package with this code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderPositionId",
            "in": "query",
            "description": "Only entries recorded against this order position (wins over orderPositionCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderPositionCode",
            "in": "query",
            "description": "Only entries recorded against the order position with this code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "generalActivityId",
            "in": "query",
            "description": "Only entries recorded against this general activity (wins over generalActivityCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "generalActivityCode",
            "in": "query",
            "description": "Only entries recorded against the general activity with this code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activityTypeId",
            "in": "query",
            "description": "Only entries whose target uses this activity type (wins over activityTypeCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "activityTypeCode",
            "in": "query",
            "description": "Only entries whose target uses the activity type with this code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activityTypeTargetSystemCode",
            "in": "query",
            "description": "Only entries whose activity type carries this target system code (exact, case-insensitive).\r\nAn alternative to generalActivityTargetSystemCode, not a companion: an entry\r\nhangs off either an activity type or a general activity, so setting both matches nothing. Pass\r\none per call.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "generalActivityTargetSystemCode",
            "in": "query",
            "description": "Only entries whose general activity carries this target system code (exact, case-insensitive).\r\nSee activityTypeTargetSystemCode — the two are alternatives.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activityTypeCategory",
            "in": "query",
            "description": "Only entries whose activity type carries this aggregation category (exact, case-insensitive).\r\nGeneral activities carry no category, so an entry hanging off one never matches this filter.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rateId",
            "in": "query",
            "description": "Only entries priced from this catalog rate: the rate the entry's order position prices its\r\ndefault (work-time) recording type from, i.e. what the entry's time is worth. Wins over\r\nrateCode. An entry outside an order position never matches.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "rateCode",
            "in": "query",
            "description": "The same filter addressed by the rate's unique code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rateCategory",
            "in": "query",
            "description": "Only entries whose rate (as defined for rateId) carries this aggregation\r\ncategory (exact, case-insensitive). The response echoes the matched rate as\r\n`rateId` / `rateCode` / `rateCategory`, so a filtered read never returns a row\r\ncontradicting the query.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Only entries in these states; repeat the parameter for several. Omitted returns every state.\r\nCovers the full lifecycle — Suggested, Open, Submitted, Confirmed, Cancelled, CancellationSubmitted.\r\n`Draft` is still accepted as a legacy alias for `Open` on input.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/TimeRecordingEntryStatus"
              }
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Incremental-sync filter: returns only entries where LastEditDate is strictly greater than this\r\nvalue. Null means no filter.\r\nExpected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601).\r\nPlease indicate the timezone (\"Z\" for UTC), otherwise local time will be assumed.\r\nPrefer lastUpdatedOnOrAfter; ignored when that is set.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Incremental-sync filter: returns only entries created on or after this timestamp. Null means no\r\nfilter. Expected format is \"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601). Please indicate the timezone\r\n(\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "lastUpdatedOnOrAfter",
            "in": "query",
            "description": "Incremental-sync filter: returns only entries whose LastEditDate is on or after this timestamp.\r\nInclusive, unlike the strictly-greater modifiedAfter — the same timestamp in\r\nboth returns one entry more here when an entry was edited at exactly that instant. Wins over\r\nmodifiedAfter. Null means no filter. Expected format is \"YYYY-MM-DDThh:mm:ssZ\"\r\n(see ISO 8601). Please indicate the timezone (\"Z\" for UTC), otherwise local time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "lastImportedOnOrAfter",
            "in": "query",
            "description": "Incremental-sync filter: returns only entries the Import API last wrote on or after this\r\ntimestamp; never-imported entries are excluded. Null means no filter. Expected format is\r\n\"YYYY-MM-DDThh:mm:ssZ\" (see ISO 8601). Please indicate the timezone (\"Z\" for UTC), otherwise\r\nlocal time will be assumed.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The user's timesheet.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TimeRecordingImportOutputBatch"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeRecordingImportOutputBatch"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeRecordingImportOutputBatch"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "TimeRecording"
        ],
        "summary": "Imports a user's timesheet.",
        "requestBody": {
          "description": "The timesheet to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TimeRecordingImportBatch"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TimeRecordingImportBatch"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TimeRecordingImportBatch"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Per-item import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TimeRecordingImportResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeRecordingImportResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeRecordingImportResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/TimeRecording/RecordingEntries": {
      "get": {
        "tags": [
          "TimeRecording"
        ],
        "summary": "Returns recording entries across users, in the shape the POST of this route accepts.",
        "description": "A flat list where every row names its own owner; working times stay on `UserTimeSheet`. All\r\nfilters are optional and AND-combined, the owner identifiers (userId / employeeId / email) are\r\nrepeatable and OR-combined with each other, and every id-or-code pair resolves the id first — a\r\ncode or name matching nothing yields no rows rather than dropping the filter. Timestamp filters are\r\ninclusive and expect ISO-8601 with a timezone (\"YYYY-MM-DDThh:mm:ssZ\"); without one, local time is\r\nassumed. Passing no filter returns the tenant's whole history, so page it with `top` /\r\n`skip` and take the total from `x-row-count`.\r\n\r\n<b>JSON or CSV is chosen by the `Accept` header alone</b> — there is no query parameter for\r\nit. `text/csv` returns CSV; `application/json`, a wildcard or no header returns JSON, the\r\ndefault; quality values are honoured. CSV carries the same rows, with ',' as field terminator,\r\n\\r\\n as row terminator, ISO-8601 dates, a fixed column order, and one trailing column per further\r\nrecording type named by its code.",
        "parameters": [
          {
            "name": "top",
            "in": "query",
            "description": "Entries to return. Without one this can be the tenant's whole history — set it. A negative value is rejected; `0` returns an empty page with `x-row-count: 0` without querying.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Number of entries to skip, for paging.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "Only entries of these users; repeatable.",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "employeeId",
            "in": "query",
            "description": "Only entries of the users with these external employee ids; repeatable.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "email",
            "in": "query",
            "description": "Only entries of the users with these emails; repeatable.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "workDateOnOrAfter",
            "in": "query",
            "description": "Inclusive lower bound on the work date.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "workDateOnOrBefore",
            "in": "query",
            "description": "Inclusive upper bound on the work date.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Only entries created on or after this timestamp.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "lastUpdatedOnOrAfter",
            "in": "query",
            "description": "Incremental sync: only entries whose LastEditDate is on or after this timestamp — inclusive, unlike the strictly-greater `modifiedAfter` of the UserTimeSheet GET.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "lastImportedOnOrAfter",
            "in": "query",
            "description": "Incremental sync: only entries the Import API last wrote on or after this timestamp. Never-imported entries are excluded.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "usersBusinessUnitId",
            "in": "query",
            "description": "Only entries whose owner is in this business unit (wins over usersBusinessUnitName).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "usersBusinessUnitName",
            "in": "query",
            "description": "Same, addressed by the business unit's name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "usersPracticeAreaId",
            "in": "query",
            "description": "Only entries whose owner is in this practice area (wins over usersPracticeAreaName).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "usersPracticeAreaName",
            "in": "query",
            "description": "Same, addressed by the practice area's name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "usersTeamId",
            "in": "query",
            "description": "Only entries whose owner is in this team (wins over usersTeamCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "usersTeamCode",
            "in": "query",
            "description": "Same, addressed by the team's code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "usersLegalEntityId",
            "in": "query",
            "description": "Only entries whose owner belongs to this legal entity (wins over usersLegalEntityName).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "usersLegalEntityName",
            "in": "query",
            "description": "Same, addressed by the legal entity's name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "usersCountryCode",
            "in": "query",
            "description": "Only entries whose owner carries this country code (exact, case-insensitive); a plain code on the user, so there is no id counterpart.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "description": "Only entries recorded against a position of this order (wins over orderCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderCode",
            "in": "query",
            "description": "Same, addressed by the order's code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectReferenceId",
            "in": "query",
            "description": "Only entries whose subject belongs to this project — directly, through its work package, or through its order position (wins over projectCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectCode",
            "in": "query",
            "description": "Same, addressed by the project's code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workPackageId",
            "in": "query",
            "description": "Only entries recorded against this work package (wins over workPackageCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "workPackageCode",
            "in": "query",
            "description": "Same, addressed by the work package's code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderPositionId",
            "in": "query",
            "description": "Only entries recorded against this order position (wins over orderPositionCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderPositionCode",
            "in": "query",
            "description": "Same, addressed by the order position's code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "generalActivityId",
            "in": "query",
            "description": "Only entries recorded against this general activity (wins over generalActivityCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "generalActivityCode",
            "in": "query",
            "description": "Same, addressed by the general activity's code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activityTypeId",
            "in": "query",
            "description": "Only entries whose target uses this activity type (wins over activityTypeCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "activityTypeCode",
            "in": "query",
            "description": "Same, addressed by the activity type's code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activityTypeTargetSystemCode",
            "in": "query",
            "description": "Only entries whose activity type carries this target system code (exact, case-insensitive). An alternative to generalActivityTargetSystemCode, not a companion: an entry hangs off one or the other, so setting both matches nothing.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "generalActivityTargetSystemCode",
            "in": "query",
            "description": "The same for the general activity; see activityTypeTargetSystemCode.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activityTypeCategory",
            "in": "query",
            "description": "Only entries whose activity type carries this aggregation category (exact, case-insensitive).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rateId",
            "in": "query",
            "description": "Only entries whose recording target prices its work time from this catalog rate (wins over rateCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "rateCode",
            "in": "query",
            "description": "Same, addressed by the rate's unique code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rateCategory",
            "in": "query",
            "description": "Only entries whose work-time rate carries this aggregation category (exact, case-insensitive). The response echoes the matched rate as `rateId` / `rateCode` / `rateCategory`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Only entries in these states; repeatable. Omitted returns every state.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/TimeRecordingEntryStatus"
              }
            }
          },
          {
            "name": "recordingEntryId",
            "in": "query",
            "description": "Only the entry with this internal id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "recordingEntryCode",
            "in": "query",
            "description": "Only entries carrying this external key (unique per user, so several owners may match).",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The matching recording entries — JSON, or CSV when `Accept` asks for `text/csv`.",
            "headers": {
              "x-row-count": {
                "description": "The number of total rows matching the filter, not just the current page."
              },
              "x-page-row-count": {
                "description": "The number of returned rows in the current response body."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecordingEntryImportReadItem"
                  }
                }
              },
              "text/csv": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecordingEntryImportReadItem"
                  }
                }
              }
            }
          },
          "400": {
            "description": "A negative `top` or `skip`, or an unusable filter value.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/csv": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "TimeRecording"
        ],
        "summary": "Imports recording entries across users, in the same shape the GET of this route returns.",
        "description": "A flat list where every item names its own owner. Each item is created, updated or deleted\r\ndepending on its identifier (`RecordingEntryID`, else the per-user `RecordingEntryCode`)\r\nand its `Deleted` flag, and items are processed independently: one item's failure is reported\r\nin its own result and the rest still run. Working times stay on `UserTimeSheet`.",
        "requestBody": {
          "description": "The recording entries to import.",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/RecordingEntryImportItem"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/RecordingEntryImportItem"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/RecordingEntryImportItem"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Per-item import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecordingEntryImportResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecordingEntryImportResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecordingEntryImportResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/TimeRecording/RecordingTargets": {
      "get": {
        "tags": [
          "TimeRecording"
        ],
        "summary": "Returns the tenant's recording targets across all subject kinds (project / work package /\r\ngeneral activity / order position), each identified by both ids and codes. An order-position\r\ntarget also carries the project or work package it records against and its owning order, so it\r\ncan be filtered by any of them. All filters are optional and AND-combined; subject filters\r\naccept an id or a code. Only active targets are returned unless isActive is\r\nset (`true` = active only, `false` = inactive only). Read-only — targets are\r\ncreated/changed via the owning-entity import endpoints.",
        "parameters": [
          {
            "name": "projectReferenceId",
            "in": "query",
            "description": "Only targets recording against this project (wins over projectCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectCode",
            "in": "query",
            "description": "Only targets recording against the project with this code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workPackageId",
            "in": "query",
            "description": "Only targets recording against this work package (wins over workPackageCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "workPackageCode",
            "in": "query",
            "description": "Only targets recording against the work package with this code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderPositionId",
            "in": "query",
            "description": "Only targets recording against this order position (wins over orderPositionCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderPositionCode",
            "in": "query",
            "description": "Only targets recording against the order position with this code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "description": "Only targets on a position of this order (wins over orderCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "orderCode",
            "in": "query",
            "description": "Only targets on a position of the order with this code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "generalActivityId",
            "in": "query",
            "description": "Only targets of this general activity (wins over generalActivityCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "generalActivityCode",
            "in": "query",
            "description": "Only targets of the general activity with this code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activityTypeId",
            "in": "query",
            "description": "Only targets using this activity type (wins over activityTypeCode).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "activityTypeCode",
            "in": "query",
            "description": "Only targets using the activity type with this code.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activityTypeTargetSystemCode",
            "in": "query",
            "description": "Only targets whose activity type carries this target system code (exact, case-insensitive).\r\nAn alternative to generalActivityTargetSystemCode, not a companion: a target\r\ncarries either an activity type or a general activity, so setting both matches nothing. Pass one\r\nper call.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "generalActivityTargetSystemCode",
            "in": "query",
            "description": "Only targets whose general activity carries this target system code (exact, case-insensitive).\r\nSee activityTypeTargetSystemCode — the two are alternatives.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activityTypeCategory",
            "in": "query",
            "description": "Only targets whose activity type carries this aggregation category (exact, case-insensitive).\r\nGeneral activities carry no category, so a target hanging off one never matches this filter.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "isActive",
            "in": "query",
            "description": "Active targets only when omitted or `true`; `false` returns inactive ones.",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The matching recording targets.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecordingTargetOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecordingTargetOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecordingTargetOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/User/Echo": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Returns the input as a test for the workings of this import API setup.",
        "parameters": [
          {
            "name": "input",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/User/ImportAsync": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Imports a batch of users.",
        "description": "The import is processed asynchronously. \r\nThe caller can provide a callback URL to be notified about the completion of the import.\r\nOtherwise the returned BatchID might be used to poll the status of the import.",
        "requestBody": {
          "description": "The data to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UserBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of users to import."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UserBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of users to import."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UserBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of users to import."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The import data has been accepted and is being processed in the background.\r\nThe response returns the designated id of the import batch.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/UserImportAcceptedResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserImportAcceptedResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserImportAcceptedResponse"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "callbacks": {
          "completion": {
            "$request.body#/Callback": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/UserImportBatchResult"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": null
                  }
                }
              }
            }
          }
        }
      }
    },
    "/importapi/User/ImportSync": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Imports a batch of users synchronously.",
        "description": "The import is processed synchronously. The callback URL is ignored.",
        "requestBody": {
          "description": "The data to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UserBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of users to import."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UserBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of users to import."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UserBatchInput"
                  }
                ],
                "description": "Data container for a whole batch of users to import."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Import has finished.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/UserImportResults"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserImportResults"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserImportResults"
                }
              }
            }
          },
          "500": {
            "description": "One or more items have failed. \r\n            Others items may have succedded. \r\n            See response body for more information.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/UserImportResults"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserImportResults"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserImportResults"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/importapi/User/ImportStatus": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Returns data about past imports.",
        "parameters": [
          {
            "name": "top",
            "in": "query",
            "description": "Return only the top few. Ordering is done by CreationDate descending.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "batchid",
            "in": "query",
            "description": "Filter for a specific import.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter for imports in a specific status.",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ImportBatchStatusType"
                }
              ]
            }
          },
          {
            "name": "includeRowResults",
            "in": "query",
            "description": "Whether to include individual row results in the response.\r\n            The response might get very big, depending on the number of imported rows. (Default: false)",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserBatchImportMetadata"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserBatchImportMetadata"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserBatchImportMetadata"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/User": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Returns all users in the system.",
        "description": "The returned list might be empty if no users match the given criteria.\r\nUsers are ordered by their user id. Since userid matches at most one user, top and skip are ignored when it is provided.",
        "parameters": [
          {
            "name": "userid",
            "in": "query",
            "description": "Filter for the user id of an user.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeID",
            "in": "query",
            "description": "Optional filter for the employee id of an user.\r\n            If userid is provided, then the employeeID filter is ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "email",
            "in": "query",
            "description": "Optional filter for the email of an user.\r\n            If userid or employeeID is provided, then the email filter is ignored.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Optional number of users to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Optional number of users to skip. This is useful for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "Case-insensitive exact match on CountryCode. Null or empty means no filter.\r\n            Applied independently of userid/employeeID/email.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserOverview"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserOverview"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserOverview"
                  }
                }
              }
            }
          },
          "400": {
            "description": "If the top or skip parameters are negative.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/User/EmployeeTypes": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Returns all employee types. Names are returned in English.",
        "responses": {
          "200": {
            "description": "Returns the list of employee types.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EmployeeTypeOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EmployeeTypeOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EmployeeTypeOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/User/CustomProperties": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Returns a list of all custom properties and their description for users.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/User/ProfileImage": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Takes the profile picture and assigns it to the user",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "The userid of the user whose picture is to be set.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "employeeId",
            "in": "query",
            "description": "The employee id of the user whose picture is to be set. Will be ignored if userid is provided",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "email",
            "in": "query",
            "description": "The email of the user whose picture is to be set. Will be ignored if either userid or employeeid is provided",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "formFile": {
                    "type": "string",
                    "description": "The profile picture that is to be set. The accepted file formats are .jpg and .png. Other formats are unfortunately not supported.",
                    "format": "binary"
                  }
                }
              },
              "encoding": {
                "formFile": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/User/AuthorizationRoles": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Returns all authorization roles.",
        "description": "Use this endpoint to retrieve the ids or names of authorization roles to reference them in other API calls.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AuthorizationRoleOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AuthorizationRoleOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AuthorizationRoleOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/UserHolidayCalendar/Import": {
      "post": {
        "tags": [
          "UserHolidayCalendar"
        ],
        "summary": "Endpoint to import the holiday calendar periods of users. Can also be used to create, update or delete\r\nsingle periods.",
        "description": "A period is addressed by its userHolidayCalendarID or its userHolidayCalendarCode; without either, a new\r\none is created. The calendar to apply is given as holidayListID or holidayListCode — an explicit ID wins\r\nand must exist, while a code may still add a standard calendar the client does not use yet. The periods\r\nof one user must not overlap — an overlapping item fails without affecting the rest of the batch. Gaps\r\nare allowed and mean the user has no public holidays on those days, and a user does not need a holiday\r\ncalendar at all.",
        "requestBody": {
          "description": "Object with a list of Decidalo.Domain.Models.Holidays.Import.UserHolidayCalendarImportItem",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportUserHolidayCalendarsCommand"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportUserHolidayCalendarsCommand"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ImportUserHolidayCalendarsCommand"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserHolidayCalendarImportResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserHolidayCalendarImportResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserHolidayCalendarImportResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/UserHolidayCalendar": {
      "get": {
        "tags": [
          "UserHolidayCalendar"
        ],
        "summary": "Returns the holiday calendar periods of all users, or of one user.",
        "parameters": [
          {
            "name": "userID",
            "in": "query",
            "description": "Optional filter for the user whose periods are returned.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserHolidayCalendarOutputItem"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserHolidayCalendarOutputItem"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserHolidayCalendarOutputItem"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/WorkingTimePattern/Import": {
      "post": {
        "tags": [
          "WorkingTimePattern"
        ],
        "summary": "Creates and Updates a batch of UserWorkingTimePatterns.",
        "description": "This endpoint creates and updates UserWorkingTimePatterns per user (upsert):\r\nan item whose UserWorkingTimePatternID or UserWorkingTimePatternCode matches one of the user's existing patterns updates it; any other item creates a new pattern.\r\n'StartDate', 'HoursPerWeek' and 'HoursPerDay' are mandatory only when an item creates a new pattern.\r\n            \r\nThe input allows only for StartDates and no EndDates:\r\nall UserWorkingTimePatterns are created / updated with the given StartDates\r\nand the corresponding end dates are calculated automatically to one day before the next start date of all UserWorkingTimePatterns.",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UserWorkingProfileInput"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UserWorkingProfileInput"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UserWorkingProfileInput"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ImportUserWorkingProfileResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ImportUserWorkingProfileResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ImportUserWorkingProfileResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/WorkingTimePattern": {
      "get": {
        "tags": [
          "WorkingTimePattern"
        ],
        "summary": "The end point to get all working time patterns.",
        "parameters": [
          {
            "name": "UserId",
            "in": "query",
            "description": "The optional field user id which might be used for filtering the results.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetImportUserWorkingProfileResult"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetImportUserWorkingProfileResult"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GetImportUserWorkingProfileResult"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/WorkPackage/{workpackageid}": {
      "get": {
        "tags": [
          "WorkPackage"
        ],
        "summary": "Returns a specific work package.",
        "operationId": "GetWorkPackage",
        "parameters": [
          {
            "name": "workpackageid",
            "in": "path",
            "description": "decídalo identifier of the work package.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageOutput"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageOutput"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageOutput"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/WorkPackage": {
      "get": {
        "tags": [
          "WorkPackage"
        ],
        "summary": "Returns work packages matching the given filters. Connected properties can be given by id or by\r\ncode (id wins): project (`projectID` / `projectCode`). Further filters: work-package\r\ncode, status, parent work package, the time-recording flag, a start/end date window\r\n(`startDateBefore` / `endDateAfter`), and incremental-sync timestamps\r\n(`createdOnOrAfter` / `lastUpdatedOnOrAfter`). Supports `top` / `skip` paging.",
        "parameters": [
          {
            "name": "WorkPackageID",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "ProjectID",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "ProjectCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "WorkPackageCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Status",
            "in": "query",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/WorkPackageStatus"
                }
              ]
            }
          },
          {
            "name": "ParentWorkPackageID",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "TimeRecordingAllowed",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "StartDateBefore",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "EndDateAfter",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "CreatedOnOrAfter",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "LastUpdatedOnOrAfter",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "Top",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "WorkPackage"
        ],
        "summary": "Creates, updates or deletes a work package.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageInput"
                  }
                ],
                "description": "Input for the single-work-package import endpoint.\r\nSupports create, update and delete of one work package per request."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageInput"
                  }
                ],
                "description": "Input for the single-work-package import endpoint.\r\nSupports create, update and delete of one work package per request."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageInput"
                  }
                ],
                "description": "Input for the single-work-package import endpoint.\r\nSupports create, update and delete of one work package per request."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImportWorkPackageCommandResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportWorkPackageCommandResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportWorkPackageCommandResult"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "headers": {
              "Location": {
                "description": "Contains a url to the new work package."
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImportWorkPackageCommandResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportWorkPackageCommandResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportWorkPackageCommandResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/WorkPackage/Candidates": {
      "post": {
        "tags": [
          "WorkPackage"
        ],
        "summary": "Imports (creates or deletes) work package candidate assignments in batch.\r\nEach item is processed independently; per-item failures do not abort the batch.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageCandidateBatchInput"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageCandidateBatchInput"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageCandidateBatchInput"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageCandidateBatchResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageCandidateBatchResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageCandidateBatchResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "WorkPackage"
        ],
        "summary": "Returns all work package candidate assignments for the tenant, optionally filtered by project or work package.\r\nThe response shape is identical to the POST request body and can be submitted to POST without modification.",
        "parameters": [
          {
            "name": "projectID",
            "in": "query",
            "description": "Optional: filter by project (ProjectReferenceID).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "workPackageID",
            "in": "query",
            "description": "Optional: filter by work package.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageCandidateBatchInput"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageCandidateBatchInput"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageCandidateBatchInput"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/WorkPackage/RecordingTargets": {
      "get": {
        "tags": [
          "WorkPackage"
        ],
        "summary": "Returns a work package's allowed activity types (work-package recording targets).",
        "parameters": [
          {
            "name": "workPackageId",
            "in": "query",
            "description": "Work-package id (wins over the code when both are given).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "workPackageCode",
            "in": "query",
            "description": "Work-package code.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The recording targets in the import shape (re-postable).",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageRecordingTargetOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageRecordingTargetOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageRecordingTargetOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "WorkPackage"
        ],
        "summary": "Creates, updates, or removes a work package's allowed activity types (work-package recording targets), one row per (work package, activity type).",
        "requestBody": {
          "description": "The recording targets to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageRecordingTargetImportBatch"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageRecordingTargetImportBatch"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageRecordingTargetImportBatch"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Per-row import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageRecordingTargetImportBatchResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageRecordingTargetImportBatchResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageRecordingTargetImportBatchResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/WorkPackage/OrderPositions": {
      "get": {
        "tags": [
          "WorkPackage"
        ],
        "summary": "Returns the order positions currently linked to a work package.",
        "parameters": [
          {
            "name": "workPackageId",
            "in": "query",
            "description": "Work-package id (wins over the code when both are given).",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "workPackageCode",
            "in": "query",
            "description": "Work-package code.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The linked order positions in the import shape (re-postable).",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageOrderPositionOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageOrderPositionOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageOrderPositionOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "WorkPackage"
        ],
        "summary": "Adds or removes work-package ↔ order-position links, one row per (work package, position).",
        "requestBody": {
          "description": "The links to import.",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageOrderPositionImportBatch"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageOrderPositionImportBatch"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/WorkPackageOrderPositionImportBatch"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Per-row import results.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageOrderPositionImportBatchResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageOrderPositionImportBatchResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkPackageOrderPositionImportBatchResult"
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/WorkPackage/OrderPositions/RecordingTargets": {
      "get": {
        "tags": [
          "WorkPackage"
        ],
        "summary": "Returns the recording targets that a work-package ↔ order-position link materialises, i.e. what\r\ntime booked on such a pair is attributed to. Every filter is optional and AND-combined; where an\r\nid and a code are offered for the same entity the id wins, and an unknown code matches nothing.\r\nSupports `top` / `skip` paging over a stable order.",
        "description": "Read-only. These targets are not written here — they follow from the link\r\n(`POST WorkPackage/OrderPositions`, `POST Order/Position/WorkPackages`) and from the\r\nposition's activity types (`POST Order/Position/RecordingTargets`). For the other target\r\nshapes use `GET WorkPackage/RecordingTargets` (work package alone),\r\n`GET Order/Position/RecordingTargets` (position + project) or\r\n`GET TimeRecording/RecordingTargets` (the whole catalog).",
        "parameters": [
          {
            "name": "WorkPackageLastUpdatedOnOrAfter",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "OrderPositionActivityTypeID",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "OrderPositionActivityTypeCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "OrderPositionActivityTypeTargetSystemCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "OrderPositionActivityTypeCategory",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "WorkPackageID",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "WorkPackageCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "OrderPositionID",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "OrderPositionCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "OrderID",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "OrderCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ProjectID",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "ProjectCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "RecordingTypeID",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "RecordingTypeCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "IsActive",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "IsBillable",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "OrderPositionLastUpdatedOnOrAfter",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "Top",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The matching recording targets.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageOrderPositionRecordingTargetOutput"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageOrderPositionRecordingTargetOutput"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkPackageOrderPositionRecordingTargetOutput"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/importapi/WorkPackage/CustomProperties": {
      "get": {
        "tags": [
          "WorkPackage"
        ],
        "summary": "Returns a description of all possible custom properties for work packages.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomProperty"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Input data is invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "500": {
            "description": "Unexpected error",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AbsenceImportItem": {
        "type": "object",
        "properties": {
          "absenceId": {
            "type": "integer",
            "description": "Internal ID of the absence.",
            "format": "int32",
            "nullable": true
          },
          "absenceCode": {
            "type": "string",
            "description": "Technical identifier",
            "nullable": true
          },
          "userId": {
            "type": "integer",
            "description": "ID of the user whose absences are imported",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "Customer-specific user ID",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "Start of the absence.",
            "format": "date",
            "example": "2025-01-01"
          },
          "endDate": {
            "type": "string",
            "description": "End of the absence.",
            "format": "date",
            "example": "2025-01-01"
          },
          "subject": {
            "type": "string",
            "description": "Informal text displayed in the UI",
            "nullable": true
          },
          "minutesPerDay": {
            "type": "number",
            "description": "Absent minutes per day, supporting half days (e.g. 240 for half of an 8-hour day). Omit for a full\r\nworking day. On an update, omitting it keeps the value already stored.",
            "format": "double",
            "default": null,
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "Flag indicating whether the absence should be deleted. If false, absence is created. Default is false.",
            "default": false,
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an imported absence. Will be created or deleted."
      },
      "AbsenceImportResult": {
        "type": "object",
        "properties": {
          "absenceId": {
            "type": "integer",
            "description": "Internal ID of the absence.",
            "format": "int32",
            "nullable": true
          },
          "userId": {
            "type": "integer",
            "description": "ID of the user whose absences are imported",
            "format": "int32",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "Start of the absence.",
            "format": "date",
            "example": "2025-01-01"
          },
          "endDate": {
            "type": "string",
            "description": "End of the absence.",
            "format": "date",
            "example": "2025-01-01"
          },
          "subject": {
            "type": "string",
            "description": "Informal text displayed in the UI",
            "nullable": true
          },
          "absenceCode": {
            "type": "string",
            "description": "Technical identifier",
            "nullable": true
          },
          "minutesPerDay": {
            "type": "number",
            "description": "Absent minutes per day, supporting half days. Null means a full working day.",
            "format": "double",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "Customer-specific user ID",
            "nullable": true
          },
          "importStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "description": "Describes the result of the import.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an absence as a result of an import."
      },
      "AbsenceOutputItem": {
        "type": "object",
        "properties": {
          "absenceId": {
            "type": "integer",
            "description": "Internal ID of the absence.",
            "format": "int32",
            "nullable": true
          },
          "userId": {
            "type": "integer",
            "description": "ID of the user whose absences are imported",
            "format": "int32",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "Start of the absence.",
            "format": "date",
            "example": "2025-01-01"
          },
          "endDate": {
            "type": "string",
            "description": "End of the absence.",
            "format": "date",
            "example": "2025-01-01"
          },
          "subject": {
            "type": "string",
            "description": "Informal text displayed in the UI",
            "nullable": true
          },
          "absenceCode": {
            "type": "string",
            "description": "Technical identifier",
            "nullable": true
          },
          "minutesPerDay": {
            "type": "number",
            "description": "Absent minutes per day, supporting half days. Null means a full working day.",
            "format": "double",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "Customer-specific user ID",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an absence."
      },
      "AbsenceOutputResult": {
        "type": "object",
        "properties": {
          "absences": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AbsenceOutputItem"
            },
            "description": "The list of absences.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a list of absences."
      },
      "AccountingTypeOutput": {
        "required": [
          "accountingTypeID"
        ],
        "type": "object",
        "properties": {
          "accountingTypeID": {
            "type": "integer",
            "description": "decídalo id of the accounting type.",
            "format": "int32"
          },
          "accountingTypeName": {
            "type": "string",
            "description": "Display name of the accounting type.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Short display information of an accounting type."
      },
      "AccountingTypeReferenceInput": {
        "type": "object",
        "properties": {
          "accountingTypeID": {
            "type": "integer",
            "description": "decídalo id of the accounting type.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "accountingTypeName": {
            "maxLength": 100,
            "type": "string",
            "description": "Name of the accounting type - the internal name or any translated name.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to an accounting type for a resource request."
      },
      "ActivityTypeImportItem": {
        "type": "object",
        "properties": {
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "billableByDefault": {
            "type": "boolean",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "targetSystemCode": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ActivityTypeTranslationDto"
            },
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ActivityTypeResult": {
        "type": "object",
        "properties": {
          "activityTypeID": {
            "type": "integer",
            "format": "int32"
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "billableByDefault": {
            "type": "boolean"
          },
          "isActive": {
            "type": "boolean"
          },
          "targetSystemCode": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ActivityTypeTranslationDto"
            },
            "nullable": true
          },
          "isDeletable": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ActivityTypeTranslationDto": {
        "type": "object",
        "properties": {
          "languageID": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ActivityTypeTranslationDtoIReadOnlyListOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ActivityTypeTranslationDto"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AssessedSkillOutput": {
        "type": "object",
        "properties": {
          "skillID": {
            "type": "integer",
            "description": "The internal id of the skill.",
            "format": "int32"
          },
          "skillCode": {
            "type": "string",
            "description": "The external code of the skill.",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The name of the skill.",
            "nullable": true
          },
          "categoryName": {
            "type": "string",
            "description": "The name of the category the skill belongs to.",
            "nullable": true
          },
          "parentCategoryName": {
            "type": "string",
            "description": "The name of the parent category the skill's category belongs to.",
            "nullable": true
          },
          "skillLevel": {
            "type": "integer",
            "description": "The assessed skill level.",
            "format": "int32",
            "nullable": true
          },
          "isTopSkill": {
            "type": "boolean",
            "description": "Indicates whether the skill is marked as a top skill for the user."
          }
        },
        "additionalProperties": false,
        "description": "Assessed skill entry for a user, for the Import API."
      },
      "AuthoriationRoleCategorization": {
        "required": [
          "hasUserAdminPrivileges",
          "isDefaultEmployee",
          "isDefaultResourceGroupManager",
          "isDefaultTeamLead"
        ],
        "type": "object",
        "properties": {
          "isDefaultEmployee": {
            "type": "boolean",
            "description": "Flag to indicate whether this is the role setup as the default for newly created users with logins,\r\nthat don't have any special permissions."
          },
          "isDefaultTeamLead": {
            "type": "boolean",
            "description": "Flag to indicate whether this role is setup as the default for any user that is made a team lead."
          },
          "isDefaultResourceGroupManager": {
            "type": "boolean",
            "description": "Flag to indicate whether this role is setup as the default for any user that is made a manager of a resource group."
          },
          "hasUserAdminPrivileges": {
            "type": "boolean",
            "description": "Flag to indicate whether this role grants admin permissions on user management."
          }
        },
        "additionalProperties": false
      },
      "AuthorizationRoleOutput": {
        "required": [
          "categorization",
          "description",
          "identifier"
        ],
        "type": "object",
        "properties": {
          "identifier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AuthorizationRoleReferenceOutput"
              }
            ],
            "description": "The identifier properties for a role.",
            "readOnly": true
          },
          "description": {
            "minLength": 1,
            "type": "string",
            "description": "A short description for the purpose of the role.",
            "readOnly": true
          },
          "categorization": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AuthoriationRoleCategorization"
              }
            ],
            "description": "A set of flags to categorize the roles purpose.",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "AuthorizationRoleReferenceOutput": {
        "required": [
          "authorizationRoleID",
          "authorizationRoleName"
        ],
        "type": "object",
        "properties": {
          "authorizationRoleID": {
            "type": "integer",
            "description": "The id if this role.",
            "format": "int32"
          },
          "authorizationRoleName": {
            "maxLength": 255,
            "minLength": 0,
            "type": "string",
            "description": "A basic display name for the role.\r\nCan be used as identifer in other API endpoints."
          }
        },
        "additionalProperties": false
      },
      "BatchImportMetadata": {
        "type": "object",
        "properties": {
          "batchID": {
            "type": "string",
            "description": "ID of the batch.",
            "format": "uuid"
          },
          "creationDate": {
            "type": "string",
            "description": "Timestamp when the batch was accepted.",
            "format": "date-time"
          },
          "startDate": {
            "type": "string",
            "description": "Timestamp of the start of processing.\r\nCan be null if processing has not started yet.",
            "format": "date-time",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "description": "Timestamp of the end of processing.\r\nCan be null if processing has not ended yet.",
            "format": "date-time",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportBatchStatus"
              }
            ],
            "description": "The current status of the batch.",
            "nullable": true
          },
          "rowResults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamImportRowResult"
            },
            "description": "Optional list of row results for each imported team.\r\nThis property is only set if requested through the parameter \"includeRowResults\".",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents the current status about any batch import."
      },
      "BillingTypeOutput": {
        "required": [
          "billingTypeID"
        ],
        "type": "object",
        "properties": {
          "billingTypeID": {
            "type": "integer",
            "description": "decídalo id of the billing type.",
            "format": "int32"
          },
          "billingTypeName": {
            "type": "string",
            "description": "Display name of the billing type.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a billing type."
      },
      "BillingTypeReferenceInput": {
        "type": "object",
        "properties": {
          "billingTypeID": {
            "type": "integer",
            "description": "Internal ID of the billing type. Takes precedence over Decidalo.Domain.Models.WorkPackage.Import.BillingTypeReferenceInput.BillingTypeName.",
            "format": "int32",
            "nullable": true
          },
          "billingTypeName": {
            "type": "string",
            "description": "Display name of the billing type. Resolved by case-insensitive match against the\r\nlanguage-neutral `BillingType` column in `workpackages.billingtypes`.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines a reference to a billing type of a work package."
      },
      "BookingAccountingType": {
        "type": "object",
        "properties": {
          "bookingAccountingTypeID": {
            "type": "integer",
            "format": "int32"
          },
          "bookingAccountingTypeName": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "type": "integer",
            "format": "int32"
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "description": "The name of the accounting type per language, as shown in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BookingBatchInput": {
        "required": [
          "elements"
        ],
        "type": "object",
        "properties": {
          "elements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BookingInput"
            },
            "description": "List of users to import."
          }
        },
        "additionalProperties": false,
        "description": "Data container for a whole batch of users to import."
      },
      "BookingCommentBatchInput": {
        "required": [
          "bookingComments"
        ],
        "type": "object",
        "properties": {
          "bookingComments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BookingCommentInput"
            },
            "description": "The rows to import, one per comment operation. Processed sequentially, in this order.\r\nAn absent, null, or empty list is a valid no-op batch."
          }
        },
        "additionalProperties": false,
        "description": "The envelope for a batch of booking-comment import rows. Comments are allowed to belong to\r\ndifferent bookings within the same batch and are imported in request order."
      },
      "BookingCommentImportResult": {
        "required": [
          "isSuccessful"
        ],
        "type": "object",
        "properties": {
          "isSuccessful": {
            "type": "boolean",
            "description": "Whether the row's comment operation (create, update, or delete) completed successfully."
          },
          "bookingID": {
            "type": "integer",
            "description": "The resolved booking's decídalo id. Populated whenever booking resolution succeeded for\r\nthis row, independent of whether the comment operation itself then succeeded or failed.",
            "format": "int32",
            "nullable": true
          },
          "commentID": {
            "type": "integer",
            "description": "The comment's decídalo id. Populated whenever the comment was identified, created, or\r\nupdated for this row (including the create-only deletion-rejection path, where the\r\npre-existing id is echoed).",
            "format": "int32",
            "nullable": true
          },
          "errorMessage": {
            "type": "string",
            "description": "Describes why the row failed. Identifies the row by its supplied `BookingID`/`BookingCode`.\r\nNull when the row succeeded.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The outcome of importing a single Decidalo.Domain.Models.Bookings.Import.BookingCommentInput row."
      },
      "BookingCommentInput": {
        "required": [
          "booking",
          "comment"
        ],
        "type": "object",
        "properties": {
          "booking": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BookingReferenceIdentityInput"
              }
            ],
            "description": "The booking the comment is attached to. Resolved independently of every other row in the batch."
          },
          "comment": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CommentPropertiesInput"
              }
            ],
            "description": "The comment to create, update, or delete on the resolved booking."
          }
        },
        "additionalProperties": false,
        "description": "A single row of a booking-comment import batch: the booking the comment belongs to plus the comment's own properties."
      },
      "BookingExtendOption": {
        "enum": [
          "UpdateBookingsAndPlanning",
          "UpdateBookingDatesOnly",
          "RedistributePersonDays"
        ],
        "type": "string"
      },
      "BookingImportResult": {
        "type": "object",
        "properties": {
          "bookingID": {
            "type": "integer",
            "description": "The internal ID of the booking.",
            "format": "int32",
            "nullable": true
          },
          "bookingCode": {
            "type": "string",
            "description": "The external booking code.",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "The external id of the booked Candidate.",
            "nullable": true
          },
          "userID": {
            "type": "integer",
            "description": "ID of the booked Candidate.",
            "format": "int32",
            "nullable": true
          },
          "companyID": {
            "type": "integer",
            "description": "ID of the Company.",
            "format": "int32",
            "nullable": true
          },
          "importStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "description": "The result status for the import item.\r\nIndicates, whether the booking was created or updated.",
            "nullable": true
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": {
              "nullable": true
            },
            "description": "The Custom properties.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BookingInput": {
        "required": [
          "subject"
        ],
        "type": "object",
        "properties": {
          "bookingID": {
            "type": "integer",
            "description": "The unique internal identifier of the booking. Either this or the bookingCode must be provided.",
            "format": "int32",
            "nullable": true
          },
          "bookingCode": {
            "type": "string",
            "description": "Unique external identifier for a booking entry. Either this or the bookingID must be provided.",
            "nullable": true
          },
          "absenceCode": {
            "type": "string",
            "description": "An AbsenceCode that can be used to identify bookings across different apps.",
            "nullable": true,
            "deprecated": true
          },
          "userID": {
            "type": "integer",
            "description": "The decídalo internal user id.",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "The external id of the booked Candidate.",
            "nullable": true
          },
          "email": {
            "maxLength": 254,
            "type": "string",
            "description": "The email address of the booked Candidate.\r\nThe email must be uniquely assigned to a user in the system.",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "Start date of the booking. If omitted, the existing start date is left unchanged; send an\r\nexplicit null to clear it.",
            "format": "date-time",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "description": "End date of the booking. If omitted, the existing end date is left unchanged; send an\r\nexplicit null to clear it.",
            "format": "date-time",
            "nullable": true
          },
          "capacity": {
            "type": "number",
            "description": "Booked capacity as a fraction of a full-time allocation (1.0 = 100% booked).\r\nIf Capacity is provided but Decidalo.Import.Host.Contracts.BookingBatchInput.BookingInput.PersonDays is omitted, PersonDays is calculated from\r\nthis capacity and the booking's StartDate/EndDate using the standard working-time conversion\r\n(instead of defaulting). Provide both to set them independently; provide neither to leave both\r\nunchanged. Derivation is skipped when StartDate or EndDate is missing.",
            "format": "float",
            "nullable": true
          },
          "subject": {
            "maxLength": 254,
            "type": "string",
            "description": "The name of the booking"
          },
          "companyID": {
            "type": "integer",
            "description": "The internal ID of the company that is the booking's customer.\r\nWhen this (and CompanyCode) is omitted on a booking that is newly linked to a project, the\r\ncustomer is inherited from the project. An explicitly provided value is always respected.",
            "format": "int32",
            "nullable": true
          },
          "companyCode": {
            "maxLength": 100,
            "type": "string",
            "description": "The external code identifying the company that is the booking's customer.\r\nWhen this (and CompanyID) is omitted on a booking that is newly linked to a project, the\r\ncustomer is inherited from the project. An explicitly provided value is always respected.",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "description": "Flag to indicate, whether this booking should be deleted.\r\n(Default: false)",
            "default": false,
            "nullable": true
          },
          "dailyPlanning": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DailyPlanningItem"
            },
            "description": "An optional list of daily planning entries.\r\nEntries with a planned time will be added if missing or will overwrite existing planning data.\r\nEntries with zero planned time will be removed.\r\nAny planning days that are *not* provided will be left unchanged.\r\nCannot be combined with Decidalo.Import.Host.Contracts.BookingBatchInput.BookingInput.WeeklyPlanning on the same booking.",
            "nullable": true
          },
          "weeklyPlanning": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeeklyPlanningItem"
            },
            "description": "An optional list of weekly planning entries, expressed in hours per week (HoursPerWeek).\r\nEach entry's DateInWeek may be any date within the target week — it is normalized to that\r\nweek (Monday-based) when applied. Entries with a planned effort overwrite existing\r\nplanning for that week; entries with zero effort remove it. Weeks that are *not* provided\r\nare left unchanged. The weekly effort is distributed across the week's working days, taking\r\nthe candidate's working profile and absences into account.\r\nOnly one of Decidalo.Import.Host.Contracts.BookingBatchInput.BookingInput.DailyPlanning, Decidalo.Import.Host.Contracts.BookingBatchInput.BookingInput.WeeklyPlanning or\r\nDecidalo.Import.Host.Contracts.BookingBatchInput.BookingInput.MonthlyPlanning may be provided on the same booking.",
            "nullable": true
          },
          "monthlyPlanning": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonthlyPlanningItem"
            },
            "description": "An optional list of monthly planning entries, expressed in hours per month (HoursPerMonth).\r\nEach entry's DateInMonth may be any date within the target month — it is normalized to that\r\nmonth (first-of-month) when applied. Entries with a planned effort overwrite existing\r\nplanning for that month; entries with zero effort remove it. Months that are *not*\r\nprovided are left unchanged. The monthly effort is distributed across the month's working days,\r\ntaking the candidate's working profile and absences into account.\r\nOnly one of Decidalo.Import.Host.Contracts.BookingBatchInput.BookingInput.DailyPlanning, Decidalo.Import.Host.Contracts.BookingBatchInput.BookingInput.WeeklyPlanning or\r\nDecidalo.Import.Host.Contracts.BookingBatchInput.BookingInput.MonthlyPlanning may be provided on the same booking.",
            "nullable": true
          },
          "projectId": {
            "type": "integer",
            "description": "In case the \"internal\" project Id is known, it can be used to link the booking to a project.\r\nThe referenced project must already exist; if no project matches the given id, the booking\r\nimport fails for that item (no project is created).",
            "format": "int32",
            "nullable": true
          },
          "projectCode": {
            "maxLength": 100,
            "type": "string",
            "description": "Unique identifier for a project. Can be used to link the booking to a project.\r\nThe referenced project must already exist; if no project matches the given code, the booking\r\nimport fails for that item (no project is created).",
            "nullable": true
          },
          "requestId": {
            "type": "integer",
            "description": "The internal ID of the request linked to the booking.",
            "format": "int32",
            "nullable": true
          },
          "requestCode": {
            "maxLength": 100,
            "type": "string",
            "description": "The external code of the request linked to the booking.",
            "nullable": true
          },
          "bookingType": {
            "$ref": "#/components/schemas/BookingType"
          },
          "bookingAccountingType": {
            "maxLength": 50,
            "type": "string",
            "description": "The booking accounting type of the booking.",
            "nullable": true
          },
          "bookingAccountingTypeID": {
            "type": "integer",
            "description": "The booking accounting type id of the booking.",
            "format": "int32",
            "nullable": true
          },
          "bookingRejectionReason": {
            "maxLength": 50,
            "type": "string",
            "description": "Rejection reason name of the booking.",
            "nullable": true
          },
          "bookingRejectionReasonID": {
            "type": "integer",
            "description": "Rejection reason id of the booking.",
            "format": "int32",
            "nullable": true
          },
          "recordedTime": {
            "type": "integer",
            "description": "Recorded time in minutes.",
            "format": "int32",
            "nullable": true
          },
          "personDays": {
            "type": "number",
            "description": "Number of person-days allocated for the booking.\r\nIf PersonDays is provided but Decidalo.Import.Host.Contracts.BookingBatchInput.BookingInput.Capacity is omitted, Capacity is calculated from these\r\nperson-days and the booking's StartDate/EndDate using the standard working-time conversion (instead\r\nof defaulting). Provide both to set them independently; provide neither to leave both unchanged.\r\nDerivation is skipped when StartDate or EndDate is missing.",
            "format": "double",
            "nullable": true
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": { },
            "description": "List of custom properties.",
            "nullable": true
          },
          "isImported": {
            "type": "boolean",
            "description": "Flag to mark this booking as imported via the Import API.\r\nWhen true (the default if no value is provided), the booking's LastImportedDate is stamped with\r\nthe current time on create/update so middleware can detect imported entities and diff their data.\r\nWhen false, LastImportedDate is left unchanged (this call does not stamp it).",
            "nullable": true
          },
          "restrictEditing": {
            "type": "boolean",
            "description": "When true, the booking becomes read-only inside the decidalo app for regular users: every edit\r\n(change, move, reschedule, extend, delete, planning) is denied and only super-users / admins can\r\nstill edit it. The Import API can always update the booking regardless of this flag. If not\r\nprovided, the value is left unchanged (on create it defaults to false = editable).",
            "default": false,
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Data structure for a booking to import."
      },
      "BookingItemOutput": {
        "required": [
          "bookingID",
          "bookingType",
          "subject",
          "userID"
        ],
        "type": "object",
        "properties": {
          "bookingID": {
            "type": "integer",
            "description": "The internal id of the booking",
            "format": "int32"
          },
          "bookingCode": {
            "type": "string",
            "description": "The external ID of a booking",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "External ID of the booked user",
            "nullable": true
          },
          "userID": {
            "type": "integer",
            "description": "Internal ID of a booked user",
            "format": "int32"
          },
          "startDate": {
            "type": "string",
            "description": "Start date of the booking",
            "format": "date",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "description": "End date of the booking",
            "format": "date",
            "nullable": true
          },
          "capacity": {
            "type": "number",
            "description": "The capacity of the booking. A number between 1.0 and 0. Representing how much of the users time is planned for the booking.",
            "format": "float",
            "nullable": true
          },
          "subject": {
            "maxLength": 254,
            "minLength": 0,
            "type": "string",
            "description": "Subject of the booking"
          },
          "companyID": {
            "type": "integer",
            "description": "Internal identifier of the company linked to this booking.",
            "format": "int32",
            "nullable": true
          },
          "companyCode": {
            "type": "string",
            "description": "External identifier of the company linked to this booking.",
            "nullable": true
          },
          "companyName": {
            "maxLength": 250,
            "minLength": 0,
            "type": "string",
            "description": "Display name of the company linked to this booking.",
            "nullable": true
          },
          "projectID": {
            "type": "integer",
            "description": "Internal identifier of the project linked to the booking.",
            "format": "int32",
            "nullable": true
          },
          "projectCode": {
            "type": "string",
            "description": "External identifier of the project linked to the booking.",
            "nullable": true
          },
          "bookingType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BookingType"
              }
            ],
            "description": "The type of the booking."
          },
          "bookingAccountingType": {
            "type": "string",
            "description": "The accounting type of the booking.",
            "nullable": true
          },
          "bookingAccountingTypeID": {
            "type": "integer",
            "description": "The accounting type id of the booking.",
            "format": "int32",
            "nullable": true
          },
          "bookingRejectionReason": {
            "type": "string",
            "description": "The rejection reason of the booking.",
            "nullable": true
          },
          "bookingRejectionReasonID": {
            "type": "integer",
            "description": "The rejection reason id of the booking.",
            "format": "int32",
            "nullable": true
          },
          "recordedTime": {
            "type": "integer",
            "description": "The amount of time recorded on this booking in minutes.",
            "format": "int32",
            "nullable": true
          },
          "personDays": {
            "type": "number",
            "description": "Number of person-days allocated for the booking.",
            "format": "double",
            "nullable": true
          },
          "requestID": {
            "type": "integer",
            "description": "Internal identifier of the resource request linked to the booking, if any.",
            "format": "int32",
            "nullable": true
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": {
              "nullable": true
            },
            "description": "The custom properties",
            "nullable": true
          },
          "dailyPlanning": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DailyPlanningItem"
            },
            "description": "Daily planned time for the booking.",
            "nullable": true
          },
          "weeklyPlanning": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeeklyPlanningItem"
            },
            "description": "Weekly planned time for the booking, in hours per week (the same plan as Decidalo.Domain.Models.Bookings.BookingItemOutput.DailyPlanning,\r\naggregated to the week). Each entry's DateInWeek is the week's Monday.",
            "nullable": true
          },
          "monthlyPlanning": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonthlyPlanningItem"
            },
            "description": "Monthly planned time for the booking, in hours per month (the same plan as Decidalo.Domain.Models.Bookings.BookingItemOutput.DailyPlanning,\r\naggregated to the month). Each entry's DateInMonth is the first of the month.",
            "nullable": true
          },
          "creatorID": {
            "type": "integer",
            "description": "Internal user ID of the booking's creator.",
            "format": "int32",
            "nullable": true
          },
          "lastEditorID": {
            "type": "integer",
            "description": "Internal user ID of the user who last edited the booking.",
            "format": "int32",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "description": "Creation timestamp of the booking.",
            "format": "date-time",
            "nullable": true
          },
          "lastUpdate": {
            "type": "string",
            "description": "The last update timestamp of the booking.",
            "format": "date-time",
            "nullable": true
          },
          "lastImportedDate": {
            "type": "string",
            "description": "UTC timestamp of the last time this booking was created or updated via the Import API\r\n(i.e. the last import that set IsImported = true). Null if the booking has never been\r\nimported via the API.",
            "format": "date-time",
            "nullable": true
          },
          "isImported": {
            "type": "boolean",
            "description": "Indicates whether the booking has been imported via the Import API\r\n(true when Decidalo.Domain.Models.Bookings.BookingItemOutput.LastImportedDate is set).",
            "readOnly": true
          },
          "restrictEditing": {
            "type": "boolean",
            "description": "When true, the booking is read-only in the decidalo app for regular users (only super-users\r\ncan edit it). The Import API can always update it regardless of this flag."
          }
        },
        "additionalProperties": false,
        "description": "Booking entity output in the import api."
      },
      "BookingReferenceIdentityInput": {
        "type": "object",
        "properties": {
          "bookingID": {
            "type": "integer",
            "description": "decídalo internal id of the booking.",
            "format": "int32",
            "nullable": true
          },
          "bookingCode": {
            "maxLength": 100,
            "type": "string",
            "description": "External identifier of the booking.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines a reference to a booking."
      },
      "BookingReferenceOutput": {
        "required": [
          "bookingID"
        ],
        "type": "object",
        "properties": {
          "bookingID": {
            "type": "integer",
            "description": "decídalo id of the booking.",
            "format": "int32"
          },
          "bookingCode": {
            "maxLength": 255,
            "minLength": 0,
            "type": "string",
            "description": "External reference code of the booking. Null when not set.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to the booking linked to a candidate assignment."
      },
      "BookingType": {
        "enum": [
          "Reservation",
          "SoftBooked",
          "Confirmed",
          "Rejected"
        ],
        "type": "string"
      },
      "BookingTypeNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BookingType"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BooleanNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BooleanOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "BusinessUnit": {
        "type": "object",
        "properties": {
          "businessUnitID": {
            "type": "integer",
            "description": "Internal ID of the business unit.",
            "format": "int32"
          },
          "businessUnitName": {
            "type": "string",
            "description": "Name of the business unit.",
            "nullable": true
          },
          "position": {
            "type": "integer",
            "description": "Position of the business unit.",
            "format": "int32",
            "nullable": true
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "description": "The name of the business unit per language, as shown in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Class representing a business unit."
      },
      "BusinessUnitOutput": {
        "required": [
          "businessUnitID"
        ],
        "type": "object",
        "properties": {
          "businessUnitID": {
            "type": "integer",
            "description": "decídalo id of the business unit.",
            "format": "int32"
          },
          "businessUnitName": {
            "type": "string",
            "description": "Display name of the business unit.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Short display information of a business unit."
      },
      "BusinessUnitReferenceInput": {
        "type": "object",
        "properties": {
          "businessUnitID": {
            "type": "integer",
            "description": "decídalo id of the business unit.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "businessUnitName": {
            "maxLength": 100,
            "type": "string",
            "description": "Name of the business unit.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a business unit for a resource request."
      },
      "ByteNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CertificateExportOutput": {
        "type": "object",
        "properties": {
          "certificateID": {
            "type": "integer",
            "description": "The internal ID of the certificate.",
            "format": "int32"
          },
          "certificateName": {
            "type": "string",
            "description": "Name of the certificate.",
            "nullable": true
          },
          "officialUrl": {
            "type": "string",
            "description": "Official URL for the certificate.",
            "nullable": true
          },
          "organizationID": {
            "type": "integer",
            "description": "ID of the issuing organization.",
            "format": "int32",
            "nullable": true
          },
          "organizationName": {
            "type": "string",
            "description": "Name of the issuing organization.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a certificate for the Import API GET endpoint."
      },
      "CertificateRequirementInput": {
        "type": "object",
        "properties": {
          "certificateID": {
            "type": "integer",
            "description": "The internal decídalo identifier of the certificate.\r\nCan be used instead of CertificateName to reference an existing certificate.",
            "format": "int32",
            "nullable": true,
            "example": 7
          },
          "certificateName": {
            "maxLength": 200,
            "type": "string",
            "description": "The display name of the required certificate.\r\nUsed to look up the certificate if CertificateID is not provided.",
            "nullable": true
          },
          "perfectMatch": {
            "type": "boolean",
            "description": "Whether the certificate must be an exact match.\r\nDefault: false (similar certificates are also acceptable).",
            "nullable": true
          },
          "isMandatory": {
            "type": "boolean",
            "description": "Indicates whether candidates are required to have this certificate or if it is optional.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Detail input for a certificate requirement."
      },
      "CertificateRequirementOutput": {
        "type": "object",
        "properties": {
          "certificateID": {
            "type": "integer",
            "description": "The internal decídalo identifier of the certificate.",
            "format": "int32",
            "nullable": true,
            "example": 7
          },
          "certificateName": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "The display name of the required certificate.",
            "nullable": true,
            "example": "AWS Solutions Architect"
          },
          "perfectMatch": {
            "type": "boolean",
            "description": "Whether the certificate must be an exact match.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Detail output for a certificate requirement."
      },
      "CommentPropertiesInput": {
        "required": [
          "comment",
          "creator"
        ],
        "type": "object",
        "properties": {
          "commentID": {
            "type": "integer",
            "description": "The decídalo ID of the comment to update or delete.\r\nIf not provided, a new comment will be created.",
            "format": "int32",
            "nullable": true
          },
          "comment": {
            "minLength": 1,
            "type": "string",
            "description": "The body of the comment.\r\nRequired when creating or updating a comment. May be omitted for delete operations\r\n(the server ignores this field when `Delete = true`)."
          },
          "creator": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceInput"
              }
            ],
            "description": "The user who created or last edited the comment.\r\nRequired when creating or updating a comment. May be omitted for delete operations\r\n(the server ignores this field when `Delete = true`)."
          },
          "editDate": {
            "type": "string",
            "description": "The date the comment was last edited.\r\nIf absent (null), the `EditedAt` database column is set to `null` — the comment\r\nis not shown as edited regardless of whether Decidalo.Domain.Models.ResourceRequests.CommentPropertiesInput.CreationDate is provided.\r\nMay be omitted for delete operations.",
            "format": "date-time",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "description": "The date the comment was created.\r\nIf not provided, CreatedAt is set to DateTime.UtcNow.\r\nOnly used for new comments (no CommentID).",
            "format": "date-time",
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "Flag to indicate whether the comment should be deleted.\r\nDefault: false.\r\nRequires CommentID to be provided.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The input data for a single comment to import on the target entity."
      },
      "CompanyCompleteOutput": {
        "type": "object",
        "properties": {
          "companyID": {
            "type": "integer",
            "description": "The internal ID of the company.",
            "format": "int32"
          },
          "companyName": {
            "type": "string",
            "description": "The name of the company.",
            "nullable": true
          },
          "registeredName": {
            "type": "string",
            "description": "The registered name of the company.",
            "nullable": true
          },
          "alias": {
            "type": "string",
            "description": "The alias of the company.",
            "nullable": true
          },
          "companyCode": {
            "type": "string",
            "description": "External identifier of the company.",
            "nullable": true
          },
          "website": {
            "type": "string",
            "description": "The website of the company.",
            "nullable": true
          },
          "industryID": {
            "type": "integer",
            "description": "The internal ID of the industry of the company.",
            "format": "int32",
            "nullable": true
          },
          "industryName": {
            "type": "string",
            "description": "The name of the industry of the company.",
            "nullable": true
          },
          "isCustomer": {
            "type": "boolean",
            "description": "Indicates whether the company is a customer."
          },
          "allowCustomerDataExport": {
            "type": "boolean",
            "description": "Indicates whether the export of customer data is allowed for this company.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Core information of a company."
      },
      "CompanyCreateInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the company.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines company data for a new company."
      },
      "CompanyOutput": {
        "required": [
          "companyID"
        ],
        "type": "object",
        "properties": {
          "companyID": {
            "type": "integer",
            "description": "decídalo internal id of the company.",
            "format": "int32"
          },
          "companyCode": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "External id of the company.",
            "nullable": true
          },
          "companyName": {
            "maxLength": 250,
            "minLength": 0,
            "type": "string",
            "description": "Display name of the company.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Short display information of a company."
      },
      "CompanyReference": {
        "required": [
          "companyID",
          "companyName"
        ],
        "type": "object",
        "properties": {
          "companyID": {
            "type": "integer",
            "description": "decídalo id of the company.",
            "format": "int32",
            "example": 2
          },
          "companyName": {
            "maxLength": 250,
            "minLength": 0,
            "type": "string",
            "description": "Display name of the company.",
            "example": "Innovative Technologies Inc."
          },
          "companyCode": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "Optional external identifier for the company, e.g. from an external system.",
            "nullable": true,
            "example": "IT-12345"
          }
        },
        "additionalProperties": false,
        "description": "Reference to a company."
      },
      "CompanyReferenceInput": {
        "type": "object",
        "properties": {
          "companyID": {
            "type": "integer",
            "description": "decídalo id of the company.",
            "format": "int32",
            "nullable": true,
            "example": 2
          },
          "companyName": {
            "maxLength": 250,
            "type": "string",
            "description": "Display name of the company.",
            "nullable": true
          },
          "companyCode": {
            "maxLength": 100,
            "type": "string",
            "description": "Optional external identifier for the company, e.g. from an external system.",
            "nullable": true
          },
          "industry": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectIndustryReferenceInput"
              }
            ],
            "description": "Industry the company belongs to. When provided with a non-blank IndustryName,\r\nthe industry is resolved or created and applied to the company only if a new company\r\nis being created. Ignored when the company reference resolves to an existing company.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a company."
      },
      "ContactType": {
        "enum": [
          "ProjectManager",
          "ResourceManager",
          "SalesResponsible",
          "ProjectAssistant"
        ],
        "type": "string"
      },
      "CustomProperty": {
        "type": "object",
        "properties": {
          "propertyName": {
            "type": "string",
            "description": "The identifier of the custom property.\r\nSend this as a key for the custom property value.",
            "nullable": true,
            "readOnly": true
          },
          "dataType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomPropertyDataType"
              }
            ],
            "description": "Describes which content is allowed as value for the custom property.",
            "readOnly": true
          },
          "dataFormat": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomPropertyDataFormat"
              }
            ],
            "description": "Describes the format in which the custom property value is expected in JSON.",
            "readOnly": true
          },
          "isRequired": {
            "type": "boolean",
            "description": "Indicates whether the custom property is required to be set when creating or updating an entity.",
            "readOnly": true
          },
          "maxLength": {
            "type": "integer",
            "description": "Specifies the maximum length if the custom property is a string.",
            "format": "int32",
            "nullable": true,
            "readOnly": true
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomPropertyOption"
            },
            "description": "If the custom property is of type ValueList, then this contains the list of available options.\r\nNull, if it is not a ValueList.",
            "nullable": true,
            "readOnly": true
          },
          "defaultOptionValue": {
            "type": "integer",
            "description": "Specifies which of the select options is flagged as the default option.\r\nCan be null, if there is no default.",
            "format": "int32",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Describes the schema of a custom property."
      },
      "CustomPropertyDataFormat": {
        "enum": [
          "Number",
          "String",
          "Boolean"
        ],
        "type": "string",
        "description": "Describes the format in which the custom property value is expected in JSON."
      },
      "CustomPropertyDataType": {
        "enum": [
          "Integer",
          "Float",
          "String",
          "Boolean",
          "Date",
          "Html",
          "DateTime",
          "ValueList"
        ],
        "type": "string",
        "description": "Describes the available data types of custom properties."
      },
      "CustomPropertyOption": {
        "type": "object",
        "properties": {
          "value": {
            "type": "integer",
            "description": "The identifier for the option. \r\nSend this value as the custom property value.",
            "format": "int32"
          },
          "label": {
            "type": "string",
            "description": "A corresponding label for the option.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Describes one selectable option for a custom property that has a list of options."
      },
      "DailyPlanningItem": {
        "type": "object",
        "properties": {
          "calendarDate": {
            "type": "string",
            "description": "The day of the planned entry as a pure date",
            "format": "date",
            "example": "2025-01-01"
          },
          "minutes": {
            "type": "integer",
            "description": "The planned time in minutes.",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "DateOnlyNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "string",
            "format": "date",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DateTimeNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DecimalNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeliveryModel": {
        "type": "object",
        "properties": {
          "deliveryModelID": {
            "type": "integer",
            "format": "int32"
          },
          "deliveryModelName": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "type": "integer",
            "format": "int32"
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "description": "The name of the delivery model per language, as shown in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeliveryModelOutput": {
        "required": [
          "deliveryModelID"
        ],
        "type": "object",
        "properties": {
          "deliveryModelID": {
            "type": "integer",
            "description": "decidalo identifier of the delivery model.",
            "format": "int32"
          },
          "deliveryModelName": {
            "type": "string",
            "description": "Name of the delivery model.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Short display information of a delivery model."
      },
      "DeliveryModelReferenceInput": {
        "type": "object",
        "properties": {
          "deliveryModelID": {
            "type": "integer",
            "description": "decidalo id of the delivery model.\r\nWhen provided with a non-null value, DeliveryModelName is ignored.",
            "format": "int32",
            "nullable": true,
            "example": 3
          },
          "deliveryModelName": {
            "maxLength": 50,
            "type": "string",
            "description": "Name of the delivery model, used as a lookup key when DeliveryModelID is absent or null.\r\nMax 50 characters.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a delivery model for a resource request."
      },
      "EducationLevel": {
        "enum": [
          "Realschule",
          "Ausbildung",
          "Meister",
          "Abitur",
          "Bachelor",
          "Master",
          "PHD",
          "habil",
          "Prof"
        ],
        "type": "string"
      },
      "EducationLevelNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EducationLevel"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EducationRequirementInput": {
        "type": "object",
        "properties": {
          "educationLevel": {
            "$ref": "#/components/schemas/EducationLevel"
          },
          "fieldOfStudy": {
            "maxLength": 200,
            "type": "string",
            "description": "The required field of study.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Detail input for an education requirement."
      },
      "EducationRequirementOutput": {
        "type": "object",
        "properties": {
          "educationLevel": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EducationLevel"
              }
            ],
            "description": "The required minimum education level.",
            "nullable": true,
            "example": "Master"
          },
          "fieldOfStudy": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "The required field of study.",
            "nullable": true,
            "example": "Computer Science"
          }
        },
        "additionalProperties": false,
        "description": "Detail output for an education requirement."
      },
      "EmployeeTypeOutput": {
        "required": [
          "employeeTypeID",
          "employeeTypeName",
          "isDefault",
          "isExternal"
        ],
        "type": "object",
        "properties": {
          "employeeTypeID": {
            "type": "integer",
            "format": "int32"
          },
          "employeeTypeName": {
            "minLength": 1,
            "type": "string"
          },
          "isExternal": {
            "type": "boolean"
          },
          "isDefault": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ExceptionType": {
        "enum": [
          "Unknown",
          "Validation"
        ],
        "type": "string"
      },
      "GeneralActivityImportItem": {
        "type": "object",
        "properties": {
          "generalActivityID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "targetSystemCode": {
            "type": "string",
            "nullable": true
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeneralActivityTranslationDto"
            },
            "nullable": true
          },
          "recordingTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeReferenceImport"
            },
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeneralActivityResult": {
        "type": "object",
        "properties": {
          "generalActivityID": {
            "type": "integer",
            "format": "int32"
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "isActive": {
            "type": "boolean"
          },
          "targetSystemCode": {
            "type": "string",
            "nullable": true
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeneralActivityTranslationDto"
            },
            "nullable": true
          },
          "isDeletable": {
            "type": "boolean"
          },
          "recordingTargetID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "recordingTypeIDs": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeneralActivityTranslationDto": {
        "type": "object",
        "properties": {
          "languageID": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeneralActivityTranslationDtoIReadOnlyListOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeneralActivityTranslationDto"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetImportUserWorkingProfileResult": {
        "type": "object",
        "properties": {
          "userIdentity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserIdentityResult"
              }
            ],
            "nullable": true
          },
          "workingTimePatterns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkingProfileResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "HolidayCalendarImportItem": {
        "type": "object",
        "properties": {
          "holidayListID": {
            "type": "integer",
            "description": "Internal ID of the holiday calendar. When provided, the calendar is matched by this ID\r\nand a differing HolidayListCode renames the calendar's code.",
            "format": "int32",
            "nullable": true
          },
          "holidayListCode": {
            "type": "string",
            "description": "External identifier of the holiday calendar; required unless HolidayListID is provided.\r\nCodes of standard calendars (provided by the external holiday API, e.g. \"DE\" or \"DE-NW\") cannot be used.",
            "nullable": true
          },
          "calendarName": {
            "type": "string",
            "description": "Display name of the calendar. Required when creating; if omitted on update, the existing name is kept.",
            "nullable": true
          },
          "countryCode": {
            "type": "string",
            "description": "Optional 2-letter ISO country code (e.g. \"DE\"); the web app shows the matching flag icon\r\nnext to the calendar. If omitted (null) on update, the existing value is kept;\r\nan empty string clears the country so no flag is shown.",
            "nullable": true
          },
          "holidays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HolidayInput"
            },
            "description": "Full set of holidays; replaces all existing holidays of the calendar.\r\nIf omitted (null) on update, the existing holidays are kept. An empty list removes all holidays.",
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "Flag indicating whether the calendar should be deleted.\r\nDeletion fails while any user has the calendar assigned. Default is false.",
            "default": false,
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A custom holiday calendar to create, update or delete via the Import API."
      },
      "HolidayCalendarImportResult": {
        "type": "object",
        "properties": {
          "holidayListID": {
            "type": "integer",
            "description": "Internal ID of the holiday calendar.",
            "format": "int32",
            "nullable": true
          },
          "holidayListCode": {
            "type": "string",
            "description": "External identifier of the holiday calendar.",
            "nullable": true
          },
          "importStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "description": "Describes the result of the import.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The per-calendar result of a holiday calendar import."
      },
      "HolidayCalendarOutput": {
        "type": "object",
        "properties": {
          "holidayListID": {
            "type": "integer",
            "description": "Internal ID of the holiday calendar.",
            "format": "int32"
          },
          "holidayListCode": {
            "type": "string",
            "description": "External identifier of the holiday calendar.",
            "nullable": true
          },
          "calendarName": {
            "type": "string",
            "description": "Display name of the holiday calendar.",
            "nullable": true
          },
          "custom": {
            "type": "boolean",
            "description": "True for custom calendars imported via the Import API; false for standard calendars\r\nwhose holidays are provided by the external holiday API. Only custom calendars can be modified."
          },
          "countryCode": {
            "type": "string",
            "description": "The 2-letter ISO country code the calendar belongs to; the web app shows the matching\r\nflag icon next to the calendar. Null for custom calendars without an assigned country.",
            "nullable": true
          },
          "holidays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HolidayOutput"
            },
            "description": "All holidays of the calendar.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A holiday calendar with its holidays, as returned by the Import API."
      },
      "HolidayInput": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Date of the holiday. Holidays always cover the full day; half days are not supported.\r\nAccepted range: at most 10 years in the past and 2 years in the future\r\n(the standard calendars provided by the external holiday API cover the current year plus two).",
            "format": "date",
            "example": "2025-01-01"
          },
          "name": {
            "type": "string",
            "description": "Display name of the holiday.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single (full-day) holiday of an imported holiday calendar."
      },
      "HolidayOutput": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Date of the holiday. Holidays always cover the full day.",
            "format": "date",
            "example": "2025-01-01"
          },
          "name": {
            "type": "string",
            "description": "Display name of the holiday.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single (full-day) holiday of an exported holiday calendar."
      },
      "HttpStatusCode": {
        "enum": [
          "Continue",
          "SwitchingProtocols",
          "Processing",
          "EarlyHints",
          "OK",
          "Created",
          "Accepted",
          "NonAuthoritativeInformation",
          "NoContent",
          "ResetContent",
          "PartialContent",
          "MultiStatus",
          "AlreadyReported",
          "IMUsed",
          "MultipleChoices",
          "MovedPermanently",
          "Found",
          "SeeOther",
          "NotModified",
          "UseProxy",
          "Unused",
          "TemporaryRedirect",
          "PermanentRedirect",
          "BadRequest",
          "Unauthorized",
          "PaymentRequired",
          "Forbidden",
          "NotFound",
          "MethodNotAllowed",
          "NotAcceptable",
          "ProxyAuthenticationRequired",
          "RequestTimeout",
          "Conflict",
          "Gone",
          "LengthRequired",
          "PreconditionFailed",
          "RequestEntityTooLarge",
          "RequestUriTooLong",
          "UnsupportedMediaType",
          "RequestedRangeNotSatisfiable",
          "ExpectationFailed",
          "MisdirectedRequest",
          "UnprocessableEntity",
          "Locked",
          "FailedDependency",
          "UpgradeRequired",
          "PreconditionRequired",
          "TooManyRequests",
          "RequestHeaderFieldsTooLarge",
          "UnavailableForLegalReasons",
          "InternalServerError",
          "NotImplemented",
          "BadGateway",
          "ServiceUnavailable",
          "GatewayTimeout",
          "HttpVersionNotSupported",
          "VariantAlsoNegotiates",
          "InsufficientStorage",
          "LoopDetected",
          "NotExtended",
          "NetworkAuthenticationRequired"
        ],
        "type": "string"
      },
      "ImportAbsencesCommand": {
        "type": "object",
        "properties": {
          "absences": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AbsenceImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ImportApiUserIdentity": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "The internal id of the user.",
            "format": "int32"
          },
          "employeeID": {
            "type": "string",
            "description": "The external employee identifier.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "The email address of the user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Lightweight user identity containing the core identifiers used across Import API responses."
      },
      "ImportBatchStatus": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportBatchStatusType"
              }
            ]
          },
          "errorMessage": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ImportBatchStatusType": {
        "enum": [
          "Pending",
          "Processing",
          "Completed",
          "Failed"
        ],
        "type": "string"
      },
      "ImportCompanyCommand": {
        "type": "object",
        "properties": {
          "companyID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "companyName": {
            "type": "string",
            "nullable": true
          },
          "registeredName": {
            "type": "string",
            "nullable": true
          },
          "alias": {
            "type": "string",
            "nullable": true
          },
          "companyCode": {
            "type": "string",
            "nullable": true
          },
          "website": {
            "type": "string",
            "nullable": true
          },
          "industryID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "industryName": {
            "type": "string",
            "nullable": true
          },
          "isCustomer": {
            "type": "boolean",
            "nullable": true
          },
          "allowCustomerDataExport": {
            "type": "boolean",
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ImportCompanyResult": {
        "type": "object",
        "properties": {
          "companyID": {
            "type": "integer",
            "format": "int32"
          },
          "companyName": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ImportHolidayCalendarsCommand": {
        "type": "object",
        "properties": {
          "holidayCalendars": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HolidayCalendarImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ImportItemStatus": {
        "type": "object",
        "properties": {
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatusType"
              }
            ]
          },
          "errorMessage": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ImportItemStatusType": {
        "enum": [
          "Pending",
          "Created",
          "Updated",
          "Deleted",
          "NotModified",
          "Failed",
          "Deactivated",
          "UpdateInProcess"
        ],
        "type": "string"
      },
      "ImportPlanningGranularity": {
        "enum": [
          "None",
          "Daily",
          "Weekly",
          "Monthly"
        ],
        "type": "string",
        "description": "Selects which planning granularity is included in the booking GET response. Only one granularity can be\r\nreturned at a time, mirroring the booking import (POST) endpoint, which also accepts only one of daily,\r\nweekly or monthly planning per booking."
      },
      "ImportResourceRequestCommandResult": {
        "type": "object",
        "properties": {
          "requestID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "requestCode": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          },
          "commentIDs": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32",
              "nullable": true
            },
            "nullable": true
          },
          "commentErrors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "companyID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "industryID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "industryStandardID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ImportRoleResult": {
        "type": "object",
        "properties": {
          "roleID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "errorMessage": {
            "type": "string",
            "nullable": true
          },
          "success": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ImportUserHolidayCalendarsCommand": {
        "type": "object",
        "properties": {
          "userHolidayCalendars": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserHolidayCalendarImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ImportUserWorkingProfileResult": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "The ID of the user.",
            "format": "int32",
            "nullable": true
          },
          "userWorkingTimePatternResults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportWorkingProfileResult"
            },
            "description": "The result for each UserWorkingTimePattern.",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "description": "The status of the import.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Container for the result information of an import operation for a batch of UserWorkingTimePattern."
      },
      "ImportWorkPackageCommandResult": {
        "type": "object",
        "properties": {
          "workPackageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ImportWorkingProfileResult": {
        "type": "object",
        "properties": {
          "userWorkingTimePatternID": {
            "type": "integer",
            "description": "Internal ID of the UserWorkingTimePattern.",
            "format": "int32",
            "nullable": true
          },
          "userWorkingTimePatternCode": {
            "type": "string",
            "description": "External identifier of the UserWorkingTimePattern.",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "description": "The status of the import.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Container for the result information of an import operation for a single UserWorkingTimePattern."
      },
      "IndustryOutput": {
        "required": [
          "industryID"
        ],
        "type": "object",
        "properties": {
          "industryID": {
            "type": "integer",
            "description": "decídalo internal id of the industry.",
            "format": "int32"
          },
          "industryName": {
            "type": "string",
            "description": "Display name of the industry.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Short display information of an industry."
      },
      "Int16NullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Int32ListOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Int32NullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JobPositionRequirementInput": {
        "type": "object",
        "properties": {
          "jobPositionName": {
            "maxLength": 2000,
            "type": "string",
            "description": "The display name of the required job position.\r\nIf provided, this value is used as the requirement's query text and overrides\r\nany value supplied via Decidalo.Domain.Models.ResourceRequests.RequirementInput.QueryText.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Detail input for a job position requirement."
      },
      "KeywordInput": {
        "required": [
          "value"
        ],
        "type": "object",
        "properties": {
          "value": {
            "maxLength": 255,
            "minLength": 0,
            "type": "string",
            "description": "The keyword value case-insensitive.\r\nMust not cointain any whitespace."
          }
        },
        "additionalProperties": false,
        "description": "Defines a keyword for a project."
      },
      "LanguageRequirementInput": {
        "type": "object",
        "properties": {
          "standardLanguageID": {
            "type": "integer",
            "description": "The standard (global) identifier of the language.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "languageName": {
            "maxLength": 100,
            "type": "string",
            "description": "The display name of the required language.\r\nCan be used instead of StandardLanguageID to look up the language.",
            "nullable": true
          },
          "requiredNumericalValue": {
            "type": "integer",
            "description": "The minimum required language level (numerical value, as defined in skills.languageLevels).\r\nIf null or not provided, any level is considered acceptable.",
            "format": "int32",
            "nullable": true,
            "example": 3
          }
        },
        "additionalProperties": false,
        "description": "Detail input for a language requirement."
      },
      "LanguageRequirementOutput": {
        "type": "object",
        "properties": {
          "standardLanguageID": {
            "type": "integer",
            "description": "The standard (global) identifier of the language.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "languageName": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The display name of the required language.",
            "nullable": true,
            "example": "English"
          },
          "requiredNumericalValue": {
            "type": "integer",
            "description": "The minimum required language level (numerical value, as defined in skills.languageLevels).\r\nNull means any level is acceptable.",
            "format": "int32",
            "nullable": true,
            "example": 3
          }
        },
        "additionalProperties": false,
        "description": "Detail output for a language requirement."
      },
      "LegalEntity": {
        "type": "object",
        "properties": {
          "legalEntityID": {
            "type": "integer",
            "description": "The unique identifier of a legal entity.",
            "format": "int32"
          },
          "legalEntityName": {
            "type": "string",
            "description": "The name of the legal entity.",
            "nullable": true
          },
          "position": {
            "type": "integer",
            "description": "The position of the legal entity in a list of legal entities.",
            "format": "int32",
            "nullable": true
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "description": "The name of the legal entity per language, as shown in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A class representing a single legal entity."
      },
      "LegalEntityOutput": {
        "required": [
          "legalEntityID"
        ],
        "type": "object",
        "properties": {
          "legalEntityID": {
            "type": "integer",
            "description": "decídalo id of the legal entity.",
            "format": "int32"
          },
          "legalEntityName": {
            "type": "string",
            "description": "Display name of the legal entity.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Short display information of a legal entity."
      },
      "LegalEntityReferenceInput": {
        "type": "object",
        "properties": {
          "legalEntityID": {
            "type": "integer",
            "description": "decídalo id of the legal entity.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "legalEntityName": {
            "maxLength": 100,
            "type": "string",
            "description": "Name of the legal entity.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a legal entity for a resource request."
      },
      "LocalizedValue": {
        "type": "object",
        "properties": {
          "languageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LocationRequirementInput": {
        "type": "object",
        "properties": {
          "rawLocationText": {
            "maxLength": 255,
            "type": "string",
            "description": "The original free-text location entered by the user (e.g. \"50 km from Hannover\", \"HH\", \"30159\").",
            "nullable": true
          },
          "radiusKm": {
            "type": "number",
            "description": "Optional radius in kilometers from the resolved location point.\r\nNull means exact city match. If the radius is parsed from RawLocationText by the geocoding service,\r\nthe parsed value takes precedence.",
            "format": "double",
            "nullable": true,
            "example": 50
          }
        },
        "additionalProperties": false,
        "description": "Detail input for a distance-from-location requirement.\r\nRawLocationText is forwarded to the geocoding service which resolves it to coordinates."
      },
      "LocationRequirementOutput": {
        "type": "object",
        "properties": {
          "locationText": {
            "maxLength": 255,
            "minLength": 0,
            "type": "string",
            "description": "The original free-text location entered by the user.",
            "nullable": true,
            "example": "50 km from Hannover"
          },
          "normalizedPlace": {
            "maxLength": 255,
            "minLength": 0,
            "type": "string",
            "description": "The place name resolved by the geocoding service (e.g. \"Hannover, Lower Saxony, Germany\").",
            "nullable": true,
            "example": "Hannover, Lower Saxony, Germany"
          },
          "radiusKm": {
            "type": "number",
            "description": "Radius in kilometers from the resolved location point. Null means exact city match.",
            "format": "double",
            "nullable": true,
            "example": 50
          }
        },
        "additionalProperties": false,
        "description": "Detail output for a distance-from-location requirement.\r\nLocationPoint (geography) is intentionally not exposed — frontend only sees the resolved place name and radius."
      },
      "Month": {
        "enum": [
          "January",
          "February",
          "March",
          "April",
          "May",
          "June",
          "July",
          "August",
          "September",
          "October",
          "November",
          "December"
        ],
        "type": "string"
      },
      "MonthlyPlanningItem": {
        "type": "object",
        "properties": {
          "dateInMonth": {
            "type": "string",
            "description": "Any date that falls within the planned month. It does not need to be the first of the month —\r\nit is normalized to the month it belongs to when the planning is applied.",
            "format": "date",
            "example": "2025-01-01"
          },
          "hoursPerMonth": {
            "type": "number",
            "description": "The planned effort for the month in hours (e.g. the number of working days in the month multiplied by the\r\ndaily working hours equals fully booked / 100%). A value of 0 removes the planning for this month.",
            "format": "float"
          }
        },
        "additionalProperties": false
      },
      "OrderImportBatch": {
        "type": "object",
        "properties": {
          "orders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderImportBatchResult": {
        "type": "object",
        "properties": {
          "orders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderImportItemResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderImportItem": {
        "type": "object",
        "properties": {
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "projects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderProjectImportItem"
            },
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "orderDate": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "nullable": true
          },
          "companyID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "deliveryDate": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "validFromDate": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "expiryDate": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "billingAddress": {
            "type": "string",
            "nullable": true
          },
          "shippingAddress": {
            "type": "string",
            "nullable": true
          },
          "paymentTerms": {
            "type": "string",
            "nullable": true
          },
          "shippingTerms": {
            "type": "string",
            "nullable": true
          },
          "goodsRecipient": {
            "type": "string",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "rateEntries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderRateEntryImportInput"
            },
            "nullable": true
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": { },
            "nullable": true
          },
          "positions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionImportItem"
            },
            "nullable": true
          },
          "creator": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "Reference to a user.",
            "nullable": true
          },
          "lastEditor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "Reference to a user.",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "lastEditDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderImportItemResult": {
        "type": "object",
        "properties": {
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          },
          "positions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionImportResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderImportOutput": {
        "type": "object",
        "properties": {
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "projects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderProjectImportItem"
            },
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "orderDate": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "nullable": true
          },
          "companyID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "deliveryDate": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "validFromDate": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "expiryDate": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "billingAddress": {
            "type": "string",
            "nullable": true
          },
          "shippingAddress": {
            "type": "string",
            "nullable": true
          },
          "paymentTerms": {
            "type": "string",
            "nullable": true
          },
          "shippingTerms": {
            "type": "string",
            "nullable": true
          },
          "goodsRecipient": {
            "type": "string",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "rateEntries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderRateEntryImportInput"
            },
            "nullable": true
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": { },
            "nullable": true
          },
          "positions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionImportOutput"
            },
            "nullable": true
          },
          "creator": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "Reference to a user.",
            "nullable": true
          },
          "lastEditor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "Reference to a user.",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "lastEditDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderImportOutputBatch": {
        "type": "object",
        "properties": {
          "orders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderImportOutput"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionImportBatch": {
        "type": "object",
        "properties": {
          "positions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionImportBatchResult": {
        "type": "object",
        "properties": {
          "positions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionImportResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionImportItem": {
        "type": "object",
        "properties": {
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderCode": {
            "type": "string",
            "nullable": true
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "positionType": {
            "$ref": "#/components/schemas/OrderPositionType"
          },
          "fixedPriceAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "rate": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "unit": {
            "$ref": "#/components/schemas/RateUnit"
          },
          "rateID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "rateCode": {
            "type": "string",
            "nullable": true
          },
          "soldQuantity": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "nullable": true
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "creator": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "Reference to a user.",
            "nullable": true
          },
          "lastEditor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "Reference to a user.",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "lastEditDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionImportItemIReadOnlyListOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionImportOutput": {
        "type": "object",
        "properties": {
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderCode": {
            "type": "string",
            "nullable": true
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "positionType": {
            "$ref": "#/components/schemas/OrderPositionType"
          },
          "fixedPriceAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "rate": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "unit": {
            "$ref": "#/components/schemas/RateUnit"
          },
          "rateID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "rateCode": {
            "type": "string",
            "nullable": true
          },
          "soldQuantity": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "nullable": true
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "creator": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "Reference to a user.",
            "nullable": true
          },
          "lastEditor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "Reference to a user.",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "lastEditDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionImportOutputIReadOnlyListOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionImportOutput"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionImportResult": {
        "type": "object",
        "properties": {
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionRecordingTargetImportBatch": {
        "type": "object",
        "properties": {
          "recordingTargets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionRecordingTargetImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionRecordingTargetImportBatchResult": {
        "type": "object",
        "properties": {
          "recordingTargets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionRecordingTargetImportResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionRecordingTargetImportItem": {
        "type": "object",
        "properties": {
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderCode": {
            "type": "string",
            "nullable": true
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "projectReferenceID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "isBillable": {
            "type": "boolean",
            "nullable": true
          },
          "recordingTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeReferenceImport"
            },
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionRecordingTargetImportResult": {
        "type": "object",
        "properties": {
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "recordingTargetID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionRecordingTargetOutput": {
        "type": "object",
        "properties": {
          "orderPositionID": {
            "type": "integer",
            "format": "int32"
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderCode": {
            "type": "string",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "isBillable": {
            "type": "boolean",
            "nullable": true
          },
          "recordingTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeReferenceOutput"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionRecordingTypeRateImportBatch": {
        "type": "object",
        "properties": {
          "rates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionRecordingTypeRateImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionRecordingTypeRateImportBatchResult": {
        "type": "object",
        "properties": {
          "rates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionRecordingTypeRateImportResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionRecordingTypeRateImportItem": {
        "type": "object",
        "properties": {
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderCode": {
            "type": "string",
            "nullable": true
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "recordingTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "recordingTypeCode": {
            "type": "string",
            "nullable": true
          },
          "mode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RecordingTypePricingMode"
              }
            ],
            "nullable": true
          },
          "amount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "unit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RateUnit"
              }
            ],
            "nullable": true
          },
          "rateID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "rateCode": {
            "type": "string",
            "nullable": true
          },
          "factor": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "baseRecordingTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "baseRecordingTypeCode": {
            "type": "string",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionRecordingTypeRateImportResult": {
        "type": "object",
        "properties": {
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "recordingTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "recordingTypeCode": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionRecordingTypeRateOutput": {
        "type": "object",
        "properties": {
          "orderPositionID": {
            "type": "integer",
            "format": "int32"
          },
          "recordingTypeID": {
            "type": "integer",
            "format": "int32"
          },
          "recordingTypeCode": {
            "type": "string",
            "nullable": true
          },
          "mode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RecordingTypePricingMode"
              }
            ]
          },
          "amount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "unit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RateUnit"
              }
            ],
            "nullable": true
          },
          "rateID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "rateCode": {
            "type": "string",
            "nullable": true
          },
          "factor": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "baseRecordingTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "baseRecordingTypeCode": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionType": {
        "enum": [
          "FixedPrice",
          "TimeAndMaterial"
        ],
        "type": "string"
      },
      "OrderPositionTypeNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/OrderPositionType"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionWorkPackageImportBatch": {
        "type": "object",
        "properties": {
          "workPackages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionWorkPackageImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionWorkPackageImportBatchResult": {
        "type": "object",
        "properties": {
          "workPackages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderPositionWorkPackageImportResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionWorkPackageImportItem": {
        "type": "object",
        "properties": {
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderCode": {
            "type": "string",
            "nullable": true
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "workPackageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "workPackageCode": {
            "type": "string",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionWorkPackageImportResult": {
        "type": "object",
        "properties": {
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "workPackageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "workPackageCode": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderPositionWorkPackageOutput": {
        "type": "object",
        "properties": {
          "orderPositionID": {
            "type": "integer",
            "format": "int32"
          },
          "workPackageID": {
            "type": "integer",
            "format": "int32"
          },
          "workPackageName": {
            "type": "string",
            "nullable": true
          },
          "workPackageCode": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderProjectImportItem": {
        "type": "object",
        "properties": {
          "projectReferenceID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "projectCode": {
            "type": "string",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderProjectImportItemIReadOnlyListOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderProjectImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OrderRateEntryImportInput": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "nullable": true
          },
          "rate": {
            "type": "number",
            "format": "double"
          },
          "currencyCode": {
            "type": "string",
            "nullable": true
          },
          "unit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RateUnit"
              }
            ]
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "OrderRateEntryImportInputIReadOnlyListOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderRateEntryImportInput"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PracticeArea": {
        "type": "object",
        "properties": {
          "practiceAreaID": {
            "type": "integer",
            "description": "The unique internal identifier of the practice area.",
            "format": "int32"
          },
          "practiceAreaName": {
            "type": "string",
            "description": "The name of the practice area.",
            "nullable": true
          },
          "position": {
            "type": "integer",
            "description": "The position of the practice area in the list of practice areas.",
            "format": "int32"
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "description": "The name of the practice area per language, as shown in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Domain Model of a Practice Area.\r\nA Practice Area is a field of expertise or a specialization of a user."
      },
      "PracticeAreaOutput": {
        "required": [
          "practiceAreaID"
        ],
        "type": "object",
        "properties": {
          "practiceAreaID": {
            "type": "integer",
            "description": "decídalo id of the practice area.",
            "format": "int32"
          },
          "practiceAreaName": {
            "type": "string",
            "description": "Display name of the practice area.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Short display information of a practice area."
      },
      "PracticeAreaReferenceInput": {
        "type": "object",
        "properties": {
          "practiceAreaID": {
            "type": "integer",
            "description": "decídalo id of the practice area.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "practiceAreaName": {
            "maxLength": 100,
            "type": "string",
            "description": "Name of the practice area.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a practice area for a resource request."
      },
      "PriorityEntry": {
        "required": [
          "position",
          "priority",
          "priorityID"
        ],
        "type": "object",
        "properties": {
          "priorityID": {
            "type": "integer",
            "description": "The decídalo id of the priority.",
            "format": "int32"
          },
          "priority": {
            "minLength": 1,
            "type": "string",
            "description": "The display name of the priority."
          },
          "position": {
            "type": "integer",
            "description": "The sort position of the priority.",
            "format": "int32"
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "description": "The name of the priority per language, as shown in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a priority that can be assigned to a Project or to a ResourceRequest."
      },
      "PriorityOutput": {
        "required": [
          "priorityID"
        ],
        "type": "object",
        "properties": {
          "priorityID": {
            "type": "integer",
            "description": "decídalo id of the priority.",
            "format": "int32"
          },
          "priorityName": {
            "type": "string",
            "description": "Display name of the priority.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Short display information of a priority."
      },
      "PriorityReferenceInput": {
        "type": "object",
        "properties": {
          "priorityID": {
            "type": "integer",
            "description": "decídalo id of the priority.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "priorityName": {
            "maxLength": 100,
            "type": "string",
            "description": "Name of the priority.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a priority for a resource request."
      },
      "ProjectBatchInput": {
        "required": [
          "projects"
        ],
        "type": "object",
        "properties": {
          "projects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectReferenceInput"
            },
            "description": "List of projects to create, update or delete.\r\nEach item follows the same contract as the single project import endpoint."
          }
        },
        "additionalProperties": false,
        "description": "Data container for a whole batch of projects to import."
      },
      "ProjectCommentBatchInput": {
        "required": [
          "projectComments"
        ],
        "type": "object",
        "properties": {
          "projectComments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectCommentInput"
            },
            "description": "The rows to import, one per comment operation. Processed sequentially, in this order."
          }
        },
        "additionalProperties": false,
        "description": "The envelope for a batch of project-comment import rows. Comments are allowed to belong to\r\ndifferent projects within the same batch and are imported in request order."
      },
      "ProjectCommentImportResult": {
        "required": [
          "isSuccessful"
        ],
        "type": "object",
        "properties": {
          "isSuccessful": {
            "type": "boolean",
            "description": "Whether the row's comment operation (create, update, or delete) completed successfully."
          },
          "projectID": {
            "type": "integer",
            "description": "The resolved project's decídalo id. Populated whenever project resolution succeeded for\r\nthis row, independent of whether the comment operation itself then succeeded or failed.",
            "format": "int32",
            "nullable": true
          },
          "commentID": {
            "type": "integer",
            "description": "The comment's decídalo id. Populated whenever the comment was identified, created, or\r\nupdated for this row (including the create-only deletion-rejection path, where the\r\npre-existing id is echoed).",
            "format": "int32",
            "nullable": true
          },
          "errorMessage": {
            "type": "string",
            "description": "Describes why the row failed. Identifies the row by its supplied `ProjectID`/`ProjectCode`.\r\nNull when the row succeeded.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The outcome of importing a single Decidalo.Import.Host.Contracts.ProjectCommentMigration.ProjectCommentInput row."
      },
      "ProjectCommentInput": {
        "required": [
          "comment",
          "project"
        ],
        "type": "object",
        "properties": {
          "project": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectReferenceIdentityInput"
              }
            ],
            "description": "Defines a reference to a project."
          },
          "comment": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CommentPropertiesInput"
              }
            ],
            "description": "The input data for a single comment to import on the target entity."
          }
        },
        "additionalProperties": false,
        "description": "A single row of a project-comment import batch: the project the comment belongs to plus the comment's own properties."
      },
      "ProjectCompanyReferenceInput": {
        "type": "object",
        "properties": {
          "companyID": {
            "type": "integer",
            "description": "References a company by the decídalo id.",
            "format": "int32",
            "nullable": true
          },
          "companyCode": {
            "maxLength": 100,
            "type": "string",
            "description": "References a company by the external id.\r\nIf CompanyID is set, then this field is ignored.",
            "nullable": true
          },
          "companyData": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CompanyCreateInput"
              }
            ],
            "description": "Instead of specifying a reference, a new company can be included.\r\nIf the company data is included, then the reference fields are ignored.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Referenes a company for a project."
      },
      "ProjectContactExportEntry": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportApiUserIdentity"
              }
            ],
            "description": "Identity of the contact user.",
            "nullable": true
          },
          "contactType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ContactType"
              }
            ],
            "description": "The role of this contact within the project."
          },
          "isPrimary": {
            "type": "boolean",
            "description": "Indicates whether this contact is the primary contact of its type for the project."
          }
        },
        "additionalProperties": false,
        "description": "A single contact assignment on a project."
      },
      "ProjectContactsExportOutput": {
        "type": "object",
        "properties": {
          "project": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectReferenceIdentity"
              }
            ],
            "description": "Identity of the project.",
            "nullable": true
          },
          "contacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectContactExportEntry"
            },
            "description": "Contacts assigned to this project.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A project with its contacts for the Import API GET endpoint."
      },
      "ProjectExperienceRequirementInput": {
        "type": "object",
        "properties": {
          "industryIDs": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "List of internal industry IDs that the project experience should relate to.",
            "nullable": true,
            "example": [
              1,
              5
            ]
          },
          "companyIDs": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "List of internal company IDs that the project experience should relate to.",
            "nullable": true,
            "example": [
              3
            ]
          },
          "skillIDs": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "List of internal skill IDs relevant to the project experience.",
            "nullable": true,
            "example": [
              10,
              22
            ]
          },
          "standardPositions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Standardized project position names expected for the experience.",
            "nullable": true,
            "example": [
              "Project Manager",
              "Technical Lead"
            ]
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Free-text keywords to match against project experience.",
            "nullable": true,
            "example": [
              "Agile",
              "Scrum"
            ]
          },
          "durationInMonths": {
            "type": "integer",
            "description": "The minimum required duration of project experience in months.",
            "format": "int32",
            "nullable": true,
            "example": 12
          }
        },
        "additionalProperties": false,
        "description": "Detail input for a project experience requirement."
      },
      "ProjectExperienceRequirementOutput": {
        "type": "object",
        "properties": {
          "industryIDs": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "List of internal industry IDs that the project experience relates to.",
            "nullable": true,
            "example": [
              1,
              5
            ]
          },
          "companyIDs": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "List of internal company IDs that the project experience relates to.",
            "nullable": true,
            "example": [
              3
            ]
          },
          "skillIDs": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "List of internal skill IDs relevant to the project experience.",
            "nullable": true,
            "example": [
              10,
              22
            ]
          },
          "standardPositions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Standardized project position names expected for the experience.",
            "nullable": true,
            "example": [
              "Project Manager",
              "Technical Lead"
            ]
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Free-text keywords to match against project experience.",
            "nullable": true,
            "example": [
              "Agile",
              "Scrum"
            ]
          },
          "durationInMonths": {
            "type": "integer",
            "description": "The minimum required duration of project experience in months.",
            "format": "int32",
            "nullable": true,
            "example": 12
          }
        },
        "additionalProperties": false,
        "description": "Detail output for a project experience requirement."
      },
      "ProjectIdentityInput": {
        "type": "object",
        "properties": {
          "projectID": {
            "type": "integer",
            "description": "Internal ID of the project.",
            "format": "int32",
            "nullable": true
          },
          "projectCode": {
            "type": "string",
            "description": "External identifier of the project.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines a reference to a project."
      },
      "ProjectIndustryReferenceInput": {
        "type": "object",
        "properties": {
          "industryID": {
            "type": "integer",
            "description": "decídalo id of the industry.",
            "format": "int32",
            "nullable": true
          },
          "industryName": {
            "type": "string",
            "description": "Name of the industry.\r\nActs as identifier, if IndustryID is not provided.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Data to reference or create an industry."
      },
      "ProjectIndustryReferenceInputOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectIndustryReferenceInput"
              }
            ],
            "description": "Data to reference or create an industry.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ProjectRecordingTargetImportBatch": {
        "type": "object",
        "properties": {
          "recordingTargets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectRecordingTargetImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ProjectRecordingTargetImportBatchResult": {
        "type": "object",
        "properties": {
          "recordingTargets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectRecordingTargetImportResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ProjectRecordingTargetImportItem": {
        "type": "object",
        "properties": {
          "projectReferenceID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "projectCode": {
            "type": "string",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "isBillable": {
            "type": "boolean",
            "nullable": true
          },
          "recordingTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeReferenceImport"
            },
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ProjectRecordingTargetImportResult": {
        "type": "object",
        "properties": {
          "projectReferenceID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "recordingTargetID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ProjectRecordingTargetOutput": {
        "type": "object",
        "properties": {
          "projectReferenceID": {
            "type": "integer",
            "format": "int32"
          },
          "projectCode": {
            "type": "string",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "isBillable": {
            "type": "boolean",
            "nullable": true
          },
          "recordingTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeReferenceOutput"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ProjectReferenceIdentity": {
        "required": [
          "projectID"
        ],
        "type": "object",
        "properties": {
          "projectID": {
            "type": "integer",
            "description": "The decídalo id of the project.",
            "format": "int32"
          },
          "projectCode": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "Optional external identifier of the project.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents the identity of project, which can be specified by different values."
      },
      "ProjectReferenceIdentityInput": {
        "type": "object",
        "properties": {
          "projectID": {
            "type": "integer",
            "description": "decídalo internal id of the project.",
            "format": "int32",
            "nullable": true
          },
          "projectCode": {
            "maxLength": 100,
            "type": "string",
            "description": "External identifier of the project.\r\nThis value will also be set/updated on the project if provided.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines a reference to a project."
      },
      "ProjectReferenceImportResult": {
        "type": "object",
        "properties": {
          "projectID": {
            "type": "integer",
            "description": "The id of the project.\r\nNull if no project was created or updated, e.g. because the import failed.",
            "format": "int32",
            "nullable": true
          },
          "projectCode": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The external identifier of the project, echoed from the request so a failed item stays identifiable.\r\nNull only if the request did not provide one.",
            "nullable": true
          },
          "errorMessage": {
            "type": "string",
            "description": "The errormessage, if the import failed.",
            "nullable": true
          },
          "success": {
            "type": "boolean",
            "description": "A flag to indicate, whether the import was successful.\r\nIf not successful, then the ErrorMessage contains more information."
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatusType"
              }
            ],
            "description": "Outcome of the import operation. Possible values: Created, Updated, NotModified, Deleted."
          }
        },
        "additionalProperties": false,
        "description": "The result of the import of one project."
      },
      "ProjectReferenceInput": {
        "required": [
          "identifier"
        ],
        "type": "object",
        "properties": {
          "identifier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectReferenceIdentityInput"
              }
            ],
            "description": "The identifier of the project.\r\nHas to be specified in some form."
          },
          "properties": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectReferencePropertiesInput"
              }
            ],
            "description": "Properties of the project.\r\nIf not set, the properties won't be changed.\r\nThe create case requires some properties.",
            "nullable": true
          },
          "company": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectCompanyReferenceInput"
              }
            ],
            "description": "Reference to the company, that is the customer of the project.\r\nIf not set, the company won't be changed.\r\nTo remove the company from the project, set an empty object \"{}\".",
            "nullable": true
          },
          "industry": {
            "$ref": "#/components/schemas/ProjectIndustryReferenceInput"
          },
          "keywords": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KeywordInput"
            },
            "description": "Full list of keywords for the project.\r\nKeywords not in the list will be removed. An empty list will remove all keywords.\r\nIf the field is not provided, the keywords won't be changed.",
            "nullable": true
          },
          "creator": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceInput"
              }
            ],
            "description": "The user, that is to be set as the creator of the project.\r\nOnly used in the create case.",
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "Flag to indicate, whether the project should be deleted. (Default: false)",
            "default": false,
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Input data to import a project."
      },
      "ProjectReferenceOutput": {
        "required": [
          "creator",
          "identifier",
          "keywords",
          "lastEditor",
          "properties"
        ],
        "type": "object",
        "properties": {
          "identifier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectReferenceIdentity"
              }
            ],
            "description": "The identifier of the project."
          },
          "properties": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectReferencePropertiesOutput"
              }
            ],
            "description": "The properties of the project."
          },
          "company": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CompanyOutput"
              }
            ],
            "description": "The customer of the project.",
            "nullable": true
          },
          "industry": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IndustryOutput"
              }
            ],
            "description": "The industry in which the project takes place.",
            "nullable": true
          },
          "keywords": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KeywordInput"
            },
            "description": "List of keywords of the projects."
          },
          "creationDate": {
            "type": "string",
            "description": "Timestamp of the creation of the project reference.",
            "format": "date-time"
          },
          "lastEditDate": {
            "type": "string",
            "description": "Timestamp of the last edit of the project reference.",
            "format": "date-time"
          },
          "lastImportedDate": {
            "type": "string",
            "description": "UTC timestamp of the last time this project was created or updated via the Import API\r\n(i.e. the last import that set IsImported = true). Null if the project has never been\r\nimported via the API.",
            "format": "date-time",
            "nullable": true
          },
          "creator": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The user that initially created this project."
          },
          "lastEditor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The user that last edited the project."
          }
        },
        "additionalProperties": false,
        "description": "Core information of a project."
      },
      "ProjectReferencePropertiesInput": {
        "type": "object",
        "properties": {
          "name": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldInput"
              }
            ],
            "description": "Name of the project.\r\nIf not set, it won't be changed.\r\nRequired to create new projects.",
            "nullable": true
          },
          "description": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldInput"
              }
            ],
            "description": "Description of the project.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "notes": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldInput"
              }
            ],
            "description": "Notes of the project.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "First day of the project.\r\nIf not set, it won't be changed.",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "endDate": {
            "type": "string",
            "description": "Last day of the project.\r\nIf not set, it won't be changed.",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "contactPerson": {
            "type": "string",
            "description": "Contact person of the project.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "projectVolume": {
            "type": "number",
            "description": "The money volume of the project.\r\nIf not set, it won't be changed.\r\nIf set, then the currency must be set as well.",
            "format": "double",
            "nullable": true
          },
          "projectVolumeCurrency": {
            "maxLength": 3,
            "type": "string",
            "description": "The currency of the money volume of the project.\r\nThe three letter currency code (like 'USD' or 'EUR').\r\nIf not set, it will use the client's default value.",
            "nullable": true
          },
          "isCentralProject": {
            "type": "boolean",
            "description": "Flag to indicate whether this project is a central project.\r\nIf no value is provided, this flag is set to true in the create case.",
            "nullable": true
          },
          "isConfidential": {
            "type": "boolean",
            "description": "Flag to indicate wheater this project is a confidential project. \r\nIf no value is provided, this flag is set to false in the create case.",
            "nullable": true
          },
          "displayCustomerDataOnCv": {
            "type": "boolean",
            "description": "Flag to indicate whether the customer data should be displayed on a CV.\r\nIf no value is provided, this flag is set to true in the create case.",
            "nullable": true
          },
          "isImported": {
            "type": "boolean",
            "description": "Flag to mark this project as imported via the Import API.\r\nWhen true (the default if no value is provided), the project's LastImportedDate is stamped\r\nwith the current time on every create/update so middleware can detect imported entities and\r\ndiff their data. When false, LastImportedDate is left unchanged (this call does not stamp it).",
            "nullable": true
          },
          "referenceStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Status of the projectreference.\r\nIdentified by id, internal name or any translated name — values like 'Internal' or 'External'.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "projectStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Status of the project.\r\nIdentified by id, internal name or any translated name — values like 'Unconfirmed', 'Planned', 'Active' or 'Completed'.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "projectManager": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceInput"
              }
            ],
            "description": "The primary project manager for the project.\r\nIf not provided, the current primary project manager is not changed.\r\nTo remove the primary project manager, set UserID to null.\r\nWhen the tenant has project contact permissions enabled, the user must hold an authorization role\r\neligible for this contact type — otherwise the whole import item is rejected and nothing is written.",
            "nullable": true
          },
          "resourceManager": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceInput"
              }
            ],
            "description": "The primary resource manager for the project.\r\nIf not provided, the current primary resource manager is not changed.\r\nTo remove the primary resource manager, set UserID to null.\r\nWhen the tenant has project contact permissions enabled, the user must hold an authorization role\r\neligible for this contact type — otherwise the whole import item is rejected and nothing is written.",
            "nullable": true
          },
          "salesResponsible": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceInput"
              }
            ],
            "description": "The primary sales responsible for the project.\r\nIf not provided, the current primary sales responsible is not changed.\r\nTo remove the primary sales responsible, set UserID to null.\r\nWhen the tenant has project contact permissions enabled, the user must hold an authorization role\r\neligible for this contact type — otherwise the whole import item is rejected and nothing is written.",
            "nullable": true
          },
          "projectAssistant": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceInput"
              }
            ],
            "description": "The primary project assistant for the project.\r\nIf not provided, the current primary project assistant is not changed.\r\nTo remove the primary project assistant, set UserID to null.\r\nWhen the tenant has project contact permissions enabled, the user must hold an authorization role\r\neligible for this contact type — otherwise the whole import item is rejected and nothing is written.",
            "nullable": true
          },
          "substituteProjectManager": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceInput"
              }
            ],
            "description": "[Legacy]\r\nThe substitute project manager of the project.\r\nIf not set, it won't be changed.",
            "nullable": true,
            "deprecated": true
          },
          "countryCode": {
            "maxLength": 2,
            "type": "string",
            "description": "The two-letter code representing the country of the project.\r\nFor example 'DE' or 'GB'.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "location": {
            "maxLength": 100,
            "type": "string",
            "description": "The location of the project.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "deliveryModel": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Delivery model of the project.\r\nIdentified by id, internal name or any translated name — values like 'Onshore' or 'Offshore'.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "businessUnit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Business unit of the project.\r\nIdentified by id, internal name or any translated name — values like 'Sales' or 'Consulting'.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "practiceArea": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Practice area of the project.\r\nIdentified by id, internal name or any translated name — values like 'Project Management' or 'IT Security'.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "priority": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Priority of the project.\r\nIdentified by id, internal name or any translated name.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "accountingType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Accounting type of the project, e.g. 'Billable' or 'Internal project'.\r\nIdentified by id, internal name or any translated name.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "serviceLine": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Service line of the project.\r\nIdentified by id, internal name or any translated name.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "legalEntity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Legal entity of the project.\r\nIdentified by id, internal name or any translated name.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "resourceGroup": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldInput"
              }
            ],
            "description": "Resource group of the project.\r\nIf not set, it won't be changed.",
            "nullable": true
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": {
              "nullable": true
            },
            "description": "Custom fields of the project. \r\nValues can be any primitive type like string, int, bool or DateTime (formatted as string).",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Container for the direct properties of a project.\r\nReferences to other entities (e.g. company) are not included here."
      },
      "ProjectReferencePropertiesOutput": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldInput"
              }
            ],
            "description": "Name of the project."
          },
          "description": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldInput"
              }
            ],
            "description": "Description text of the project.",
            "nullable": true
          },
          "notes": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldInput"
              }
            ],
            "description": "Notes field of the project.",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "First day of the project.\r\nFormatted as yyyy-MM-dd.",
            "format": "date",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "description": "Last day of the project.\r\nFormatted as yyyy-MM-dd.",
            "format": "date",
            "nullable": true
          },
          "contactPerson": {
            "type": "string",
            "description": "Name of the contact person for this project.",
            "nullable": true
          },
          "projectVolume": {
            "type": "number",
            "description": "Money volume of the project.\r\nThe currency of this amount is specified in ProjectVolumeCurrency.",
            "format": "double",
            "nullable": true
          },
          "projectVolumeCurrency": {
            "maxLength": 3,
            "minLength": 0,
            "type": "string",
            "description": "Currency of the project volume as three letter iso codes,\r\ne.g. 'USD' or 'EUR'.",
            "nullable": true
          },
          "isCentralProject": {
            "type": "boolean",
            "description": "Indicates whether the project is a central project."
          },
          "displayCustomerDataOnCv": {
            "type": "boolean",
            "description": "Indicates whether the customer data should be displayed on a CV."
          },
          "referenceStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Status of the project reference with its decídalo id.\r\nE.g. \"Internal\" or \"External\".",
            "nullable": true
          },
          "projectStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Status of the project with its decídalo id.\r\nE.g. \"Active\", \"Completed\", etc.",
            "nullable": true
          },
          "projectManager": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The primary project manager of the project.",
            "nullable": true
          },
          "resourceManager": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The primary resource manager responsible for resource allocation and management.",
            "nullable": true
          },
          "salesResponsible": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The primary sales responsible person who handled the project sale.",
            "nullable": true
          },
          "projectAssistant": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The primary project assistant of the project.",
            "nullable": true
          },
          "substituteProjectManager": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "[Legacy] The substitute project manager who acts as backup for the main project manager.",
            "nullable": true,
            "deprecated": true
          },
          "countryCode": {
            "maxLength": 2,
            "type": "string",
            "description": "The two-letter code representing the country of the project.",
            "nullable": true
          },
          "location": {
            "maxLength": 100,
            "type": "string",
            "description": "The location of the project.",
            "nullable": true
          },
          "deliveryModel": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Delivery model of the project with its decídalo id.\r\nValues like 'Onshore' or 'Offshore'.",
            "nullable": true
          },
          "businessUnit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Business unit of the project with its decídalo id.\r\nValues like 'Sales' or 'Consulting'.",
            "nullable": true
          },
          "practiceArea": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Practice area of the project with its decídalo id.\r\nValues like 'Project Management' or 'IT Security'.",
            "nullable": true
          },
          "priority": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Priority of the project with its decídalo id.",
            "nullable": true
          },
          "serviceLine": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Service line of the project with its decídalo id.",
            "nullable": true
          },
          "legalEntity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Legal entity of the project with its decídalo id.",
            "nullable": true
          },
          "accountingType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SelectOptionFieldInput"
              }
            ],
            "description": "Accounting type of the project with its decídalo id.",
            "nullable": true
          },
          "resourceGroup": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldInput"
              }
            ],
            "description": "Resource group of the project.",
            "nullable": true
          },
          "isConfidential": {
            "type": "boolean",
            "description": "Indicates whether the project is a confidential project."
          },
          "isImported": {
            "type": "boolean",
            "description": "Indicates whether the project has been imported via the Import API.\r\nTrue when a LastImportedDate is set (see Decidalo.Domain.Models.ProjectReference.ApiOutput.ProjectReferenceOutput.LastImportedDate)."
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": {
              "nullable": true
            },
            "description": "Custom fields of the project. \r\nValues can be any primitive type like string, int, bool or DateTime (formatted as string).",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Container for the direct properties of a project."
      },
      "ProjectStatusOutput": {
        "required": [
          "projectStatusID",
          "projectStatusName"
        ],
        "type": "object",
        "properties": {
          "projectStatusID": {
            "type": "integer",
            "description": "The decídalo id of the project status.",
            "format": "int32"
          },
          "projectStatusName": {
            "maxLength": 50,
            "minLength": 0,
            "type": "string",
            "description": "A string representation of the status."
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "description": "The name of the project status per language, as shown in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a possible working status of a project."
      },
      "ProjectTeamMemberExportEntry": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportApiUserIdentity"
              }
            ],
            "description": "Identity of the user assigned to the project.",
            "nullable": true
          },
          "position": {
            "type": "string",
            "description": "Project position of the team member.",
            "nullable": true
          },
          "hasProfileEntry": {
            "type": "boolean",
            "description": "True when the team member has at least one user-project-history entry on the project."
          },
          "comment": {
            "type": "string",
            "description": "Free-text comment on the team member entry.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single team-member assignment on a project."
      },
      "ProjectTeamMembersExportOutput": {
        "type": "object",
        "properties": {
          "project": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectReferenceIdentity"
              }
            ],
            "description": "Identity of the project.",
            "nullable": true
          },
          "teamMembers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectTeamMemberExportEntry"
            },
            "description": "Team members assigned to this project.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A project with its team members for the Import API GET endpoint."
      },
      "RateImportItem": {
        "type": "object",
        "properties": {
          "rateID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "label": {
            "type": "string",
            "nullable": true
          },
          "amount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "nullable": true
          },
          "unit": {
            "$ref": "#/components/schemas/RateUnit"
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RateResult": {
        "type": "object",
        "properties": {
          "rateID": {
            "type": "integer",
            "format": "int32"
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "label": {
            "type": "string",
            "nullable": true
          },
          "amount": {
            "type": "number",
            "format": "double"
          },
          "currencyCode": {
            "type": "string",
            "nullable": true
          },
          "unit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RateUnit"
              }
            ],
            "nullable": true
          },
          "isActive": {
            "type": "boolean"
          },
          "rateCardCount": {
            "type": "integer",
            "format": "int32"
          },
          "orderPositionCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "RateUnit": {
        "enum": [
          "Hour",
          "PersonDay"
        ],
        "type": "string"
      },
      "RateUnitNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RateUnit"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingColumnType": {
        "enum": [
          "WorkTime",
          "TravelTime",
          "TravelDistance",
          "TimeWindow"
        ],
        "type": "string"
      },
      "RecordingColumnTypeNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RecordingColumnType"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingEntryImportItem": {
        "type": "object",
        "properties": {
          "recordingEntryID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "recordingEntryCode": {
            "type": "string",
            "nullable": true
          },
          "userID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "recordingTargetID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "projectReferenceID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "projectCode": {
            "type": "string",
            "nullable": true
          },
          "workPackageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "workPackageCode": {
            "type": "string",
            "nullable": true
          },
          "generalActivityID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "generalActivityCode": {
            "type": "string",
            "nullable": true
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "workDate": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "startTime": {
            "type": "string",
            "nullable": true,
            "example": "09:00:00"
          },
          "endTime": {
            "type": "string",
            "nullable": true,
            "example": "09:00:00"
          },
          "timeMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "pauseMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/TimeRecordingEntryStatus"
          },
          "sourceDescription": {
            "type": "string",
            "nullable": true
          },
          "recordingTypeValues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingEntryTypeValueImport"
            },
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingEntryImportReadItem": {
        "type": "object",
        "properties": {
          "recordingEntryID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "recordingEntryCode": {
            "type": "string",
            "nullable": true
          },
          "userID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "recordingTargetID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "projectReferenceID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "projectCode": {
            "type": "string",
            "nullable": true
          },
          "workPackageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "workPackageCode": {
            "type": "string",
            "nullable": true
          },
          "generalActivityID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "generalActivityCode": {
            "type": "string",
            "nullable": true
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "workDate": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "startTime": {
            "type": "string",
            "nullable": true,
            "example": "09:00:00"
          },
          "endTime": {
            "type": "string",
            "nullable": true,
            "example": "09:00:00"
          },
          "timeMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "pauseMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/TimeRecordingEntryStatus"
          },
          "sourceDescription": {
            "type": "string",
            "nullable": true
          },
          "recordingTypeValues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingEntryTypeValueImport"
            },
            "nullable": true
          },
          "isImported": {
            "type": "boolean"
          },
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderCode": {
            "type": "string",
            "nullable": true
          },
          "lastEditDate": {
            "type": "string",
            "format": "date-time"
          },
          "activityTypeCategory": {
            "type": "string",
            "nullable": true
          },
          "rateID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "rateCode": {
            "type": "string",
            "nullable": true
          },
          "rateCategory": {
            "type": "string",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "format": "date-time"
          },
          "lastImportedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingEntryImportResult": {
        "type": "object",
        "properties": {
          "recordingEntryID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "recordingEntryCode": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingEntryTypeValueImport": {
        "type": "object",
        "properties": {
          "recordingTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "recordingTypeCode": {
            "type": "string",
            "nullable": true
          },
          "value": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingEntryTypeValueImportIReadOnlyListOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingEntryTypeValueImport"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingTargetOutput": {
        "type": "object",
        "properties": {
          "recordingTargetID": {
            "type": "integer",
            "format": "int32"
          },
          "subjectLabels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "activityTypeNames": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "nullable": true
          },
          "projectReferenceID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "projectCode": {
            "type": "string",
            "nullable": true
          },
          "workPackageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "workPackageCode": {
            "type": "string",
            "nullable": true
          },
          "generalActivityID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "generalActivityCode": {
            "type": "string",
            "nullable": true
          },
          "generalActivityNames": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "nullable": true
          },
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderCode": {
            "type": "string",
            "nullable": true
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "isBillable": {
            "type": "boolean",
            "nullable": true
          },
          "isActive": {
            "type": "boolean"
          },
          "hasRecordedTime": {
            "type": "boolean"
          },
          "recordingTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeReferenceOutput"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingTypeImportItem": {
        "type": "object",
        "properties": {
          "recordingTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "recordingColumnType": {
            "$ref": "#/components/schemas/RecordingColumnType"
          },
          "unitLabel": {
            "type": "string",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeTranslationDto"
            },
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingTypePricingMode": {
        "enum": [
          "OwnRate",
          "FactorOfRate"
        ],
        "type": "string"
      },
      "RecordingTypeReferenceImport": {
        "type": "object",
        "properties": {
          "recordingTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "recordingTypeCode": {
            "type": "string",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingTypeReferenceImportIReadOnlyListOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeReferenceImport"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingTypeReferenceOutput": {
        "type": "object",
        "properties": {
          "recordingTypeID": {
            "type": "integer",
            "format": "int32"
          },
          "recordingTypeCode": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingTypeResult": {
        "type": "object",
        "properties": {
          "recordingTypeID": {
            "type": "integer",
            "format": "int32"
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "recordingColumnType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RecordingColumnType"
              }
            ]
          },
          "unitLabel": {
            "type": "string",
            "nullable": true
          },
          "isDefault": {
            "type": "boolean"
          },
          "isActive": {
            "type": "boolean"
          },
          "isDeletable": {
            "type": "boolean"
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeTranslationDto"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingTypeTranslationDto": {
        "type": "object",
        "properties": {
          "languageID": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecordingTypeTranslationDtoIReadOnlyListOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeTranslationDto"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ReferenceStatusOutput": {
        "required": [
          "allowReferencing",
          "referenceStatusID",
          "referenceStatusName"
        ],
        "type": "object",
        "properties": {
          "referenceStatusID": {
            "type": "integer",
            "description": "The decídalo id of the status.",
            "format": "int32"
          },
          "referenceStatusName": {
            "maxLength": 50,
            "minLength": 0,
            "type": "string",
            "description": "A string representation of the status."
          },
          "allowReferencing": {
            "type": "boolean",
            "description": "Flag to indicate, whether this status would allow users to add this project to their profiles."
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "description": "The name of the reference status per language, as shown in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a possible publications status of a project as a reference."
      },
      "RejectionReasonType": {
        "type": "object",
        "properties": {
          "rejectionReasonID": {
            "type": "integer",
            "format": "int32"
          },
          "rejectionReasonName": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "type": "integer",
            "format": "int32"
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "description": "The name of the rejection reason per language, as shown in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RequestCandidateStatusOutput": {
        "required": [
          "statusCategory",
          "statusID",
          "statusName"
        ],
        "type": "object",
        "properties": {
          "statusID": {
            "type": "integer",
            "description": "decídalo id of the candidate processing status.",
            "format": "int32"
          },
          "statusName": {
            "minLength": 1,
            "type": "string",
            "description": "Display name of the status."
          },
          "statusCategory": {
            "allOf": [
              {
                "$ref": "#/components/schemas/StatusOptionCategory"
              }
            ],
            "description": "Categorization of the status: Idle, Outdated, or Finished."
          }
        },
        "additionalProperties": false,
        "description": "The processing status of a candidate on a resource request."
      },
      "RequirementInput": {
        "type": "object",
        "properties": {
          "requirementID": {
            "type": "integer",
            "description": "The internal decídalo identifier of an existing requirement.\r\nIf provided, the requirement will be updated. If omitted, a new requirement is created.",
            "format": "int32",
            "nullable": true,
            "example": 42
          },
          "queryText": {
            "maxLength": 2000,
            "type": "string",
            "description": "The free-text description of what the requirement demands.",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/RequirementType"
          },
          "skillDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SkillRequirementInput"
              }
            ],
            "description": "Detail information for a skill requirement.\r\nOnly relevant when Type is \"Skills\".\r\nIf not supplied, skill details will not be changed.",
            "nullable": true
          },
          "languageDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LanguageRequirementInput"
              }
            ],
            "description": "Detail information for a language requirement.\r\nOnly relevant when Type is \"Languages\".\r\nIf not supplied, language details will not be changed.",
            "nullable": true
          },
          "certificateDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CertificateRequirementInput"
              }
            ],
            "description": "Detail information for a certificate requirement.\r\nOnly relevant when Type is \"Certificates\".\r\nIf not supplied, certificate details will not be changed.",
            "nullable": true
          },
          "educationDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EducationRequirementInput"
              }
            ],
            "description": "Detail information for an education requirement.\r\nOnly relevant when Type is \"Education\".\r\nIf not supplied, education details will not be changed.",
            "nullable": true
          },
          "projectExperienceDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectExperienceRequirementInput"
              }
            ],
            "description": "Detail information for a project experience requirement.\r\nOnly relevant when Type is \"ProjectExperience\".\r\nIf not supplied, project experience details will not be changed.",
            "nullable": true
          },
          "jobPositionDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/JobPositionRequirementInput"
              }
            ],
            "description": "Detail information for a job position requirement.\r\nOnly relevant when Type is \"JobPosition\".\r\nIf not supplied, job position details will not be changed.",
            "nullable": true
          },
          "locationDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LocationRequirementInput"
              }
            ],
            "description": "Detail information for a distance-from-location requirement.\r\nOnly relevant when Type is \"DistanceFromLocation\".\r\nIf not supplied, location details will not be changed.",
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "Flag to indicate whether this requirement should be deleted.\r\nOnly applies when a RequirementID is provided.\r\nDefault: false.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single requirement to import on a resource request.\r\nIf a RequirementID is provided, the requirement will be updated (or deleted if the Delete flag is set).\r\nIf no RequirementID is provided, a new requirement will be created."
      },
      "RequirementOutput": {
        "required": [
          "requirementID",
          "type"
        ],
        "type": "object",
        "properties": {
          "requirementID": {
            "type": "integer",
            "description": "The internal decídalo identifier of the requirement.",
            "format": "int32",
            "example": 42
          },
          "queryText": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The free-text description of what the requirement demands.",
            "nullable": true,
            "example": "5+ years of experience with C# and .NET"
          },
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RequirementType"
              }
            ],
            "description": "The type of the requirement.\r\nDetermines which detail object is populated.",
            "example": "Skills"
          },
          "skillDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SkillRequirementOutput"
              }
            ],
            "description": "Detail information for a skill requirement.\r\nOnly populated when Type is \"Skills\".",
            "nullable": true
          },
          "languageDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LanguageRequirementOutput"
              }
            ],
            "description": "Detail information for a language requirement.\r\nOnly populated when Type is \"Languages\".",
            "nullable": true
          },
          "certificateDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CertificateRequirementOutput"
              }
            ],
            "description": "Detail information for a certificate requirement.\r\nOnly populated when Type is \"Certificates\".",
            "nullable": true
          },
          "educationDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EducationRequirementOutput"
              }
            ],
            "description": "Detail information for an education requirement.\r\nOnly populated when Type is \"Education\".",
            "nullable": true
          },
          "projectExperienceDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectExperienceRequirementOutput"
              }
            ],
            "description": "Detail information for a project experience requirement.\r\nOnly populated when Type is \"ProjectExperience\".",
            "nullable": true
          },
          "locationDetails": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LocationRequirementOutput"
              }
            ],
            "description": "Detail information for a distance-from-location requirement.\r\nOnly populated when Type is \"DistanceFromLocation\".",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single requirement on a resource request."
      },
      "RequirementType": {
        "enum": [
          "ProjectExperience",
          "Education",
          "Languages",
          "Certificates",
          "Skills",
          "JobPosition",
          "Availability",
          "DistanceFromLocation"
        ],
        "type": "string"
      },
      "RequirementTypeNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RequirementType"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ResourceGroupLite": {
        "type": "object",
        "properties": {
          "resourceGroupID": {
            "type": "integer",
            "description": "The id of the resource group.",
            "format": "int32"
          },
          "resourceGroupName": {
            "type": "string",
            "description": "The name of the resource group.",
            "nullable": true
          },
          "resourceManagerID": {
            "type": "integer",
            "description": "ID of the resource manager, if there is only a single on the group, otherwise null",
            "format": "int32",
            "nullable": true
          },
          "match": {
            "type": "boolean",
            "description": "Used when comparing resource groups against a resource request's requirements.",
            "nullable": true
          },
          "isAiSuggested": {
            "type": "boolean",
            "description": "Indicates whether this resource group was suggested by AI as relevant for the request.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Class representing a resource group but only contains the most basic information."
      },
      "ResourceGroupOutput": {
        "required": [
          "resourceGroupID"
        ],
        "type": "object",
        "properties": {
          "resourceGroupID": {
            "type": "integer",
            "description": "decídalo id of the resource group.",
            "format": "int32"
          },
          "resourceGroupName": {
            "type": "string",
            "description": "Display name of the resource group.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Short display information of a resource group."
      },
      "ResourceGroupReferenceInput": {
        "type": "object",
        "properties": {
          "resourceGroupID": {
            "type": "integer",
            "description": "decídalo id of the resource group.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "resourceGroupName": {
            "maxLength": 100,
            "type": "string",
            "description": "Name of the resource group.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a resource group for a resource request."
      },
      "ResourceRequestCandidateOutput": {
        "required": [
          "status",
          "user"
        ],
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The user who is the candidate."
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RequestCandidateStatusOutput"
              }
            ],
            "description": "The candidate's processing status on this resource request."
          },
          "suggestion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SuggestionOutput"
              }
            ],
            "description": "Suggestion metadata. Non-null when the assigned-profile record has a linked suggestion; null otherwise.",
            "nullable": true
          },
          "booking": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BookingReferenceOutput"
              }
            ],
            "description": "Booking reference. Non-null when the candidate has been booked; null otherwise.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A candidate assigned to a resource request."
      },
      "ResourceRequestContactOutput": {
        "required": [
          "contactType",
          "isPrimary",
          "request",
          "user"
        ],
        "type": "object",
        "properties": {
          "request": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceRequestIdentifier"
              }
            ],
            "description": "The resource request on which the user is a contact."
          },
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The user who is the contact."
          },
          "contactType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ContactType"
              }
            ],
            "description": "The contact role on the resource request."
          },
          "isPrimary": {
            "type": "boolean",
            "description": "Whether this contact is the primary contact of its type for the resource request."
          }
        },
        "additionalProperties": false,
        "description": "A single resource request contact row returned by the Import API."
      },
      "ResourceRequestIdentifier": {
        "required": [
          "requestID"
        ],
        "type": "object",
        "properties": {
          "requestID": {
            "type": "integer",
            "description": "decídalo id of the resource request.",
            "format": "int32",
            "example": 1
          },
          "requestCode": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "Optional external identifier for the resource request, e.g. from an external system.",
            "nullable": true,
            "example": "RR-2026-001"
          }
        },
        "additionalProperties": false,
        "description": "Identifier for a resource request."
      },
      "ResourceRequestIdentifierInput": {
        "type": "object",
        "properties": {
          "requestID": {
            "type": "integer",
            "description": "decídalo id of the resource request.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "requestCode": {
            "maxLength": 100,
            "type": "string",
            "description": "Optional external identifier for the resource request, e.g. from an external system.\r\nCan be used instead of RequestID to look up an existing resource request.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Identifier for a resource request."
      },
      "ResourceRequestInput": {
        "type": "object",
        "properties": {
          "identifier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceRequestIdentifierInput"
              }
            ],
            "description": "Id of the resource request.\r\nIf no Id is provided then a new resource request will be created.",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/ResourceRequestStatus"
          },
          "properties": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceRequestPropertiesInput"
              }
            ],
            "description": "Fields of the resource request that can be set by the user.\r\nIf no values are provided, the existing values will be kept.",
            "nullable": true
          },
          "company": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CompanyReferenceInput"
              }
            ],
            "description": "The company for which the resource request is made.\r\nIf not supplied, the company will not be changed.\r\nTo remove the company from the resource request, set an empty object.\r\nIf the company does not exist, it will be created with the provided values.",
            "nullable": true
          },
          "industry": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectIndustryReferenceInput"
              }
            ],
            "description": "Target industry for the resource request, if any.\r\nIf not supplied, the industry will not be changed.\r\nTo remove the industry from the resource request, set an empty object.\r\nIf the industry does not exist, it will be created with the provided values.",
            "nullable": true
          },
          "priority": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PriorityReferenceInput"
              }
            ],
            "description": "Priority of the resource request, if any.\r\nIf not supplied, the priority will not be changed.\r\nSetting an empty object will not change the priority (Priority cannot be cleared).\r\nIf the priority does not exist, it will result in an error.",
            "nullable": true
          },
          "businessUnit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BusinessUnitReferenceInput"
              }
            ],
            "description": "Business unit associated with the resource request, if any.\r\nIf not supplied, the business unit will not be changed.\r\nTo remove the business unit from the resource request, set an empty object.\r\nIf the business unit does not exist, it will result in an error.",
            "nullable": true
          },
          "practiceArea": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PracticeAreaReferenceInput"
              }
            ],
            "description": "Practice area associated with the resource request, if any.\r\nIf not supplied, the practice area will not be changed.\r\nTo remove the practice area from the resource request, set an empty object.\r\nIf the practice area does not exist, it will result in an error.",
            "nullable": true
          },
          "serviceCategory": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ServiceCategoryReferenceInput"
              }
            ],
            "description": "Service category associated with the resource request, if any.\r\nIf not supplied, the service category will not be changed.\r\nTo remove the service category from the resource request, set an empty object.\r\nIf the service category does not exist, it will result in an error.",
            "nullable": true
          },
          "serviceLine": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ServiceLineReferenceInput"
              }
            ],
            "description": "Service line associated with the resource request, if any.\r\nIf not supplied, the service line will not be changed.\r\nTo remove the service line from the resource request, set an empty object.\r\nIf the service line does not exist, it will result in an error.",
            "nullable": true
          },
          "legalEntity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LegalEntityReferenceInput"
              }
            ],
            "description": "Legal entity associated with the resource request, if any.\r\nIf not supplied, the legal entity will not be changed.\r\nTo remove the legal entity from the resource request, set an empty object.\r\nIf the legal entity does not exist, it will result in an error.",
            "nullable": true
          },
          "deliveryModel": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeliveryModelReferenceInput"
              }
            ],
            "description": "Delivery model requested with the resource request, if any.\r\nIf not supplied, the delivery model will not be changed.\r\nTo remove the delivery model from the resource request, set an empty object.\r\nIf the delivery model does not exist, it will result in an error.",
            "nullable": true
          },
          "resourceGroup": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceGroupReferenceInput"
              }
            ],
            "description": "Resource group associated with the resource request, if any.\r\nIf not supplied, the resource group will not be changed.\r\nTo remove the resource group from the resource request, set an empty object.\r\nIf the resource group does not exist, it will result in an error.",
            "nullable": true
          },
          "accountingType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AccountingTypeReferenceInput"
              }
            ],
            "description": "Accounting type of the resource request, if any.\r\nIf not supplied, the accounting type will not be changed.\r\nTo remove the accounting type from the resource request, set an empty object.\r\nIf the accounting type does not exist, it will result in an error.",
            "nullable": true
          },
          "assignedResourceManager": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceInput"
              }
            ],
            "description": "Assigned user that is responsible for the resource request.\r\nIf not supplied, the assigned resource manager will not be changed.\r\nTo remove the assigned resource manager from the resource request, set an empty object.\r\nIf the user does not exist, it will result in an error.",
            "nullable": true
          },
          "requestor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceInput"
              }
            ],
            "description": "The user that originally requested the resource (the requestor).\r\nIf not supplied, the requestor will not be changed or set to the importing user.\r\nThe Requestor cannot be set to null.",
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "Flag to indicate, whether the resource request should be deleted.\r\nDefault: false.",
            "nullable": true
          },
          "project": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectReferenceIdentityInput"
              }
            ],
            "description": "The existing project that we wish to link to the resource request.\r\nIt is irrelevant whether the resource request exists or not but at the moment we support only the linking of\r\nalready existing projects. \r\nThe link is established by creating a dummy booking which is connected \r\non one end with the project and on the other end with the resource request\r\nIf the project code or project id does not exist, nothing is going to be linked.",
            "nullable": true
          },
          "requirements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RequirementInput"
            },
            "description": "Requirements to import for the resource request.\r\nIf not supplied, the requirements will not be changed.\r\nEach entry will be created, updated, or deleted depending on the provided fields.",
            "nullable": true
          },
          "comments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommentPropertiesInput"
            },
            "description": "Comments to import for the resource request.\r\nIf not supplied, the comments will not be changed.\r\nEach entry will be created, updated, or deleted depending on the provided fields.",
            "nullable": true
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": {
              "nullable": true
            },
            "description": "Custom fields of the resource request.\r\nValues can be any primitive type like string, int, bool or DateTime (formatted as string).",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The input data for a resource request."
      },
      "ResourceRequestMetrics": {
        "type": "object",
        "properties": {
          "softBookedPersonDays": {
            "type": "number",
            "description": "Total number of person days over all candidates on this request in status \"soft booked\".",
            "format": "double"
          },
          "softBookedCandidateCount": {
            "type": "integer",
            "description": "Total number of candidates that have a booking in status \"soft booked\".",
            "format": "int32"
          },
          "reservedPersonDays": {
            "type": "number",
            "description": "Total number of person days over all candidates on this request in status \"reserved\".",
            "format": "double"
          },
          "reservedCandidateCount": {
            "type": "integer",
            "description": "Total number of candidates that have a booking in status \"reserved\".",
            "format": "int32"
          },
          "confirmedPersonDays": {
            "type": "number",
            "description": "Total number of person days over all candidates on this request in status \"confirmed\".",
            "format": "double"
          },
          "confirmedCandidateCount": {
            "type": "integer",
            "description": "Total number of candidates that have a booking in status \"confirmed\".",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "A collection of key numbers about the resource request."
      },
      "ResourceRequestOutput": {
        "required": [
          "creationDate",
          "identifier",
          "lastEditDate",
          "metrics",
          "properties",
          "status"
        ],
        "type": "object",
        "properties": {
          "identifier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceRequestIdentifier"
              }
            ],
            "description": "Id of the resource request."
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceRequestStatus"
              }
            ],
            "description": "Current processing status of the resource request."
          },
          "properties": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceRequestPropertiesOutput"
              }
            ],
            "description": "Fields of the resource request that can be set by the user."
          },
          "metrics": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceRequestMetrics"
              }
            ],
            "description": "A collection of key numbers about the resource request."
          },
          "company": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CompanyReference"
              }
            ],
            "description": "The company for which the resource request is made.",
            "nullable": true
          },
          "industry": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IndustryOutput"
              }
            ],
            "description": "Target industry for the resource request, if any.",
            "nullable": true
          },
          "assignedResourceManager": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "Assigned user that is responsible for the resource request.",
            "nullable": true
          },
          "requestor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The user who originally requested the resource (the requestor).",
            "nullable": true
          },
          "lastEditor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The user who last edited the resource request.",
            "nullable": true
          },
          "creator": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The user who created the resource request.",
            "nullable": true
          },
          "deliveryModel": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeliveryModelOutput"
              }
            ],
            "description": "Delivery model of the resource request.",
            "nullable": true
          },
          "project": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectReferenceIdentity"
              }
            ],
            "description": "The project that is linked to the resource request.",
            "nullable": true
          },
          "priority": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PriorityOutput"
              }
            ],
            "description": "Priority of the resource request.",
            "nullable": true
          },
          "businessUnit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BusinessUnitOutput"
              }
            ],
            "description": "Business unit of the resource request.",
            "nullable": true
          },
          "practiceArea": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PracticeAreaOutput"
              }
            ],
            "description": "Practice area of the resource request.",
            "nullable": true
          },
          "serviceLine": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ServiceLineOutput"
              }
            ],
            "description": "Service line of the resource request.",
            "nullable": true
          },
          "legalEntity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LegalEntityOutput"
              }
            ],
            "description": "Legal entity of the resource request.",
            "nullable": true
          },
          "serviceCategory": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ServiceCategoryOutput"
              }
            ],
            "description": "Service category of the resource request (called \"Career Level\" in the application UI).",
            "nullable": true
          },
          "resourceGroup": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceGroupOutput"
              }
            ],
            "description": "Resource group assigned to the resource request.",
            "nullable": true
          },
          "accountingType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AccountingTypeOutput"
              }
            ],
            "description": "Accounting type assigned to the resource request.",
            "nullable": true
          },
          "requirements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RequirementOutput"
            },
            "description": "Requirements of the resource request.",
            "nullable": true
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": {
              "nullable": true
            },
            "description": "Custom fields of the resource request.\r\nValues can be any primitive type like string, int, bool or DateTime (formatted as string).",
            "nullable": true
          },
          "candidates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResourceRequestCandidateOutput"
            },
            "description": "Candidates assigned to this resource request.\r\nAbsent from the JSON response unless `includeCandidates=true` was passed.\r\nWhen `includeCandidates=true` and no candidates exist, serializes as `[]`.",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "description": "Timestamp of the creation of the resource request.",
            "format": "date-time"
          },
          "lastEditDate": {
            "type": "string",
            "description": "Timestamp of the last change of the resource request.",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "The data for a resource request."
      },
      "ResourceRequestPropertiesInput": {
        "type": "object",
        "properties": {
          "title": {
            "maxLength": 250,
            "type": "string",
            "description": "Display title for the resource request.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Html formatted description text.",
            "nullable": true
          },
          "role": {
            "maxLength": 100,
            "type": "string",
            "description": "Official title of the requested role.",
            "nullable": true
          },
          "source": {
            "maxLength": 255,
            "type": "string",
            "description": "Data source where the need originated.",
            "nullable": true
          },
          "requestedCandidateCount": {
            "type": "integer",
            "description": "Number of profiles that should be returned for the request.\r\nIf no values is specified, new resource requests are created with default '1'.",
            "format": "int32",
            "nullable": true,
            "example": 3
          },
          "tenderDate": {
            "type": "string",
            "description": "Deadline for fulfulling the request.",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "startDate": {
            "type": "string",
            "description": "First day of the time period when the resource is needed.",
            "format": "date-time",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "description": "Last day of the time period when the resource is needed.",
            "format": "date-time",
            "nullable": true
          },
          "contact": {
            "maxLength": 255,
            "type": "string",
            "description": "Notes about the contact person who needs the resource.",
            "nullable": true
          },
          "countryCode": {
            "maxLength": 2,
            "type": "string",
            "description": "Two-letter country code of the resource request.",
            "nullable": true
          },
          "location": {
            "maxLength": 100,
            "type": "string",
            "description": "Location of the resource request.",
            "nullable": true
          },
          "capacity": {
            "type": "integer",
            "description": "Capacity as a percentage (0-100).",
            "format": "int32",
            "nullable": true,
            "example": 80
          },
          "personDays": {
            "type": "number",
            "description": "Person days for the resource request.",
            "format": "double",
            "nullable": true,
            "example": 20.5
          }
        },
        "additionalProperties": false,
        "description": "Container for the properties of a resource request."
      },
      "ResourceRequestPropertiesOutput": {
        "required": [
          "requestedCandidateCount"
        ],
        "type": "object",
        "properties": {
          "title": {
            "maxLength": 250,
            "minLength": 0,
            "type": "string",
            "description": "Display title for the resource request.",
            "nullable": true,
            "example": "Agile project manager"
          },
          "description": {
            "type": "string",
            "description": "Html formatted description text.",
            "nullable": true,
            "example": "<html><head></head><body><p dir='ltr'><span style='white-space: pre-wrap;'>Bedarfsbeschreibung.</span></p></body></html>"
          },
          "role": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "Official title of the requested role.",
            "nullable": true,
            "example": "Project manager"
          },
          "source": {
            "maxLength": 255,
            "minLength": 0,
            "type": "string",
            "description": "Data source where the need originated.",
            "nullable": true,
            "example": "https://portal.jobs.com"
          },
          "requestedCandidateCount": {
            "type": "integer",
            "description": "Number of profiles that should be returned for the request.",
            "format": "int32",
            "example": 3
          },
          "tenderDate": {
            "type": "string",
            "description": "Deadline for fulfulling the request.",
            "format": "date",
            "nullable": true,
            "example": "2023-10-01"
          },
          "startDate": {
            "type": "string",
            "description": "First day of the time period when the resource is needed.",
            "format": "date-time",
            "nullable": true,
            "example": "2023-10-01"
          },
          "endDate": {
            "type": "string",
            "description": "Last day of the time period when the resource is needed.",
            "format": "date-time",
            "nullable": true,
            "example": "2023-12-31"
          },
          "feedbackUntil": {
            "type": "string",
            "description": "Deadline by which feedback on the resource request is expected.",
            "format": "date-time",
            "nullable": true,
            "example": "2023-10-15"
          },
          "contact": {
            "maxLength": 255,
            "minLength": 0,
            "type": "string",
            "description": "Notes about the contact person who needs the resource.",
            "nullable": true
          },
          "countryCode": {
            "maxLength": 2,
            "type": "string",
            "description": "Two-letter country code of the resource request.",
            "nullable": true
          },
          "location": {
            "maxLength": 100,
            "type": "string",
            "description": "Location of the resource request.",
            "nullable": true
          },
          "capacity": {
            "type": "integer",
            "description": "Capacity as a percentage (0-100).",
            "format": "int32",
            "nullable": true
          },
          "personDays": {
            "type": "number",
            "description": "Requested person days for the resource request.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Container for the properties of a resource request."
      },
      "ResourceRequestStatus": {
        "enum": [
          "Open",
          "Done",
          "Withdrawn"
        ],
        "type": "string"
      },
      "ResourceRequestStatusNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceRequestStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RoleCertificateInput": {
        "type": "object",
        "properties": {
          "certificateID": {
            "type": "integer",
            "description": "Internal ID of the certificate.",
            "format": "int32",
            "nullable": true
          },
          "certificateName": {
            "$ref": "#/components/schemas/TextFieldInput"
          }
        },
        "additionalProperties": false,
        "description": "Defines a certificate for a role."
      },
      "RoleExportCertificate": {
        "type": "object",
        "properties": {
          "certificateID": {
            "type": "integer",
            "description": "Internal ID of the certificate.",
            "format": "int32"
          },
          "certificateName": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldInput"
              }
            ],
            "description": "The name of the certificate.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A certificate associated with a role."
      },
      "RoleExportIdentity": {
        "type": "object",
        "properties": {
          "roleID": {
            "type": "integer",
            "description": "The internal ID of the role.",
            "format": "int32"
          },
          "roleCode": {
            "type": "string",
            "description": "The external identifier of the role.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Identifier of a role in the export output."
      },
      "RoleExportOutput": {
        "type": "object",
        "properties": {
          "identifier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RoleExportIdentity"
              }
            ],
            "description": "Identifier of the role.",
            "nullable": true
          },
          "properties": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RoleExportProperties"
              }
            ],
            "description": "Properties of the role.",
            "nullable": true
          },
          "roleCertificates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoleExportCertificate"
            },
            "description": "Certificates associated with the role.",
            "nullable": true
          },
          "roleSkills": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoleExportSkill"
            },
            "description": "Skills associated with the role.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a role with associated certificates and skills for the Import API GET endpoint.\r\nMirrors the structure of Decidalo.Domain.Models.Roles.Import.RoleImportInput but without RedesignIDs."
      },
      "RoleExportProperties": {
        "type": "object",
        "properties": {
          "roleName": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldTranslationInput"
              }
            ],
            "description": "The name of the role with translations.",
            "nullable": true
          },
          "roleDescription": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldInput"
              }
            ],
            "description": "Description of the role.",
            "nullable": true
          },
          "roleCode": {
            "type": "string",
            "description": "External identifier of the role.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Properties of a role in the export output."
      },
      "RoleExportSkill": {
        "type": "object",
        "properties": {
          "skillID": {
            "type": "integer",
            "description": "Internal ID of the skill.",
            "format": "int32"
          },
          "skillName": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldTranslationInput"
              }
            ],
            "description": "The name of the skill with translations.",
            "nullable": true
          },
          "skillLevel": {
            "type": "integer",
            "description": "The skill level. Null means 'Any level'.",
            "format": "int32",
            "nullable": true
          },
          "skillCategory": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RoleSkillCategoryInput"
              }
            ],
            "description": "The category of the skill.",
            "nullable": true
          },
          "skillSubCategory": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RoleSkillCategoryInput"
              }
            ],
            "description": "The sub category of the skill.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A skill associated with a role."
      },
      "RoleIdentityInput": {
        "type": "object",
        "properties": {
          "roleID": {
            "type": "integer",
            "description": "The internal ID of the role.",
            "format": "int32",
            "nullable": true
          },
          "roleCode": {
            "maxLength": 100,
            "type": "string",
            "description": "The external identifier of the role.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Identifier of a role."
      },
      "RoleImportInput": {
        "type": "object",
        "properties": {
          "identifier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RoleIdentityInput"
              }
            ],
            "description": "Identifier of the role.\r\nIf not provided, then a new Role will be created.",
            "nullable": true
          },
          "properties": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RolePropertiesInput"
              }
            ],
            "description": "Defines the properties of the role.",
            "nullable": true
          },
          "roleCertificates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoleCertificateInput"
            },
            "description": "Defines the certificates associated with the role.",
            "nullable": true
          },
          "roleSkills": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoleSkillInput"
            },
            "description": "Defines the skills associated with the role.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines a role with associated certificates and skills."
      },
      "RolePropertiesInput": {
        "type": "object",
        "properties": {
          "roleName": {
            "$ref": "#/components/schemas/TextFieldTranslationInput"
          },
          "roleDescription": {
            "$ref": "#/components/schemas/TextFieldInput"
          },
          "roleCode": {
            "maxLength": 100,
            "type": "string",
            "description": "External identifier of the role.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines the properties of a role."
      },
      "RoleSkillCategoryInput": {
        "type": "object",
        "properties": {
          "categoryID": {
            "type": "integer",
            "description": "decídalo specific id of the skill category.\r\nEither CategoryID or a transltion must be specified.\r\nIf the category does not exist yet, then at least one translation must be specified.",
            "format": "int32",
            "nullable": true
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SkillCategoryTranslationInput"
            },
            "description": "The texts of the skill category in various translations.\r\nIf the category is specified with the CategoryID then the Translations are not needed.\r\nIn order to create the category at least one translation is required.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RoleSkillInput": {
        "type": "object",
        "properties": {
          "skillID": {
            "type": "integer",
            "description": "Internal ID of the skill.",
            "format": "int32",
            "nullable": true
          },
          "skillName": {
            "$ref": "#/components/schemas/TextFieldTranslationInput"
          },
          "skillLevel": {
            "type": "integer",
            "description": "The skill level of the skill for the role.\r\nWhen the value 'null' is provided or no value at all, then 'Any level' is set.",
            "format": "int32",
            "nullable": true
          },
          "skillCategory": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RoleSkillCategoryInput"
              }
            ],
            "description": "The category of the skill.\r\nOnly used if the skill does not exist yet.\r\nIf the sub category is not specified, then new skills will be placed into this category directly.",
            "nullable": true
          },
          "skillSubCategory": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RoleSkillCategoryInput"
              }
            ],
            "description": "The sub category of the skill.\r\nOnly used if the skill does not exist yet to palce the new skill into this category.\r\nIf no category is given, new skills are created without.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines a skill with skill level for a role."
      },
      "SelectOptionFieldInput": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The decídalo id of the option. Stays valid when the option is renamed in the application.",
            "format": "int32",
            "nullable": true
          },
          "value": {
            "type": "string",
            "description": "The name of the option — the internal name or any translated name.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a select option (business unit, priority, …), identified by its decídalo id\r\nor by name — the internal name and all translated names are accepted."
      },
      "ServiceCategory": {
        "type": "object",
        "properties": {
          "serviceCategoryID": {
            "type": "integer",
            "description": "Unique identifier of an career level option.",
            "format": "int32"
          },
          "serviceCategoryName": {
            "type": "string",
            "description": "Name of the career level option.",
            "nullable": true
          },
          "position": {
            "type": "integer",
            "description": "Ordering position where option is placed.",
            "format": "int32"
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "description": "The name of the career level per language, as shown in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Class representing career level entity. Used in the user context."
      },
      "ServiceCategoryOutput": {
        "required": [
          "serviceCategoryID"
        ],
        "type": "object",
        "properties": {
          "serviceCategoryID": {
            "type": "integer",
            "description": "decídalo id of the service category.",
            "format": "int32"
          },
          "serviceCategoryName": {
            "type": "string",
            "description": "Display name of the service category.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Short display information of a service category."
      },
      "ServiceCategoryReferenceInput": {
        "type": "object",
        "properties": {
          "serviceCategoryID": {
            "type": "integer",
            "description": "decídalo id of the service category.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "serviceCategoryName": {
            "maxLength": 100,
            "type": "string",
            "description": "Name of the service category.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a service category for a resource request."
      },
      "ServiceLine": {
        "type": "object",
        "properties": {
          "serviceLineID": {
            "type": "integer",
            "description": "The unique identifier of the service line.",
            "format": "int32"
          },
          "serviceLineName": {
            "type": "string",
            "description": "The name of the service line.",
            "nullable": true
          },
          "position": {
            "type": "integer",
            "description": "THe position of the service line inside of a list of service lines.",
            "format": "int32",
            "nullable": true
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocalizedValue"
            },
            "description": "The name of the service line per language, as shown in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The class representing a single service line."
      },
      "ServiceLineOutput": {
        "required": [
          "serviceLineID"
        ],
        "type": "object",
        "properties": {
          "serviceLineID": {
            "type": "integer",
            "description": "decídalo id of the service line.",
            "format": "int32"
          },
          "serviceLineName": {
            "type": "string",
            "description": "Display name of the service line.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Short display information of a service line."
      },
      "ServiceLineReferenceInput": {
        "type": "object",
        "properties": {
          "serviceLineID": {
            "type": "integer",
            "description": "decídalo id of the service line.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "serviceLineName": {
            "maxLength": 100,
            "type": "string",
            "description": "Name of the service line.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a service line for a resource request."
      },
      "SingleNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "number",
            "format": "float",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SkillCategoryTranslationInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "languageCode": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Translation in one language of a skill category."
      },
      "SkillItemOutput": {
        "type": "object",
        "properties": {
          "skillID": {
            "type": "integer",
            "description": "The internal id of the skill.",
            "format": "int32"
          },
          "skillCode": {
            "type": "string",
            "description": "The external code of the skill.",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The name of the skill.",
            "nullable": true
          },
          "categoryName": {
            "type": "string",
            "description": "The name of the category the skill belongs to. Null if the skill has no category.",
            "nullable": true
          },
          "parentCategoryName": {
            "type": "string",
            "description": "The name of the parent category (subcategory context). Null if the category has no parent.",
            "nullable": true
          },
          "isCoreSkill": {
            "type": "boolean",
            "description": "Indicates whether the skill is a core skill."
          },
          "isTranslatable": {
            "type": "boolean",
            "description": "Indicates whether the skill is translatable."
          },
          "description": {
            "type": "string",
            "description": "The description of the skill.",
            "nullable": true
          },
          "vendor": {
            "type": "string",
            "description": "The vendor of the skill.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Skill output for the Import API."
      },
      "SkillRequirementInput": {
        "type": "object",
        "properties": {
          "skillID": {
            "type": "integer",
            "description": "The internal decídalo identifier of the skill.\r\nWhen provided, this ID is used directly as the catalog link and the name-based lookup is skipped.\r\nWhen absent or explicit null, the importer falls back to resolving the skill by Decidalo.Domain.Models.ResourceRequests.SkillRequirementInput.SkillName.\r\nPer import API contract rule 4: when both are supplied, the internal ID wins.",
            "format": "int32",
            "nullable": true,
            "example": 15
          },
          "skillName": {
            "maxLength": 200,
            "type": "string",
            "description": "The display name of the required skill.\r\nUsed to look up or create the skill if SkillID is not provided.",
            "nullable": true
          },
          "skillLevel": {
            "type": "integer",
            "description": "The minimum required skill level (numerical value).\r\nIf null or not provided, any skill level is considered acceptable.",
            "format": "int32",
            "nullable": true,
            "example": 3
          },
          "isMandatory": {
            "type": "boolean",
            "description": "Whether candidates are required to have this skill (mandatory) or it is merely desirable.\r\nWhen a skill level is set, mandatory means that level or higher is required.\r\nPersisted to the request-level requirement mandatory flag.\r\nOmitted or explicit null leaves the stored flag unchanged.",
            "nullable": true,
            "example": true
          }
        },
        "additionalProperties": false,
        "description": "Detail input for a skill requirement."
      },
      "SkillRequirementOutput": {
        "type": "object",
        "properties": {
          "skillID": {
            "type": "integer",
            "description": "The internal decídalo identifier of the skill.",
            "format": "int32",
            "nullable": true,
            "example": 15
          },
          "skillName": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "The display name of the required skill.",
            "nullable": true,
            "example": "C#"
          },
          "skillLevel": {
            "type": "integer",
            "description": "The minimum required skill level (numerical value).\r\nNull means any skill level is acceptable.",
            "format": "int32",
            "nullable": true,
            "example": 3
          }
        },
        "additionalProperties": false,
        "description": "Detail output for a skill requirement."
      },
      "StatusOptionCategory": {
        "enum": [
          "Idle",
          "Outdated",
          "Finished"
        ],
        "type": "string"
      },
      "StringListOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "StringObjectDictionaryOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "object",
            "additionalProperties": { },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "StringObjectIDictionaryOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "object",
            "additionalProperties": { },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "StringOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SuggestionOutput": {
        "required": [
          "suggestedBy",
          "suggestionStatus"
        ],
        "type": "object",
        "properties": {
          "suggestionStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SuggestionStatus"
              }
            ],
            "description": "Current status of the suggestion."
          },
          "suggestedBy": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceOutput"
              }
            ],
            "description": "The user who submitted the suggestion."
          },
          "comment": {
            "type": "string",
            "description": "Free-text comment provided with the suggestion. Null when not provided.",
            "nullable": true
          },
          "rejectionReason": {
            "type": "string",
            "description": "Reason provided when the suggestion was rejected. Null when not applicable.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Suggestion metadata for a candidate assignment."
      },
      "SuggestionStatus": {
        "enum": [
          "Suggested",
          "Accepted",
          "Rejected"
        ],
        "type": "string"
      },
      "TeamBatchInput": {
        "required": [
          "teams"
        ],
        "type": "object",
        "properties": {
          "teams": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamInput"
            },
            "description": "List of teams to import."
          },
          "callback": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Web hook endpoint to notify about the completion of the import.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Data container for a whole batch of teams."
      },
      "TeamImportAcceptedResponse": {
        "type": "object",
        "properties": {
          "batchID": {
            "type": "string",
            "description": "Generated ID for the accepted batch.",
            "format": "uuid"
          }
        },
        "additionalProperties": false,
        "description": "Contains information about the accepted batch."
      },
      "TeamImportResults": {
        "type": "object",
        "properties": {
          "batchID": {
            "type": "string",
            "description": "ID of the batch.",
            "format": "uuid"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportBatchStatusType"
              }
            ],
            "description": "The current status of the batch as a whole."
          },
          "errorMessage": {
            "type": "string",
            "description": "Optional error details on the level of the whole batch.\r\nFor details of failed entries, see their entries.",
            "nullable": true
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamImportRowResult"
            },
            "description": "Details about the individual imported teams.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Contains details about the results of a team import batch."
      },
      "TeamImportRowResult": {
        "type": "object",
        "properties": {
          "rowIndex": {
            "type": "integer",
            "description": "The index of the row in the input data (0-based).",
            "format": "int32"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatusType"
              }
            ],
            "description": "The current status of the import for this row."
          },
          "errorMessage": {
            "type": "string",
            "description": "Optional error message if the import for this row failed.",
            "nullable": true
          },
          "teamID": {
            "type": "integer",
            "description": "The decídalo internal ID of the team.\r\nIt was either provided in the input data or was resolved during import.",
            "format": "int32",
            "nullable": true
          },
          "teamCode": {
            "type": "string",
            "description": "The external identifier of the imported team.\r\nIt was provided in the input data or was resolved during import.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Contains details about the processing of one team in the team import."
      },
      "TeamInput": {
        "type": "object",
        "properties": {
          "teamID": {
            "type": "integer",
            "description": "Unique internal identifier of the team.\r\nEither TeamID or TeamCode has to be provided.",
            "format": "int32",
            "nullable": true
          },
          "teamCode": {
            "maxLength": 100,
            "type": "string",
            "description": "External identifier for the team.\r\nEither TeamID or TeamCode has to be provided.",
            "nullable": true
          },
          "teamName": {
            "maxLength": 255,
            "type": "string",
            "description": "Display name of the team.",
            "nullable": true
          },
          "managerUserID": {
            "type": "integer",
            "description": "Internal identifier of the user who manages the team.",
            "format": "int32",
            "nullable": true
          },
          "managerEmployeeID": {
            "maxLength": 100,
            "type": "string",
            "description": "External identifier of the user who manages the team.",
            "nullable": true
          },
          "parentTeamID": {
            "type": "integer",
            "description": "Internal identifier of the parent team.",
            "format": "int32",
            "nullable": true
          },
          "parentTeamCode": {
            "maxLength": 100,
            "type": "string",
            "description": "External identifier of the parent team.",
            "nullable": true
          },
          "isImported": {
            "type": "boolean",
            "description": "Flag to indicate whether this team was created or last updated via batch import.\r\nOmit or pass null to leave the existing value unchanged on update, or receive false on create.",
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "Flag to indicate, whether this team should be deleted.",
            "default": false,
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Data container for one team in the batch import of teams."
      },
      "TeamManagerExportOutput": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "Internal id of the user.",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "External identifier of the user.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Email address of the user.",
            "nullable": true
          },
          "teamID": {
            "type": "integer",
            "description": "Internal id of the team.",
            "format": "int32",
            "nullable": true
          },
          "teamCode": {
            "type": "string",
            "description": "External identifier of the team.",
            "nullable": true
          },
          "isPrimaryManager": {
            "type": "boolean",
            "description": "Flag indicating whether this is the primary manager of the team or an additional one."
          }
        },
        "additionalProperties": false,
        "description": "A single team manager assignment for the Import API GET endpoint.\r\nShape matches `TeamManagerInput` so the GET response can be fed\r\ndirectly into the POST endpoint."
      },
      "TeamManagerImportResult": {
        "required": [
          "input",
          "status"
        ],
        "type": "object",
        "properties": {
          "input": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TeamManagerInput"
              }
            ],
            "description": "Represents one of the managers of a team."
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatusType"
              }
            ]
          },
          "errorMessage": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TeamManagerInput": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "decídalo internal id of the user.\r\nEither UserID, EmployeeID or Email must be provided to identify the user.",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "External identifier of the user.\r\nEither UserID, EmployeeID or Email must be provided to identify the user.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Email address of the user, must be unique.\r\nEither UserID, EmployeeID or Email must be provided to identify the user.",
            "nullable": true
          },
          "teamID": {
            "type": "integer",
            "description": "decídalo internal id of the team.\r\nEither TeamID or TeamCode must be provided to identify the team.",
            "format": "int32",
            "nullable": true
          },
          "teamCode": {
            "type": "string",
            "description": "External identifier of the team.\r\nEither TeamID or TeamCode must be provided to identify the team.",
            "nullable": true
          },
          "isPrimaryManager": {
            "type": "boolean",
            "description": "Flag to indicate whether this is the primary manage of the team or an additional one. (Default: false)",
            "default": false
          },
          "delete": {
            "type": "boolean",
            "description": "Flag indicating whether to remove the manager from the team. (Default: false)",
            "default": false
          }
        },
        "additionalProperties": false,
        "description": "Represents one of the managers of a team."
      },
      "TeamManagerInputBatch": {
        "required": [
          "teamManagers"
        ],
        "type": "object",
        "properties": {
          "teamManagers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamManagerInput"
            },
            "description": "Batch of team managers to add or remove."
          }
        },
        "additionalProperties": false,
        "description": "Batch of team managers to add or remove."
      },
      "TeamOverview": {
        "type": "object",
        "properties": {
          "teamID": {
            "type": "integer",
            "description": "ID of the team.",
            "format": "int32"
          },
          "teamCode": {
            "type": "string",
            "description": "Code of the team.",
            "nullable": true
          },
          "teamName": {
            "type": "string",
            "description": "Name of the team.",
            "nullable": true
          },
          "managerUserID": {
            "type": "integer",
            "description": "UserID of the teams manager.",
            "format": "int32",
            "nullable": true
          },
          "managerEmployeeID": {
            "type": "string",
            "description": "EmployeeID of the teams manager.",
            "nullable": true
          },
          "parentTeamID": {
            "type": "integer",
            "description": "ID of the parent team.",
            "format": "int32",
            "nullable": true
          },
          "parentTeamCode": {
            "type": "string",
            "description": "Code of the parent team.",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "description": "Date when the team was created.",
            "format": "date-time"
          },
          "isImported": {
            "type": "boolean",
            "description": "Flag indicating whether this team was created or last updated via batch import."
          }
        },
        "additionalProperties": false,
        "description": "Class is used to display existing team data in a batch list of existing teams already present in the system"
      },
      "TextFieldInput": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "String value of the text field.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Text input field."
      },
      "TextFieldInputOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldInput"
              }
            ],
            "description": "Text input field.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TextFieldTranslationInput": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "String value of the text field.",
            "nullable": true
          },
          "translations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserImportTextTranslation"
            },
            "description": "List of translations of the text field.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Text input field with translations."
      },
      "TextFieldTranslationInputOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldTranslationInput"
              }
            ],
            "description": "Text input field with translations.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TimeOnlyNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "type": "string",
            "format": "time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TimeRecordingEntryStatus": {
        "enum": [
          "Suggested",
          "Open",
          "Submitted",
          "Confirmed",
          "Cancelled",
          "CancellationSubmitted"
        ],
        "type": "string",
        "default": "Open"
      },
      "TimeRecordingEntryStatusNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TimeRecordingEntryStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TimeRecordingImportBatch": {
        "type": "object",
        "properties": {
          "entries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingEntryImportItem"
            },
            "nullable": true
          },
          "workTimes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserWorkTimeImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TimeRecordingImportOutputBatch": {
        "type": "object",
        "properties": {
          "entries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingEntryImportReadItem"
            },
            "nullable": true
          },
          "workTimes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserWorkTimeImportReadItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TimeRecordingImportResult": {
        "type": "object",
        "properties": {
          "entries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingEntryImportResult"
            },
            "nullable": true
          },
          "workTimes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserWorkTimeImportResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserBatchImportMetadata": {
        "type": "object",
        "properties": {
          "batchID": {
            "type": "string",
            "format": "uuid"
          },
          "creationDate": {
            "type": "string",
            "format": "date-time"
          },
          "startDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportBatchStatus"
              }
            ],
            "nullable": true
          },
          "rowResults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserImportRowResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserBatchInput": {
        "required": [
          "users"
        ],
        "type": "object",
        "properties": {
          "users": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserInput"
            },
            "description": "List of users to import."
          },
          "callback": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Web hook endpoint to notify about the completion of the import.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Data container for a whole batch of users to import."
      },
      "UserCertificateExportEntry": {
        "type": "object",
        "properties": {
          "certificateID": {
            "type": "integer",
            "description": "Internal ID of the certificate.",
            "format": "int32"
          },
          "certificateName": {
            "type": "string",
            "description": "Name of the certificate.",
            "nullable": true
          },
          "issueYear": {
            "type": "integer",
            "description": "Year when user earned the certificate.",
            "format": "int32",
            "nullable": true
          },
          "issueMonth": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Month"
              }
            ],
            "description": "Month when user earned the certificate.",
            "nullable": true
          },
          "expirationYear": {
            "type": "integer",
            "description": "Year until when the certificate is valid.",
            "format": "int32",
            "nullable": true
          },
          "expirationMonth": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Month"
              }
            ],
            "description": "Month until when the certificate is valid.",
            "nullable": true
          },
          "credentialUrl": {
            "type": "string",
            "description": "User personal URL for certificate validation.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single certificate assignment for a user."
      },
      "UserCertificateExportOutput": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportApiUserIdentity"
              }
            ],
            "description": "Identity of the user.",
            "nullable": true
          },
          "certificates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserCertificateExportEntry"
            },
            "description": "Certificates assigned to this user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A user with their certificates for the Import API GET endpoint."
      },
      "UserHolidayCalendarImportItem": {
        "type": "object",
        "properties": {
          "userHolidayCalendarID": {
            "type": "integer",
            "description": "Internal ID of the entry.",
            "format": "int32",
            "nullable": true
          },
          "userHolidayCalendarCode": {
            "type": "string",
            "description": "Technical identifier the entry can be addressed by in later imports.",
            "nullable": true
          },
          "userID": {
            "type": "integer",
            "description": "ID of the user the holiday calendar is assigned to.",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "Customer-specific user ID.",
            "nullable": true
          },
          "holidayListID": {
            "type": "integer",
            "description": "Internal ID of the holiday calendar. Takes precedence over HolidayListCode, which is then ignored;\r\nthe import fails when no calendar with this ID exists. Not needed when the entry is deleted.",
            "format": "int32",
            "nullable": true
          },
          "holidayListCode": {
            "type": "string",
            "description": "Code of the holiday calendar, e.g. DE-BY. A standard calendar that the client does not use yet is\r\nadded automatically; a custom calendar must already exist. Required unless HolidayListID is\r\nprovided. Not needed when the entry is deleted.",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "First day the calendar applies to.",
            "format": "date",
            "example": "2025-01-01"
          },
          "endDate": {
            "type": "string",
            "description": "Last day the calendar applies to. Omit for an open end — the calendar then applies until another\r\nperiod starts. Periods of one user must not overlap; gaps are allowed and mean no public holidays.",
            "format": "date",
            "default": null,
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "Flag indicating whether the entry should be deleted. If false, it is created or updated.\r\nDefault is false.",
            "default": false,
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One holiday calendar period of a user to create, update or delete."
      },
      "UserHolidayCalendarImportResult": {
        "type": "object",
        "properties": {
          "userHolidayCalendarID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "userHolidayCalendarCode": {
            "type": "string",
            "nullable": true
          },
          "userID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "Customer-specific user ID.",
            "nullable": true
          },
          "holidayListID": {
            "type": "integer",
            "description": "Internal ID of the assigned holiday calendar, also filled when the item addressed it by code.",
            "format": "int32",
            "nullable": true
          },
          "holidayListCode": {
            "type": "string",
            "description": "Code of the assigned holiday calendar, also filled when the item addressed it by ID.",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "format": "date",
            "example": "2025-01-01"
          },
          "endDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "importStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "description": "Describes the result of the import.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents one holiday calendar period as the result of an import."
      },
      "UserHolidayCalendarOutputItem": {
        "type": "object",
        "properties": {
          "userHolidayCalendarID": {
            "type": "integer",
            "format": "int32"
          },
          "userHolidayCalendarCode": {
            "type": "string",
            "nullable": true
          },
          "userID": {
            "type": "integer",
            "format": "int32"
          },
          "employeeID": {
            "type": "string",
            "description": "Customer-specific user ID.",
            "nullable": true
          },
          "holidayListID": {
            "type": "integer",
            "format": "int32"
          },
          "holidayListCode": {
            "type": "string",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "format": "date",
            "example": "2025-01-01"
          },
          "endDate": {
            "type": "string",
            "description": "Null means the period is open ended.",
            "format": "date",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One holiday calendar period of a user as returned by the import API."
      },
      "UserIdentityInput": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "Internal ID of the user.",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "An external UserID not provided by decidalo (client's internal EmployeeID).",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines a reference to a user."
      },
      "UserIdentityResult": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "format": "int32"
          },
          "employeeID": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserImportAcceptedResponse": {
        "type": "object",
        "properties": {
          "batchID": {
            "type": "string",
            "description": "Generated ID for the accepted batch.",
            "format": "uuid"
          }
        },
        "additionalProperties": false,
        "description": "Contains information about the accepted batch."
      },
      "UserImportBatchResult": {
        "required": [
          "batchID",
          "status"
        ],
        "type": "object",
        "properties": {
          "batchID": {
            "type": "string",
            "description": "Identifier of the batch.",
            "format": "uuid"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportBatchStatus"
              }
            ],
            "description": "The current status of the import."
          }
        },
        "additionalProperties": false,
        "description": "Describes the overall result of a user import."
      },
      "UserImportResults": {
        "type": "object",
        "properties": {
          "batchID": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportBatchStatusType"
              }
            ]
          },
          "errorMessage": {
            "type": "string",
            "nullable": true
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserImportRowResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserImportRow": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "The internal id of the user.",
            "format": "int32"
          },
          "employeeID": {
            "type": "string",
            "description": "The external employee identifier.",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The display name of the user.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "The email address of the user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Lightweight user row returned by the Import API user query, before skills are attached."
      },
      "UserImportRowResult": {
        "type": "object",
        "properties": {
          "rowIndex": {
            "type": "integer",
            "format": "int32"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatusType"
              }
            ]
          },
          "errorMessage": {
            "type": "string",
            "nullable": true
          },
          "userID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserImportTextTranslation": {
        "type": "object",
        "properties": {
          "languageID": {
            "type": "integer",
            "format": "int32"
          },
          "textField": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserIndustryExportEntry": {
        "type": "object",
        "properties": {
          "industryID": {
            "type": "integer",
            "description": "Internal ID of the industry.",
            "format": "int32"
          },
          "industryCode": {
            "type": "string",
            "description": "External identifier of the industry.",
            "nullable": true
          },
          "industryName": {
            "type": "string",
            "description": "Name of the industry.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single industry assignment for a user."
      },
      "UserIndustryExportOutput": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportApiUserIdentity"
              }
            ],
            "description": "Identity of the user.",
            "nullable": true
          },
          "industries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserIndustryExportEntry"
            },
            "description": "Industries assigned to this user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A user with their assigned industries for the Import API GET endpoint."
      },
      "UserInput": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "The unique internal identifier of the user.",
            "format": "int32",
            "nullable": true,
            "example": 123
          },
          "email": {
            "maxLength": 254,
            "type": "string",
            "description": "The email address of the user.",
            "nullable": true
          },
          "employeeID": {
            "maxLength": 100,
            "type": "string",
            "description": "The employee ID of the user, acts as external identifier.",
            "nullable": true
          },
          "displayName": {
            "maxLength": 100,
            "type": "string",
            "description": "The display name of the user.",
            "nullable": true
          },
          "location": {
            "maxLength": 100,
            "type": "string",
            "description": "The location of the user.",
            "nullable": true
          },
          "yearOfBirth": {
            "type": "integer",
            "description": "The year of birth of the user.",
            "format": "int32",
            "nullable": true,
            "example": 1980
          },
          "highestEducation": {
            "maxLength": 200,
            "type": "string",
            "description": "The highest education level of the user.",
            "nullable": true
          },
          "nationality": {
            "maxLength": 100,
            "type": "string",
            "description": "The nationality of the user.",
            "nullable": true
          },
          "countryCode": {
            "maxLength": 2,
            "type": "string",
            "description": "The two-letter code of the user's country.",
            "nullable": true
          },
          "officePhoneNumber": {
            "maxLength": 100,
            "type": "string",
            "description": "The office phone number of the user.",
            "nullable": true
          },
          "mobilePhoneNumber": {
            "maxLength": 100,
            "type": "string",
            "description": "The mobile phone number of the user.",
            "nullable": true
          },
          "employeeTypeID": {
            "type": "integer",
            "description": "The internal id of the employee type.\r\nTakes precedence over EmployeeTypeName; the import fails when no employee type with this ID exists.",
            "format": "int32",
            "nullable": true
          },
          "employeeTypeName": {
            "maxLength": 50,
            "type": "string",
            "description": "The name of the employee type, matched case-insensitively against the current English name.\r\nThe import fails when no employee type matches; employee types are never created by the import.",
            "nullable": true
          },
          "authorizationRoleID": {
            "type": "integer",
            "description": "The authorization role ID of the user.\r\nTakes precedence over AuthorizationRoleName; the import fails when no role with this ID exists.",
            "format": "int32",
            "nullable": true
          },
          "authorizationRoleName": {
            "maxLength": 50,
            "type": "string",
            "description": "The authorization role name of the user, matched case-insensitively against the current English name.\r\nThe import fails when no role matches; roles are never created by the import.",
            "nullable": true
          },
          "teamID": {
            "type": "integer",
            "description": "The team ID of the user.\r\nTakes precedence over TeamCode; the import fails when no team with this ID exists.\r\nOn update, an explicit null clears the team and takes precedence over a TeamCode sent in the\r\nsame row.",
            "format": "int32",
            "nullable": true
          },
          "teamCode": {
            "maxLength": 50,
            "type": "string",
            "description": "The team code of the user, matched case-insensitively.\r\nThe import fails when no team matches; teams are never created by the user import.",
            "nullable": true
          },
          "serviceCategoryName": {
            "maxLength": 100,
            "type": "string",
            "description": "The service category name of the user. This is referred to as \"Career Level\" in the application UI.\r\nMatched against the internal name first, then any translation in any language. An ambiguous\r\ntranslation match (matching more than one service category) fails the row.\r\nIf no service category matches, a NEW career level is created with this name as its internal name.\r\nAn assigned career level cannot be cleared via the import.",
            "nullable": true
          },
          "jobTitle": {
            "maxLength": 150,
            "type": "string",
            "description": "Job title of user",
            "nullable": true
          },
          "costCenter": {
            "maxLength": 100,
            "type": "string",
            "description": "The cost center of the user. Used for accounting purposes.",
            "nullable": true
          },
          "includeInResourceManagement": {
            "type": "boolean",
            "description": "Flag to indicate, whether this user should be included in the resource management.\r\n(In the create case, the default value is true. In the case of an update, the default value is the user's current value.)\r\nAn explicit null is treated as not provided, since the flag itself cannot be null.",
            "nullable": true
          },
          "standardWeeklyHours": {
            "type": "integer",
            "description": "The standard weekly working hours of the user.",
            "format": "int32",
            "nullable": true,
            "example": 40
          },
          "entryDate": {
            "type": "string",
            "description": "First day, when the user officially joins the company.",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "exitDate": {
            "type": "string",
            "description": "Last day, when the user officially leaves the company.",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "businessUnitID": {
            "type": "integer",
            "description": "The internal ID of the business unit.\r\nTakes precedence over BusinessUnitName; the import fails when no business unit with this ID exists.\r\nRecommended identifier: it stays valid when the business unit is renamed in the application.\r\nOn update, an explicit null clears the business unit and takes precedence over\r\nBusinessUnitName in the same row, which is then ignored.",
            "format": "int32",
            "nullable": true
          },
          "businessUnitName": {
            "maxLength": 100,
            "type": "string",
            "description": "The name of the business unit, matched against the internal name first, then any translation in\r\nany language. An ambiguous translation match (matching more than one business unit) fails the row.\r\nIf no business unit matches, a NEW business unit is created with this name as its internal name.\r\nPrefer BusinessUnitID for stable references.",
            "nullable": true
          },
          "practiceAreaID": {
            "type": "integer",
            "description": "Internal decídalo ID of the practice area of the user.\r\nTakes precedence over PracticeAreaName; the import fails when no practice area with this ID exists.\r\nRecommended identifier: it stays valid when the practice area is renamed in the application.\r\nOn update, an explicit null clears the practice area and takes precedence over\r\nPracticeAreaName in the same row, which is then ignored.",
            "format": "int32",
            "nullable": true
          },
          "practiceAreaName": {
            "maxLength": 100,
            "type": "string",
            "description": "The name of the practice area, matched against the internal name first, then any translation in\r\nany language. An ambiguous translation match (matching more than one practice area) fails the row.\r\nIf no practice area matches, a NEW practice area is created with this name as its internal name.\r\nPrefer PracticeAreaID for stable references.",
            "nullable": true
          },
          "companyName": {
            "maxLength": 250,
            "type": "string",
            "description": "The name of the company, where the user works.\r\nActs as an identifier, matched case-insensitively. If no company matches, a NEW company is created.\r\nOn update, an explicit null or empty value clears the user's company.",
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "Flag to indicate, whether this user should be deleted.\r\n(Default: false)",
            "default": false,
            "nullable": true,
            "example": false
          },
          "deactivate": {
            "type": "boolean",
            "description": "Flag to indicate, whether this user should be deactivated.\r\nSending false will reactivate the user.",
            "nullable": true,
            "example": false
          },
          "hasLogin": {
            "type": "boolean",
            "description": "Flag to indicate, whether this user should have a login.\r\nnull: No change or don't create for new users.\r\nfalse: Remove login for existing users.\r\nOn the update path, HasLogin=true without an explicit authorization role assigns the default employee role when the user currently has no role.",
            "nullable": true,
            "example": true
          },
          "deliveryModel": {
            "maxLength": 100,
            "type": "string",
            "description": "The delivery model of the user, e.g. Offshore, Onshore or Nearshore.\r\nMatched case-insensitively against the current English name.\r\nThe import fails when no delivery model matches; delivery models are never created by the import.\r\nOn update, an explicit null clears the delivery model.",
            "nullable": true
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields of the user. \r\nValues can be any primitive type like string, int, bool, DateTime (formatted as string) or type \"list\".\r\nList item values can be referenced either by their internal ID (int) or by their label (string).\r\nUse the endpoint for custom properties to get more information on how to format the custom properties and to get the list of available custom properties.",
            "nullable": true
          },
          "holidayListCode": {
            "maxLength": 25,
            "type": "string",
            "description": "Code of the holiday calendar that determines the public holidays of the user.\r\nA standard calendar is identified by its ISO code: the part before the hyphen is the ISO 3166-1 alpha-2\r\ncountry code, the part after it the ISO 3166-2 region code, so DE-NI is Niedersachsen in Germany and\r\nAT-6 is Steiermark in Austria (the region part is numeric for some countries). The region may be\r\nomitted, so DE is the calendar of Germany as a whole. A standard calendar the client does not use yet\r\nis added automatically.\r\nA custom calendar can be assigned by its code as well, but it must already exist - create it via\r\nimportapi/HolidayCalendar/Import first, since a calendar created from a user row would have no\r\nholidays. An unknown code fails the row.",
            "nullable": true
          },
          "legalEntityID": {
            "type": "integer",
            "description": "Internal decídalo ID of the legal entity of the User.\r\nTakes precedence over LegalEntityName; the import fails when no legal entity with this ID exists.\r\nRecommended identifier: it stays valid when the legal entity is renamed in the application.\r\nOn update, an explicit null clears the legal entity and takes precedence over\r\nLegalEntityName in the same row, which is then ignored.",
            "format": "int32",
            "nullable": true
          },
          "legalEntityName": {
            "maxLength": 100,
            "type": "string",
            "description": "The name of the legal entity, matched against the internal name first, then any translation in\r\nany language. An ambiguous translation match (matching more than one legal entity) fails the row.\r\nIf no legal entity matches, a NEW legal entity is created with this name as its internal name.\r\nPrefer LegalEntityID for stable references.",
            "nullable": true
          },
          "serviceLineID": {
            "type": "integer",
            "description": "Internal decídalo ID of the service line of the user.\r\nTakes precedence over ServiceLineName; the import fails when no service line with this ID exists.\r\nRecommended identifier: it stays valid when the service line is renamed in the application.\r\nOn update, an explicit null clears the service line and takes precedence over\r\nServiceLineName in the same row, which is then ignored.",
            "format": "int32",
            "nullable": true
          },
          "serviceLineName": {
            "maxLength": 100,
            "type": "string",
            "description": "The name of the service line, matched against the internal name first, then any translation in\r\nany language. An ambiguous translation match (matching more than one service line) fails the row.\r\nIf no service line matches, a NEW service line is created with this name as its internal name.\r\nPrefer ServiceLineID for stable references.",
            "nullable": true
          },
          "isImported": {
            "type": "boolean",
            "description": "Flag to indicate whether this user was created or last updated via batch import.\r\nOmit or pass null to leave the existing value unchanged on update, or receive false on create.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Data structure for a user to import."
      },
      "UserLanguageExportEntry": {
        "type": "object",
        "properties": {
          "languageID": {
            "type": "integer",
            "description": "Internal ID of the language.",
            "format": "int32"
          },
          "languageName": {
            "type": "string",
            "description": "English display name of the language.",
            "nullable": true
          },
          "languageLevelNumericalValue": {
            "type": "integer",
            "description": "Numerical proficiency value (1 = Elementary, 5 = Native or Bilingual). Null when no level is specified.",
            "format": "int32",
            "nullable": true
          },
          "languageLevelName": {
            "type": "string",
            "description": "English display name of the proficiency level (e.g. \"Native or Bilingual\"). Null when no level is specified.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single language assignment for a user."
      },
      "UserLanguageExportOutput": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportApiUserIdentity"
              }
            ],
            "description": "Identity of the user.",
            "nullable": true
          },
          "languages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserLanguageExportEntry"
            },
            "description": "Languages assigned to this user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A user with their spoken languages for the Import API GET endpoint."
      },
      "UserOverview": {
        "required": [
          "creationDate",
          "displayName",
          "email",
          "employeeTypeID",
          "employeeTypeName",
          "hasLogin",
          "includeInResourceManagement",
          "lastEditDate",
          "userID"
        ],
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "The unique internal identifier of the user.",
            "format": "int32"
          },
          "email": {
            "maxLength": 254,
            "minLength": 0,
            "type": "string",
            "description": "The email address of the user."
          },
          "employeeID": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The employee ID of the user, acts as external identifier.",
            "nullable": true
          },
          "displayName": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The display name of the user."
          },
          "location": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The location of the user.",
            "nullable": true
          },
          "yearOfBirth": {
            "type": "integer",
            "description": "The year of birth of the user.",
            "format": "int32",
            "nullable": true
          },
          "highestEducation": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "The highest education level of the user.",
            "nullable": true
          },
          "nationality": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The nationality of the user.",
            "nullable": true
          },
          "countryCode": {
            "maxLength": 2,
            "minLength": 0,
            "type": "string",
            "description": "The two-letter code of the user's country.",
            "nullable": true
          },
          "officePhoneNumber": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The office phone number of the user.",
            "nullable": true
          },
          "mobilePhoneNumber": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The mobile phone number of the user.",
            "nullable": true
          },
          "employeeTypeID": {
            "type": "integer",
            "description": "The internal id of the employee type.",
            "format": "int32"
          },
          "employeeTypeName": {
            "maxLength": 50,
            "minLength": 0,
            "type": "string",
            "description": "The name of the employee type, acting as external identifier."
          },
          "authorizationRoleID": {
            "type": "integer",
            "description": "The authorization role ID of the user.",
            "format": "int32",
            "nullable": true
          },
          "authorizationRoleName": {
            "maxLength": 50,
            "minLength": 0,
            "type": "string",
            "description": "The authorization role name of the user.",
            "nullable": true
          },
          "teamID": {
            "type": "integer",
            "description": "The team ID of the user.",
            "format": "int32",
            "nullable": true
          },
          "teamCode": {
            "maxLength": 50,
            "minLength": 0,
            "type": "string",
            "description": "The team code of the user.",
            "nullable": true
          },
          "serviceCategoryName": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The service category name of the user.",
            "nullable": true
          },
          "jobTitle": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "Job title of user",
            "nullable": true
          },
          "costCenter": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The cost center of the user.",
            "nullable": true
          },
          "includeInResourceManagement": {
            "type": "boolean",
            "description": "Flag to indicate, whether this is included in the resource management."
          },
          "entryDate": {
            "type": "string",
            "description": "First day, when the user officially joins the company.",
            "format": "date",
            "nullable": true
          },
          "exitDate": {
            "type": "string",
            "description": "Last day, when the user officially leaves the company.",
            "format": "date",
            "nullable": true
          },
          "businessUnitID": {
            "type": "integer",
            "description": "The internal ID of the business unit.",
            "format": "int32",
            "nullable": true
          },
          "businessUnitName": {
            "maxLength": 50,
            "minLength": 0,
            "type": "string",
            "description": "The name of the business unit.",
            "nullable": true
          },
          "practiceAreaID": {
            "type": "integer",
            "description": "Internal decídalo ID of the practice area of the user",
            "format": "int32",
            "nullable": true
          },
          "practiceAreaName": {
            "maxLength": 50,
            "minLength": 0,
            "type": "string",
            "description": "The English name of the practice area of the user",
            "nullable": true
          },
          "companyName": {
            "maxLength": 250,
            "minLength": 0,
            "type": "string",
            "description": "The name of the company, where the user works.\r\nActs as an identifier.",
            "nullable": true
          },
          "hasLogin": {
            "type": "boolean",
            "description": "Flag to indicate, whether this user has a login."
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": {
              "nullable": true
            },
            "description": "Custom fields of the user. Values can be any primitive type like string, int, bool or DateTime (formatted as string).",
            "nullable": true
          },
          "deliveryModelName": {
            "type": "string",
            "description": "The delivery model of the User. Ex: Offshore,Onshore, Nearshore etc.",
            "nullable": true
          },
          "standardWeeklyHours": {
            "type": "integer",
            "description": "The standard weekly hours of the user.",
            "format": "int32",
            "nullable": true
          },
          "holidayListCode": {
            "type": "string",
            "description": "The combination of the country and region codes which tell us which holidays are applicable for the user.",
            "nullable": true
          },
          "holidayListId": {
            "type": "integer",
            "description": "The technical internal Id corresponding to the list of Holidays of the user.",
            "format": "int32",
            "nullable": true
          },
          "deactivationDate": {
            "type": "string",
            "description": "Timestamp of the soft delete. If null, the user is active, otherwise it is deactivated.",
            "format": "date-time",
            "nullable": true
          },
          "legalEntityID": {
            "type": "integer",
            "description": "The technical internal Id corresponding to the legal entity of the user.",
            "format": "int32",
            "nullable": true
          },
          "legalEntityName": {
            "type": "string",
            "description": "It is the name of the legal entity corresponding to the user.",
            "nullable": true
          },
          "serviceLineID": {
            "type": "integer",
            "description": "The technical Id corresponding to the service line of the user.",
            "format": "int32",
            "nullable": true
          },
          "serviceLineName": {
            "type": "string",
            "description": "The name of the service line corresponding to the user.",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "description": "Date when user was created.",
            "format": "date-time"
          },
          "lastEditDate": {
            "type": "string",
            "description": "Date when user was last edited.",
            "format": "date-time"
          },
          "lastLoginDate": {
            "type": "string",
            "description": "Timestamp of the user's last login.",
            "format": "date-time",
            "nullable": true
          },
          "isImported": {
            "type": "boolean",
            "description": "Flag indicating whether this user was created or last updated via batch import."
          }
        },
        "additionalProperties": false,
        "description": "Class is used to display existing user data in a batch list of existing users already present in the system"
      },
      "UserProfessionalExperienceExportEntry": {
        "type": "object",
        "properties": {
          "professionalExperienceID": {
            "type": "integer",
            "description": "The internal ID for the professional experience.",
            "format": "int32"
          },
          "position": {
            "type": "string",
            "description": "The job title of the professional experience.",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "The date on which the user started working on the professional experience.\r\nFormatted as \"yyyy-MM-dd\".",
            "format": "date",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "description": "The last day on which the user was working on the professional experience.\r\nFormatted as \"yyyy-MM-dd\".",
            "format": "date",
            "nullable": true
          },
          "sourceStartDate": {
            "type": "string",
            "description": "Contains start date information in any format.",
            "nullable": true
          },
          "sourceEndDate": {
            "type": "string",
            "description": "Contains end date information in any format.",
            "nullable": true
          },
          "company": {
            "type": "string",
            "description": "The name of the company where the professional experience took place.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "The description of the professional experience.\r\nUses html formatting for rich text.",
            "nullable": true
          },
          "editDate": {
            "type": "string",
            "description": "The date on which the entry was last edited.",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "A single professional experience entry for a user."
      },
      "UserProfessionalExperienceExportOutput": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportApiUserIdentity"
              }
            ],
            "description": "Identity of the user.",
            "nullable": true
          },
          "professionalExperiences": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserProfessionalExperienceExportEntry"
            },
            "description": "Professional experiences belonging to this user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A user with their professional experiences for the Import API GET endpoint."
      },
      "UserPublicationExportEntry": {
        "type": "object",
        "properties": {
          "publicationID": {
            "type": "integer",
            "description": "Internal ID of the publication.",
            "format": "int32"
          },
          "title": {
            "type": "string",
            "description": "Title of the publication.",
            "nullable": true
          },
          "publicationTypeID": {
            "type": "integer",
            "description": "Internal ID of the publication type.",
            "format": "int32"
          },
          "publicationType": {
            "type": "string",
            "description": "English display name of the publication type (e.g. \"Article\", \"Book\").",
            "nullable": true
          },
          "publicationLink": {
            "type": "string",
            "description": "Link to the publication.",
            "nullable": true
          },
          "publicationDate": {
            "type": "string",
            "description": "Normalized publication date.",
            "format": "date-time",
            "nullable": true
          },
          "sourcePublicationDate": {
            "type": "string",
            "description": "Publication date as originally entered by the user (free text).",
            "nullable": true
          },
          "authors": {
            "type": "string",
            "description": "Authors of the publication.",
            "nullable": true
          },
          "volume": {
            "type": "string",
            "description": "Volume of the publication.",
            "nullable": true
          },
          "pages": {
            "type": "string",
            "description": "Pages of the publication.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single publication of a user."
      },
      "UserPublicationExportOutput": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportApiUserIdentity"
              }
            ],
            "description": "Identity of the user.",
            "nullable": true
          },
          "publications": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserPublicationExportEntry"
            },
            "description": "Publications assigned to this user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A user with their publications for the Import API GET endpoint."
      },
      "UserReferenceInput": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "References the user by the decídalo id.",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "maxLength": 500,
            "minLength": 0,
            "type": "string",
            "description": "References the user by the external id.\r\nGets ignored, if UserID is set.",
            "nullable": true
          },
          "email": {
            "maxLength": 250,
            "minLength": 0,
            "type": "string",
            "description": "References the user by the email address.\r\nThe email must be uniquely assigned to a user in the system.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a user."
      },
      "UserReferenceOutput": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "References the user by the decídalo id.",
            "format": "int32"
          },
          "employeeID": {
            "maxLength": 500,
            "minLength": 0,
            "type": "string",
            "description": "References the user by the external id.",
            "nullable": true
          },
          "email": {
            "maxLength": 250,
            "minLength": 0,
            "type": "string",
            "description": "Email address of the user, when available.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to a user."
      },
      "UserRoleExportEntry": {
        "type": "object",
        "properties": {
          "roleID": {
            "type": "integer",
            "description": "Internal ID of the role.",
            "format": "int32"
          },
          "roleCode": {
            "type": "string",
            "description": "External identifier of the role.",
            "nullable": true
          },
          "roleName": {
            "type": "string",
            "description": "Name of the role.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single role assignment for a user."
      },
      "UserRoleExportOutput": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportApiUserIdentity"
              }
            ],
            "description": "Identity of the user.",
            "nullable": true
          },
          "roles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserRoleExportEntry"
            },
            "description": "Roles assigned to this user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A user with their assigned roles for the Import API GET endpoint."
      },
      "UserSkillImportItem": {
        "type": "object",
        "properties": {
          "skillID": {
            "type": "integer",
            "description": "The internal id of the skill. Takes precedence over SkillCode.",
            "format": "int32",
            "nullable": true
          },
          "skillCode": {
            "type": "string",
            "description": "The external code of the skill. Used when SkillID is not provided.",
            "nullable": true
          },
          "skillLevel": {
            "type": "integer",
            "description": "The skill level to set. When the value is provided as null the level is removed;\r\nwhen the property is omitted entirely the current level is kept.",
            "format": "int32",
            "nullable": true
          },
          "isTopSkill": {
            "type": "boolean",
            "description": "Whether the skill should be marked as a top skill. When the property is omitted the current\r\nvalue is kept.",
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "When true the skill is removed from the user's profile instead of being added or updated."
          }
        },
        "additionalProperties": false,
        "description": "A single skill to add, update or remove on a user's profile."
      },
      "UserSkillImportItemResult": {
        "type": "object",
        "properties": {
          "skillID": {
            "type": "integer",
            "description": "The internal id of the skill, once resolved. Null when the skill could not be resolved.",
            "format": "int32",
            "nullable": true
          },
          "skillCode": {
            "type": "string",
            "description": "The external code of the skill that was provided in the input, if any.",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatusType"
              }
            ],
            "description": "The outcome of processing this skill."
          },
          "message": {
            "type": "string",
            "description": "Optional message with additional context (e.g. why the skill was ignored).",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Result of processing a single skill for a user."
      },
      "UserSkillImportUserReference": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "The internal id of the user.",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "The external employee identifier of the user. Ignored when UserID is provided.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "The email address of the user. Ignored when UserID or EmployeeID is provided.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Reference to the user whose skills should be modified. At least one of UserID, EmployeeID or Email\r\nhas to be provided. Resolution precedence is UserID, then EmployeeID, then Email."
      },
      "UserSkillsImportInput": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserSkillImportUserReference"
              }
            ],
            "description": "Identifies the user whose skills should be modified.",
            "nullable": true
          },
          "skills": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserSkillImportItem"
            },
            "description": "The skills to add, update or remove on the user's profile.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Input for the Import API endpoint that adds, updates or removes the skills of a single user.\r\nThe JSON shape mirrors UserSkillsOutput so the output of the corresponding GET endpoint can be\r\nposted back unchanged."
      },
      "UserSkillsImportResult": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "description": "The internal id of the user, once resolved. Null when the user could not be resolved.",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "description": "The external employee identifier that was provided in the input, if any.",
            "nullable": true
          },
          "userFound": {
            "type": "boolean",
            "description": "Whether the user could be resolved from the provided identifiers. When false, no skills were processed."
          },
          "message": {
            "type": "string",
            "description": "Optional message with additional context (e.g. why the user could not be resolved).",
            "nullable": true
          },
          "skills": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserSkillImportItemResult"
            },
            "description": "The per-skill results.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Result of importing the skills of a single user via the Import API."
      },
      "UserSkillsOutput": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserImportRow"
              }
            ],
            "description": "The user information.",
            "nullable": true
          },
          "skills": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AssessedSkillOutput"
            },
            "description": "The list of assessed skills for this user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "User with their assessed skills, for the Import API."
      },
      "UserTestimonialExportEntry": {
        "type": "object",
        "properties": {
          "testimonialID": {
            "type": "integer",
            "description": "Internal ID of the testimonial.",
            "format": "int32"
          },
          "testimonial": {
            "type": "string",
            "description": "The customer testimonial text.",
            "nullable": true
          },
          "customerContact": {
            "type": "string",
            "description": "Name of the customer contact who gave the testimonial.",
            "nullable": true
          },
          "contactRole": {
            "type": "string",
            "description": "Role of the customer contact.",
            "nullable": true
          },
          "comment": {
            "type": "string",
            "description": "Internal comment on the testimonial.",
            "nullable": true
          },
          "projectReferenceID": {
            "type": "integer",
            "description": "Internal ID of the linked project reference, if any.",
            "format": "int32",
            "nullable": true
          },
          "projectName": {
            "type": "string",
            "description": "Name of the linked project, if any.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single testimonial of a user."
      },
      "UserTestimonialExportOutput": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportApiUserIdentity"
              }
            ],
            "description": "Identity of the user.",
            "nullable": true
          },
          "testimonials": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserTestimonialExportEntry"
            },
            "description": "Testimonials assigned to this user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A user with their testimonials for the Import API GET endpoint."
      },
      "UserTrainingExportEntry": {
        "type": "object",
        "properties": {
          "trainingReferenceID": {
            "type": "integer",
            "description": "Internal ID of the training reference.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "Name of the training.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Description of the training.",
            "nullable": true
          },
          "provider": {
            "type": "string",
            "description": "Name of the company that provided the training.",
            "nullable": true
          },
          "website": {
            "type": "string",
            "description": "URL of the training.",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "Start date of the training.",
            "format": "date-time",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "description": "End date of the training.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single training assignment for a user."
      },
      "UserTrainingExportOutput": {
        "type": "object",
        "properties": {
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportApiUserIdentity"
              }
            ],
            "description": "Identity of the user.",
            "nullable": true
          },
          "trainings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserTrainingExportEntry"
            },
            "description": "Trainings assigned to this user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A user with their trainings for the Import API GET endpoint."
      },
      "UserWorkTimeImportItem": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "workDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "startTime": {
            "type": "string",
            "nullable": true,
            "example": "09:00:00"
          },
          "endTime": {
            "type": "string",
            "nullable": true,
            "example": "09:00:00"
          },
          "pauseMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserWorkTimeImportReadItem": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "employeeID": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "workDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "startTime": {
            "type": "string",
            "nullable": true,
            "example": "09:00:00"
          },
          "endTime": {
            "type": "string",
            "nullable": true,
            "example": "09:00:00"
          },
          "pauseMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "isCalculated": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "UserWorkTimeImportResult": {
        "type": "object",
        "properties": {
          "userID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "workDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserWorkingProfileInput": {
        "type": "object",
        "properties": {
          "userIdentity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserIdentityInput"
              }
            ],
            "description": "Defines a user.",
            "nullable": true
          },
          "workingTimePatterns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkingProfileInput"
            },
            "description": "Defines multiple WorkingTimePatterns from a user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines a user with the associated WorkingTimePatterns."
      },
      "ValidationErrorElement": {
        "type": "object",
        "properties": {
          "errorCode": {
            "type": "string",
            "nullable": true
          },
          "reason": {
            "type": "string",
            "nullable": true
          },
          "propertyName": {
            "type": "string",
            "nullable": true
          },
          "attemptedValue": {
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ValidationErrorResult": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/HttpStatusCode"
              }
            ]
          },
          "details": {
            "type": "string",
            "nullable": true
          },
          "exceptionType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ExceptionType"
              }
            ],
            "readOnly": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationErrorElement"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WeekDaysInput": {
        "type": "object",
        "properties": {
          "monday": {
            "type": "boolean",
            "description": "Flag to indicate whether Monday should be a working day.\r\nIf not provided in the create case, the default is true.",
            "nullable": true
          },
          "tuesday": {
            "type": "boolean",
            "description": "Flag to indicate whether Tuesday should be a working day.\r\nIf not provided in the create case, the default is true.",
            "nullable": true
          },
          "wednesday": {
            "type": "boolean",
            "description": "Flag to indicate whether Wednesday should be a working day.\r\nIf not provided in the create case, the default is true.",
            "nullable": true
          },
          "thursday": {
            "type": "boolean",
            "description": "Flag to indicate whether Thursday should be a working day.\r\nIf not provided in the create case, the default is true.",
            "nullable": true
          },
          "friday": {
            "type": "boolean",
            "description": "Flag to indicate whether Friday should be a working day.\r\nIf not provided in the create case, the default is true.",
            "nullable": true
          },
          "saturday": {
            "type": "boolean",
            "description": "Flag to indicate whether Saturday should be a working day.\r\nIf not provided in the create case, the default is false.",
            "nullable": true
          },
          "sunday": {
            "type": "boolean",
            "description": "Flag to indicate whether Sunday should be a working day.\r\nIf not provided in the create case, the default is false.",
            "nullable": true
          },
          "mondayHours": {
            "type": "number",
            "description": "The specific working hours for Monday, overriding 'HoursPerDay' for that day.\r\nIgnored when Monday is not a working day. Set to null to fall back to 'HoursPerDay'.",
            "format": "double",
            "nullable": true
          },
          "tuesdayHours": {
            "type": "number",
            "description": "The specific working hours for Tuesday, overriding 'HoursPerDay' for that day.\r\nIgnored when Tuesday is not a working day. Set to null to fall back to 'HoursPerDay'.",
            "format": "double",
            "nullable": true
          },
          "wednesdayHours": {
            "type": "number",
            "description": "The specific working hours for Wednesday, overriding 'HoursPerDay' for that day.\r\nIgnored when Wednesday is not a working day. Set to null to fall back to 'HoursPerDay'.",
            "format": "double",
            "nullable": true
          },
          "thursdayHours": {
            "type": "number",
            "description": "The specific working hours for Thursday, overriding 'HoursPerDay' for that day.\r\nIgnored when Thursday is not a working day. Set to null to fall back to 'HoursPerDay'.",
            "format": "double",
            "nullable": true
          },
          "fridayHours": {
            "type": "number",
            "description": "The specific working hours for Friday, overriding 'HoursPerDay' for that day.\r\nIgnored when Friday is not a working day. Set to null to fall back to 'HoursPerDay'.",
            "format": "double",
            "nullable": true
          },
          "saturdayHours": {
            "type": "number",
            "description": "The specific working hours for Saturday, overriding 'HoursPerDay' for that day.\r\nIgnored when Saturday is not a working day. Set to null to fall back to 'HoursPerDay'.",
            "format": "double",
            "nullable": true
          },
          "sundayHours": {
            "type": "number",
            "description": "The specific working hours for Sunday, overriding 'HoursPerDay' for that day.\r\nIgnored when Sunday is not a working day. Set to null to fall back to 'HoursPerDay'.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines the working days of a UserWorkingTimePattern.\r\nIf this is not provided in the create case, then the default is Monday to Friday.\r\nEach day can additionally carry specific working hours (e.g. 'MondayHours'): if set,\r\nthey override 'HoursPerDay' for that day; if not set, the day uses 'HoursPerDay'.\r\nSpecific hours sent for a non-working day are ignored."
      },
      "WeekDaysResult": {
        "type": "object",
        "properties": {
          "monday": {
            "type": "boolean",
            "nullable": true
          },
          "tuesday": {
            "type": "boolean",
            "nullable": true
          },
          "wednesday": {
            "type": "boolean",
            "nullable": true
          },
          "thursday": {
            "type": "boolean",
            "nullable": true
          },
          "friday": {
            "type": "boolean",
            "nullable": true
          },
          "saturday": {
            "type": "boolean",
            "nullable": true
          },
          "sunday": {
            "type": "boolean",
            "nullable": true
          },
          "mondayHours": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "tuesdayHours": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "wednesdayHours": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "thursdayHours": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "fridayHours": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "saturdayHours": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "sundayHours": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WeeklyPlanningItem": {
        "type": "object",
        "properties": {
          "dateInWeek": {
            "type": "string",
            "description": "Any date that falls within the planned week. It does not need to be the Monday — it is\r\nnormalized to the week (Monday-based) it belongs to when the planning is applied.",
            "format": "date",
            "example": "2025-01-01"
          },
          "hoursPerWeek": {
            "type": "number",
            "description": "The planned effort for the week in hours, where a full standard work week is 40 hours\r\n(e.g. 40 = fully booked for the week, 20 = half a week). A value of 0 removes the planning for this week.",
            "format": "float"
          }
        },
        "additionalProperties": false
      },
      "WorkPackageCandidateBatchInput": {
        "type": "object",
        "properties": {
          "candidates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkPackageCandidateInput"
            },
            "description": "Represents a batch of workpackage candidate inputs.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageCandidateBatchResult": {
        "type": "object",
        "properties": {
          "candidateResults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkPackageCandidateResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageCandidateInput": {
        "type": "object",
        "properties": {
          "identifier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkPackageCandidateReferenceInput"
              }
            ],
            "description": "Optional position selector refining <em>which</em> of the candidate's positions this row\r\ntargets. When absent, the row targets the candidate's assignment on the work package as a whole.",
            "nullable": true
          },
          "workPackage": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkPackageReferenceInput"
              }
            ],
            "description": "A reference to the workpackage. Required.",
            "nullable": true
          },
          "candidate": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UserReferenceInput"
              }
            ],
            "description": "A reference to the assigned user. Required.",
            "nullable": true
          },
          "personDays": {
            "type": "number",
            "description": "The person-days distributed to this user on the work package\r\n(`workpackageteammembers.PersonDays`). When provided (non-null) the allocation is set —\r\non create for a new assignment, and on an identified re-import for an existing one. When\r\nomitted / null the allocation is left unchanged.",
            "format": "double",
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "Flag to indicate whether the user should be unassigned.\r\n(Default: false)",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents the link between a workpackage and an assigned user."
      },
      "WorkPackageCandidateReferenceInput": {
        "type": "object",
        "properties": {
          "projectTeamMemberID": {
            "type": "integer",
            "description": "The exact position (project-team-member row) to target. Takes precedence over\r\nDecidalo.Domain.Models.WorkPackage.Import.WorkPackageCandidateReferenceInput.BookingID. Must belong to the row's candidate and the work package's project.",
            "format": "int32",
            "nullable": true
          },
          "bookingID": {
            "type": "integer",
            "description": "A booking that, together with the row's candidate and the work package's project, resolves to a\r\nsingle position. Used only when Decidalo.Domain.Models.WorkPackage.Import.WorkPackageCandidateReferenceInput.ProjectTeamMemberID is not set; an ambiguous or\r\nunresolvable booking is a validation error.",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Optional position selector for a work package candidate assignment. A candidate assignment is a\r\nproject-team-member position linked to a work package, and a user can be on a work package through\r\nseveral positions (one per booking). This refines <em>which</em> position an import row targets:\r\n<list type=\"number\"><item>Decidalo.Domain.Models.WorkPackage.Import.WorkPackageCandidateReferenceInput.ProjectTeamMemberID, when set, targets that exact position.</item><item>otherwise Decidalo.Domain.Models.WorkPackage.Import.WorkPackageCandidateReferenceInput.BookingID (with the row's candidate) is resolved to a unique position.</item><item>otherwise the row targets the user's assignment on the work package as a whole (create links\r\none deterministic position; delete removes all of the user's positions on the work package).</item></list>\r\nUsed exclusively by the work package candidate import/export round-trip (Decidalo.Import.Host)."
      },
      "WorkPackageCandidateResult": {
        "type": "object",
        "properties": {
          "projectTeamMemberID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "workPackageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "isSuccessful": {
            "type": "boolean"
          },
          "errorMessage": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageIdentifier": {
        "required": [
          "workPackageID"
        ],
        "type": "object",
        "properties": {
          "workPackageID": {
            "type": "integer",
            "description": "decídalo id of the work package.",
            "format": "int32"
          },
          "workPackageCode": {
            "type": "string",
            "description": "External code of the work package, or null when none is set.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Identifier for a work package."
      },
      "WorkPackageInput": {
        "type": "object",
        "properties": {
          "identifier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkPackageReferenceInput"
              }
            ],
            "description": "Identifier of the work package. If absent or if its `WorkPackageID` is not provided,\r\nthe operation is treated as a create.",
            "nullable": true
          },
          "project": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectIdentityInput"
              }
            ],
            "description": "Identity of the project the work package belongs to. Required on create.",
            "nullable": true
          },
          "properties": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkPackageProperties"
              }
            ],
            "description": "Properties of the work package.",
            "nullable": true
          },
          "billingType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BillingTypeReferenceInput"
              }
            ],
            "description": "Billing type of the work package. If the whole object is omitted on update,\r\nthe existing billing type is left unchanged.",
            "nullable": true
          },
          "delete": {
            "type": "boolean",
            "description": "If `true` and the work package is identified, the operation is a delete.",
            "nullable": true
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": { },
            "description": "Non-standard metamodel custom properties, keyed by column name; omitted leaves existing values\r\nuntouched, an explicit `null` clears every custom property, and an empty object is a no-op.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Input for the single-work-package import endpoint.\r\nSupports create, update and delete of one work package per request."
      },
      "WorkPackageOrderPositionImportBatch": {
        "type": "object",
        "properties": {
          "orderPositions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkPackageOrderPositionImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageOrderPositionImportBatchResult": {
        "type": "object",
        "properties": {
          "orderPositions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkPackageOrderPositionImportResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageOrderPositionImportItem": {
        "type": "object",
        "properties": {
          "workPackageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "workPackageCode": {
            "type": "string",
            "nullable": true
          },
          "orderID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderCode": {
            "type": "string",
            "nullable": true
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageOrderPositionImportResult": {
        "type": "object",
        "properties": {
          "workPackageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageOrderPositionOutput": {
        "type": "object",
        "properties": {
          "workPackageID": {
            "type": "integer",
            "format": "int32"
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32"
          },
          "orderName": {
            "type": "string",
            "nullable": true
          },
          "positionName": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageOrderPositionRecordingTargetOutput": {
        "type": "object",
        "properties": {
          "recordingTargetID": {
            "type": "integer",
            "format": "int32"
          },
          "workPackageID": {
            "type": "integer",
            "format": "int32"
          },
          "workPackageCode": {
            "type": "string",
            "nullable": true
          },
          "workPackageLastEditDate": {
            "type": "string",
            "format": "date-time"
          },
          "projectID": {
            "type": "integer",
            "format": "int32"
          },
          "projectCode": {
            "type": "string",
            "nullable": true
          },
          "orderPositionID": {
            "type": "integer",
            "format": "int32"
          },
          "orderPositionCode": {
            "type": "string",
            "nullable": true
          },
          "orderPositionLastEditDate": {
            "type": "string",
            "format": "date-time"
          },
          "orderID": {
            "type": "integer",
            "format": "int32"
          },
          "orderCode": {
            "type": "string",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32"
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "recordingTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeReferenceOutput"
            },
            "nullable": true
          },
          "isBillable": {
            "type": "boolean",
            "nullable": true
          },
          "isActive": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "WorkPackageOutput": {
        "required": [
          "creationDate",
          "identifier",
          "lastEditDate",
          "project",
          "properties"
        ],
        "type": "object",
        "properties": {
          "identifier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkPackageIdentifier"
              }
            ],
            "description": "Identifier of the work package."
          },
          "project": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectReferenceIdentity"
              }
            ],
            "description": "Project the work package belongs to."
          },
          "properties": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkPackagePropertiesOutput"
              }
            ],
            "description": "Properties of the work package."
          },
          "billingType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BillingTypeOutput"
              }
            ],
            "description": "Billing type of the work package. Null if no billing type is assigned.",
            "nullable": true
          },
          "creationDate": {
            "type": "string",
            "description": "Timestamp of the creation of the work package.",
            "format": "date-time"
          },
          "lastEditDate": {
            "type": "string",
            "description": "Timestamp of the last change of the work package.",
            "format": "date-time"
          },
          "customProperties": {
            "type": "object",
            "additionalProperties": {
              "nullable": true
            },
            "description": "Non-standard metamodel custom properties, keyed by column name; empty when the tenant has none configured or none are set.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Output for a single work package."
      },
      "WorkPackageProperties": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the work package. Mandatory on create.",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "Planned start date of the work package.",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "endDate": {
            "type": "string",
            "description": "Planned end date of the work package.",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "personDays": {
            "type": "number",
            "description": "Planned effort in person days.",
            "format": "double",
            "nullable": true
          },
          "price": {
            "type": "number",
            "description": "Price of the work package.",
            "format": "double",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "ISO 4217 three-letter currency code for the price (e.g. \"EUR\", \"USD\").\r\nWhen the property is not provided in the payload at all, it won't be changed.\r\nSet to `null` to clear the currency.",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/WorkPackageStatus"
          },
          "description": {
            "type": "string",
            "description": "Description of the work package.",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Free-form notes on the work package.",
            "nullable": true
          },
          "isTimeRecordingAllowed": {
            "type": "boolean",
            "description": "Whether users can book time on this work package. If not provided on create,\r\nthe default `false` is applied.",
            "nullable": true
          },
          "color": {
            "type": "string",
            "description": "Gantt bar colour as a hex string (e.g. \"#fd7303\"). Set to `null` to clear.",
            "nullable": true
          },
          "sortOrder": {
            "type": "integer",
            "description": "Manual sort position in the Gantt/plan view. Set to `null` to clear.",
            "format": "int32",
            "nullable": true
          },
          "projectPlanID": {
            "type": "integer",
            "description": "The sub-plan the work package is assigned to. Must belong to the same project. Set to\r\n`null` to move the work package back to the project's default plan.",
            "format": "int32",
            "nullable": true
          },
          "parentWorkPackageID": {
            "type": "integer",
            "description": "The parent work package in the project-plan hierarchy, by internal id. Must belong to the same\r\nproject and must not be the work package itself or one of its descendants (no cycles). Set to\r\n`null` to promote the work package to a top-level (root) node. Takes precedence over\r\nDecidalo.Domain.Models.WorkPackage.Import.WorkPackageProperties.ParentWorkPackageCode when both are provided.",
            "format": "int32",
            "nullable": true
          },
          "parentWorkPackageCode": {
            "type": "string",
            "description": "The parent work package by external code (resolved to an id). Used when\r\nDecidalo.Domain.Models.WorkPackage.Import.WorkPackageProperties.ParentWorkPackageID is not provided. Set to `null` to promote to a root node.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Properties of a work package that can be provided on import.\r\nA property absent from the JSON is left untouched; a property present with value `null`\r\nexplicitly clears the field."
      },
      "WorkPackagePropertiesOutput": {
        "required": [
          "name",
          "status",
          "timeRecordingAllowed"
        ],
        "type": "object",
        "properties": {
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Display name of the work package."
          },
          "startDate": {
            "type": "string",
            "description": "Start date of the work package.",
            "format": "date",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "description": "End date of the work package.",
            "format": "date",
            "nullable": true
          },
          "personDays": {
            "type": "number",
            "description": "Budgeted person days for the work package.",
            "format": "double",
            "nullable": true
          },
          "price": {
            "type": "number",
            "description": "Price of the work package.",
            "format": "double",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "ISO 4217 three-letter currency code stored for the price.\r\nNull if no currency is recorded.",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkPackageStatus"
              }
            ],
            "description": "Current processing status of the work package."
          },
          "description": {
            "type": "string",
            "description": "Html formatted description of the work package.",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Html formatted notes on the work package.",
            "nullable": true
          },
          "timeRecordingAllowed": {
            "type": "boolean",
            "description": "Whether time recording is allowed for this work package."
          },
          "color": {
            "type": "string",
            "description": "Gantt bar colour as a hex string, or null when none is set.",
            "nullable": true
          },
          "projectPlanID": {
            "type": "integer",
            "description": "The sub-plan the work package is assigned to, or null for the project's default plan.",
            "format": "int32",
            "nullable": true
          },
          "parentWorkPackageID": {
            "type": "integer",
            "description": "The parent work package in the hierarchy, or null for a top-level (root) work package.",
            "format": "int32",
            "nullable": true
          },
          "sortOrder": {
            "type": "integer",
            "description": "Manual sort position in the Gantt/plan view. Null when no sort position is stored.",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Properties of a work package."
      },
      "WorkPackageRecordingTargetImportBatch": {
        "type": "object",
        "properties": {
          "recordingTargets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkPackageRecordingTargetImportItem"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageRecordingTargetImportBatchResult": {
        "type": "object",
        "properties": {
          "recordingTargets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkPackageRecordingTargetImportResult"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageRecordingTargetImportItem": {
        "type": "object",
        "properties": {
          "workPackageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "workPackageCode": {
            "type": "string",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "isBillable": {
            "type": "boolean",
            "nullable": true
          },
          "recordingTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeReferenceImport"
            },
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageRecordingTargetImportResult": {
        "type": "object",
        "properties": {
          "workPackageID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "recordingTargetID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ImportItemStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageRecordingTargetOutput": {
        "type": "object",
        "properties": {
          "workPackageID": {
            "type": "integer",
            "format": "int32"
          },
          "workPackageCode": {
            "type": "string",
            "nullable": true
          },
          "activityTypeID": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "activityTypeCode": {
            "type": "string",
            "nullable": true
          },
          "isBillable": {
            "type": "boolean",
            "nullable": true
          },
          "recordingTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecordingTypeReferenceOutput"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkPackageReferenceInput": {
        "type": "object",
        "properties": {
          "workPackageID": {
            "type": "integer",
            "description": "Internal ID of the work package.",
            "format": "int32",
            "nullable": true
          },
          "workPackageCode": {
            "maxLength": 50,
            "type": "string",
            "description": "External, tenant-defined identifier for the work package (max length 50).\r\nUsed to resolve a work package when WorkPackageID is absent, or to set/overwrite\r\nthe code on the resolved row when both fields are provided. Passing an explicit `null` or\r\nempty string on an update path clears the column.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines a reference to a work package."
      },
      "WorkPackageStatus": {
        "enum": [
          "Planned",
          "InProgress",
          "Done",
          "Closed"
        ],
        "type": "string"
      },
      "WorkPackageStatusNullableOptionalField": {
        "type": "object",
        "properties": {
          "isProvided": {
            "type": "boolean"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkPackageStatus"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WorkingProfileInput": {
        "type": "object",
        "properties": {
          "userWorkingTimePatternID": {
            "type": "integer",
            "description": "Internal ID of the UserWorkingTimePattern.",
            "format": "int32",
            "nullable": true
          },
          "userWorkingTimePatternCode": {
            "type": "string",
            "description": "External identifier for the UserWorkingTimePattern.\r\nWill be set and updated if provided.\r\nIdentifies exactly one pattern across all users, so a code already used by another user's pattern is rejected.",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "The Start date of the working time pattern.\r\nThe corresponding end date is automatically set to one day before the next start date of all UserWorkingTimePatterns.",
            "format": "date",
            "nullable": true,
            "example": "2025-01-01"
          },
          "hoursPerWeek": {
            "type": "number",
            "description": "The working hours per week.\r\nThis field is mandatory in the create case.",
            "format": "double",
            "nullable": true
          },
          "hoursPerDay": {
            "type": "number",
            "description": "The working hours per day.\r\nThis field is mandatory in the create case.",
            "format": "double",
            "nullable": true
          },
          "maxHoursPerDay": {
            "type": "number",
            "description": "The maximum working hours per day.",
            "format": "double",
            "nullable": true
          },
          "weekDays": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WeekDaysInput"
              }
            ],
            "description": "Defines the days on which the user works.\r\nIf this is not provided in the create case, then the default is Monday to Friday.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines a working time pattern with a StartDate."
      },
      "WorkingProfileResult": {
        "type": "object",
        "properties": {
          "userWorkingTimePatternID": {
            "type": "integer",
            "format": "int32"
          },
          "userWorkingTimePatternCode": {
            "type": "string",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "format": "date",
            "example": "2025-01-01"
          },
          "hoursPerWeek": {
            "type": "number",
            "format": "double"
          },
          "hoursPerDay": {
            "type": "number",
            "format": "double"
          },
          "maxHoursPerDay": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "weekDays": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WeekDaysResult"
              }
            ],
            "nullable": true
          },
          "lastEditDate": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "description": "API Key needed to access the endpoints. API Key must be in the format: \"X-Api-Key: {your_api_key}\"",
        "name": "X-Api-Key",
        "in": "header"
      }
    }
  },
  "security": [
    {
      "ApiKey": [ ]
    }
  ]
}