openapi: 3.1.0
info:
  title: Kleer API
  description: |-
    # Kleer API

    This is the **aggregated documentation** for Kleer's public REST APIs. Each
    sub-API is owned and operated by its own service, but is exposed here under a
    shared host and a shared version so the whole API surface can be explored in
    one place.

    ## Environments

    | Environment | Base URL                      |
    | ----------- | ----------------------------- |
    | Test        | `https://api.test.kleer.se`   |

    All resources live under the version prefix `/v1`.

    ## Authentication

    The API is protected by OAuth2 tokens issued by Kleer's Keycloak. Send a valid
    access token in the `Authorization` header on every request:

    ```
    Authorization: Bearer <access_token>
    ```

    Requests without a valid token are rejected at the edge before reaching any
    service.

    ## How the documentation is organized

    The navigation on the left is grouped per sub-API, in a logical order — from
    identity and master data (users, companies, clients) through projects and
    purchasing to revenue, banking, payroll and accounting. Schema names are
    prefixed with their respective sub-API's name so that similarly named models
    from different services are not conflated.
  version: v1
servers:
  - url: https://api.test.kleer.se
tags:
  - name: exchangerate
    x-displayName: exchangerate
  - name: company
    x-displayName: company
  - name: project
    x-displayName: project
  - name: voucher
    x-displayName: voucher
  - name: dimension
    x-displayName: dimension
  - name: payroll
    x-displayName: payroll
  - name: user
    x-displayName: user
  - name: expense
    x-displayName: expense
  - name: supplier
    x-displayName: supplier
  - name: subcontractor
    x-displayName: subcontractor
  - name: supplier-invoice
    x-displayName: supplier-invoice
  - name: kleer-group_engineering_team-bank_client-rest-service_other
    x-displayName: other
  - name: revenue
    x-displayName: revenue
  - name: bank
    x-displayName: bank
paths:
  /v1/exchange-rates:
    get:
      tags:
        - exchangerate
      summary: Get the latest exchange rate from one currency to another
      parameters:
        - name: from
          in: query
          required: true
          style: form
          explode: true
          schema:
            type: string
        - name: to
          in: query
          required: true
          style: form
          explode: true
          schema:
            type: string
      responses:
        '200':
          description: Latest exchange rate
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Exchange_Rate_REST_API_ExchangeRate'
        default:
          $ref: '#/components/responses/Exchange_Rate_REST_API_DefaultError'
  /v1/companies:
    get:
      tags:
        - company
      summary: List the authenticated caller's accessible companies
      parameters:
        - name: cursor
          in: query
          description: >
            Page token from a previous response's `pagination.nextCursor`. Omit for

            the first page.

          required: false
          schema:
            type: string
            format: uuid
        - name: limit
          in: query
          description: Page size (default 100, maximum 1000). Values above 1000 are capped.
          required: false
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 1
            type: integer
            format: int32
      responses:
        '200':
          description: Companies the caller can access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company_REST_API_AccessibleCompanies'
        default:
          $ref: '#/components/responses/Company_REST_API_DefaultError'
  /v1/companies/{companyId}:
    get:
      tags:
        - company
      summary: Get company information
      parameters:
        - name: companyId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Company information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company_REST_API_CompanyInformation'
        default:
          $ref: '#/components/responses/Company_REST_API_DefaultError'
  /v1/companies/{companyId}/messages:
    post:
      tags:
        - company
      summary: Send a message with optional file attachments for a company
      parameters:
        - name: companyId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Company_REST_API_CompanyMessageWritable'
        required: true
      responses:
        '200':
          description: Message accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company_REST_API_CompanyMessageAck'
        default:
          $ref: '#/components/responses/Company_REST_API_DefaultError'
  /v1/companies/{companyId}/imports:
    post:
      tags:
        - company
      summary: Import companies from an Excel file
      parameters:
        - name: companyId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Company_REST_API_CompanyImportRequest'
        required: true
      responses:
        '200':
          description: Import succeeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company_REST_API_CompanyImportResult'
        default:
          $ref: '#/components/responses/Company_REST_API_DefaultError'
  /v1/company/{companyId}/client-projects:
    get:
      tags:
        - project
      summary: Get client projects
      description: >-
        Returns a list of client projects for a company with optional filtering and pagination. Optionally filter by project number.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: filter
          in: query
          description: Optional filter string
          required: false
          style: form
          explode: true
          schema:
            type: string
            default: ''
        - name: number
          in: query
          description: Filter by project number
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: cursor
          in: query
          description: >
            Page token from a previous response's `pagination.nextCursor`. Omit for

            the first page.

          required: false
          schema:
            type: string
            format: uuid
        - name: limit
          in: query
          description: Maximum number of results to return
          required: false
          style: form
          explode: true
          schema:
            minimum: 1
            type: integer
            format: int32
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: List of client projects
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project_REST_API_ClientProjects'
        default:
          $ref: '#/components/responses/Project_REST_API_DefaultError'
    post:
      tags:
        - project
      summary: Create a client project
      description: Creates a new client project for the company
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project_REST_API_ClientProjectWritable'
        required: true
      responses:
        '201':
          description: Client project created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project_REST_API_ProjectCreated'
        default:
          $ref: '#/components/responses/Project_REST_API_DefaultError'
  /v1/company/{companyId}/client-projects/{clientProjectId}:
    get:
      tags:
        - project
      summary: Get a single client project
      description: Returns a single client project by its ID
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientProjectId
          in: path
          description: The UUID of the client project
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Client project details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project_REST_API_ClientProject'
        default:
          $ref: '#/components/responses/Project_REST_API_DefaultError'
    put:
      tags:
        - project
      summary: Update a client project
      description: Updates an existing client project by its ID
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientProjectId
          in: path
          description: The UUID of the client project
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project_REST_API_ClientProjectWritable'
        required: true
      responses:
        '200':
          description: Client project updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project_REST_API_ProjectSaved'
        default:
          $ref: '#/components/responses/Project_REST_API_DefaultError'
  /v1/company/{companyId}/activities:
    get:
      tags:
        - project
      summary: Get activities
      description: Returns all active activities for a company
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: List of activities
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project_REST_API_Activities'
        default:
          $ref: '#/components/responses/Project_REST_API_DefaultError'
  /v1/company/{companyId}/activities/{activityId}:
    get:
      tags:
        - project
      summary: Get a single activity
      description: Returns a single activity by its ID
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: activityId
          in: path
          description: The activity UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Activity details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project_REST_API_Activity'
        default:
          $ref: '#/components/responses/Project_REST_API_DefaultError'
  /v1/company/{companyId}/activities/internal-hourly-costs/{userId}:
    get:
      tags:
        - project
      summary: Get internal hourly costs
      description: Returns internal hourly costs for a user
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The ID of the user
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: List of internal hourly costs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project_REST_API_InternalHourlyCosts'
        default:
          $ref: '#/components/responses/Project_REST_API_DefaultError'
    put:
      tags:
        - project
      summary: Set internal hourly costs
      description: Sets the internal hourly costs for a user
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The ID of the user
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Project_REST_API_InternalHourlyCostWritables
        required: true
      responses:
        '200':
          description: Internal hourly costs saved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project_REST_API_SavedId'
        default:
          $ref: '#/components/responses/Project_REST_API_DefaultError'
  /v1/companies/{companyId}/vouchers:
    post:
      tags:
        - voucher
      summary: Create a voucher
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Accounting_REST_API_Create-voucher'
        required: true
      responses:
        '200':
          description: The created voucher
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Accounting_REST_API_Created'
        default:
          $ref: '#/components/responses/Accounting_REST_API_DefaultError'
  /v1/companies/{companyId}/dimensions:
    get:
      tags:
        - dimension
      summary: Get dimensions
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: cursor
          in: query
          description: >
            Page token from a previous response's `pagination.nextCursor`. Omit for

            the first page.

          required: false
          schema:
            type: string
            format: uuid
        - name: limit
          in: query
          description: Maximum number of dimensions to return on this page.
          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: order
          in: query
          description: >-
            Sort direction by the resource id cursor (UUIDv7). Defaults to `asc` (oldest-first).
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/Accounting_REST_API_Order'
      responses:
        '200':
          description: The company's dimensions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Accounting_REST_API_Api-dimensions'
        default:
          $ref: '#/components/responses/Accounting_REST_API_DefaultError'
  /v1/companies/{companyId}/dimensions/{dimensionId}/entries:
    get:
      tags:
        - dimension
      summary: Get dimension entries
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: dimensionId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: cursor
          in: query
          description: >
            Page token from a previous response's `pagination.nextCursor`. Omit for

            the first page.

          required: false
          schema:
            type: string
            format: uuid
        - name: limit
          in: query
          description: Maximum number of dimension entries to return on this page.
          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: order
          in: query
          description: >-
            Sort direction by the resource id cursor (UUIDv7). Defaults to `asc` (oldest-first).
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/Accounting_REST_API_Order'
      responses:
        '200':
          description: The dimension's entries
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Accounting_REST_API_Api-dimension-entries'
        default:
          $ref: '#/components/responses/Accounting_REST_API_DefaultError'
    post:
      tags:
        - dimension
      summary: Add an entry to a dimension
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: dimensionId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Accounting_REST_API_Api-dimension-entry-writeable
        required: true
      responses:
        '200':
          description: The created dimension entry
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Accounting_REST_API_Dimension-entry-created
        default:
          $ref: '#/components/responses/Accounting_REST_API_DefaultError'
  /v1/companies/{companyId}/dimensions/{dimensionId}/entries/{entryId}:
    put:
      tags:
        - dimension
      summary: Update a dimension entry by id
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: dimensionId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: entryId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Accounting_REST_API_Api-dimension-entry-writeable
        required: true
      responses:
        '200':
          description: The updated dimension entry
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Accounting_REST_API_Dimension-entry-saved'
        default:
          $ref: '#/components/responses/Accounting_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/article:
    get:
      tags:
        - payroll
      summary: Get payroll articles
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Payroll articles
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollArticleReadables'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/user/{userId}/event:
    put:
      tags:
        - payroll
      summary: Create a payroll event for a user
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Payroll_REST_API_PayrollEventWritable'
        required: true
      responses:
        '200':
          description: Created payroll event
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollCreatedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/user/{userId}/event/{eventId}:
    delete:
      tags:
        - payroll
      summary: Delete a payroll event
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: eventId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Deleted payroll event
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollSavedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/user/{userId}/event/from/{fromDate}/to/{toDate}:
    get:
      tags:
        - payroll
      summary: Get payroll events for a user in an interval
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: fromDate
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: date
        - name: toDate
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: date
      responses:
        '200':
          description: Payroll events
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollEvents'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/user/{userId}/child:
    put:
      tags:
        - payroll
      summary: Create a child for a payroll user
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Payroll_REST_API_PayrollChildWritable'
        required: true
      responses:
        '200':
          description: Created child
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollCreatedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/companies/{companyId}/users/{userId}/employment-contracts:
    get:
      tags:
        - payroll
      summary: Get employment contract by user id
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Employment contract
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollUserReadable'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/user/{userId}:
    put:
      tags:
        - payroll
      summary: Create a payroll user
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Payroll_REST_API_PayrollUserWritable'
        required: true
      responses:
        '200':
          description: Created payroll user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollCreatedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
    post:
      tags:
        - payroll
      summary: Update a payroll user
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Payroll_REST_API_PayrollUserWritable'
        required: true
      responses:
        '200':
          description: Updated payroll user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollSavedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/companies/{companyId}/employment-contracts:
    get:
      tags:
        - payroll
      summary: Get employment contracts
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: offset
          in: query
          description: The first payroll user result offset. Defaults to 0.
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
            default: 0
        - name: limit
          in: query
          description: >-
            The maximum number of payroll users to return. Defaults to 100 and is capped at 100.
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            format: int32
            default: 100
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Employment contracts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollUserReadables'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/run:
    get:
      tags:
        - payroll
      summary: Get payroll runs
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: startDate
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
        - name: endDate
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
        - name: offset
          in: query
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
            default: 0
        - name: limit
          in: query
          required: false
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 1
            type: integer
            format: int32
            default: 1000
      responses:
        '200':
          description: Payroll runs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollRuns'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
    put:
      tags:
        - payroll
      summary: Create a payroll run
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Payroll_REST_API_PayrollRunCreateWritable'
        required: true
      responses:
        '200':
          description: Created payroll run
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollCreatedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/run/open:
    get:
      tags:
        - payroll
      summary: Get open payroll runs
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: offset
          in: query
          description: The first open payroll run result offset. Defaults to 0.
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
            default: 0
        - name: limit
          in: query
          description: >-
            The maximum number of open payroll runs to return. Defaults to 100 and is capped at 100.
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            format: int32
            default: 100
      responses:
        '200':
          description: Open payroll runs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollRuns'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/run/{runId}:
    get:
      tags:
        - payroll
      summary: Get a payroll run
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: runId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Payroll run
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollRun'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/run/{runId}/pay:
    post:
      tags:
        - payroll
      summary: Pay a payroll run
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: runId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Payroll_REST_API_PayrollRunPayWritable'
        required: false
      responses:
        '200':
          description: Paid payroll run
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollSavedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/run/{runId}/bookkeep:
    post:
      tags:
        - payroll
      summary: Bookkeep a payroll run
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: runId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Payroll_REST_API_PayrollRunBookkeepWritable'
        required: false
      responses:
        '200':
          description: Bookkept payroll run
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollSavedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/run/{runId}/pdf:
    get:
      tags:
        - payroll
      summary: Get payroll run PDF
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: runId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Payroll run PDF
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/run/payout/{payoutId}/transactions:
    get:
      tags:
        - payroll
      summary: Get payroll payout transactions
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: payoutId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: offset
          in: query
          required: true
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
        - name: limit
          in: query
          required: true
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 1
            type: integer
            format: int32
      responses:
        '200':
          description: Payroll payout transactions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollTransactions'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/monthreport/user/{userId}/year/{year}/month/{month}:
    get:
      tags:
        - payroll
      summary: Get payroll month report for a user and month
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: year
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: month
          in: path
          description: Legacy payroll calendar month where January is 0 and December is 11.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Payroll month report
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Payroll_REST_API_PayrollMonthReportReadable
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
    post:
      tags:
        - payroll
      summary: Save payroll month report for a user and month
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: year
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: month
          in: path
          description: Legacy payroll calendar month where January is 0 and December is 11.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Payroll_REST_API_PayrollMonthReportWritable'
        required: true
      responses:
        '200':
          description: Saved payroll month report
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/monthreport/open:
    get:
      tags:
        - payroll
      summary: Get open payroll month reports
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Open payroll month reports
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Payroll_REST_API_PayrollMonthReportReadables
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/companies/{companyId}/work-schedules:
    get:
      tags:
        - payroll
      summary: Get work schedules
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Work schedules
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollSchedulesReadable'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/schedule/rolling:
    put:
      tags:
        - payroll
      summary: Create a rolling payroll schedule
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Payroll_REST_API_PayrollRollingScheduleWritable
        required: true
      responses:
        '200':
          description: Created rolling payroll schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollCreatedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/schedule/fixed:
    put:
      tags:
        - payroll
      summary: Create a fixed payroll schedule
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Payroll_REST_API_PayrollFixedScheduleWritable
        required: true
      responses:
        '200':
          description: Created fixed payroll schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollCreatedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/companies/{companyId}/work-schedules/{scheduleId}:
    get:
      tags:
        - payroll
      summary: Get a work schedule
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: scheduleId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Work schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollScheduleReadable'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/schedule/{scheduleId}:
    post:
      tags:
        - payroll
      summary: Update a payroll schedule
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: scheduleId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Payroll_REST_API_PayrollScheduleWritable'
        required: true
      responses:
        '200':
          description: Updated payroll schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollSavedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/user/{userId}/schedule/{startDate}/to/{endDate}:
    get:
      tags:
        - payroll
      summary: Get payroll user schedule metadata for an interval
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: startDate
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: date
        - name: endDate
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: date
      responses:
        '200':
          description: Payroll user schedule metadata
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Payroll_REST_API_PayrollUserScheduleMetadatas
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/company/{companyId}/payroll/schedule/{scheduleId}/append:
    post:
      tags:
        - payroll
      summary: Append intervals to a fixed payroll schedule
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: scheduleId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Payroll_REST_API_PayrollFixedScheduleWritable
        required: true
      responses:
        '200':
          description: Updated payroll schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll_REST_API_PayrollSavedId'
        default:
          $ref: '#/components/responses/Payroll_REST_API_DefaultError'
  /v1/companies/{companyId}/users:
    get:
      tags:
        - user
      summary: Get users
      description: >-
        Returns company users. When foreignId is supplied, returns the user collection (zero or one) matching that foreign ID.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: offset
          in: query
          description: The first result offset. Defaults to 0.
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
            default: 0
        - name: limit
          in: query
          description: The maximum number of users to return. Defaults to 100.
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            format: int32
            default: 100
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date-time
        - name: foreignId
          in: query
          description: >-
            When supplied, filters the collection to the user matching this external/foreign identifier.
          required: false
          style: form
          explode: true
          schema:
            type: string
      responses:
        '200':
          description: User collection
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_Users'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
    post:
      tags:
        - user
      summary: Create user
      description: Creates a company user.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User_REST_API_UserWritable'
        required: true
      responses:
        '201':
          description: User created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_User'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
  /v1/company/{companyId}/user/me:
    get:
      tags:
        - user
      summary: Get current user
      description: Returns the current authenticated user.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Current user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_User'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
  /v1/company/{companyId}/user/role:
    get:
      tags:
        - user
      summary: Get company roles
      description: Returns available company access roles.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Company access roles
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_AccessRoles'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
  /v1/company/{companyId}/user/access/{userId}:
    get:
      tags:
        - user
      summary: Get accesses for user
      description: Returns access mappings for a user.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The user ID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: User accesses
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_Accesses'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
  /v1/company/{companyId}/user/access/{userId}/{type}:
    put:
      tags:
        - user
      summary: Create access for user
      description: Adds a legacy access mapping for a user.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The user ID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: type
          in: path
          description: The legacy access type.
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/User_REST_API_AccessType'
      responses:
        '201':
          description: Access created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_Created'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
    delete:
      tags:
        - user
      summary: Delete access for user
      description: Removes a legacy access mapping for a user.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The user ID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: type
          in: path
          description: The legacy access type.
          required: true
          style: simple
          explode: false
          schema:
            $ref: '#/components/schemas/User_REST_API_AccessType'
      responses:
        '200':
          description: Access deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_Deleted'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
  /v1/companies/{companyId}/users/{userId}:
    get:
      tags:
        - user
      summary: Get user
      description: Returns a single user.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The user ID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: User
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_User'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
    put:
      tags:
        - user
      summary: Update user
      description: Updates a user in the company context.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The user ID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User_REST_API_UserWritable'
        required: true
      responses:
        '200':
          description: User updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_User'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
  /v1/company/{companyId}/user/{userId}/role:
    get:
      tags:
        - user
      summary: Get user roles
      description: Returns roles for a specific user.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The user ID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: User access roles
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_AccessRoles'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
    delete:
      tags:
        - user
      summary: Remove all user roles
      description: Removes all roles for a specific user.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The user ID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: User roles deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_Deleted'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
  /v1/company/{companyId}/user/{userId}/role/{roleKey}:
    post:
      tags:
        - user
      summary: Add user role
      description: Adds a role to a specific user.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The user ID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: roleKey
          in: path
          description: The role key.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '201':
          description: User role created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_Created'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
    delete:
      tags:
        - user
      summary: Remove user role
      description: Removes a role from a specific user.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The user ID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: roleKey
          in: path
          description: The role key.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: User role deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_Deleted'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
  /v1/company/{companyId}/user/allaccess/{userId}:
    delete:
      tags:
        - user
      summary: Delete all accesses for user
      description: Removes all legacy access mappings for a specific user.
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: userId
          in: path
          description: The user ID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Accesses deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User_REST_API_Deleted'
        default:
          $ref: '#/components/responses/User_REST_API_DefaultError'
  /v1/company/{companyId}/expense:
    get:
      tags:
        - expense
      summary: Get expenses
      description: >-
        Returns expenses for the company filtered by date interval, free-text query, and expense filter.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: expenseDateStart
          in: query
          description: Lower inclusive bound for expense date filtering.
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
        - name: expenseDateEnd
          in: query
          description: Upper inclusive bound for expense date filtering.
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
        - name: query
          in: query
          description: Free-text query used when searching expenses.
          required: false
          style: form
          explode: true
          schema:
            type: string
            default: ''
        - name: filter
          in: query
          description: Expense filter.
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/Expense_REST_API_ExpenseFilter'
      responses:
        '200':
          description: Expense collection
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_ExpenseReadables'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
    put:
      tags:
        - expense
      summary: Create expense
      description: Creates an expense from existing expense entries.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Expense_REST_API_ExpenseWritable'
        required: true
      responses:
        '200':
          description: Expense created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_Created'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/expense/file/open:
    get:
      tags:
        - expense
      summary: Get open expense files
      description: Returns the unprocessed expense files for the current user.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Open expense files
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_ExpenseFileReadables'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/expense/{expenseId}/certify:
    post:
      tags:
        - expense
      summary: Certify expense
      description: Certifies the specified expense.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: expenseId
          in: path
          description: The ID of the expense.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Expense certified
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_Ok'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/expense/file:
    put:
      tags:
        - expense
      summary: Create expense file
      description: >-
        Uploads a new expense file. If encoding is base64, the request body bytes are base64-decoded before processing.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: encoding
          in: query
          description: >-
            Optional request encoding. Use base64 when the uploaded request body is base64-encoded.
          required: false
          style: form
          explode: true
          schema:
            type: string
            enum:
              - base64
      requestBody:
        content:
          application/octet-stream:
            schema:
              type: string
              format: binary
        required: true
      responses:
        '200':
          description: Expense file created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_Created'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/expense/file/{expenseFileId}:
    get:
      tags:
        - expense
      summary: Get expense file data
      description: Returns the original uploaded expense file bytes.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: expenseFileId
          in: path
          description: The ID of the expense file.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Expense file data
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
    delete:
      tags:
        - expense
      summary: Delete expense file
      description: Marks an expense file as processed/deleted.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: expenseFileId
          in: path
          description: The ID of the expense file.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Expense file deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_Deleted'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/expense/file/{expenseFileId}/image:
    get:
      tags:
        - expense
      summary: Get expense file image
      description: >-
        Returns the rendered image for an expense file. If encoding is base64, the response bytes are base64-encoded.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: expenseFileId
          in: path
          description: The ID of the expense file.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: encoding
          in: query
          description: >-
            Optional response encoding. Use base64 to receive base64-encoded bytes.
          required: false
          style: form
          explode: true
          schema:
            type: string
            enum:
              - base64
      responses:
        '200':
          description: Expense file image
          content:
            image/jpeg:
              schema:
                type: string
                format: binary
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/expense/file/{expenseFileId}/form:
    get:
      tags:
        - expense
      summary: Get expense entry form defaults
      description: >-
        Returns defaults for creating an expense entry from a specific expense file.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: expenseFileId
          in: path
          description: The ID of the expense file.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Expense entry form defaults
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryFormDefaults'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/expense/entry/{expenseEntryId}:
    get:
      tags:
        - expense
      summary: Get expense entry
      description: Returns a single expense entry.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: expenseEntryId
          in: path
          description: The ID of the expense entry.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Expense entry
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryReadable'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
    post:
      tags:
        - expense
      summary: Update expense entry
      description: Updates an existing expense entry.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: expenseEntryId
          in: path
          description: The ID of the expense entry.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryWritable'
        required: true
      responses:
        '200':
          description: Expense entry updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_Saved'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
    delete:
      tags:
        - expense
      summary: Delete expense entry
      description: Deletes an expense entry that does not belong to an expense.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: expenseEntryId
          in: path
          description: The ID of the expense entry.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Expense entry deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_Deleted'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/expense/entry:
    put:
      tags:
        - expense
      summary: Create expense entry
      description: Creates a new expense entry.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryWritable'
        required: true
      responses:
        '200':
          description: Expense entry created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_Created'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/expense/entry/open:
    get:
      tags:
        - expense
      summary: Get open expense entries
      description: Returns sorted open expense entries for the current user.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Open expense entries
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryReadables'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/expense/entry/form:
    get:
      tags:
        - expense
      summary: Get expense entry form
      description: Returns the reference data needed to create or edit expense entries.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Expense entry form
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryForm'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/expense/entry/expense/{expenseNr}:
    get:
      tags:
        - expense
      summary: Get entries for an expense
      description: Returns the non-deleted expense entries for a specific expense number.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: expenseNr
          in: path
          description: The expense number.
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Expense entries
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryReadables'
        default:
          $ref: '#/components/responses/Expense_REST_API_DefaultError'
  /v1/company/{companyId}/supplier:
    get:
      tags:
        - supplier
      summary: Get all suppliers
      description: Returns a cursor-paginated page of active suppliers for a given company.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: cursor
          in: query
          description: >
            Page token from a previous response's `pagination.nextCursor`. Omit for

            the first page.

          required: false
          schema:
            type: string
            format: uuid
        - name: limit
          in: query
          description: Maximum number of suppliers to return on this page.
          required: false
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 1
            type: integer
            format: int32
        - name: foreignId
          in: query
          description: >-
            Exact-match filter by foreign id. Composes with the default active filter.
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Paginated list of suppliers
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_Suppliers'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
    put:
      tags:
        - supplier
      summary: Create a new supplier
      description: Creates a new supplier for a given company
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Supplier_REST_API_CreateSupplier'
        required: true
      responses:
        '201':
          description: The created supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_SupplierCreated'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/{supplierId}:
    get:
      tags:
        - supplier
      summary: Get supplier by ID
      description: Returns a single supplier by its public ID for a given company
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierId
          in: path
          description: The public ID of the supplier (SupplierPublicId UUID)
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: The supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_Supplier'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
    put:
      tags:
        - supplier
      summary: Update supplier by ID
      description: Updates an existing supplier by its public ID for a given company
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierId
          in: path
          description: The public ID of the supplier (SupplierPublicId UUID)
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Supplier_REST_API_Supplier'
        required: true
      responses:
        '200':
          description: The updated supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_SupplierSaved'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/subcontractor:
    get:
      tags:
        - subcontractor
      summary: Get all subcontractors
      description: Returns a cursor-paginated page of subcontractors for a given company.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: cursor
          in: query
          description: >
            Page token from a previous response's `pagination.nextCursor`. Omit for

            the first page.

          required: false
          schema:
            type: string
            format: uuid
        - name: limit
          in: query
          description: Maximum number of subcontractors to return on this page.
          required: false
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 1
            type: integer
            format: int32
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Paginated list of subcontractors
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_Subcontractors'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
    put:
      tags:
        - subcontractor
      summary: Create a new subcontractor
      description: Creates a new subcontractor for a given company
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Supplier_REST_API_SubcontractorWriteable'
        required: true
      responses:
        '201':
          description: The created subcontractor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_SubcontractorReadable'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/subcontractor/{subcontractorId}:
    post:
      tags:
        - subcontractor
      summary: Update subcontractor by ID
      description: Updates an existing subcontractor by its public ID for a given company
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: subcontractorId
          in: path
          description: The public ID of the subcontractor (SubcontractorPublicId UUID)
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Supplier_REST_API_SubcontractorWriteable'
        required: true
      responses:
        '200':
          description: The updated subcontractor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_SubcontractorReadable'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/{supplierInvoiceId}:
    get:
      tags:
        - supplier-invoice
      summary: Get supplier invoice by ID
      description: Returns a single supplier invoice by its ID
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: The supplier invoice
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoice'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
    post:
      tags:
        - supplier-invoice
      summary: Update a supplier invoice
      description: Updates an existing supplier invoice by ID
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoiceWriteable'
        required: true
      responses:
        '200':
          description: The updated supplier invoice ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/{supplierInvoiceId}/pdf:
    get:
      tags:
        - supplier-invoice
      summary: Get PDF for a supplier invoice
      description: Returns the PDF document for a supplier invoice
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: The PDF document
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/account/{accountId}:
    get:
      tags:
        - supplier-invoice
      summary: Get supplier invoice by account ID
      description: Returns the supplier invoice associated with the given account ID
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: accountId
          in: path
          description: The supplier invoice account ID
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: The supplier invoice
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoice'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/foreign-id/{foreignId}:
    get:
      tags:
        - supplier-invoice
      summary: Get supplier invoices by foreign ID
      description: Returns supplier invoices matching the given foreign ID
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: foreignId
          in: path
          description: The foreign ID
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        '200':
          description: List of matching supplier invoices
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoice'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice:
    get:
      tags:
        - supplier-invoice
      summary: Get supplier invoices
      description: Returns supplier invoices with optional filters and pagination
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: startInvoiceDate
          in: query
          description: Start of invoice date range (YYYY-MM-DD)
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
        - name: endInvoiceDate
          in: query
          description: End of invoice date range (YYYY-MM-DD)
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
        - name: supplierId
          in: query
          description: Filter by supplier public ID (SupplierPublicId UUID)
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: uuid
        - name: offset
          in: query
          description: Pagination offset
          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
        - name: limit
          in: query
          description: Maximum number of results
          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Paginated list of supplier invoices
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Supplier_REST_API_SupplierInvoicesResponse
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
    put:
      tags:
        - supplier-invoice
      summary: Create a new supplier invoice
      description: Creates a new supplier invoice
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoiceWriteable'
        required: true
      responses:
        '201':
          description: The created supplier invoice ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/po-nr/{poNr}:
    get:
      tags:
        - supplier-invoice
      summary: Get supplier invoices by purchase order number
      description: Returns supplier invoices matching the given PO number
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: poNr
          in: path
          description: The purchase order number
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        '200':
          description: List of matching supplier invoices
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoice'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/certifiable:
    get:
      tags:
        - supplier-invoice
      summary: Get supplier invoices pending certification
      description: Returns supplier invoices that are pending certification
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: offset
          in: query
          description: Pagination offset
          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
        - name: limit
          in: query
          description: Maximum number of results
          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Paginated list of certifiable supplier invoices
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Supplier_REST_API_SupplierInvoicesResponse
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/payable:
    get:
      tags:
        - supplier-invoice
      summary: Get supplier invoices pending payment
      description: Returns supplier invoices that are pending payment
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: offset
          in: query
          description: Pagination offset
          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
        - name: limit
          in: query
          description: Maximum number of results
          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Paginated list of payable supplier invoices
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Supplier_REST_API_SupplierInvoicesResponse
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/{supplierInvoiceId}/certify:
    post:
      tags:
        - supplier-invoice
      summary: Certify a supplier invoice
      description: Certifies a supplier invoice
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: The certified supplier invoice ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/{supplierInvoiceId}/pay/{amount}:
    post:
      tags:
        - supplier-invoice
      summary: Pay a supplier invoice
      description: Sends a payment for a supplier invoice
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: amount
          in: path
          description: Payment amount in cents
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: The paid supplier invoice ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/{supplierInvoiceId}/pay/{amount}/date/{date}:
    post:
      tags:
        - supplier-invoice
      summary: Pay a supplier invoice on a specific date
      description: Sends a payment for a supplier invoice on a specified date
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: amount
          in: path
          description: Payment amount in cents
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int64
        - name: date
          in: path
          description: Payment date (YYYY-MM-DD)
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: date
      responses:
        '200':
          description: The paid supplier invoice ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/{supplierInvoiceId}/payusingcredit/{creditSupplierInvoiceId}:
    post:
      tags:
        - supplier-invoice
      summary: Pay a supplier invoice with a credit invoice
      description: Pays a supplier invoice using a credit invoice
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: creditSupplierInvoiceId
          in: path
          description: The credit supplier invoice ID
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: The paid supplier invoice ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/file:
    put:
      tags:
        - supplier-invoice
      summary: Upload a supplier invoice PDF
      description: Uploads a PDF file to create a supplier invoice
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: interpret
          in: query
          description: Whether to interpret the PDF content
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Supplier_REST_API_FileUpload'
        required: true
      responses:
        '201':
          description: The created supplier invoice file ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/{supplierInvoiceId}/setpayee:
    post:
      tags:
        - supplier-invoice
      summary: Update payee on a supplier invoice
      description: Sets the payee information on a supplier invoice
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoicePayee'
        required: true
      responses:
        '200':
          description: The updated supplier invoice ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/{supplierInvoiceId}/selfinvoicerelations:
    post:
      tags:
        - supplier-invoice
      summary: Update self-billing references
      description: Updates the self-billing (self-invoice) references on a supplier invoice
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Supplier_REST_API_ClientInvoiceRelation'
        required: true
      responses:
        '200':
          description: The updated supplier invoice ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/{supplierInvoiceId}/cancel:
    post:
      tags:
        - supplier-invoice
      summary: Cancel pending payments
      description: Cancels all pending payments on a supplier invoice
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: The supplier invoice ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/{supplierInvoiceId}/approve:
    post:
      tags:
        - supplier-invoice
      summary: Approve or deny a supplier invoice
      description: Approves or denies a supplier invoice
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Supplier_REST_API_SupplierInvoiceApprovalRequest
        required: true
      responses:
        '200':
          description: The approved supplier invoice ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/company/{companyId}/supplier/invoice/{supplierInvoiceId}/attachment/{attachmentName}:
    post:
      tags:
        - supplier-invoice
      summary: Add an attachment to a supplier invoice
      description: Adds a document attachment to a supplier invoice
      parameters:
        - name: companyId
          in: path
          description: The ID of the company (UUID).
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: supplierInvoiceId
          in: path
          description: The ID of the supplier invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: attachmentName
          in: path
          description: Name of the attachment file
          required: true
          style: simple
          explode: false
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Supplier_REST_API_FileUpload'
        required: true
      responses:
        '201':
          description: The supplier invoice ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier_REST_API_IdResponse'
        default:
          $ref: '#/components/responses/Supplier_REST_API_DefaultError'
  /v1/companies/{companyId}/clients:
    get:
      summary: Get clients
      description: >
        `active` and `foreignId` refine this list query and may be combined with each other and

        with pagination/timestamp filters. When `foreignId` is set the free-text `query` parameter

        is ignored; `limit` still applies to the foreign-id matches.

      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: query
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: foreignId
          in: query
          description: >
            Restrict the result to entities with this foreign ID. How it combines

            with the other parameters is endpoint-specific — see the operation

            description.

          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: active
          in: query
          description: When true, restrict the result to active entities only.
          required: false
          style: form
          explode: true
          schema:
            type: boolean
        - name: cursor
          in: query
          description: >
            Page token from a previous response's `pagination.nextCursor`. Omit for

            the first page.

          required: false
          schema:
            type: string
            format: uuid
        - name: limit
          in: query
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Clients
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Clients'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
    post:
      summary: Create client
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Client_REST_API_Client'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Client'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-delivery-types:
    get:
      summary: Get client delivery types
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Supported delivery types
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientDeliveryTypes'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/clients/{clientId}:
    get:
      summary: Get client by ID
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Client
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Client'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
    put:
      summary: Update client
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Client_REST_API_Client'
        required: true
      responses:
        '200':
          description: Saved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Client'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-agreements:
    get:
      summary: Get the latest revision of all client agreements
      description: >
        `clientId` and `foreignId` are agreement lookups (they may be combined with each other to

        narrow a client's agreements by foreign id) but cannot be combined with `offset`/`limit` or

        the `createdAfter`/`createdBefore`/`updatedAfter`/`updatedBefore` range filters, which apply

        only to the unfiltered list. Conflicting combinations are rejected with 400.

      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientId
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: uuid
        - name: foreignId
          in: query
          description: >
            Restrict the result to entities with this foreign ID. How it combines

            with the other parameters is endpoint-specific — see the operation

            description.

          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: offset
          in: query
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
        - name: limit
          in: query
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Client agreements
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientAgreements'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
    post:
      summary: Create client agreement
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Client_REST_API_ClientAgreement'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientAgreement'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-agreements/{agreementId}:
    delete:
      summary: Delete client agreement
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: agreementId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Deleted'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-agreements/{agreementId}/revisions:
    get:
      summary: Get all revisions of a client agreement by ID
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: agreementId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Client agreement revisions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientAgreements'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
    post:
      summary: Create a new revision of a client agreement
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: agreementId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Client_REST_API_ClientAgreement'
        required: true
      responses:
        '200':
          description: Revision created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientAgreement'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-agreements/{agreementId}/revisions/{revisionNr}:
    get:
      summary: Get a client agreement by revision number
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: agreementId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: revisionNr
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Client agreement revision
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientAgreement'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-agreements/{agreementId}/revisions/latest:
    get:
      summary: Get the latest revision of a client agreement by ID
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: agreementId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Latest client agreement revision
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientAgreement'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-invoice-templates:
    get:
      summary: Get client invoice templates
      description: >
        When `foreignId` is supplied, returns only the templates with that foreign ID; otherwise

        returns all templates. No other filters apply to this endpoint.

      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: foreignId
          in: query
          description: >
            Restrict the result to entities with this foreign ID. How it combines

            with the other parameters is endpoint-specific — see the operation

            description.

          required: false
          style: form
          explode: true
          schema:
            type: string
      responses:
        '200':
          description: Client invoice templates
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientInvoiceTemplates'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-invoices:
    get:
      summary: Get client invoices
      description: >
        `rowId`, `foreignId`, and the `lastPaymentDateLower`/`lastPaymentDateUpper` range are

        three mutually-exclusive lookup modes. At most one may be supplied, and none may be

        combined with the general filters (`query`, `filter`, `invoiceDateLower`/`invoiceDateUpper`,

        `clientId`, `projectId`, `createdAfter`/`createdBefore`/`updatedAfter`/`updatedBefore`).

        `offset`/`limit` apply only to the general list and the `lastPaymentDate` lookup; the

        `rowId` and `foreignId` lookups do not support them. Conflicting combinations are rejected

        with 400.

      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: query
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: filter
          in: query
          description: >-
            Supported values: all, certified, certifiable, sendable, notPaid, paid
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: foreignId
          in: query
          description: >
            Restrict the result to entities with this foreign ID. How it combines

            with the other parameters is endpoint-specific — see the operation

            description.

          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: rowId
          in: query
          description: >
            Look up the single invoice containing this invoice row (at most one is

            returned). This is a standalone lookup mode: it cannot be combined with

            foreignId, the lastPaymentDate range, offset/limit, or the general

            filters (query/filter/invoiceDate/clientId/projectId/created/updated) —

            such combinations are rejected with 400.

          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
        - name: invoiceDateLower
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: invoiceDateUpper
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: lastPaymentDateLower
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: lastPaymentDateUpper
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: clientId
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: uuid
        - name: projectId
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
        - name: ignoreFiles
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: boolean
        - name: offset
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
        - name: limit
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: integer
            format: int32
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Client invoices
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientInvoices'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
    post:
      summary: Create client invoice
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: defaultDimensionsFromProduct
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: true
        - name: defaultDimensionsFromClient
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
        - name: requestId
          in: header
          required: false
          style: simple
          explode: false
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Client_REST_API_ClientInvoice'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientInvoice'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-invoices/{clientInvoiceId}:
    get:
      summary: Get client invoice by ID
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientInvoiceId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: ignoreFiles
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: boolean
      responses:
        '200':
          description: Client invoice
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientInvoice'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
    put:
      summary: Update client invoice
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientInvoiceId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: defaultDimensionsFromProduct
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: true
        - name: defaultDimensionsFromClient
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Client_REST_API_ClientInvoice'
        required: true
      responses:
        '200':
          description: Saved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientInvoice'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
    delete:
      summary: Delete client invoice
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientInvoiceId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Deleted'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-invoices/{clientInvoiceId}/approve:
    post:
      summary: Approve client invoice
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientInvoiceId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Ok'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-invoices/{clientInvoiceId}/certify:
    post:
      summary: Certify client invoice
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientInvoiceId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Ok'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-invoices/{clientInvoiceId}/send:
    post:
      summary: Send client invoice
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientInvoiceId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: deliveryType
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
            enum:
              - MAIL
              - EDI
              - EMAIL
              - MANUALLY
              - SVEA
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Ok'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-invoices/{clientInvoiceId}/credits:
    post:
      summary: Create client invoice credit draft
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientInvoiceId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: deleteRowReferenceWhenCredit
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Client invoice credit draft
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_ClientInvoice'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-invoices/{clientInvoiceId}/payments:
    post:
      summary: Register payment of a client invoice
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientInvoiceId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Client_REST_API_ClientInvoicePayment'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Created'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-invoices/{clientInvoiceId}/comments:
    post:
      summary: Create comment on client invoice
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientInvoiceId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Client_REST_API_ClientInvoiceComment'
        required: true
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Ok'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-invoices/{clientInvoiceId}/attachments:
    post:
      summary: Add client invoice attachment
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientInvoiceId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Client_REST_API_ClientInvoiceFile'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Created'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/client-invoices/{clientInvoiceId}/pdf:
    get:
      summary: Get client invoice PDF
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: clientInvoiceId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Client invoice PDF
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/products:
    get:
      summary: Get products
      description: >
        `foreignId` is a lookup that returns the (active) products with that foreign id; it may be

        combined with `active` but not with `cursor`/`limit` or the

        `createdAfter`/`createdBefore`/`updatedAfter`/`updatedBefore` range filters, which apply only

        to the paged list. Conflicting combinations are rejected with 400.

      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: foreignId
          in: query
          description: >
            Restrict the result to entities with this foreign ID. How it combines

            with the other parameters is endpoint-specific — see the operation

            description.

          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: active
          in: query
          description: When true, restrict the result to active entities only.
          required: false
          style: form
          explode: true
          schema:
            type: boolean
        - name: cursor
          in: query
          description: >
            Page token from a previous response's `pagination.nextCursor`. Omit for

            the first page.

          required: false
          schema:
            type: string
            format: uuid
        - name: limit
          in: query
          required: false
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 0
            type: integer
            format: int32
        - name: createdAfter
          in: query
          description: >-
            Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
          required: false
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          description: >-
            Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedAfter
          in: query
          description: >-
            Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
        - name: updatedBefore
          in: query
          description: >-
            Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Products
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Products'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
    post:
      summary: Create product
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Client_REST_API_Product'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Product'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/products/{productId}:
    get:
      summary: Get product by ID
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: productId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Product
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Product'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
    put:
      summary: Update product
      parameters:
        - name: companyId
          in: path
          description: The company UUID.
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: productId
          in: path
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Client_REST_API_Product'
        required: true
      responses:
        '200':
          description: Saved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client_REST_API_Product'
        default:
          $ref: '#/components/responses/Client_REST_API_DefaultError'
      tags:
        - kleer-group_engineering_team-bank_client-rest-service_other
  /v1/companies/{companyId}/revenue:
    put:
      tags:
        - revenue
      summary: Create a new revenue
      description: Creates a new revenue record for a given company
      parameters:
        - name: companyId
          in: path
          description: The ID of the company
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: defaultDimensionsFromProduct
          in: query
          description: Whether to use default dimensions from product
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: true
        - name: defaultDimensionsFromClient
          in: query
          description: Whether to use default dimensions from client
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Revenue_REST_API_RevenueCreate'
        required: true
      responses:
        '200':
          description: Revenue created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Revenue_REST_API_Created'
        default:
          $ref: '#/components/responses/Revenue_REST_API_DefaultError'
  /v1/companies/{companyId}/revenue/update:
    put:
      tags:
        - revenue
      summary: Update an existing revenue
      description: >-
        Updates an existing revenue record. Provide the full revenue data along with a message explaining the reason for the update.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: defaultDimensionsFromProduct
          in: query
          description: Whether to use default dimensions from product
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: true
        - name: defaultDimensionsFromClient
          in: query
          description: Whether to use default dimensions from client
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Revenue_REST_API_RevenueUpdate'
        required: true
      responses:
        '200':
          description: Revenue updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Revenue_REST_API_Created'
        default:
          $ref: '#/components/responses/Revenue_REST_API_DefaultError'
  /v1/companies/{companyId}/revenue/{revenueId}:
    get:
      tags:
        - revenue
      summary: Get revenue by ID
      description: Retrieves a specific revenue record by its ID for a given company
      parameters:
        - name: companyId
          in: path
          description: The ID of the company
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: revenueId
          in: path
          description: The ID of the revenue to retrieve
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Successfully retrieved the revenue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Revenue_REST_API_Revenue'
        default:
          $ref: '#/components/responses/Revenue_REST_API_DefaultError'
  /v1/companies/{companyId}/revenue/{revenueId}/consolidate-credit:
    post:
      tags:
        - revenue
      summary: Consolidate a credit
      description: Consolidates a credit revenue with its associated debit
      parameters:
        - name: companyId
          in: path
          description: The ID of the company
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: revenueId
          in: path
          description: The ID of the credit revenue to consolidate
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Credit consolidated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Revenue_REST_API_Ok'
        default:
          $ref: '#/components/responses/Revenue_REST_API_DefaultError'
    delete:
      tags:
        - revenue
      summary: Delete a consolidated credit
      description: Deletes the consolidation of a credit revenue (idempotent operation)
      parameters:
        - name: companyId
          in: path
          description: The ID of the company
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: revenueId
          in: path
          description: The ID of the credit revenue
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Consolidated credit deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Revenue_REST_API_Ok'
        default:
          $ref: '#/components/responses/Revenue_REST_API_DefaultError'
  /v1/companies/{companyId}/revenue/ledger:
    get:
      tags:
        - revenue
      summary: Find all revenue ledgers
      description: Retrieves all revenue ledgers for a company with pagination
      parameters:
        - name: companyId
          in: path
          description: The ID of the company
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: offset
          in: query
          description: Pagination offset (0-based)
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
            default: 0
        - name: limit
          in: query
          description: Maximum number of ledgers to return
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            format: int32
            default: 100
      responses:
        '200':
          description: Successfully retrieved the ledgers
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Revenue_REST_API_RevenueLedgersResponse'
        default:
          $ref: '#/components/responses/Revenue_REST_API_DefaultError'
  /v1/companies/{companyId}/revenue/ledger/{ledgerId}/revenue/external-id/{externalId}:
    get:
      tags:
        - revenue
      summary: Get revenue by external ID
      description: Retrieves a revenue record by its external ID within a specific ledger
      parameters:
        - name: companyId
          in: path
          description: The ID of the company
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: ledgerId
          in: path
          description: The ID of the ledger
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: externalId
          in: path
          description: The external ID of the revenue to retrieve
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved the revenue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Revenue_REST_API_Revenue'
        default:
          $ref: '#/components/responses/Revenue_REST_API_DefaultError'
  /v1/companies/{companyId}/revenue/ledger/{ledgerId}/revenues:
    get:
      tags:
        - revenue
      summary: Find revenues in a ledger
      description: Retrieves revenues for a specific ledger with pagination and filtering
      parameters:
        - name: companyId
          in: path
          description: The ID of the company
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: ledgerId
          in: path
          description: The ID of the ledger
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
        - name: filter
          in: query
          description: Filter to apply to the revenues
          required: false
          style: form
          explode: true
          schema:
            type: string
            default: all
            enum:
              - all
              - notPaid
              - paid
        - name: offset
          in: query
          description: Pagination offset (0-based)
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
            default: 0
        - name: limit
          in: query
          description: Maximum number of revenues to return
          required: false
          style: form
          explode: true
          schema:
            maximum: 100
            minimum: 1
            type: integer
            format: int32
            default: 100
        - name: lowerDate
          in: query
          description: Lower bound date filter (inclusive)
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
        - name: upperDate
          in: query
          description: Upper bound date filter (inclusive)
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
      responses:
        '200':
          description: Successfully retrieved the revenues
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Revenue_REST_API_RevenuesResponse'
        default:
          $ref: '#/components/responses/Revenue_REST_API_DefaultError'
  /v1/companies/{companyId}/revenue/fuzzyconsolidation:
    post:
      tags:
        - revenue
      summary: Create fuzzy consolidation
      description: >-
        Creates a fuzzy consolidation between revenues and bank transactions. All given bank transactions and revenues will be fully consolidated.
      parameters:
        - name: companyId
          in: path
          description: The ID of the company
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Revenue_REST_API_RevenueFuzzyConsolidation'
        required: true
      responses:
        '200':
          description: Fuzzy consolidation created successfully
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Revenue_REST_API_RevenueFuzzyConsolidationResult
        default:
          $ref: '#/components/responses/Revenue_REST_API_DefaultError'
  /v1/company/{companyId}/bank/account:
    get:
      tags:
        - bank
      summary: Get active bank accounts
      description: >-
        Returns a list of active bank accounts that have a balance account number. These are considered "confirmed" bank accounts.
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: List of active bank accounts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bank_REST_API_BankAccounts'
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
  /v1/company/{companyId}/bank/transactions/account/{accountId}:
    get:
      tags:
        - bank
      summary: Get bank transactions
      description: >-
        Returns a paginated list of bank transactions for a specific bank account
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: accountId
          in: path
          description: The ID of the bank account
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int64
        - name: ignoreFiles
          in: query
          description: Whether to exclude file data from the response
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
        - name: dateLower
          in: query
          description: Lower bound for transaction date filter (inclusive)
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
        - name: dateUpper
          in: query
          description: Upper bound for transaction date filter (inclusive)
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
        - name: offset
          in: query
          description: The offset into the full result set (0-indexed)
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
            default: 0
        - name: limit
          in: query
          description: Maximum number of transactions to return
          required: false
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 1
            type: integer
            format: int32
            default: 1000
      responses:
        '200':
          description: Paginated list of bank transactions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bank_REST_API_BankTransactions'
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
  /v1/company/{companyId}/bank/transactions/account/{accountId}/open:
    get:
      tags:
        - bank
      summary: Get open bank transactions
      description: >-
        Returns a paginated list of open (unfinished) bank transactions for a specific bank account
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: accountId
          in: path
          description: The ID of the bank account
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int64
        - name: ignoreFiles
          in: query
          description: Whether to exclude file data from the response
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
        - name: offset
          in: query
          description: The offset into the full result set (0-indexed)
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
            default: 0
        - name: limit
          in: query
          description: Maximum number of transactions to return
          required: false
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 1
            type: integer
            format: int32
            default: 1000
      responses:
        '200':
          description: Paginated list of open bank transactions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bank_REST_API_BankTransactions'
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
  /v1/company/{companyId}/bank/transactions/account/{accountId}/finished:
    get:
      tags:
        - bank
      summary: Get finished bank transactions
      description: >-
        Returns a paginated list of finished bank transactions for a specific bank account
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: accountId
          in: path
          description: The ID of the bank account
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int64
        - name: ignoreFiles
          in: query
          description: Whether to exclude file data from the response
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
        - name: dateLower
          in: query
          description: Lower bound for transaction date filter (inclusive)
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
        - name: dateUpper
          in: query
          description: Upper bound for transaction date filter (inclusive)
          required: false
          style: form
          explode: true
          schema:
            type: string
            format: date
        - name: offset
          in: query
          description: The offset into the full result set (0-indexed)
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
            default: 0
        - name: limit
          in: query
          description: Maximum number of transactions to return
          required: false
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 1
            type: integer
            format: int32
            default: 1000
      responses:
        '200':
          description: Paginated list of finished bank transactions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bank_REST_API_BankTransactions'
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
  /v1/company/{companyId}/bank/transactions/account/{accountId}/deleted:
    get:
      tags:
        - bank
      summary: Get deleted bank transactions
      description: >-
        Returns a paginated list of deleted bank transactions for a specific bank account
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: accountId
          in: path
          description: The ID of the bank account
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int64
        - name: ignoreFiles
          in: query
          description: Whether to exclude file data from the response
          required: false
          style: form
          explode: true
          schema:
            type: boolean
            default: false
        - name: offset
          in: query
          description: The offset into the full result set (0-indexed)
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
            default: 0
        - name: limit
          in: query
          description: Maximum number of transactions to return
          required: false
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 1
            type: integer
            format: int32
            default: 1000
      responses:
        '200':
          description: Paginated list of deleted bank transactions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bank_REST_API_BankTransactions'
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
  /v1/company/{companyId}/bank/transactions:
    post:
      tags:
        - bank
      summary: Create a bank transaction
      description: >-
        Creates a manual bank transaction with optional file attachments (PDF files will be merged if multiple are provided).
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Bank_REST_API_CreateBankTransaction'
        required: true
      responses:
        '200':
          description: The created bank transaction
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bank_REST_API_BankTransaction'
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
  /v1/company/{companyId}/bank/validate:
    post:
      tags:
        - bank
      summary: Validate bank information
      description: >-
        Validates bank account information (BIC/IBAN or supplier invoice account) according to internal logic.
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Bank_REST_API_BankInformationValidateRequest
        required: true
      responses:
        '200':
          description: Validation result
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Bank_REST_API_BankInformationValidateResult
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
  /v1/company/{companyId}/bank/transaction/{transactionId}/connect/clientinvoice/{invoiceId}:
    post:
      tags:
        - bank
      summary: Connect transaction to client invoice
      description: >-
        Creates a distribution connecting a bank transaction to a client invoice.
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: transactionId
          in: path
          description: The ID of the bank transaction
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int64
        - name: invoiceId
          in: path
          description: The ID of the client invoice
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Distribution created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bank_REST_API_Ok'
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
  /v1/company/{companyId}/bank/transaction/{transactionId}/consolidate/revenues:
    post:
      tags:
        - bank
      summary: Consolidate revenues for a transaction
      description: >-
        Creates distributions consolidating revenues for a bank transaction. Optionally validates full consolidation.
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: transactionId
          in: path
          description: The ID of the bank transaction
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Bank_REST_API_BankTransactionConsolidateRevenues
        required: true
      responses:
        '200':
          description: Revenues consolidated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bank_REST_API_Ok'
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
  /v1/company/{companyId}/bank/transaction/{transactionId}/distributions:
    get:
      tags:
        - bank
      summary: Get distributions for a transaction
      description: Returns all distributions associated with a bank transaction.
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: transactionId
          in: path
          description: The ID of the bank transaction
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: List of bank transaction distributions
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Bank_REST_API_BankTransactionDistributions
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
  /v1/company/{companyId}/bank/transaction/distributions/{transactionDitributionId}:
    delete:
      tags:
        - bank
      summary: Delete a single transaction distribution
      description: Deletes a specific bank transaction distribution by its ID.
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: transactionDitributionId
          in: path
          description: The ID of the bank transaction distribution
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Distribution deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bank_REST_API_Deleted'
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
  /v1/company/{companyId}/bank/transactions/{transactionId}/distributions:
    delete:
      tags:
        - bank
      summary: Delete all distributions for a transaction
      description: Deletes all distributions associated with a bank transaction.
      parameters:
        - name: companyId
          in: path
          description: The company UUID
          required: true
          style: simple
          explode: false
          schema:
            type: string
            format: uuid
        - name: transactionId
          in: path
          description: The ID of the bank transaction
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Distributions deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bank_REST_API_Deleted'
        default:
          $ref: '#/components/responses/Bank_REST_API_DefaultError'
components:
  schemas:
    Exchange_Rate_REST_API_ExchangeRate:
      required:
        - fromCurrency
        - rate
        - toCurrency
      type: object
      properties:
        fromCurrency:
          type: string
        toCurrency:
          type: string
        rate:
          type: string
    Exchange_Rate_REST_API_ProblemDetail:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          format: int32
        detail:
          type: string
        instance:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        traceId:
          type: string
          description: Trace ID for debugging
      additionalProperties: true
      description: >
        A machine-readable format for specifying errors in HTTP API responses based on https://www.rfc-editor.org/rfc/rfc7807

    Company_REST_API_AccessibleCompanies:
      required:
        - data
        - pagination
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Company_REST_API_CompanyInformation'
        pagination:
          $ref: '#/components/schemas/Company_REST_API_Pagination'
    Company_REST_API_CompanyInformation:
      required:
        - accountingCurrency
        - id
        - name
        - orgno
        - supplierInvoiceEmail
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        orgno:
          type: string
        accountingCurrency:
          type: string
        bankgiro:
          type: integer
          format: int64
        supplierInvoiceEmail:
          type: string
    Company_REST_API_CompanyMessageWritable:
      required:
        - files
        - message
        - subject
      type: object
      properties:
        subject:
          type: string
        message:
          type: string
        files:
          type: array
          items:
            $ref: '#/components/schemas/Company_REST_API_CompanyMessageFile'
    Company_REST_API_CompanyMessageFile:
      required:
        - data
        - filename
      type: object
      properties:
        filename:
          type: string
        data:
          type: string
          format: byte
    Company_REST_API_CompanyMessageAck:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Company_REST_API_CompanyImportRequest:
      required:
        - data
      type: object
      properties:
        data:
          type: string
          format: byte
    Company_REST_API_CompanyImportResult:
      required:
        - importedCompanies
      type: object
      properties:
        importedCompanies:
          type: array
          items:
            $ref: '#/components/schemas/Company_REST_API_ImportedCompany'
    Company_REST_API_ImportedCompany:
      required:
        - name
      type: object
      properties:
        name:
          type: string
    Company_REST_API_ProblemDetail:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          format: int32
        detail:
          type: string
        instance:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        traceId:
          type: string
          description: Trace ID for debugging
      additionalProperties: true
      description: >
        A machine-readable format for specifying errors in HTTP API responses based on https://www.rfc-editor.org/rfc/rfc7807

    Company_REST_API_Pagination:
      required:
        - limit
      type: object
      properties:
        limit:
          type: integer
          description: The page-size limit used to produce this page.
          format: int32
        nextCursor:
          type: string
          description: Token to fetch the next page; absent on the final page.
          format: uuid
      description: >
        Cursor-pagination metadata returned with a paged collection. The presence

        of `nextCursor` is the "more rows exist" signal — pass it as the `cursor`

        query parameter on the next request to fetch the following page. Absent

        means this is the final page.

    Project_REST_API_ClientProjects:
      required:
        - data
        - pagination
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_ClientProject'
        pagination:
          $ref: '#/components/schemas/Project_REST_API_Pagination'
      description: Paginated list of client projects
    Project_REST_API_ClientProject:
      required:
        - active
        - activities
        - allActivities
        - allUsers
        - budgetAmount
        - budgetHours
        - comment
        - createdAt
        - currencyType
        - defaultNotes
        - fixedPrice
        - fixedPricePlannedInvoices
        - id
        - incomingInvoicedAmount
        - incomingInvoicedVatAmount
        - leads
        - name
        - number
        - status
        - updatedAt
        - users
        - writeOffs
      type: object
      properties:
        id:
          type: string
          format: uuid
        clientId:
          type: string
          format: uuid
        brokerClientId:
          type: string
          format: uuid
        fixedPrice:
          type: boolean
        number:
          type: string
        name:
          type: string
        currencyType:
          type: string
        yourReference:
          type: string
        ourReferenceUserId:
          type: string
          format: uuid
        deliveryType:
          type: string
        defaultNotes:
          type: string
        email:
          type: string
        comment:
          type: string
        paymentDays:
          type: integer
          format: int32
        poNr:
          type: string
        active:
          type: boolean
        status:
          type: string
        budgetHours:
          type: integer
          format: int64
        budgetAmount:
          type: integer
          format: int64
        incomingInvoicedAmount:
          type: integer
          format: int64
        incomingInvoicedVatAmount:
          type: integer
          format: int64
        allActivities:
          type: boolean
        allUsers:
          type: boolean
        activities:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_ClientProjectActivity'
        users:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_ClientProjectUser'
        leads:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_Lead'
        fixedPricePlannedInvoices:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_FixedPricePlannedInvoice'
        writeOffs:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_WriteOff'
        dimensionEntryId:
          type: string
          format: uuid
        openingDate:
          type: string
        closingDate:
          type: string
        updatedUserKey:
          type: string
        updatedDate:
          type: string
        createdAt:
          type: string
          description: >-
            When the client project was created (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
        updatedAt:
          type: string
          description: >-
            When the client project was last updated (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
      description: Client project information
    Project_REST_API_ClientProjectActivity:
      required:
        - activityId
      type: object
      properties:
        activityId:
          type: string
          format: uuid
        price:
          type: integer
          format: int64
        supplierPrice:
          type: integer
          format: int64
      description: Project activity assignment
    Project_REST_API_ClientProjectUser:
      required:
        - activities
        - userId
      type: object
      properties:
        userId:
          type: string
          format: uuid
        activities:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_ClientProjectUserActivity'
      description: Project user assignment
    Project_REST_API_ClientProjectUserActivity:
      required:
        - activityId
      type: object
      properties:
        activityId:
          type: string
          format: uuid
        price:
          type: integer
          format: int64
        supplierPrice:
          type: integer
          format: int64
        dimensionUserPercentage:
          type: string
      description: User-specific activity assignment within a project
    Project_REST_API_Lead:
      required:
        - userId
      type: object
      properties:
        userId:
          type: string
          format: uuid
      description: Project lead
    Project_REST_API_FixedPricePlannedInvoice:
      required:
        - id
        - invoiceDate
        - rows
      type: object
      properties:
        id:
          type: integer
          format: int32
        invoiceDate:
          type: string
        clientInvoiceId:
          type: integer
          format: int32
        rows:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_FixedPricePlannedInvoiceRow'
      description: Fixed price planned invoice
    Project_REST_API_FixedPricePlannedInvoiceRow:
      required:
        - description
        - price
        - quantity
        - unit
      type: object
      properties:
        id:
          type: integer
          format: int32
        productId:
          type: string
          format: uuid
        quantity:
          type: string
        unit:
          type: string
        price:
          type: integer
          format: int64
        description:
          type: string
      description: Row within a fixed price planned invoice
    Project_REST_API_WriteOff:
      required:
        - accountingAmount
        - amount
        - date
        - description
      type: object
      properties:
        date:
          type: string
        amount:
          type: integer
          format: int64
        accountingAmount:
          type: integer
          format: int64
        description:
          type: string
      description: Project write-off
    Project_REST_API_Activities:
      required:
        - activities
      type: object
      properties:
        activities:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_Activity'
      description: List of activities
    Project_REST_API_Activity:
      required:
        - createdAt
        - description
        - id
        - mandatoryChildWhenReporting
        - name
        - updatedAt
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        description:
          type: string
        price:
          type: integer
          format: int64
        invoiceProductId:
          type: string
          format: uuid
        mandatoryChildWhenReporting:
          type: boolean
        createdAt:
          type: string
          description: >-
            When the activity was created (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
        updatedAt:
          type: string
          description: >-
            When the activity was last updated (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
      description: Activity information
    Project_REST_API_InternalHourlyCosts:
      required:
        - internalHourlyCosts
      type: object
      properties:
        internalHourlyCosts:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_InternalHourlyCost'
      description: List of internal hourly costs
    Project_REST_API_InternalHourlyCost:
      required:
        - price
        - startDate
      type: object
      properties:
        activityId:
          type: string
          format: uuid
        price:
          type: integer
          format: int64
        startDate:
          type: string
      description: Internal hourly cost entry for a user
    Project_REST_API_ProjectCreated:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          format: uuid
    Project_REST_API_ProjectSaved:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          format: uuid
    Project_REST_API_SavedId:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Project_REST_API_ClientProjectWritable:
      required:
        - activities
        - allActivities
        - allUsers
        - budgetAmount
        - budgetHours
        - comment
        - currencyType
        - fixedPrice
        - incomingInvoicedAmount
        - incomingInvoicedVatAmount
        - leads
        - name
        - users
      type: object
      properties:
        clientId:
          type: string
          format: uuid
        brokerClientId:
          type: string
          format: uuid
        fixedPrice:
          type: boolean
        name:
          type: string
        number:
          type: string
        currencyType:
          type: string
        yourReference:
          type: string
        ourReferenceUserId:
          type: string
          format: uuid
        deliveryType:
          type: string
        defaultNotes:
          type: string
        comment:
          type: string
        paymentDays:
          type: integer
          format: int32
        poNr:
          type: string
        budgetHours:
          type: integer
          format: int64
        budgetAmount:
          type: integer
          format: int64
        incomingInvoicedAmount:
          type: integer
          format: int64
        incomingInvoicedVatAmount:
          type: integer
          format: int64
        allActivities:
          type: boolean
        allUsers:
          type: boolean
        activities:
          type: array
          items:
            $ref: >-
              #/components/schemas/Project_REST_API_ClientProjectActivityWritable
        users:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_ClientProjectUserWritable'
        leads:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_LeadWritable'
        fixedPricePlannedInvoices:
          type: array
          items:
            $ref: >-
              #/components/schemas/Project_REST_API_FixedPricePlannedInvoiceWritable
        openingDate:
          type: string
        closingDate:
          type: string
        dimensionEntryId:
          type: string
          format: uuid
      description: Writable client project data
    Project_REST_API_ClientProjectActivityWritable:
      required:
        - activityId
      type: object
      properties:
        activityId:
          type: string
          format: uuid
        price:
          type: integer
          format: int64
        supplierPrice:
          type: integer
          format: int64
      description: Writable project activity assignment
    Project_REST_API_ClientProjectUserWritable:
      required:
        - activities
        - userId
      type: object
      properties:
        userId:
          type: string
          format: uuid
        activities:
          type: array
          items:
            $ref: >-
              #/components/schemas/Project_REST_API_ClientProjectUserActivityWritable
      description: Writable project user assignment
    Project_REST_API_ClientProjectUserActivityWritable:
      required:
        - activityId
      type: object
      properties:
        activityId:
          type: string
          format: uuid
        price:
          type: integer
          format: int64
        supplierPrice:
          type: integer
          format: int64
        dimensionUserPercentage:
          type: string
      description: Writable user-specific activity assignment within a project
    Project_REST_API_LeadWritable:
      required:
        - userId
      type: object
      properties:
        userId:
          type: string
          format: uuid
      description: Writable project lead
    Project_REST_API_FixedPricePlannedInvoiceWritable:
      required:
        - invoiceDate
        - rows
      type: object
      properties:
        id:
          type: integer
          format: int32
        invoiceDate:
          type: string
        rows:
          type: array
          items:
            $ref: >-
              #/components/schemas/Project_REST_API_FixedPricePlannedInvoiceRowWritable
      description: Writable fixed price planned invoice
    Project_REST_API_FixedPricePlannedInvoiceRowWritable:
      required:
        - description
        - price
        - quantity
        - unit
      type: object
      properties:
        id:
          type: integer
          format: int32
        productId:
          type: string
          format: uuid
        quantity:
          type: string
        unit:
          type: string
        price:
          type: integer
          format: int64
        description:
          type: string
      description: Writable row within a fixed price planned invoice
    Project_REST_API_InternalHourlyCostWritables:
      required:
        - internalHourlyCosts
      type: object
      properties:
        internalHourlyCosts:
          type: array
          items:
            $ref: '#/components/schemas/Project_REST_API_InternalHourlyCostWritable'
    Project_REST_API_InternalHourlyCostWritable:
      required:
        - startDate
      type: object
      properties:
        activityId:
          type: string
          format: uuid
        price:
          type: integer
          format: int64
        startDate:
          type: string
    Project_REST_API_ProblemDetail:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          format: int32
        detail:
          type: string
        instance:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        traceId:
          type: string
          description: Trace ID for debugging
      additionalProperties: true
      description: >
        A machine-readable format for specifying errors in HTTP API responses based on https://www.rfc-editor.org/rfc/rfc7807

    Project_REST_API_Pagination:
      required:
        - limit
      type: object
      properties:
        limit:
          type: integer
          description: The page-size limit used to produce this page.
          format: int32
        nextCursor:
          type: string
          description: Token to fetch the next page; absent on the final page.
          format: uuid
      description: >
        Cursor-pagination metadata returned with a paged collection. The presence

        of `nextCursor` is the "more rows exist" signal — pass it as the `cursor`

        query parameter on the next request to fetch the following page. Absent

        means this is the final page.

    Accounting_REST_API_Create-voucher:
      required:
        - comments
        - date
        - description
        - files
        - serie
        - transactions
      type: object
      properties:
        serie:
          type: string
        description:
          type: string
        comments:
          type: string
        date:
          type: string
          description: Transaction date (YYYY-MM-DD)
          format: date
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/Accounting_REST_API_Api-voucher-transaction'
        files:
          type: array
          items:
            $ref: '#/components/schemas/Accounting_REST_API_Api-voucher-file'
    Accounting_REST_API_Api-voucher-transaction:
      required:
        - account-nr
        - amount
      type: object
      properties:
        account-nr:
          type: integer
          format: int32
        vat-code:
          type: string
          description: >
            VAT code for this transaction, or null for none. If at least one transaction in the voucher specifies this field, VAT codes are applied explicitly for all transactions. If absent on all transactions, VAT codes are assigned automatically based on account number.

          nullable: true
        orgno:
          type: string
          description: Organisation number associated with this transaction
        amount:
          type: integer
          description: Amount in cents in the accounting currency
          format: int64
        dimensions:
          $ref: '#/components/schemas/Accounting_REST_API_Api-dimensions-distribution'
        currency-type:
          type: string
          description: >
            Currency the amount is specified in. The accounting amount will be determined using the exchange rate at the voucher date. Mutually exclusive with currency-amount.

        currency-amount:
          $ref: >-
            #/components/schemas/Accounting_REST_API_Api-explicit-currency-amount
    Accounting_REST_API_Api-dimensions-distribution:
      type: object
      properties:
        dimension-entry:
          type: array
          items:
            $ref: >-
              #/components/schemas/Accounting_REST_API_Api-dimension-distribution-entry
    Accounting_REST_API_Api-dimension-distribution-entry:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Dimension entry id
          format: int32
        percentage:
          type: number
          description: >-
            Distribution percentage as a decimal (e.g. 0.5 for 50%); defaults to 1 (100%) when absent
    Accounting_REST_API_Api-explicit-currency-amount:
      required:
        - amount
        - currency-type
      type: object
      properties:
        currency-type:
          type: string
        amount:
          type: integer
          description: Amount in cents
          format: int64
    Accounting_REST_API_Api-voucher-file:
      required:
        - data
        - filename
      type: object
      properties:
        filename:
          type: string
        data:
          type: string
          description: File content as base64-encoded string
          format: byte
    Accounting_REST_API_Api-dimension-entry-writeable:
      required:
        - active
        - description
        - name
      type: object
      properties:
        name:
          type: string
        foreign-id:
          type: string
        description:
          type: string
        start-date:
          type: string
          format: date
        end-date:
          type: string
          format: date
        active:
          type: boolean
    Accounting_REST_API_Api-dimensions:
      required:
        - data
        - pagination
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Accounting_REST_API_Api-dimension'
        pagination:
          $ref: '#/components/schemas/Accounting_REST_API_Pagination'
    Accounting_REST_API_Api-dimension:
      required:
        - active
        - createdAt
        - description
        - id
        - name
        - updatedAt
      type: object
      properties:
        id:
          type: string
          format: uuid
        foreign-id:
          type: string
        name:
          type: string
        description:
          type: string
        active:
          type: boolean
        createdAt:
          type: string
          description: >-
            When the dimension was created (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
        updatedAt:
          type: string
          description: >-
            When the dimension was last updated (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
    Accounting_REST_API_Api-dimension-entries:
      required:
        - data
        - pagination
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Accounting_REST_API_Api-dimension-entry'
        pagination:
          $ref: '#/components/schemas/Accounting_REST_API_Pagination'
    Accounting_REST_API_Api-dimension-entry:
      required:
        - active
        - createdAt
        - description
        - id
        - name
        - updatedAt
      type: object
      properties:
        id:
          type: string
          format: uuid
        foreign-id:
          type: string
        name:
          type: string
        description:
          type: string
        start-date:
          type: string
          format: date
        end-date:
          type: string
          format: date
        active:
          type: boolean
        createdAt:
          type: string
          description: >-
            When the dimension entry was created (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
        updatedAt:
          type: string
          description: >-
            When the dimension entry was last updated (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
    Accounting_REST_API_Created:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: ID of the created resource
          format: int32
    Accounting_REST_API_Saved:
      type: object
      properties:
        id:
          type: integer
          description: ID of the saved resource
          format: int32
    Accounting_REST_API_Dimension-entry-created:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          description: UUIDv7 public id of the created dimension entry
          format: uuid
    Accounting_REST_API_Dimension-entry-saved:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          description: UUIDv7 public id of the saved dimension entry
          format: uuid
    Accounting_REST_API_Order:
      type: string
      description: >
        Sort direction by the resource id cursor. Since ids are UUIDv7, `asc` is oldest-first and `desc` is newest-first. Applies to the cursor-paginated ordering.

      default: asc
      enum:
        - asc
        - desc
    Accounting_REST_API_ProblemDetail:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          format: int32
        detail:
          type: string
        instance:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        traceId:
          type: string
          description: Trace ID for debugging
      additionalProperties: true
      description: >
        A machine-readable format for specifying errors in HTTP API responses based on https://www.rfc-editor.org/rfc/rfc7807

    Accounting_REST_API_Pagination:
      required:
        - limit
      type: object
      properties:
        limit:
          type: integer
          description: The page-size limit used to produce this page.
          format: int32
        nextCursor:
          type: string
          description: Token to fetch the next page; absent on the final page.
          format: uuid
      description: >
        Cursor-pagination metadata returned with a paged collection. The presence

        of `nextCursor` is the "more rows exist" signal — pass it as the `cursor`

        query parameter on the next request to fetch the following page. Absent

        means this is the final page.

    Payroll_REST_API_PayrollArticleReadables:
      type: object
      properties:
        payrollArticleReadable:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollArticleReadable'
    Payroll_REST_API_PayrollArticleReadable:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollArticleReference'
        name:
          type: string
    Payroll_REST_API_PayrollEvents:
      type: object
      properties:
        payrollEvent:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollEvent'
    Payroll_REST_API_PayrollEvent:
      type: object
      properties:
        id:
          type: integer
          format: int32
        date:
          type: string
          format: date
        hours:
          type: number
        type:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollEventType'
        child:
          type: string
        comment:
          type: string
    Payroll_REST_API_PayrollUserReadables:
      type: object
      properties:
        offset:
          type: integer
          format: int32
        limit:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        payrollUserReadable:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollUserReadable'
    Payroll_REST_API_PayrollUserReadable:
      type: object
      properties:
        user:
          $ref: '#/components/schemas/Payroll_REST_API_UserReference'
        ssn:
          type: string
        address1:
          type: string
        address2:
          type: string
        zipCode:
          type: string
        state:
          type: string
        countryCode:
          type: string
        phone:
          type: string
        taxTable:
          type: integer
          format: int32
        taxTableColumn:
          type: integer
          format: int32
        taxPercentage:
          type: number
        taxPercentageValidFrom:
          type: string
          format: date
        taxPercentageValidTo:
          type: string
          format: date
        oneTimeTaxPercentage:
          type: number
        clearingNr:
          type: string
        accountNr:
          type: string
        employmentStartDate:
          type: string
          format: date
        employmentEndDate:
          type: string
          format: date
        notes:
          type: string
        travelReimbursementPerMile:
          type: integer
          format: int64
        expenseAllowance:
          type: boolean
        fuelBenefit:
          type: boolean
        monthlySalaryType:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollUserMonthlySalaryType'
        monthlySalary:
          type: integer
          format: int64
        monthlySalaryStartDate:
          type: string
          format: date
        monthlySalaryYearlyPension:
          type: integer
          format: int64
        hourlySalary:
          type: integer
          format: int64
        hourlySalaryStartDate:
          type: string
          format: date
        variableSalaryType:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollUserVariableSalaryType'
        variableSalaryPayoutType:
          $ref: >-
            #/components/schemas/Payroll_REST_API_PayrollUserVariableSalaryPayoutType
        variableSalaryInputType:
          $ref: >-
            #/components/schemas/Payroll_REST_API_PayrollUserVariableSalaryInputType
        variableSalaryDescription:
          type: string
        variableSaleryTaxType:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollUserVariableTaxType'
        variableSaleryProvisionVacationPercentage:
          type: number
        provision:
          type: boolean
        monthReportStrategy:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollUserMonthReportStrategy'
        managerUser:
          $ref: '#/components/schemas/Payroll_REST_API_UserReference'
        workplaceNumber:
          type: string
        workplaceCustomAddress:
          type: string
        workplaceCustomLocality:
          type: string
        vacationFixedDebtPercentage:
          type: number
        vacationEntitlement:
          type: number
        vacationPaidDays:
          type: number
        vacationPaidDaysUsed:
          type: number
        vacationAdvanceDays:
          type: number
        vacationAdvanceDaysUsed:
          type: number
        vacationAdvanceDaysPreviousYear:
          type: number
        vacationSavedDays:
          type: number
        vacationSavedDaysYear1:
          type: number
        vacationSavedDaysYear2:
          type: number
        vacationSavedDaysYear3:
          type: number
        vacationSavedDaysYear4:
          type: number
        vacationSavedDaysYear5:
          type: number
        vacationSavedDaysUsed:
          type: number
        vacationUnpaidDays:
          type: number
        vacationUnpaidDaysUsed:
          type: number
        schedules:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollUserSchedule'
        dimensionEntries:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_DimensionEntryReference'
        vacationEntitlements:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_VacationEntitlement'
        children:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollChild'
        fullHistoryMonthlySalaries:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_FullHistoryMonthlySalary'
        createdAt:
          type: string
          description: >-
            When the employment contract was created (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
        updatedAt:
          type: string
          description: >-
            When the employment contract was last updated (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
    Payroll_REST_API_PayrollUserSchedule:
      required:
        - comment
        - schedule
      type: object
      properties:
        schedule:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollScheduleReference'
        startDate:
          type: string
          format: date
        endDate:
          type: string
          format: date
        comment:
          type: string
    Payroll_REST_API_VacationEntitlement:
      required:
        - entitlement
        - startDate
      type: object
      properties:
        startDate:
          type: string
          format: date
        entitlement:
          type: integer
          format: int64
    Payroll_REST_API_PayrollChild:
      type: object
      properties:
        name:
          type: string
        birthDate:
          type: string
          format: date
    Payroll_REST_API_FullHistoryMonthlySalary:
      type: object
      properties:
        monthlySalary:
          type: integer
          format: int64
        monthlySalaryStartDate:
          type: string
          format: date
    Payroll_REST_API_PayrollRuns:
      type: object
      properties:
        offset:
          type: integer
          format: int32
        limit:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        payrollRun:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollRun'
    Payroll_REST_API_PayrollRun:
      type: object
      properties:
        id:
          type: integer
          format: int32
        nr:
          type: integer
          format: int32
        paymentDate:
          type: string
          format: date
        payouts:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollRunPayout'
        paid:
          $ref: '#/components/schemas/Payroll_REST_API_UserDatetimeMetadata'
        info:
          type: string
    Payroll_REST_API_PayrollRunPayout:
      type: object
      properties:
        payoutId:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollPayoutReference'
        user:
          $ref: '#/components/schemas/Payroll_REST_API_UserReference'
        project:
          $ref: '#/components/schemas/Payroll_REST_API_ProjectReference'
        periodStart:
          type: string
          format: date
        periodEnd:
          type: string
          format: date
        gross:
          type: integer
          format: int64
        benefits:
          type: integer
          format: int64
        payout:
          type: integer
          format: int64
        tax:
          type: integer
          format: int64
        socialFees:
          type: integer
          format: int64
    Payroll_REST_API_PayrollTransactions:
      type: object
      properties:
        offset:
          type: integer
          format: int32
        limit:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        payrollTransaction:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollTransaction'
    Payroll_REST_API_PayrollTransaction:
      type: object
      properties:
        id:
          type: integer
          format: int32
        user:
          $ref: '#/components/schemas/Payroll_REST_API_UserReference'
        payrollPayout:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollPayoutReference'
        payrollArticle:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollArticleReference'
        period:
          $ref: '#/components/schemas/Payroll_REST_API_Period'
        description:
          type: string
        quantity:
          type: number
        unit:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollUnitType'
        price:
          type: integer
          format: int64
        socialFees:
          type: integer
          format: int64
    Payroll_REST_API_PayrollMonthReportReadables:
      type: object
      properties:
        payrollMonthReportReadable:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollMonthReportReadable'
    Payroll_REST_API_PayrollMonthReportReadable:
      type: object
      properties:
        user:
          $ref: '#/components/schemas/Payroll_REST_API_UserReference'
        year:
          type: integer
          format: int32
        month:
          type: integer
          format: int32
        provisions:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollMonthReportProvision'
        notes:
          type: string
        gross:
          type: integer
          format: int64
        benefits:
          type: integer
          format: int64
        payout:
          type: integer
          format: int64
        tax:
          type: integer
          format: int64
        socialFees:
          type: integer
          format: int64
        articles:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollMonthReportArticle'
        approved:
          $ref: '#/components/schemas/Payroll_REST_API_UserDatetimeMetadata'
        certified:
          $ref: '#/components/schemas/Payroll_REST_API_UserDatetimeMetadata'
    Payroll_REST_API_PayrollMonthReportProvision:
      required:
        - amount
        - description
      type: object
      properties:
        amount:
          type: integer
          format: int64
        description:
          type: string
        project:
          $ref: '#/components/schemas/Payroll_REST_API_ProjectReference'
    Payroll_REST_API_PayrollMonthReportArticle:
      required:
        - article
        - description
        - foreignId
        - price
        - quantity
        - unit
      type: object
      properties:
        foreignId:
          type: string
        article:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollArticleReference'
        description:
          type: string
        quantity:
          type: number
        price:
          type: integer
          format: int64
        unit:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollUnitType'
        period:
          $ref: '#/components/schemas/Payroll_REST_API_Period'
        project:
          $ref: '#/components/schemas/Payroll_REST_API_ProjectReference'
        dimensions:
          $ref: '#/components/schemas/Payroll_REST_API_DimensionsDistribution'
    Payroll_REST_API_PayrollSchedulesReadable:
      type: object
      properties:
        fixedSchedule:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollFixedScheduleReadable'
        rollingSchedule:
          type: array
          items:
            $ref: >-
              #/components/schemas/Payroll_REST_API_PayrollRollingScheduleReadable
    Payroll_REST_API_PayrollScheduleReadable:
      type: object
      properties:
        fixedSchedule:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollFixedScheduleReadable'
        rollingSchedule:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollRollingScheduleReadable'
    Payroll_REST_API_PayrollRollingScheduleReadable:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        description:
          type: string
        weeks:
          type: integer
          format: int32
        hoursPerWeek:
          type: number
        daysPerWeek:
          type: number
        levelOfEmployment:
          type: number
        usageCount:
          type: integer
          format: int32
        editable:
          type: boolean
        intervals:
          type: array
          items:
            $ref: >-
              #/components/schemas/Payroll_REST_API_PayrollRollingScheduleInterval
        createdAt:
          type: string
          description: >-
            When the work schedule was created (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
        updatedAt:
          type: string
          description: >-
            When the work schedule was last updated (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
    Payroll_REST_API_PayrollFixedScheduleReadable:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        description:
          type: string
        hoursPerWeek:
          type: number
        daysPerWeek:
          type: number
        levelOfEmployment:
          type: number
        usageCount:
          type: integer
          format: int32
        editable:
          type: boolean
        intervals:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollFixedScheduleInterval'
        createdAt:
          type: string
          description: >-
            When the work schedule was created (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
        updatedAt:
          type: string
          description: >-
            When the work schedule was last updated (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
    Payroll_REST_API_PayrollRollingScheduleInterval:
      type: object
      properties:
        day:
          type: integer
          format: int32
        hours:
          type: number
        type:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollScheduleIntervalType'
        comment:
          type: string
    Payroll_REST_API_PayrollFixedScheduleInterval:
      type: object
      properties:
        date:
          type: string
          format: date
        hours:
          type: number
        type:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollScheduleIntervalType'
        comment:
          type: string
    Payroll_REST_API_PayrollUserScheduleMetadatas:
      type: object
      properties:
        payrollUserScheduleMetadata:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollUserScheduleMetadata'
    Payroll_REST_API_PayrollUserScheduleMetadata:
      type: object
      properties:
        date:
          type: string
          format: date
        levelOfEmployment:
          type: number
        grossHours:
          type: number
        netHours:
          type: number
        actualHours:
          type: number
    Payroll_REST_API_UserDatetimeMetadata:
      type: object
      properties:
        user:
          $ref: '#/components/schemas/Payroll_REST_API_UserReference'
        datetime:
          type: string
          format: date-time
    Payroll_REST_API_Period:
      required:
        - end
        - start
      type: object
      properties:
        start:
          type: string
          format: date
        end:
          type: string
          format: date
    Payroll_REST_API_DimensionsDistribution:
      type: object
      properties:
        dimensionEntry:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_DimensionsDistributionEntry'
    Payroll_REST_API_DimensionsDistributionEntry:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
        percentage:
          type: number
    Payroll_REST_API_UserReference:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          format: uuid
    Payroll_REST_API_ProjectReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Payroll_REST_API_PayrollPayoutReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Payroll_REST_API_PayrollArticleReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Payroll_REST_API_PayrollScheduleReference:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          format: uuid
    Payroll_REST_API_DimensionEntryReference:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          description: DimensionEntry UUID
          format: uuid
    Payroll_REST_API_PayrollEventType:
      type: string
      enum:
        - Sick
        - Vacation
        - LeaveOfAbsence
        - LeaveOfAbsenceVacationEarned
        - WorkHour
        - ParentalLeave
        - Childcare
        - CloseRelativeCare
        - PaternityLeave
        - Furlough
        - OtherLeave
        - OtherLeaveVacationNotEarned
    Payroll_REST_API_PayrollUnitType:
      type: string
      enum:
        - Generic
        - Mile
        - Hour
        - Day
    Payroll_REST_API_PayrollScheduleIntervalType:
      type: string
      enum:
        - Work
        - WorkReduced
        - WorkFree
    Payroll_REST_API_PayrollUserMonthReportStrategy:
      type: string
      enum:
        - DontCreate
        - Create
        - CreateApproveSelf
    Payroll_REST_API_PayrollUserMonthlySalaryType:
      type: string
      enum:
        - Next
        - Current
    Payroll_REST_API_PayrollUserVariableSalaryType:
      type: string
      enum:
        - Disabled
        - Provision
        - ProvisionWithVacation
        - Bonus
    Payroll_REST_API_PayrollUserVariableSalaryPayoutType:
      type: string
      enum:
        - Current
        - Next
    Payroll_REST_API_PayrollUserVariableSalaryInputType:
      type: string
      enum:
        - Self
        - Other
    Payroll_REST_API_PayrollUserVariableTaxType:
      type: string
      enum:
        - Normal
        - OneTime
    Payroll_REST_API_PayrollUserEmploymentEndType:
      type: string
      enum:
        - Disabled
        - NextMonth
    Payroll_REST_API_PayrollCreatedId:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Payroll_REST_API_PayrollSavedId:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Payroll_REST_API_PayrollEventWritable:
      required:
        - comment
        - date
        - hours
        - type
      type: object
      properties:
        date:
          type: string
          format: date
        hours:
          type: number
        type:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollEventType'
        child:
          type: string
        comment:
          type: string
    Payroll_REST_API_PayrollChildWritable:
      required:
        - birthDate
        - name
      type: object
      properties:
        name:
          type: string
        birthDate:
          type: string
          format: date
    Payroll_REST_API_PayrollUserWritableEmploymentEndDate:
      type: object
      properties:
        employmentEndDate:
          type: string
          format: date
        employmentEndType:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollUserEmploymentEndType'
    Payroll_REST_API_PayrollUserWritable:
      type: object
      properties:
        ssn:
          type: string
        address1:
          type: string
        address2:
          type: string
        zipCode:
          type: string
        state:
          type: string
        countryCode:
          type: string
        phone:
          type: string
        taxTable:
          type: integer
          format: int32
        taxTableColumn:
          type: integer
          format: int32
        taxPercentage:
          type: number
        taxPercentageValidFrom:
          type: string
          format: date
        taxPercentageValidTo:
          type: string
          format: date
        oneTimeTaxPercentage:
          type: number
        clearingNr:
          type: string
        accountNr:
          type: string
        employmentStartDate:
          type: string
          format: date
        employmentEndDate:
          $ref: >-
            #/components/schemas/Payroll_REST_API_PayrollUserWritableEmploymentEndDate
        notes:
          type: string
        travelReimbursementPerMile:
          type: integer
          format: int64
        expenseAllowance:
          type: boolean
        fuelBenefit:
          type: boolean
        monthlySalaryType:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollUserMonthlySalaryType'
        monthlySalary:
          type: integer
          format: int64
        monthlySalaryStartDate:
          type: string
          format: date
        monthlySalaryYearlyPension:
          type: integer
          format: int64
        hourlySalary:
          type: integer
          format: int64
        hourlySalaryStartDate:
          type: string
          format: date
        provision:
          type: boolean
        monthReportStrategy:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollUserMonthReportStrategy'
        schedules:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollUserSchedule'
        dimensionEntries:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_DimensionEntryReference'
        managerUser:
          $ref: '#/components/schemas/Payroll_REST_API_UserReference'
        vacationEntitlement:
          $ref: '#/components/schemas/Payroll_REST_API_VacationEntitlement'
        workplaceNumber:
          type: string
        workplaceCustomAddress:
          type: string
        workplaceCustomLocality:
          type: string
    Payroll_REST_API_PayrollRunPayWritable:
      type: object
      properties:
        paymentDate:
          type: string
          format: date
    Payroll_REST_API_PayrollRunBookkeepWritable:
      type: object
      properties:
        paymentDate:
          type: string
          format: date
    Payroll_REST_API_PayrollPayoutArticleWritable:
      required:
        - description
        - price
        - quantity
      type: object
      properties:
        description:
          type: string
        quantity:
          type: number
        price:
          type: integer
          format: int64
        project:
          $ref: '#/components/schemas/Payroll_REST_API_ProjectReference'
        article:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollArticleReference'
        period:
          $ref: '#/components/schemas/Payroll_REST_API_Period'
        dimensions:
          $ref: '#/components/schemas/Payroll_REST_API_DimensionsDistribution'
    Payroll_REST_API_PayrollRunCreatePayoutArticles:
      type: object
      properties:
        benefit:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollPayoutArticleWritable'
        salary:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollPayoutArticleWritable'
        provision:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollPayoutArticleWritable'
        otherArticles:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollPayoutArticleWritable'
    Payroll_REST_API_PayrollRunCreatePayout:
      required:
        - articles
        - periodEnd
        - periodStart
        - user
      type: object
      properties:
        user:
          $ref: '#/components/schemas/Payroll_REST_API_UserReference'
        project:
          $ref: '#/components/schemas/Payroll_REST_API_ProjectReference'
        periodStart:
          type: string
          format: date
        periodEnd:
          type: string
          format: date
        articles:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollRunCreatePayoutArticles'
    Payroll_REST_API_PayrollRunCreateWritable:
      required:
        - paymentDate
        - payouts
      type: object
      properties:
        paymentDate:
          type: string
          format: date
        payouts:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollRunCreatePayout'
    Payroll_REST_API_PayrollMonthReportWritable:
      type: object
      properties:
        provisions:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollMonthReportProvision'
        articles:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollMonthReportArticle'
    Payroll_REST_API_PayrollRollingScheduleWritable:
      required:
        - description
        - name
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        intervals:
          type: array
          items:
            $ref: >-
              #/components/schemas/Payroll_REST_API_PayrollRollingScheduleInterval
    Payroll_REST_API_PayrollFixedScheduleWritable:
      required:
        - description
        - name
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        hoursPerWeek:
          type: number
        daysPerWeek:
          type: number
        levelOfEmployment:
          type: number
        intervals:
          type: array
          items:
            $ref: '#/components/schemas/Payroll_REST_API_PayrollFixedScheduleInterval'
    Payroll_REST_API_PayrollScheduleWritable:
      required:
        - description
        - name
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        hoursPerWeek:
          type: number
        daysPerWeek:
          type: number
        levelOfEmployment:
          type: number
        intervals:
          type: array
          items:
            $ref: >-
              #/components/schemas/Payroll_REST_API_PayrollScheduleIntervalWritable
    Payroll_REST_API_PayrollScheduleIntervalWritable:
      type: object
      properties:
        day:
          type: integer
          format: int32
        date:
          type: string
          format: date
        hours:
          type: number
        type:
          $ref: '#/components/schemas/Payroll_REST_API_PayrollScheduleIntervalType'
        comment:
          type: string
    Payroll_REST_API_ProblemDetail:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          format: int32
        detail:
          type: string
        instance:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        traceId:
          type: string
          description: Trace ID for debugging
      additionalProperties: true
      description: >
        A machine-readable format for specifying errors in HTTP API responses based on https://www.rfc-editor.org/rfc/rfc7807

    User_REST_API_Users:
      type: object
      properties:
        user:
          type: array
          items:
            $ref: '#/components/schemas/User_REST_API_User'
    User_REST_API_User:
      required:
        - active
        - email
        - id
        - name
      type: object
      properties:
        id:
          type: string
          format: uuid
        foreignId:
          type: string
        name:
          type: string
        email:
          type: string
          format: email
        active:
          type: boolean
        dimensionEntry:
          $ref: '#/components/schemas/User_REST_API_DimensionEntryReference'
        dimensions:
          $ref: '#/components/schemas/User_REST_API_DimensionsDistribution'
        dimensionUserPercentage:
          type: number
        createdAt:
          type: string
          description: >-
            When the user's company record was created (RFC 3339 / ISO-8601, UTC).
          format: date-time
        updatedAt:
          type: string
          description: >-
            When the user's company record was last updated (RFC 3339 / ISO-8601, UTC).
          format: date-time
    User_REST_API_UserWritable:
      required:
        - active
        - email
        - name
      type: object
      properties:
        foreignId:
          type: string
        name:
          type: string
        email:
          type: string
          format: email
        active:
          type: boolean
        dimensions:
          $ref: '#/components/schemas/User_REST_API_DimensionsDistribution'
        dimensionUserPercentage:
          type: number
    User_REST_API_DimensionEntryReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    User_REST_API_DimensionsDistribution:
      type: object
      properties:
        dimensionEntry:
          type: array
          items:
            $ref: '#/components/schemas/User_REST_API_DimensionsDistributionEntry'
    User_REST_API_DimensionsDistributionEntry:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
        percentage:
          type: number
    User_REST_API_AccessRoles:
      type: object
      properties:
        accessRole:
          type: array
          items:
            $ref: '#/components/schemas/User_REST_API_AccessRole'
    User_REST_API_AccessRole:
      required:
        - description
        - id
        - name
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
    User_REST_API_Accesses:
      type: object
      properties:
        access:
          type: array
          items:
            $ref: '#/components/schemas/User_REST_API_Access'
    User_REST_API_Access:
      required:
        - type
      type: object
      properties:
        type:
          $ref: '#/components/schemas/User_REST_API_AccessType'
        registrationUser:
          $ref: '#/components/schemas/User_REST_API_UserReference'
        registrationDatetime:
          type: string
          format: date-time
    User_REST_API_UserReference:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          format: uuid
    User_REST_API_AccessType:
      type: string
      enum:
        - Auditor
        - Administrator
        - AdministratorWithPayroll
        - ClientAgreementOwn
        - ClientInvoice
        - ClientInvoiceRead
        - ClientInvoiceCreate
        - ClientInvoiceCertifyOwn
        - ClientInvoiceOwn
        - ClientInvoicePay
        - ClientProjectOwn
        - CustomerManagerSeb
        - DimensionOwn
        - Dimensions
        - Expenses
        - ExpensesOwn
        - ExpensesPay
        - Expert
        - ExternalAccountant
        - Manager
        - Payroll
        - PayrollRead
        - PayrollOwn
        - PayrollPay
        - Remuneration
        - RemunerationOwn
        - Responsible
        - ResponsibleRead
        - SupplierInvoice
        - SupplierInvoiceRead
        - SupplierInvoiceSecretRead
        - SupplierInvoiceCertifyOrg
        - SupplierInvoiceCreate
        - SupplierInvoicePay
        - Timereport
        - TimereportOwn
        - Subcontractor
        - PayrollSecret
        - PayrollSecretRead
        - FoundationGrantPay
        - FoundationGrant
        - AttachmentRequest
        - InternalTransferPay
    User_REST_API_Created:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          format: uuid
    User_REST_API_Saved:
      type: object
      properties:
        id:
          type: string
          format: uuid
    User_REST_API_Deleted:
      type: object
      properties:
        id:
          type: string
          format: uuid
    User_REST_API_ProblemDetail:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          format: int32
        detail:
          type: string
        instance:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        traceId:
          type: string
          description: Trace ID for debugging
      additionalProperties: true
      description: >
        A machine-readable format for specifying errors in HTTP API responses based on https://www.rfc-editor.org/rfc/rfc7807

    Expense_REST_API_ExpenseFilter:
      type: string
      default: Own
      enum:
        - All
        - Own
        - Certified
        - NotCertified
        - Reimbursable
    Expense_REST_API_ExpenseReadables:
      type: object
      properties:
        expense:
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_ExpenseReadable'
    Expense_REST_API_ExpenseReadable:
      required:
        - amount
        - approved
        - certified
        - currencyType
        - date
        - entries
        - id
        - nr
        - paid
        - reimbursed
      type: object
      properties:
        id:
          type: integer
          format: int32
        nr:
          type: integer
          format: int32
        date:
          type: string
          format: date
        companyCard:
          description: >-
            Deprecated in the legacy API because a single expense can contain entries with different company cards.
          allOf:
            - $ref: '#/components/schemas/Expense_REST_API_CompanyCardReadable'
        amount:
          type: integer
          format: int64
        currencyType:
          type: string
        reimbursed:
          type: boolean
        paid:
          type: boolean
        entries:
          type: integer
          format: int32
        certified:
          type: boolean
        approved:
          type: boolean
    Expense_REST_API_ExpenseWritable:
      required:
        - expenseEntries
      type: object
      properties:
        expenseEntries:
          required:
            - expenseEntry
          type: object
          properties:
            expenseEntry:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryReference'
    Expense_REST_API_ExpenseFileReadables:
      type: object
      properties:
        expenseFile:
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_ExpenseFileReadable'
    Expense_REST_API_ExpenseFileReadable:
      required:
        - description
        - filename
        - id
        - registrationDate
        - thumbnail
      type: object
      properties:
        id:
          type: integer
          format: int32
        description:
          type: string
        filename:
          type: string
        thumbnail:
          type: string
          format: byte
        registrationDate:
          type: string
          format: date-time
    Expense_REST_API_ExpenseEntryFormDefaults:
      required:
        - countryCode
        - currencyType
        - date
        - description
        - digital
        - dimensions
      type: object
      properties:
        companyCard:
          $ref: '#/components/schemas/Expense_REST_API_CompanyCardReadable'
        date:
          type: string
          format: date
        type:
          $ref: '#/components/schemas/Expense_REST_API_ExpenseTypeReadable'
        description:
          type: string
        digital:
          type: boolean
        currencyType:
          type: string
        countryCode:
          type: string
        dimensions:
          $ref: >-
            #/components/schemas/Expense_REST_API_ExpenseEntryFormDefaultDimensions
    Expense_REST_API_ExpenseEntryReadables:
      type: object
      properties:
        expenseEntry:
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryReadable'
    Expense_REST_API_ExpenseEntryReadable:
      required:
        - amount
        - countryCode
        - currencyRate
        - currencyType
        - date
        - description
        - digital
        - dimensionEntries
        - expenseFile
        - expenseType
        - id
        - periodEndDate
        - periodStartDate
        - persons
        - reInvoicing
        - registrationDate
        - vat
      type: object
      properties:
        id:
          type: integer
          format: int32
        expenseNr:
          type: integer
          format: int32
        expenseFile:
          $ref: '#/components/schemas/Expense_REST_API_ExpenseFileReference'
        companyCard:
          $ref: '#/components/schemas/Expense_REST_API_CompanyCardReadable'
        expenseType:
          $ref: '#/components/schemas/Expense_REST_API_ExpenseTypeReadable'
        persons:
          $ref: '#/components/schemas/Expense_REST_API_PersonNames'
        date:
          type: string
          format: date
        description:
          type: string
        digital:
          type: boolean
        amount:
          type: integer
          format: int64
        vat:
          type: integer
          format: int64
        currencyType:
          type: string
        currencyRate:
          type: number
        countryCode:
          type: string
        registrationDate:
          type: string
          format: date-time
        periodStartDate:
          type: string
          format: date
        periodEndDate:
          type: string
          format: date
        dimensionEntries:
          $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryDimensionEntries'
        reInvoicing:
          $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryReInvoicing'
    Expense_REST_API_ExpenseEntryWritable:
      required:
        - amount
        - countryCode
        - currencyType
        - date
        - description
        - digital
        - dimensionEntries
        - expenseFile
        - expenseType
        - vat
      type: object
      properties:
        expenseFile:
          $ref: '#/components/schemas/Expense_REST_API_ExpenseFileReference'
        companyCard:
          $ref: '#/components/schemas/Expense_REST_API_CompanyCardReference'
        expenseType:
          $ref: '#/components/schemas/Expense_REST_API_ExpenseTypeReference'
        persons:
          $ref: '#/components/schemas/Expense_REST_API_PersonNames'
        date:
          type: string
          format: date
        description:
          type: string
        digital:
          type: boolean
        amount:
          type: integer
          format: int64
        vat:
          type: integer
          format: int64
        currencyType:
          type: string
        countryCode:
          type: string
        dimensionEntries:
          $ref: >-
            #/components/schemas/Expense_REST_API_ExpenseEntryWritableDimensionEntries
        reInvoicing:
          $ref: >-
            #/components/schemas/Expense_REST_API_ExpenseEntryWritableReInvoicing
    Expense_REST_API_ExpenseEntryForm:
      required:
        - companyCards
        - countries
        - currencyTypes
        - dimensions
        - expenseTypes
        - reInvoicing
      type: object
      properties:
        companyCards:
          $ref: '#/components/schemas/Expense_REST_API_CompanyCards'
        expenseTypes:
          $ref: '#/components/schemas/Expense_REST_API_ExpenseTypes'
        currencyTypes:
          $ref: '#/components/schemas/Expense_REST_API_CurrencyTypes'
        countries:
          $ref: '#/components/schemas/Expense_REST_API_Countries'
        dimensions:
          $ref: '#/components/schemas/Expense_REST_API_Dimensions'
        reInvoicing:
          $ref: '#/components/schemas/Expense_REST_API_ExpenseFormReInvoicing'
    Expense_REST_API_CompanyCardReadable:
      required:
        - id
        - name
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
    Expense_REST_API_CompanyCardReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Expense_REST_API_ExpenseFileReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Expense_REST_API_ExpenseEntryReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Expense_REST_API_ExpenseTypeReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Expense_REST_API_DimensionEntryReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Expense_REST_API_ClientProjectReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Expense_REST_API_ExpenseTypeReadable:
      required:
        - classification
        - description
        - dimensions
        - id
        - name
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
        description:
          type: string
        classification:
          $ref: '#/components/schemas/Expense_REST_API_ExpenseTypeClassification'
        dimensions:
          $ref: '#/components/schemas/Expense_REST_API_ExpenseTypeDimensions'
    Expense_REST_API_ExpenseTypeClassification:
      type: string
      enum:
        - Basic
        - Representation
    Expense_REST_API_ExpenseTypeDimensions:
      type: object
      properties:
        dimension:
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_ExpenseTypeDimension'
    Expense_REST_API_ExpenseTypeDimension:
      required:
        - entry
        - id
        - name
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
        entry:
          $ref: '#/components/schemas/Expense_REST_API_DimensionEntryReadable'
    Expense_REST_API_PersonNames:
      required:
        - name
      type: object
      properties:
        name:
          type: array
          items:
            type: string
    Expense_REST_API_ExpenseEntryDimensionEntries:
      required:
        - dimensionEntry
      type: object
      properties:
        dimensionEntry:
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_ExpenseEntryDimensionEntry'
    Expense_REST_API_ExpenseEntryWritableDimensionEntries:
      required:
        - dimensionEntry
      type: object
      properties:
        dimensionEntry:
          minItems: 0
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_DimensionEntryReference'
    Expense_REST_API_ExpenseEntryDimensionEntry:
      required:
        - dimension
        - id
        - name
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
        dimension:
          $ref: '#/components/schemas/Expense_REST_API_DimensionSummary'
    Expense_REST_API_DimensionSummary:
      required:
        - id
        - name
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
    Expense_REST_API_ExpenseEntryReInvoicing:
      type: object
      properties:
        clientProject:
          $ref: '#/components/schemas/Expense_REST_API_ClientProjectSummary'
    Expense_REST_API_ExpenseEntryWritableReInvoicing:
      required:
        - clientProject
      type: object
      properties:
        clientProject:
          $ref: '#/components/schemas/Expense_REST_API_ClientProjectReference'
    Expense_REST_API_ClientProjectSummary:
      required:
        - id
        - name
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
    Expense_REST_API_CompanyCards:
      type: object
      properties:
        companyCard:
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_CompanyCardReadable'
    Expense_REST_API_ExpenseTypes:
      type: object
      properties:
        expenseType:
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_ExpenseTypeReadable'
    Expense_REST_API_CurrencyTypes:
      type: object
      properties:
        currencyType:
          type: array
          items:
            type: string
    Expense_REST_API_Countries:
      type: object
      properties:
        country:
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_Country'
    Expense_REST_API_Country:
      required:
        - code
        - vatPercentages
      type: object
      properties:
        code:
          type: string
        vatPercentages:
          $ref: '#/components/schemas/Expense_REST_API_VatPercentages'
    Expense_REST_API_Created:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
    Expense_REST_API_Saved:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Expense_REST_API_Deleted:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Expense_REST_API_Ok:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int32
        message:
          type: string
    Expense_REST_API_VatPercentages:
      type: object
      properties:
        vatPercentage:
          type: array
          items:
            type: number
    Expense_REST_API_Dimensions:
      type: object
      properties:
        dimension:
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_DimensionReadable'
    Expense_REST_API_DimensionReadable:
      required:
        - entries
        - id
        - name
        - required
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
        required:
          type: boolean
        entries:
          $ref: '#/components/schemas/Expense_REST_API_DimensionEntries'
    Expense_REST_API_DimensionEntries:
      type: object
      properties:
        entry:
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_DimensionEntryReadable'
    Expense_REST_API_DimensionEntryReadable:
      required:
        - id
        - name
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
    Expense_REST_API_ExpenseFormReInvoicing:
      type: object
      properties:
        clientProject:
          type: array
          items:
            $ref: '#/components/schemas/Expense_REST_API_ClientProjectSummary'
    Expense_REST_API_ExpenseEntryFormDefaultDimensions:
      type: object
      properties:
        dimension:
          type: array
          items:
            $ref: >-
              #/components/schemas/Expense_REST_API_ExpenseEntryFormDefaultDimension
    Expense_REST_API_ExpenseEntryFormDefaultDimension:
      required:
        - entry
        - id
        - name
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
        entry:
          $ref: '#/components/schemas/Expense_REST_API_DimensionEntryReadable'
    Expense_REST_API_ProblemDetail:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          format: int32
        detail:
          type: string
        instance:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        traceId:
          type: string
          description: Trace ID for debugging
      additionalProperties: true
      description: >
        A machine-readable format for specifying errors in HTTP API responses based on https://www.rfc-editor.org/rfc/rfc7807

    Supplier_REST_API_Supplier:
      required:
        - address
        - bankgiro
        - email
        - foreignId
        - iban
        - id
        - name
        - plusgiro
        - swedishBankAccount
      type: object
      properties:
        id:
          type: string
          description: Stable public identifier (SupplierPublicId).
          format: uuid
        foreignId:
          type: string
          description: External identifier for the supplier
        name:
          type: string
          description: Supplier name
        address:
          $ref: '#/components/schemas/Supplier_REST_API_Address'
        email:
          type: string
          description: Supplier email address(es)
        plusgiro:
          type: integer
          description: Plusgiro account number
          format: int64
        bankgiro:
          type: integer
          description: Bankgiro account number
          format: int64
        orgno:
          type: string
          description: Organisation number
        swedishBankAccount:
          type: string
          description: Swedish bank account number
        internationalBankAccountWithRouting:
          type: string
          description: International bank account with routing number
        internationalBankAccountWithAccountNumber:
          type: string
          description: International bank account with account number
        internationalBankAccountViaIntermediary:
          type: string
          description: International bank account via intermediary
        internationalBankAccountInRussiaInRub:
          type: string
          description: International bank account in Russia in RUB
        norwegianBankAccount:
          type: string
          description: Norwegian bank account number
        iban:
          type: string
          description: International Bank Account Number (format BIC-IBAN)
        user:
          $ref: '#/components/schemas/Supplier_REST_API_UserReference'
        ourReference:
          type: string
          description: Our reference
        countryCode:
          type: string
          description: Country code (ISO 3166-1 alpha-2)
        vatNr:
          type: string
          description: VAT number
        accountNr:
          type: integer
          description: Account number
          format: int32
        bankAccount:
          $ref: '#/components/schemas/Supplier_REST_API_BankAccountReference'
        createdAt:
          type: string
          description: >-
            When the supplier was created (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
        updatedAt:
          type: string
          description: >-
            When the supplier was last updated (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
      description: Supplier information
    Supplier_REST_API_CreateSupplier:
      required:
        - address
        - bankgiro
        - email
        - foreignId
        - iban
        - name
        - plusgiro
        - swedishBankAccount
      type: object
      properties:
        foreignId:
          type: string
          description: External identifier for the supplier
        name:
          type: string
          description: Supplier name
        address:
          $ref: '#/components/schemas/Supplier_REST_API_Address'
        email:
          type: string
          description: Supplier email address(es)
        plusgiro:
          type: integer
          description: Plusgiro account number
          format: int64
        bankgiro:
          type: integer
          description: Bankgiro account number
          format: int64
        orgno:
          type: string
          description: Organisation number
        swedishBankAccount:
          type: string
          description: Swedish bank account number
        internationalBankAccountWithRouting:
          type: string
          description: International bank account with routing number
        internationalBankAccountWithAccountNumber:
          type: string
          description: International bank account with account number
        internationalBankAccountViaIntermediary:
          type: string
          description: International bank account via intermediary
        internationalBankAccountInRussiaInRub:
          type: string
          description: International bank account in Russia in RUB
        norwegianBankAccount:
          type: string
          description: Norwegian bank account number
        iban:
          type: string
          description: International Bank Account Number (format BIC-IBAN)
        user:
          $ref: '#/components/schemas/Supplier_REST_API_UserReference'
        ourReference:
          type: string
          description: Our reference
        countryCode:
          type: string
          description: Country code (ISO 3166-1 alpha-2)
        vatNr:
          type: string
          description: VAT number
        accountNr:
          type: integer
          description: Account number
          format: int32
        bankAccount:
          $ref: '#/components/schemas/Supplier_REST_API_BankAccountReference'
      description: >
        Writable supplier payload for create. Same shape as `Supplier` but without the

        server-assigned `id` — that is returned in the response as `SupplierCreated.id`.

    Supplier_REST_API_Address:
      required:
        - address1
        - address2
        - country
        - state
        - zipCode
      type: object
      properties:
        address1:
          type: string
          description: Address line 1
        address2:
          type: string
          description: Address line 2
        zipCode:
          type: string
          description: Zip code
        state:
          type: string
          description: State
        country:
          type: string
          description: Country
      description: Address information
    Supplier_REST_API_UserReference:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          description: User UUID
          format: uuid
      description: Reference to a user
    Supplier_REST_API_BankAccountReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Bank account ID
          format: int64
      description: Reference to a bank account
    Supplier_REST_API_SupplierReference:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          description: SupplierPublicId UUID.
          format: uuid
      description: Reference to a supplier
    Supplier_REST_API_Suppliers:
      required:
        - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Supplier_REST_API_Supplier'
        pagination:
          $ref: '#/components/schemas/Supplier_REST_API_Pagination'
      description: >
        Page of suppliers. `pagination` is populated for cursor-paginated endpoints

        (e.g. getSuppliers) and absent for endpoints that return all matches

        unpaginated (e.g. getSupplierByForeignId).

    Supplier_REST_API_SupplierCreated:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          description: SupplierPublicId of the created supplier.
          format: uuid
      description: Response for a newly created supplier
    Supplier_REST_API_SupplierSaved:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          description: SupplierPublicId of the saved supplier.
          format: uuid
      description: Response for an updated supplier
    Supplier_REST_API_SubcontractorReadable:
      required:
        - id
        - internalId
        - supplier
        - users
      type: object
      properties:
        id:
          type: string
          description: SubcontractorPublicId UUID.
          format: uuid
        internalId:
          type: integer
          description: Internal ID
          format: int32
        supplier:
          $ref: '#/components/schemas/Supplier_REST_API_SupplierReference'
        users:
          type: array
          items:
            $ref: '#/components/schemas/Supplier_REST_API_UserReference'
        createdAt:
          type: string
          description: >-
            When the subcontractor was created (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
        updatedAt:
          type: string
          description: >-
            When the subcontractor was last updated (RFC 3339 / ISO-8601 with timezone offset; UTC).
          format: date-time
      description: Subcontractor information
    Supplier_REST_API_Subcontractors:
      required:
        - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Supplier_REST_API_SubcontractorReadable'
        pagination:
          $ref: '#/components/schemas/Supplier_REST_API_Pagination'
      description: >
        Page of subcontractors. `pagination` is populated for cursor-paginated endpoints

        (e.g. getSubcontractors).

    Supplier_REST_API_SupplierInvoice:
      required:
        - accountingDate
        - amount
        - certified
        - countryCode
        - currency
        - currencyRate
        - depositAccount
        - dueDate
        - foreignId
        - id
        - invoiceDate
        - ourReference
        - remaining
        - reminderType
        - supplierRef
        - vat
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier
          format: int32
        foreignId:
          type: string
          description: External identifier
        supplierRef:
          $ref: '#/components/schemas/Supplier_REST_API_SupplierReference'
        bankAccountRef:
          $ref: '#/components/schemas/Supplier_REST_API_BankAccountReference'
        yourReference:
          $ref: '#/components/schemas/Supplier_REST_API_UserReference'
        ourReference:
          type: string
          description: Our reference
        depositAccount:
          $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoicePayee'
        accountingDate:
          type: string
          description: Accounting date
          format: date
        invoiceDate:
          type: string
          description: Invoice date
          format: date
        dueDate:
          type: string
          description: Due date
          format: date
        amount:
          type: integer
          description: Amount in cents
          format: int64
        vat:
          type: integer
          description: VAT amount in cents
          format: int64
        currency:
          type: string
          description: Currency code
        currencyRate:
          type: string
          description: Currency rate
        poNr:
          type: string
          description: Purchase order number
        referenceNr:
          type: string
          description: Reference number
        ocr:
          type: string
          description: OCR number
        paymentDate:
          type: string
          description: Payment date
          format: date
        approvals:
          type: array
          items:
            $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoiceApproval'
        certified:
          type: boolean
          description: Whether the invoice is certified
        reminderType:
          type: string
          description: Reminder type
          enum:
            - None
            - Reminder
            - DebtCollection
            - Enforcement
        remaining:
          type: integer
          description: Remaining amount in cents
          format: int64
        payments:
          type: array
          items:
            $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoicePayment'
        accounts:
          type: array
          items:
            $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoiceAccountRow'
        countryCode:
          type: string
          description: Country code (ISO 3166-1 alpha-2)
        selfInvoiceReferenceIds:
          type: array
          description: Client invoice IDs for self-billing references
          items:
            type: integer
            format: int32
      description: Supplier invoice information
    Supplier_REST_API_SupplierInvoicePayee:
      required:
        - nr
        - type
      type: object
      properties:
        type:
          type: string
          description: Deposit account type
          enum:
            - BankGiro
            - PlusGiro
            - Iban
            - BankAccount
            - Other
            - InternationalBankAccountWithRouting
            - InternationalBankAccountWithAccountNumber
            - InternationalBankAccountViaIntermediary
            - InternationalBankAccountInRussiaInRub
            - NorwegianBankAccount
        nr:
          type: string
          description: Account number
      description: Payee information
    Supplier_REST_API_SupplierInvoiceApproval:
      required:
        - approvalDate
        - approvalType
        - approvalUser
      type: object
      properties:
        approvalUser:
          $ref: '#/components/schemas/Supplier_REST_API_UserReference'
        approvalDate:
          type: string
          description: Approval date and time
          format: date-time
        approvalNote:
          type: string
          description: Approval note
        approvalType:
          type: string
          description: Approval type
          enum:
            - APPROVAL
            - DENIAL
            - TIMEOUT
      description: Approval for a supplier invoice
    Supplier_REST_API_SupplierInvoicePayment:
      required:
        - accountingAmount
        - amount
        - date
        - id
        - payeeType
        - registrationDate
        - registrationUser
      type: object
      properties:
        id:
          type: integer
          description: Payment ID
          format: int32
        date:
          type: string
          description: Payment date
          format: date
        amount:
          type: integer
          description: Payment amount in cents
          format: int64
        accountingAmount:
          type: integer
          description: Accounting amount in cents
          format: int64
        payeeType:
          $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoicePayee'
        referenceNr:
          type: string
          description: Payment reference number
        ocr:
          type: string
          description: Payment OCR
        statuses:
          type: array
          items:
            $ref: >-
              #/components/schemas/Supplier_REST_API_SupplierInvoicePaymentStatus
        registrationUser:
          $ref: '#/components/schemas/Supplier_REST_API_UserReference'
        registrationDate:
          type: string
          description: Registration date and time
          format: date-time
      description: Payment for a supplier invoice
    Supplier_REST_API_SupplierInvoicePaymentStatus:
      required:
        - date
        - id
        - type
      type: object
      properties:
        id:
          type: integer
          description: Status ID
          format: int32
        type:
          type: string
          description: Status type
          enum:
            - Pending
            - Processed
            - Completed
            - Failed
            - FailedAcknowledged
            - Cancelled
            - Lost
        date:
          type: string
          description: Status date
          format: date
        message:
          type: string
          description: Status message
      description: Status of a supplier invoice payment
    Supplier_REST_API_SupplierInvoiceAccountRow:
      required:
        - accountNr
        - amount
        - id
      type: object
      properties:
        id:
          type: integer
          description: Account row ID
          format: int32
        accountNr:
          type: integer
          description: Account number
          format: int32
        vatCode:
          type: string
          description: VAT code
        amount:
          type: integer
          description: Amount in cents
          format: int64
        dimensionEntries:
          type: array
          items:
            $ref: '#/components/schemas/Supplier_REST_API_DimensionEntryReference'
        period:
          $ref: '#/components/schemas/Supplier_REST_API_AccountPeriod'
      description: Account row on a supplier invoice
    Supplier_REST_API_DimensionEntryReference:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          description: Dimension entry UUID
          format: uuid
      description: Reference to a dimension entry
    Supplier_REST_API_AccountPeriod:
      required:
        - endDate
        - startDate
      type: object
      properties:
        startDate:
          type: string
          description: Period start date
          format: date
        endDate:
          type: string
          description: Period end date
          format: date
      description: Accrual period
    Supplier_REST_API_SupplierInvoicesResponse:
      required:
        - count
        - offset
        - supplierInvoices
        - totalCount
      type: object
      properties:
        supplierInvoices:
          type: array
          items:
            $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoice'
        offset:
          type: integer
          description: Current offset
          format: int32
        count:
          type: integer
          description: Number of items returned
          format: int32
        totalCount:
          type: integer
          description: Total number of matching items
          format: int32
      description: Paginated supplier invoices response
    Supplier_REST_API_SubcontractorWriteable:
      required:
        - supplier
        - users
      type: object
      properties:
        supplier:
          $ref: '#/components/schemas/Supplier_REST_API_SupplierReference'
        users:
          type: array
          items:
            $ref: '#/components/schemas/Supplier_REST_API_UserReference'
      description: Subcontractor write data
    Supplier_REST_API_CreatedElement:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: The ID of the created resource
          format: int32
      description: Response for created resources
    Supplier_REST_API_SavedElement:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: The ID of the saved resource
          format: int32
      description: Response for saved/updated resources
    Supplier_REST_API_IdResponse:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: The entity ID
          format: int32
      description: Response containing an entity ID
    Supplier_REST_API_FileUpload:
      required:
        - data
      type: object
      properties:
        data:
          type: array
          description: File data as array of byte values
          items:
            type: integer
      description: File upload data
    Supplier_REST_API_SupplierInvoiceWriteable:
      required:
        - accounts
        - amount
        - currency
        - currencyRate
        - depositAccount
        - dueDate
        - foreignId
        - invoiceDate
        - ourReference
        - supplierId
        - vat
      type: object
      properties:
        foreignId:
          type: string
          description: External identifier
        supplierId:
          type: string
          description: Supplier public ID (SupplierPublicId UUID)
          format: uuid
        bankAccountId:
          type: integer
          description: Bank account ID
          format: int64
        yourReferenceUserId:
          type: string
          description: Your reference user UUID
          format: uuid
        ourReference:
          type: string
          description: Our reference
        depositAccount:
          $ref: '#/components/schemas/Supplier_REST_API_SupplierInvoicePayee'
        accountingDate:
          type: string
          description: Accounting date
          format: date
        invoiceDate:
          type: string
          description: Invoice date
          format: date
        dueDate:
          type: string
          description: Due date
          format: date
        paymentDate:
          type: string
          description: Payment date
          format: date
        amount:
          type: integer
          description: Amount in cents
          format: int64
        vat:
          type: integer
          description: VAT amount in cents
          format: int64
        currency:
          type: string
          description: Currency code
        currencyRate:
          type: string
          description: Currency rate
        poNr:
          type: string
          description: Purchase order number
        referenceNr:
          type: string
          description: Reference number
        ocr:
          type: string
          description: OCR number
        reminderType:
          type: string
          description: Reminder type
          enum:
            - None
            - Reminder
            - DebtCollection
            - Enforcement
        accounts:
          type: array
          items:
            $ref: >-
              #/components/schemas/Supplier_REST_API_SupplierInvoiceAccountWriteable
        clientInvoiceIds:
          type: array
          description: Client invoice IDs for self-billing references
          items:
            type: integer
            format: int32
        files:
          type: array
          description: PDF file data as base64-encoded strings
          items:
            type: string
            format: byte
        requestId:
          type: string
          description: Idempotency request ID to prevent duplicate creation
      description: Writable supplier invoice data for create/update operations
    Supplier_REST_API_SupplierInvoiceAccountWriteable:
      required:
        - accountNr
        - amount
      type: object
      properties:
        accountNr:
          type: integer
          description: Account number
          format: int32
        vatCode:
          type: string
          description: VAT code
        amount:
          type: integer
          description: Amount in cents
          format: int64
        dimensionEntryIds:
          type: array
          description: Dimension entry UUIDs
          items:
            type: string
            format: uuid
        period:
          $ref: '#/components/schemas/Supplier_REST_API_AccountPeriod'
      description: Writable account row for a supplier invoice
    Supplier_REST_API_SupplierInvoiceApprovalRequest:
      required:
        - approvalType
      type: object
      properties:
        approvalType:
          type: string
          description: Approval type
          enum:
            - APPROVAL
            - DENIAL
            - TIMEOUT
        approvalNote:
          type: string
          description: Approval note
      description: Request to approve or deny a supplier invoice
    Supplier_REST_API_ClientInvoiceRelation:
      type: object
      properties:
        clientInvoiceIds:
          type: array
          description: Client invoice IDs
          items:
            type: integer
            format: int32
      description: Client invoice relation for self-billing
    Supplier_REST_API_ProblemDetail:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          format: int32
        detail:
          type: string
        instance:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        traceId:
          type: string
          description: Trace ID for debugging
      additionalProperties: true
      description: >
        A machine-readable format for specifying errors in HTTP API responses based on https://www.rfc-editor.org/rfc/rfc7807

    Supplier_REST_API_Pagination:
      required:
        - limit
      type: object
      properties:
        limit:
          type: integer
          description: The page-size limit used to produce this page.
          format: int32
        nextCursor:
          type: string
          description: Token to fetch the next page; absent on the final page.
          format: uuid
      description: >
        Cursor-pagination metadata returned with a paged collection. The presence

        of `nextCursor` is the "more rows exist" signal — pass it as the `cursor`

        query parameter on the next request to fetch the following page. Absent

        means this is the final page.

    Client_REST_API_Created:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Client_REST_API_Saved:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Client_REST_API_UpdatedRevision:
      type: object
      properties:
        revisionNr:
          type: integer
          format: int32
    Client_REST_API_Deleted:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Client_REST_API_Ok:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Client_REST_API_Clients:
      required:
        - data
        - pagination
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_Client'
        pagination:
          $ref: '#/components/schemas/Client_REST_API_Pagination'
    Client_REST_API_Pagination:
      required:
        - limit
      type: object
      properties:
        limit:
          type: integer
          description: The page-size limit used to produce this page.
          format: int32
        nextCursor:
          type: string
          description: Token to fetch the next page; absent on the final page.
          format: uuid
      description: >
        Cursor-pagination metadata returned with a paged collection. The presence

        of `nextCursor` is the "more rows exist" signal — pass it as the `cursor`

        query parameter on the next request to fetch the following page. Absent

        means this is the final page.

    Client_REST_API_ClientCreated:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          format: uuid
    Client_REST_API_ClientSaved:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          format: uuid
    Client_REST_API_Client:
      type: object
      properties:
        id:
          type: string
          description: Stable public identifier (ClientPublicId).
          format: uuid
        foreignId:
          type: string
        name:
          type: string
        contact:
          type: string
        address:
          $ref: '#/components/schemas/Client_REST_API_Address'
        email:
          type: string
        countryCode:
          type: string
        currencyType:
          type: string
        notes:
          type: string
        paymentDays:
          type: integer
          format: int32
        orgno:
          type: string
        phone:
          type: string
        user:
          $ref: '#/components/schemas/Client_REST_API_UserReferenceUuid'
        approver:
          $ref: '#/components/schemas/Client_REST_API_UserReferenceUuid'
        deliveryType:
          type: string
        vatNr:
          type: string
        gln:
          type: string
        template:
          $ref: >-
            #/components/schemas/Client_REST_API_ClientInvoiceTemplateReferenceUuid
        ediRecipient:
          $ref: '#/components/schemas/Client_REST_API_EdiRecipient'
        fetchEdiRecipient:
          type: boolean
        active:
          type: boolean
        clientType:
          type: string
        dimensionEntries:
          $ref: '#/components/schemas/Client_REST_API_DimensionEntriesUuid'
        clientBroker:
          $ref: '#/components/schemas/Client_REST_API_ClientBrokerReferences'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Client_REST_API_ClientAgreements:
      type: object
      properties:
        clientAgreements:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_ClientAgreement'
    Client_REST_API_ClientAgreement:
      type: object
      properties:
        id:
          type: integer
          format: int32
        foreignId:
          type: string
        notes:
          type: string
        revisionNr:
          type: integer
          format: int32
        startDate:
          type: string
        startInvoiceDate:
          type: string
        nextInvoiceDate:
          type: string
        endDate:
          type: string
        renewalNotificationDate:
          type: string
        yourReference:
          type: string
        ourReference:
          $ref: '#/components/schemas/Client_REST_API_UserReference'
        approver:
          $ref: '#/components/schemas/Client_REST_API_UserReference'
        currency:
          type: string
        paymentDays:
          type: integer
          format: int32
        invoiceDay:
          type: string
        invoiceIntervalMonths:
          type: integer
          format: int32
        clientInvoiceTemplateRef:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoiceTemplateReference'
        description:
          type: string
        poNr:
          type: string
        agreementNr:
          type: string
        subscriptionNr:
          type: string
        registrationUser:
          $ref: '#/components/schemas/Client_REST_API_UserReference'
        registrationDate:
          type: string
        deleted:
          type: boolean
        clientRef:
          $ref: '#/components/schemas/Client_REST_API_ClientReference'
        firstInvoiceRows:
          $ref: '#/components/schemas/Client_REST_API_ClientAgreementRows'
        recurringRows:
          $ref: '#/components/schemas/Client_REST_API_ClientAgreementRows'
        fields:
          $ref: '#/components/schemas/Client_REST_API_Fields'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Client_REST_API_ClientAgreementRows:
      type: object
      properties:
        rows:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_ClientAgreementRow'
    Client_REST_API_ClientAgreementRow:
      type: object
      properties:
        quantity:
          type: number
        price:
          type: integer
          format: int64
        product:
          $ref: '#/components/schemas/Client_REST_API_ProductReference'
        unit:
          type: string
        description:
          type: string
        discount:
          $ref: '#/components/schemas/Client_REST_API_Discount'
        fields:
          $ref: '#/components/schemas/Client_REST_API_Fields'
        dimensions:
          $ref: '#/components/schemas/Client_REST_API_DimensionEntries'
    Client_REST_API_ClientInvoiceTemplates:
      type: object
      properties:
        clientInvoiceTemplates:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_ClientInvoiceTemplate'
    Client_REST_API_ClientInvoiceTemplate:
      type: object
      properties:
        id:
          type: integer
          format: int32
        foreignId:
          type: string
        name:
          type: string
        description:
          type: string
    Client_REST_API_ClientInvoices:
      type: object
      properties:
        offset:
          type: integer
          format: int32
        limit:
          type: integer
          format: int32
        size:
          type: integer
          format: int32
        clientInvoices:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_ClientInvoice'
    Client_REST_API_ClientInvoice:
      required:
        - clientRef
        - currency
      type: object
      properties:
        id:
          type: integer
          format: int32
        foreignId:
          type: string
        certified:
          type: boolean
        certifiedDate:
          type: string
        clientRef:
          $ref: '#/components/schemas/Client_REST_API_ClientReference'
        clientInvoiceTemplateRef:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoiceTemplateReference'
        currency:
          type: string
        currencyRate:
          type: number
          format: double
        amount:
          type: integer
          format: int64
        vat:
          type: integer
          format: int64
        endClient:
          $ref: '#/components/schemas/Client_REST_API_ClientReference'
        debitInvoiceNr:
          type: integer
          format: int32
        deleteRowReferenceWhenCredit:
          type: boolean
        creditInvoices:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoiceReferences'
        aggregatedInvoices:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoiceReferences'
        deliveryAddress:
          $ref: '#/components/schemas/Client_REST_API_Address'
        deliveryDate:
          type: string
        deliveryEmail:
          type: string
        deliveryName:
          type: string
        deliveryType:
          $ref: '#/components/schemas/Client_REST_API_ClientDeliveryType'
        disabled:
          type: boolean
        dueDate:
          type: string
        invoiceNr:
          type: integer
          format: int32
        invoiceAddress:
          $ref: '#/components/schemas/Client_REST_API_Address'
        countryCode:
          type: string
        vatNr:
          type: string
        invoiceDate:
          type: string
        invoiceEmail:
          type: string
        notes:
          type: string
        ourReference:
          $ref: '#/components/schemas/Client_REST_API_UserReference'
        approver:
          $ref: '#/components/schemas/Client_REST_API_UserReference'
        poNr:
          type: string
        agreementNr:
          type: string
        subscriptionNr:
          type: string
        remaining:
          type: integer
          format: int64
        sent:
          type: boolean
        yourReference:
          type: string
        gln:
          type: string
        clientAgreementRef:
          $ref: '#/components/schemas/Client_REST_API_ClientAgreementReference'
        period:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoicePeriod'
        fields:
          $ref: '#/components/schemas/Client_REST_API_Fields'
        ediPeriodType:
          type: string
        approved:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoiceApproval'
        files:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoiceFiles'
        automaticActionsDisabled:
          type: boolean
        automaticActionsMessage:
          type: string
        invoiceDeliveries:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoiceDeliveries'
        rows:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoiceRows'
        factoring:
          type: boolean
        reinvoicings:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoiceReinvoicings'
        selfInvoiceReferences:
          $ref: '#/components/schemas/Client_REST_API_SupplierInvoiceRelation'
        lastPaymentDate:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Client_REST_API_ClientInvoiceReferences:
      type: object
      properties:
        clientInvoices:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_ClientInvoiceReference'
    Client_REST_API_ClientInvoiceReference:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Client_REST_API_ClientAgreementReference:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Client_REST_API_ClientProjectReference:
      type: object
      properties:
        id:
          type: string
          description: ClientProjectKey UUID.
          format: uuid
    Client_REST_API_ClientInvoicePeriod:
      type: object
      properties:
        startDate:
          type: string
        endDate:
          type: string
    Client_REST_API_ClientInvoiceApproval:
      type: object
      properties:
        user:
          $ref: '#/components/schemas/Client_REST_API_UserReference'
        registrationDate:
          type: string
    Client_REST_API_ClientInvoiceFiles:
      type: object
      properties:
        files:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_ClientInvoiceFile'
    Client_REST_API_ClientInvoiceFile:
      required:
        - data
        - filename
      type: object
      properties:
        id:
          type: integer
          format: int32
        filename:
          type: string
        data:
          type: array
          description: File data as array of byte values
          items:
            type: integer
    Client_REST_API_ClientInvoicePayment:
      type: object
      properties:
        date:
          type: string
        invoiceAmount:
          type: integer
          format: int64
        accountingAmount:
          type: integer
          format: int64
        transactions:
          $ref: >-
            #/components/schemas/Client_REST_API_ClientInvoicePaymentTransactions
        files:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoiceFiles'
    Client_REST_API_ClientInvoicePaymentTransactions:
      type: object
      properties:
        transactions:
          type: array
          items:
            $ref: >-
              #/components/schemas/Client_REST_API_ClientInvoicePaymentTransaction
    Client_REST_API_ClientInvoicePaymentTransaction:
      required:
        - accountNr
        - amount
      type: object
      properties:
        accountNr:
          type: integer
          format: int32
        amount:
          type: integer
          format: int64
    Client_REST_API_ClientInvoiceComment:
      required:
        - comment
      type: object
      properties:
        comment:
          type: string
    Client_REST_API_ClientInvoiceDeliveries:
      type: object
      properties:
        invoiceDeliveries:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_ClientInvoiceDelivery'
    Client_REST_API_ClientInvoiceDelivery:
      type: object
      properties:
        deliveryMethod:
          $ref: '#/components/schemas/Client_REST_API_ClientDeliveryType'
        registrationUser:
          $ref: '#/components/schemas/Client_REST_API_UserReference'
        registrationDatetime:
          type: string
    Client_REST_API_ClientInvoiceRows:
      type: object
      properties:
        rows:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_ClientInvoiceRow'
    Client_REST_API_ClientInvoiceRow:
      type: object
      properties:
        id:
          type: integer
          format: int32
        description:
          type: string
        discount:
          $ref: '#/components/schemas/Client_REST_API_Discount'
        price:
          type: integer
          format: int64
        accountNr:
          type: integer
          format: int32
        product:
          $ref: '#/components/schemas/Client_REST_API_ProductReference'
        quantity:
          type: number
        unit:
          type: string
        vat:
          type: number
        project:
          $ref: '#/components/schemas/Client_REST_API_ClientProjectReference'
        dimensions:
          $ref: '#/components/schemas/Client_REST_API_DimensionsDistribution'
        period:
          $ref: '#/components/schemas/Client_REST_API_ClientInvoicePeriod'
        deliveryDate:
          type: string
        fields:
          $ref: '#/components/schemas/Client_REST_API_Fields'
        accruals:
          $ref: '#/components/schemas/Client_REST_API_Accruals'
    Client_REST_API_DimensionsDistribution:
      type: object
      properties:
        dimensionEntries:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_DimensionsDistributionEntry'
    Client_REST_API_DimensionsDistributionEntry:
      type: object
      properties:
        id:
          type: integer
          format: int32
        percentage:
          type: number
    Client_REST_API_Accruals:
      type: object
      properties:
        accruals:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_Accrual'
    Client_REST_API_Accrual:
      type: object
      properties:
        month:
          type: string
        sum:
          type: integer
          format: int64
    Client_REST_API_ClientInvoiceReinvoicings:
      type: object
      properties:
        rows:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_ClientInvoiceReinvoicing'
    Client_REST_API_ClientInvoiceReinvoicing:
      type: object
      properties:
        id:
          type: integer
          format: int32
        reinvoicingType:
          type: string
        supplierInvoice:
          type: integer
          format: int32
        expenseEntry:
          type: integer
          format: int32
    Client_REST_API_SupplierInvoiceRelation:
      type: object
      properties:
        supplierInvoiceIds:
          type: array
          items:
            type: integer
            format: int32
    Client_REST_API_Discount:
      type: object
      properties:
        absolute:
          type: integer
          format: int64
        percentage:
          type: number
    Client_REST_API_Fields:
      type: object
      properties:
        fields:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_Field'
    Client_REST_API_Field:
      required:
        - alias
        - value
      type: object
      properties:
        alias:
          type: string
        value:
          type: string
    Client_REST_API_Address:
      type: object
      properties:
        address1:
          type: string
        address2:
          type: string
        zipCode:
          type: string
        state:
          type: string
        country:
          type: string
    Client_REST_API_UserReference:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Client_REST_API_UserReferenceUuid:
      type: object
      properties:
        id:
          type: string
          description: User UUID.
          format: uuid
    Client_REST_API_ClientReference:
      type: object
      properties:
        id:
          type: string
          description: ClientPublicId UUID.
          format: uuid
    Client_REST_API_ProductReference:
      type: object
      properties:
        id:
          type: string
          description: ProductPublicId UUID.
          format: uuid
    Client_REST_API_ClientInvoiceTemplateReference:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Client_REST_API_ClientInvoiceTemplateReferenceUuid:
      type: object
      properties:
        id:
          type: string
          description: ClientInvoiceTemplate UUID.
          format: uuid
    Client_REST_API_ClientDeliveryTypes:
      type: object
      properties:
        clientDeliveryTypes:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_ClientDeliveryTypeOption'
    Client_REST_API_ClientDeliveryTypeOption:
      type: object
      properties:
        name:
          type: string
        default:
          type: boolean
    Client_REST_API_Products:
      required:
        - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_Product'
        pagination:
          $ref: '#/components/schemas/Client_REST_API_Pagination'
    Client_REST_API_Product:
      type: object
      properties:
        id:
          type: string
          description: Stable public identifier (ProductPublicId).
          format: uuid
        foreignId:
          type: string
        name:
          type: string
        type:
          type: string
        unit:
          type: string
        price:
          type: integer
          format: int64
        dimensionEntries:
          $ref: '#/components/schemas/Client_REST_API_DimensionEntriesUuid'
        accountNr:
          type: integer
          format: int32
        vatPercentage:
          type: number
          format: double
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Client_REST_API_ProductCreated:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          format: uuid
    Client_REST_API_ProductSaved:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          format: uuid
    Client_REST_API_DimensionEntries:
      type: object
      properties:
        dimensionEntries:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_DimensionEntryReference'
    Client_REST_API_DimensionEntryReference:
      type: object
      properties:
        id:
          type: integer
          format: int32
    Client_REST_API_DimensionEntriesUuid:
      type: object
      properties:
        dimensionEntries:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_DimensionEntryReferenceUuid'
    Client_REST_API_DimensionEntryReferenceUuid:
      type: object
      properties:
        id:
          type: string
          description: DimensionEntry UUID.
          format: uuid
    Client_REST_API_ClientBrokerReferences:
      type: object
      properties:
        clientBrokers:
          type: array
          items:
            $ref: '#/components/schemas/Client_REST_API_ClientBrokerReference'
    Client_REST_API_ClientBrokerReference:
      type: object
      properties:
        id:
          type: string
          description: ClientPublicId UUID of the broker client.
          format: uuid
    Client_REST_API_ClientDeliveryType:
      type: string
      enum:
        - MAIL
        - EDI
        - EMAIL
        - MANUALLY
        - SVEA
    Client_REST_API_EdiRecipient:
      type: object
      properties:
        name:
          type: string
    Client_REST_API_ProblemDetail:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          format: int32
        detail:
          type: string
        instance:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        traceId:
          type: string
          description: Trace ID for debugging
      additionalProperties: true
      description: >
        A machine-readable format for specifying errors in HTTP API responses based on https://www.rfc-editor.org/rfc/rfc7807

    Revenue_REST_API_Revenue:
      required:
        - countryCode
        - externalId
        - id
        - ledger
        - remainingAccountingAmount
        - transactionDate
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier for the revenue
          format: int32
        ledger:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueLedgerReference'
        externalId:
          type: string
          description: External reference ID
        revision:
          type: integer
          description: Revision number
          format: int32
        client:
          $ref: '#/components/schemas/Revenue_REST_API_ClientReference'
        countryCode:
          type: string
          description: Country code (e.g., SE, NO, DK)
          example: SE
        transactionDate:
          type: string
          description: Transaction date in ISO format (YYYY-MM-DD)
          format: date
        remainingAccountingAmount:
          type: integer
          description: Remaining accounting amount
          format: int64
        rows:
          type: array
          items:
            $ref: '#/components/schemas/Revenue_REST_API_RevenueRow'
    Revenue_REST_API_RevenueLedgerReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Ledger ID
          format: int32
    Revenue_REST_API_RevenueLedger:
      required:
        - accountNr
        - id
        - name
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier for the ledger
          format: int32
        name:
          type: string
          description: Human-readable name of the ledger
        accountNr:
          type: integer
          description: Account number associated with this ledger
          format: int32
    Revenue_REST_API_RevenueLedgersResponse:
      required:
        - ledgers
        - limit
        - offset
        - size
      type: object
      properties:
        ledgers:
          type: array
          items:
            $ref: '#/components/schemas/Revenue_REST_API_RevenueLedger'
        offset:
          type: integer
          description: Pagination offset used
          format: int32
        limit:
          type: integer
          description: Maximum number of results requested
          format: int32
        size:
          type: integer
          description: Total number of ledgers available
          format: int32
    Revenue_REST_API_RevenuesResponse:
      required:
        - limit
        - offset
        - revenues
        - size
      type: object
      properties:
        revenues:
          type: array
          items:
            $ref: '#/components/schemas/Revenue_REST_API_Revenue'
        offset:
          type: integer
          description: Pagination offset used
          format: int32
        limit:
          type: integer
          description: Maximum number of results requested
          format: int32
        size:
          type: integer
          description: Total number of revenues available
          format: int32
        aggregation:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueAggregation'
    Revenue_REST_API_RevenueAggregation:
      required:
        - accountingAmount
        - vatAccountingAmount
      type: object
      properties:
        accountingAmount:
          type: integer
          description: Total accounting amount
          format: int64
        vatAccountingAmount:
          type: integer
          description: Total VAT accounting amount
          format: int64
    Revenue_REST_API_ClientReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Client ID
          format: int32
    Revenue_REST_API_RevenueRow:
      required:
        - accountingAmount
        - id
        - originalAmount
        - period
        - product
      type: object
      properties:
        id:
          type: integer
          description: Row ID
          format: int32
        product:
          $ref: '#/components/schemas/Revenue_REST_API_ProductReference'
        originalAmount:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueOriginalAmount'
        accountingAmount:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueAccountingAmount'
        period:
          $ref: '#/components/schemas/Revenue_REST_API_Period'
        dimensions:
          $ref: '#/components/schemas/Revenue_REST_API_DimensionsDistribution'
    Revenue_REST_API_ProductReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Product ID
          format: int32
    Revenue_REST_API_RevenueOriginalAmount:
      required:
        - amount
        - currency
        - vat
      type: object
      properties:
        amount:
          type: integer
          description: Amount in minor units
          format: int64
        vat:
          type: integer
          description: VAT in minor units
          format: int64
        currency:
          type: string
          description: Currency code (e.g., SEK, EUR, USD)
    Revenue_REST_API_RevenueAccountingAmount:
      required:
        - amount
        - vat
      type: object
      properties:
        amount:
          type: integer
          description: Amount in accounting currency minor units
          format: int64
        vat:
          type: integer
          description: VAT in accounting currency minor units
          format: int64
    Revenue_REST_API_Period:
      required:
        - end
        - start
      type: object
      properties:
        start:
          type: string
          description: Start date in ISO format (YYYY-MM-DD)
          format: date
        end:
          type: string
          description: End date in ISO format (YYYY-MM-DD)
          format: date
    Revenue_REST_API_DimensionsDistribution:
      type: object
      properties:
        dimensionEntries:
          type: array
          items:
            $ref: '#/components/schemas/Revenue_REST_API_DimensionEntry'
    Revenue_REST_API_DimensionEntry:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Dimension ID
          format: int32
        percentage:
          type: string
          description: Percentage as decimal string to preserve precision
    Revenue_REST_API_Created:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: ID of the created resource
          format: int32
    Revenue_REST_API_Ok:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: ID of the resource
          format: int32
        message:
          type: string
          description: Optional message
    Revenue_REST_API_RevenueCreate:
      required:
        - countryCode
        - externalId
        - files
        - ledger
        - transactionDate
      type: object
      properties:
        debitRevenue:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueReference'
        ledger:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueLedgerReference'
        externalId:
          type: string
          description: External reference ID
        client:
          $ref: '#/components/schemas/Revenue_REST_API_ClientReference'
        newClient:
          $ref: '#/components/schemas/Revenue_REST_API_NewClient'
        countryCode:
          type: string
          description: Country code (e.g., SE, NO, DK)
        transactionDate:
          type: string
          description: Transaction date in ISO format (YYYY-MM-DD)
          format: date
        rows:
          type: array
          items:
            $ref: '#/components/schemas/Revenue_REST_API_RevenueCreateRow'
        files:
          type: array
          items:
            $ref: '#/components/schemas/Revenue_REST_API_RevenueFile'
    Revenue_REST_API_RevenueCreateRow:
      required:
        - originalAmount
        - product
      type: object
      properties:
        product:
          $ref: '#/components/schemas/Revenue_REST_API_ProductReference'
        originalAmount:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueOriginalAmount'
        accountingAmount:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueAccountingAmount'
        period:
          $ref: '#/components/schemas/Revenue_REST_API_Period'
        dimensions:
          $ref: '#/components/schemas/Revenue_REST_API_DimensionsDistribution'
    Revenue_REST_API_RevenueUpdate:
      required:
        - create
        - message
      type: object
      properties:
        create:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueCreate'
        message:
          type: string
          description: Reason for the update
    Revenue_REST_API_RevenueReference:
      type: object
      properties:
        id:
          type: integer
          description: Revenue ID
          format: int64
        externalId:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueExternalIdReference'
      description: Reference to a revenue by ID or external ID
    Revenue_REST_API_RevenueExternalIdReference:
      required:
        - id
        - revenueLedger
      type: object
      properties:
        id:
          type: string
          description: External ID
        revenueLedger:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueLedgerReference'
    Revenue_REST_API_NewClient:
      required:
        - clientType
        - foreignId
        - name
      type: object
      properties:
        foreignId:
          type: string
          description: Foreign ID of the client
        name:
          type: string
          description: Name of the client
        clientType:
          type: string
          description: Type of client
          enum:
            - Organisation
            - Person
    Revenue_REST_API_RevenueFile:
      required:
        - data
        - filename
      type: object
      properties:
        filename:
          type: string
          description: Name of the file
        data:
          type: array
          description: >-
            File data as array of byte values (e.g., [72, 101, 108, 108, 111] for "Hello")
          items:
            type: integer
    Revenue_REST_API_RevenueFuzzyConsolidation:
      required:
        - bankTransactionReferences
        - files
        - revenueReferences
        - transactionFees
      type: object
      properties:
        revenueReferences:
          type: array
          items:
            $ref: '#/components/schemas/Revenue_REST_API_RevenueReference'
        bankTransactionReferences:
          type: array
          items:
            $ref: '#/components/schemas/Revenue_REST_API_BankTransactionReference'
        transactionFees:
          $ref: '#/components/schemas/Revenue_REST_API_RevenueTransactionFees'
        previousLedger:
          $ref: '#/components/schemas/Revenue_REST_API_PreviousLedger'
        fxAmount:
          type: integer
          description: Foreign exchange amount
          format: int64
        files:
          type: array
          items:
            $ref: '#/components/schemas/Revenue_REST_API_RevenueFile'
    Revenue_REST_API_BankTransactionReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Bank transaction ID
          format: int64
    Revenue_REST_API_RevenueTransactionFees:
      required:
        - amount
        - currencyType
        - vat
      type: object
      properties:
        currencyType:
          type: string
          description: Currency code (e.g., SEK, EUR, USD)
        amount:
          type: integer
          description: Fee amount in minor units
          format: int64
        vat:
          type: integer
          description: VAT amount in minor units
          format: int64
    Revenue_REST_API_PreviousLedger:
      required:
        - accountNr
        - amount
      type: object
      properties:
        accountNr:
          type: integer
          description: Account number
          format: int32
        amount:
          $ref: '#/components/schemas/Revenue_REST_API_CurrencyAmount'
    Revenue_REST_API_CurrencyAmount:
      required:
        - amount
        - currencyType
      type: object
      properties:
        currencyType:
          type: string
          description: Currency code (e.g., SEK, EUR, USD)
        amount:
          type: integer
          description: Amount in minor units
          format: int64
    Revenue_REST_API_RevenueFuzzyConsolidationResult:
      required:
        - bankTransactionAccountingAmount
        - bankTransactionCount
        - revenueAccountingAmount
        - revenueCount
      type: object
      properties:
        bankTransactionCount:
          type: integer
          description: Number of bank transactions consolidated
          format: int32
        revenueCount:
          type: integer
          description: Number of revenues consolidated
          format: int32
        bankTransactionAccountingAmount:
          type: integer
          description: Total accounting amount of bank transactions
          format: int64
        revenueAccountingAmount:
          type: integer
          description: Total accounting amount of revenues
          format: int64
    Revenue_REST_API_ProblemDetail:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          format: int32
        detail:
          type: string
        instance:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        traceId:
          type: string
          description: Trace ID for debugging
      additionalProperties: true
      description: >
        A machine-readable format for specifying errors in HTTP API responses based on https://www.rfc-editor.org/rfc/rfc7807

    Bank_REST_API_BankAccounts:
      required:
        - bankAccounts
      type: object
      properties:
        bankAccounts:
          type: array
          items:
            $ref: '#/components/schemas/Bank_REST_API_BankAccount'
      description: Container for bank accounts list
    Bank_REST_API_BankAccount:
      required:
        - bic
        - currency
        - iban
        - id
        - name
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier for the bank account
          format: int64
        name:
          type: string
          description: Name of the bank account
        currency:
          type: string
          description: Currency type (e.g., SEK, EUR, USD)
          example: SEK
        bic:
          type: string
          description: Bank Identifier Code (BIC/SWIFT code)
          example: HANDSESS
        iban:
          type: string
          description: International Bank Account Number
          example: SE1234567890123456789012
        bankgiro:
          type: string
          description: Swedish Bankgiro number (optional)
          example: 123-4567
      description: Bank account information
    Bank_REST_API_BankTransactions:
      required:
        - bankTransactions
        - limit
        - offset
        - size
      type: object
      properties:
        offset:
          type: integer
          description: >-
            The offset into the full result that this page represents (0-indexed)
          format: int32
        limit:
          type: integer
          description: The maximum number of results requested
          format: int32
        size:
          type: integer
          description: The actual number of results in this page
          format: int32
        bankTransactions:
          type: array
          items:
            $ref: '#/components/schemas/Bank_REST_API_BankTransaction'
      description: Paginated list of bank transactions
    Bank_REST_API_BankTransaction:
      required:
        - amount
        - bankAccount
        - company
        - date
        - deleted
        - deletedDate
        - description
        - id
        - reference
        - remainingAmount
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Bank_REST_API_BankTransactionReference'
        bankAccount:
          $ref: '#/components/schemas/Bank_REST_API_BankAccountReference'
        company:
          $ref: '#/components/schemas/Bank_REST_API_Company'
        date:
          type: string
          description: Transaction date
          format: date
        amount:
          type: integer
          description: Transaction amount in cents
          format: int64
        remainingAmount:
          type: integer
          description: Remaining amount in cents (for partial payments)
          format: int64
        reference:
          type: string
          description: Transaction reference
        description:
          type: string
          description: Transaction description
        deleted:
          type: boolean
          description: Whether the transaction is deleted
        deletedDate:
          type: string
          description: Date when the transaction was deleted
          format: date
        voucher:
          $ref: '#/components/schemas/Bank_REST_API_Voucher'
        comments:
          $ref: '#/components/schemas/Bank_REST_API_Comments'
        messages:
          $ref: '#/components/schemas/Bank_REST_API_Messages'
        files:
          $ref: '#/components/schemas/Bank_REST_API_Files'
        bgcMetadata:
          $ref: '#/components/schemas/Bank_REST_API_BgcMetadata'
        endToEndId:
          type: string
          description: End-to-end identifier for the transaction
      description: Bank transaction information
    Bank_REST_API_BankTransactionReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Bank transaction ID
          format: int64
      description: Reference to a bank transaction
    Bank_REST_API_BankAccountReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Bank account ID
          format: int64
      description: Reference to a bank account
    Bank_REST_API_Company:
      required:
        - id
        - name
      type: object
      properties:
        id:
          type: string
          description: The company UUID
          format: uuid
        name:
          type: string
          description: Company name
      description: Company information
    Bank_REST_API_Voucher:
      required:
        - id
        - number
        - serieName
      type: object
      properties:
        id:
          type: integer
          description: Voucher ID
          format: int32
        serieName:
          type: string
          description: Voucher series name
        number:
          type: integer
          description: Voucher number
          format: int64
      description: Voucher information
    Bank_REST_API_Comments:
      type: object
      properties:
        comment:
          type: array
          items:
            type: string
      description: List of comments
    Bank_REST_API_Messages:
      type: object
      properties:
        message:
          type: array
          items:
            type: string
      description: List of messages
    Bank_REST_API_Files:
      type: object
      properties:
        file:
          type: array
          items:
            $ref: '#/components/schemas/Bank_REST_API_File'
      description: List of files
    Bank_REST_API_File:
      required:
        - data
        - filename
      type: object
      properties:
        filename:
          type: string
          description: Name of the file
        data:
          type: array
          description: >-
            File data as array of byte values (e.g., [72, 101, 108, 108, 111] for "Hello")
          items:
            type: integer
      description: File with binary data
    Bank_REST_API_BgcMetadata:
      required:
        - address
        - city
        - country
        - name
        - orgno
        - zipcode
      type: object
      properties:
        bankgiro:
          type: integer
          description: Bankgiro number (optional)
          format: int64
        name:
          type: string
          description: Name
        zipcode:
          type: string
          description: Zip code
        country:
          type: string
          description: Country
        city:
          type: string
          description: City
        address:
          type: string
          description: Address
        orgno:
          type: string
          description: Organization number
      description: BGC (Bankgirocentralen) metadata
    Bank_REST_API_Deleted:
      type: object
      properties:
        id:
          type: integer
          description: ID of the deleted entity
          format: int32
      description: Response indicating a successful deletion
    Bank_REST_API_Ok:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: ID of the affected entity
          format: int32
        message:
          type: string
          description: Optional message
      description: Generic success response
    Bank_REST_API_BankTransactionDistributions:
      type: object
      properties:
        bankTransactionDistribution:
          type: array
          items:
            $ref: '#/components/schemas/Bank_REST_API_BankTransactionDistribution'
      description: List of bank transaction distributions
    Bank_REST_API_BankTransactionDistribution:
      required:
        - accountingAmount
        - comment
        - id
        - nativeAmount
        - registrationDate
      type: object
      properties:
        id:
          type: integer
          description: Distribution ID
          format: int64
        clientInvoice:
          $ref: '#/components/schemas/Bank_REST_API_ClientInvoiceReference'
        revenue:
          $ref: '#/components/schemas/Bank_REST_API_RevenueReference'
        supplierInvoice:
          $ref: '#/components/schemas/Bank_REST_API_SupplierInvoiceReference'
        comment:
          type: string
          description: Distribution comment
        nativeAmount:
          $ref: '#/components/schemas/Bank_REST_API_CurrencyAmount'
        accountingAmount:
          type: integer
          description: Accounting amount in cents
          format: int64
        registrationDate:
          type: string
          description: Registration date of the distribution
          format: date
      description: A single bank transaction distribution
    Bank_REST_API_ClientInvoiceReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Client invoice ID
          format: int32
      description: Reference to a client invoice
    Bank_REST_API_SupplierInvoiceReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Supplier invoice ID
          format: int32
      description: Reference to a supplier invoice
    Bank_REST_API_BankTransactionConsolidateRevenues:
      required:
        - file
        - requireFullConsolidation
      type: object
      properties:
        requireFullConsolidation:
          type: boolean
          description: Whether to require full consolidation (validates all amounts match)
        revenue:
          type: array
          description: List of revenue distributions to create
          items:
            $ref: '#/components/schemas/Bank_REST_API_ConsolidateRevenueEntry'
        file:
          type: array
          description: File attachments
          items:
            $ref: '#/components/schemas/Bank_REST_API_File'
      description: Request to consolidate revenues for a bank transaction
    Bank_REST_API_ConsolidateRevenueEntry:
      required:
        - bankTransactionAmount
        - revenueAmount
        - revenueReference
        - transactionFees
      type: object
      properties:
        revenueReference:
          $ref: '#/components/schemas/Bank_REST_API_RevenueReference'
        bankTransactionAmount:
          type: integer
          description: Amount from the bank transaction
          format: int64
        revenueAmount:
          $ref: '#/components/schemas/Bank_REST_API_CurrencyAmount'
        transactionFees:
          $ref: '#/components/schemas/Bank_REST_API_RevenueTransactionFees'
      description: A single revenue distribution entry for consolidation
    Bank_REST_API_RevenueReference:
      type: object
      properties:
        id:
          type: integer
          description: Internal revenue ID
          format: int64
        externalId:
          required:
            - id
            - revenueLedger
          type: object
          properties:
            id:
              type: string
              description: External ID
            revenueLedger:
              $ref: '#/components/schemas/Bank_REST_API_RevenueLedgerReference'
          description: External revenue ID with ledger reference
      description: Reference to a revenue, either by internal ID or external ID
    Bank_REST_API_RevenueLedgerReference:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: Revenue ledger ID
          format: int64
      description: Reference to a revenue ledger
    Bank_REST_API_CurrencyAmount:
      required:
        - amount
        - currencyType
      type: object
      properties:
        currencyType:
          type: string
          description: Currency type (e.g., SEK, EUR, USD)
        amount:
          type: integer
          description: Amount in cents
          format: int64
      description: An amount in a specific currency
    Bank_REST_API_RevenueTransactionFees:
      required:
        - amount
        - currencyType
        - vat
      type: object
      properties:
        currencyType:
          type: string
          description: Currency type
        amount:
          type: integer
          description: Fee amount in cents
          format: int64
        vat:
          type: integer
          description: VAT amount in cents
          format: int64
      description: Revenue transaction fees
    Bank_REST_API_CreateBankTransaction:
      required:
        - amount
        - bankAccountId
        - date
        - description
        - files
        - reference
      type: object
      properties:
        bankAccountId:
          type: integer
          description: ID of the bank account
          format: int64
        date:
          type: string
          description: Transaction date
          format: date
        amount:
          type: integer
          description: Transaction amount in cents
          format: int64
        reference:
          type: string
          description: Transaction reference
        description:
          type: string
          description: Transaction description
        files:
          required:
            - file
          type: object
          properties:
            file:
              type: array
              items:
                $ref: '#/components/schemas/Bank_REST_API_File'
          description: Container for file attachments
      description: Request to create a manual bank transaction
    Bank_REST_API_BankInformationValidateRequest:
      type: object
      properties:
        bicIban:
          $ref: '#/components/schemas/Bank_REST_API_BicIban'
        supplierInvoiceAccount:
          $ref: '#/components/schemas/Bank_REST_API_SupplierInvoicePayee'
      description: >-
        Request to validate bank account information. Provide either bicIban or supplierInvoiceAccount.
    Bank_REST_API_BicIban:
      required:
        - bic
        - iban
      type: object
      properties:
        bic:
          type: string
          description: Bank Identifier Code (BIC/SWIFT code)
        iban:
          type: string
          description: International Bank Account Number
      description: BIC and IBAN combination for international bank accounts
    Bank_REST_API_SupplierInvoicePayee:
      required:
        - nr
        - type
      type: object
      properties:
        type:
          type: string
          description: Type of deposit account
          enum:
            - BankGiro
            - PlusGiro
            - Iban
            - BankAccount
            - Other
            - InternationalBankAccountWithRouting
            - InternationalBankAccountWithAccountNumber
            - InternationalBankAccountViaIntermediary
            - InternationalBankAccountInRussiaInRub
            - NorwegianBankAccount
        nr:
          type: string
          description: Account number
      description: Supplier invoice payee account information
    Bank_REST_API_BankInformationValidateResult:
      required:
        - message
        - success
      type: object
      properties:
        success:
          type: boolean
          description: Whether the bank information is valid
        message:
          type: string
          description: Validation message (empty if successful, error description if not)
      description: Result of bank information validation
    Bank_REST_API_ProblemDetail:
      type: object
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          format: int32
        detail:
          type: string
        instance:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        traceId:
          type: string
          description: Trace ID for debugging
      additionalProperties: true
      description: >
        A machine-readable format for specifying errors in HTTP API responses based on https://www.rfc-editor.org/rfc/rfc7807

  responses:
    Exchange_Rate_REST_API_DefaultError:
      description: |
        Unexpected error (e.g. 401, 403, 429, 500, 503, 504). Body follows
        RFC 9457 Problem Details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Exchange_Rate_REST_API_ProblemDetail'
    Company_REST_API_DefaultError:
      description: |
        Unexpected error (e.g. 401, 403, 429, 500, 503, 504). Body follows
        RFC 9457 Problem Details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Company_REST_API_ProblemDetail'
    Project_REST_API_DefaultError:
      description: |
        Unexpected error (e.g. 401, 403, 429, 500, 503, 504). Body follows
        RFC 9457 Problem Details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Project_REST_API_ProblemDetail'
    Accounting_REST_API_DefaultError:
      description: |
        Unexpected error (e.g. 401, 403, 429, 500, 503, 504). Body follows
        RFC 9457 Problem Details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Accounting_REST_API_ProblemDetail'
    Payroll_REST_API_DefaultError:
      description: |
        Unexpected error (e.g. 401, 403, 429, 500, 503, 504). Body follows
        RFC 9457 Problem Details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Payroll_REST_API_ProblemDetail'
    User_REST_API_DefaultError:
      description: |
        Unexpected error (e.g. 401, 403, 429, 500, 503, 504). Body follows
        RFC 9457 Problem Details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/User_REST_API_ProblemDetail'
    Expense_REST_API_DefaultError:
      description: |
        Unexpected error (e.g. 401, 403, 429, 500, 503, 504). Body follows
        RFC 9457 Problem Details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Expense_REST_API_ProblemDetail'
    Supplier_REST_API_DefaultError:
      description: |
        Unexpected error (e.g. 401, 403, 429, 500, 503, 504). Body follows
        RFC 9457 Problem Details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Supplier_REST_API_ProblemDetail'
    Client_REST_API_DefaultError:
      description: |
        Unexpected error (e.g. 401, 403, 429, 500, 503, 504). Body follows
        RFC 9457 Problem Details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Client_REST_API_ProblemDetail'
    Revenue_REST_API_DefaultError:
      description: |
        Unexpected error (e.g. 401, 403, 429, 500, 503, 504). Body follows
        RFC 9457 Problem Details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Revenue_REST_API_ProblemDetail'
    Bank_REST_API_DefaultError:
      description: |
        Unexpected error (e.g. 401, 403, 429, 500, 503, 504). Body follows
        RFC 9457 Problem Details.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Bank_REST_API_ProblemDetail'
  parameters:
    Company_REST_API_CompanyId:
      name: companyId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Company_REST_API_Cursor:
      name: cursor
      in: query
      description: |
        Page token from a previous response's `pagination.nextCursor`. Omit for
        the first page.
      required: false
      schema:
        type: string
        format: uuid
    Project_REST_API_CompanyId:
      name: companyId
      in: path
      description: The company UUID.
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Project_REST_API_Cursor:
      name: cursor
      in: query
      description: |
        Page token from a previous response's `pagination.nextCursor`. Omit for
        the first page.
      required: false
      schema:
        type: string
        format: uuid
    Project_REST_API_CreatedAfter:
      name: createdAfter
      in: query
      description: >-
        Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
      required: false
      schema:
        type: string
        format: date-time
    Project_REST_API_CreatedBefore:
      name: createdBefore
      in: query
      description: >-
        Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Project_REST_API_UpdatedAfter:
      name: updatedAfter
      in: query
      description: >-
        Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Project_REST_API_UpdatedBefore:
      name: updatedBefore
      in: query
      description: >-
        Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Accounting_REST_API_CompanyId:
      name: companyId
      in: path
      description: The company UUID.
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Accounting_REST_API_Order:
      name: order
      in: query
      description: >-
        Sort direction by the resource id cursor (UUIDv7). Defaults to `asc` (oldest-first).
      required: false
      style: form
      explode: true
      schema:
        $ref: '#/components/schemas/Accounting_REST_API_Order'
    Accounting_REST_API_Cursor:
      name: cursor
      in: query
      description: |
        Page token from a previous response's `pagination.nextCursor`. Omit for
        the first page.
      required: false
      schema:
        type: string
        format: uuid
    Accounting_REST_API_CreatedAfter:
      name: createdAfter
      in: query
      description: >-
        Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
      required: false
      schema:
        type: string
        format: date-time
    Accounting_REST_API_CreatedBefore:
      name: createdBefore
      in: query
      description: >-
        Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Accounting_REST_API_UpdatedAfter:
      name: updatedAfter
      in: query
      description: >-
        Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Accounting_REST_API_UpdatedBefore:
      name: updatedBefore
      in: query
      description: >-
        Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Payroll_REST_API_CompanyId:
      name: companyId
      in: path
      description: The company UUID.
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Payroll_REST_API_EventId:
      name: eventId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Payroll_REST_API_UserId:
      name: userId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Payroll_REST_API_RunId:
      name: runId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Payroll_REST_API_PayoutId:
      name: payoutId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Payroll_REST_API_ScheduleId:
      name: scheduleId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Payroll_REST_API_EmploymentContractUserId:
      name: userId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Payroll_REST_API_WorkScheduleId:
      name: scheduleId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Payroll_REST_API_FromDate:
      name: fromDate
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: date
    Payroll_REST_API_ToDate:
      name: toDate
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: date
    Payroll_REST_API_StartDate:
      name: startDate
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: string
        format: date
    Payroll_REST_API_EndDate:
      name: endDate
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: string
        format: date
    Payroll_REST_API_StartDatePath:
      name: startDate
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: date
    Payroll_REST_API_EndDatePath:
      name: endDate
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: date
    Payroll_REST_API_PayrollUsersOffset:
      name: offset
      in: query
      description: The first payroll user result offset. Defaults to 0.
      required: false
      style: form
      explode: true
      schema:
        minimum: 0
        type: integer
        format: int32
        default: 0
    Payroll_REST_API_PayrollUsersLimit:
      name: limit
      in: query
      description: >-
        The maximum number of payroll users to return. Defaults to 100 and is capped at 100.
      required: false
      style: form
      explode: true
      schema:
        maximum: 100
        minimum: 1
        type: integer
        format: int32
        default: 100
    Payroll_REST_API_OpenRunsOffset:
      name: offset
      in: query
      description: The first open payroll run result offset. Defaults to 0.
      required: false
      style: form
      explode: true
      schema:
        minimum: 0
        type: integer
        format: int32
        default: 0
    Payroll_REST_API_OpenRunsLimit:
      name: limit
      in: query
      description: >-
        The maximum number of open payroll runs to return. Defaults to 100 and is capped at 100.
      required: false
      style: form
      explode: true
      schema:
        maximum: 100
        minimum: 1
        type: integer
        format: int32
        default: 100
    Payroll_REST_API_Offset:
      name: offset
      in: query
      required: false
      style: form
      explode: true
      schema:
        minimum: 0
        type: integer
        format: int32
        default: 0
    Payroll_REST_API_Limit:
      name: limit
      in: query
      required: false
      style: form
      explode: true
      schema:
        maximum: 1000
        minimum: 1
        type: integer
        format: int32
        default: 1000
    Payroll_REST_API_Year:
      name: year
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Payroll_REST_API_Month:
      name: month
      in: path
      description: Legacy payroll calendar month where January is 0 and December is 11.
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Payroll_REST_API_CreatedAfter:
      name: createdAfter
      in: query
      description: >-
        Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
      required: false
      schema:
        type: string
        format: date-time
    Payroll_REST_API_CreatedBefore:
      name: createdBefore
      in: query
      description: >-
        Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Payroll_REST_API_UpdatedAfter:
      name: updatedAfter
      in: query
      description: >-
        Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Payroll_REST_API_UpdatedBefore:
      name: updatedBefore
      in: query
      description: >-
        Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    User_REST_API_CompanyId:
      name: companyId
      in: path
      description: The company UUID.
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    User_REST_API_UserId:
      name: userId
      in: path
      description: The user ID.
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    User_REST_API_ForeignId:
      name: foreignId
      in: query
      description: >-
        When supplied, filters the collection to the user matching this external/foreign identifier.
      required: false
      style: form
      explode: true
      schema:
        type: string
    User_REST_API_RoleKey:
      name: roleKey
      in: path
      description: The role key.
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    User_REST_API_AccessTypePath:
      name: type
      in: path
      description: The legacy access type.
      required: true
      style: simple
      explode: false
      schema:
        $ref: '#/components/schemas/User_REST_API_AccessType'
    User_REST_API_Offset:
      name: offset
      in: query
      description: The first result offset. Defaults to 0.
      required: false
      style: form
      explode: true
      schema:
        minimum: 0
        type: integer
        format: int32
        default: 0
    User_REST_API_Limit:
      name: limit
      in: query
      description: The maximum number of users to return. Defaults to 100.
      required: false
      style: form
      explode: true
      schema:
        maximum: 100
        minimum: 1
        type: integer
        format: int32
        default: 100
    User_REST_API_CreatedAfter:
      name: createdAfter
      in: query
      description: >-
        Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
      required: false
      style: form
      explode: true
      schema:
        type: string
        format: date-time
    User_REST_API_CreatedBefore:
      name: createdBefore
      in: query
      description: >-
        Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      style: form
      explode: true
      schema:
        type: string
        format: date-time
    User_REST_API_UpdatedAfter:
      name: updatedAfter
      in: query
      description: >-
        Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      style: form
      explode: true
      schema:
        type: string
        format: date-time
    User_REST_API_UpdatedBefore:
      name: updatedBefore
      in: query
      description: >-
        Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      style: form
      explode: true
      schema:
        type: string
        format: date-time
    Expense_REST_API_CompanyId:
      name: companyId
      in: path
      description: The ID of the company.
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Expense_REST_API_ExpenseFileId:
      name: expenseFileId
      in: path
      description: The ID of the expense file.
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Expense_REST_API_ExpenseEntryId:
      name: expenseEntryId
      in: path
      description: The ID of the expense entry.
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Expense_REST_API_ExpenseId:
      name: expenseId
      in: path
      description: The ID of the expense.
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Expense_REST_API_ExpenseNr:
      name: expenseNr
      in: path
      description: The expense number.
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Expense_REST_API_ExpenseDateStart:
      name: expenseDateStart
      in: query
      description: Lower inclusive bound for expense date filtering.
      required: false
      style: form
      explode: true
      schema:
        type: string
        format: date
    Expense_REST_API_ExpenseDateEnd:
      name: expenseDateEnd
      in: query
      description: Upper inclusive bound for expense date filtering.
      required: false
      style: form
      explode: true
      schema:
        type: string
        format: date
    Expense_REST_API_ExpenseQuery:
      name: query
      in: query
      description: Free-text query used when searching expenses.
      required: false
      style: form
      explode: true
      schema:
        type: string
        default: ''
    Expense_REST_API_ExpenseFilter:
      name: filter
      in: query
      description: Expense filter.
      required: false
      style: form
      explode: true
      schema:
        $ref: '#/components/schemas/Expense_REST_API_ExpenseFilter'
    Expense_REST_API_Encoding:
      name: encoding
      in: query
      description: Optional response encoding. Use base64 to receive base64-encoded bytes.
      required: false
      style: form
      explode: true
      schema:
        type: string
        enum:
          - base64
    Expense_REST_API_UploadEncoding:
      name: encoding
      in: query
      description: >-
        Optional request encoding. Use base64 when the uploaded request body is base64-encoded.
      required: false
      style: form
      explode: true
      schema:
        type: string
        enum:
          - base64
    Supplier_REST_API_CompanyId:
      name: companyId
      in: path
      description: The ID of the company (UUID).
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Supplier_REST_API_SupplierId:
      name: supplierId
      in: path
      description: The public ID of the supplier (SupplierPublicId UUID)
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Supplier_REST_API_SubcontractorId:
      name: subcontractorId
      in: path
      description: The public ID of the subcontractor (SubcontractorPublicId UUID)
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Supplier_REST_API_SupplierInvoiceId:
      name: supplierInvoiceId
      in: path
      description: The ID of the supplier invoice
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Supplier_REST_API_SupplierLimit:
      name: limit
      in: query
      description: Maximum number of suppliers to return on this page.
      required: false
      style: form
      explode: true
      schema:
        maximum: 1000
        minimum: 1
        type: integer
        format: int32
    Supplier_REST_API_SubcontractorLimit:
      name: limit
      in: query
      description: Maximum number of subcontractors to return on this page.
      required: false
      style: form
      explode: true
      schema:
        maximum: 1000
        minimum: 1
        type: integer
        format: int32
    Supplier_REST_API_Cursor:
      name: cursor
      in: query
      description: |
        Page token from a previous response's `pagination.nextCursor`. Omit for
        the first page.
      required: false
      schema:
        type: string
        format: uuid
    Supplier_REST_API_CreatedAfter:
      name: createdAfter
      in: query
      description: >-
        Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
      required: false
      schema:
        type: string
        format: date-time
    Supplier_REST_API_CreatedBefore:
      name: createdBefore
      in: query
      description: >-
        Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Supplier_REST_API_UpdatedAfter:
      name: updatedAfter
      in: query
      description: >-
        Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Supplier_REST_API_UpdatedBefore:
      name: updatedBefore
      in: query
      description: >-
        Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Client_REST_API_companyId:
      name: companyId
      in: path
      description: The company UUID.
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Client_REST_API_clientId:
      name: clientId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Client_REST_API_clientInvoiceId:
      name: clientInvoiceId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Client_REST_API_defaultDimensionsFromProduct:
      name: defaultDimensionsFromProduct
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: boolean
        default: true
    Client_REST_API_defaultDimensionsFromClient:
      name: defaultDimensionsFromClient
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: boolean
        default: false
    Client_REST_API_requestId:
      name: requestId
      in: header
      required: false
      style: simple
      explode: false
      schema:
        type: string
    Client_REST_API_deliveryType:
      name: deliveryType
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: string
        enum:
          - MAIL
          - EDI
          - EMAIL
          - MANUALLY
          - SVEA
    Client_REST_API_deleteRowReferenceWhenCredit:
      name: deleteRowReferenceWhenCredit
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: boolean
        default: false
    Client_REST_API_clientInvoiceRowId:
      name: clientInvoiceRowId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Client_REST_API_productId:
      name: productId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
    Client_REST_API_agreementId:
      name: agreementId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Client_REST_API_revisionNr:
      name: revisionNr
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: integer
        format: int32
    Client_REST_API_foreignId:
      name: foreignId
      in: path
      required: true
      style: simple
      explode: false
      schema:
        type: string
    Client_REST_API_foreignIdQuery:
      name: foreignId
      in: query
      description: |
        Restrict the result to entities with this foreign ID. How it combines
        with the other parameters is endpoint-specific — see the operation
        description.
      required: false
      style: form
      explode: true
      schema:
        type: string
    Client_REST_API_clientIdQuery:
      name: clientId
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: string
        format: uuid
    Client_REST_API_activeQuery:
      name: active
      in: query
      description: When true, restrict the result to active entities only.
      required: false
      style: form
      explode: true
      schema:
        type: boolean
    Client_REST_API_rowIdQuery:
      name: rowId
      in: query
      description: |
        Look up the single invoice containing this invoice row (at most one is
        returned). This is a standalone lookup mode: it cannot be combined with
        foreignId, the lastPaymentDate range, offset/limit, or the general
        filters (query/filter/invoiceDate/clientId/projectId/created/updated) —
        such combinations are rejected with 400.
      required: false
      style: form
      explode: true
      schema:
        type: integer
        format: int32
    Client_REST_API_cursor:
      $ref: '#/components/parameters/Client_REST_API_Cursor'
    Client_REST_API_projectId:
      name: projectId
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: integer
        format: int32
    Client_REST_API_query:
      name: query
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: string
    Client_REST_API_clientInvoiceFilter:
      name: filter
      in: query
      description: 'Supported values: all, certified, certifiable, sendable, notPaid, paid'
      required: false
      style: form
      explode: true
      schema:
        type: string
    Client_REST_API_invoiceDateLower:
      name: invoiceDateLower
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: string
    Client_REST_API_invoiceDateUpper:
      name: invoiceDateUpper
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: string
    Client_REST_API_lastPaymentDateLower:
      name: lastPaymentDateLower
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: string
    Client_REST_API_lastPaymentDateUpper:
      name: lastPaymentDateUpper
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: string
    Client_REST_API_ignoreFiles:
      name: ignoreFiles
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: boolean
    Client_REST_API_offset:
      name: offset
      in: query
      required: false
      style: form
      explode: true
      schema:
        minimum: 0
        type: integer
        format: int32
    Client_REST_API_invoiceOffset:
      name: offset
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: integer
        format: int32
    Client_REST_API_clientLimit:
      name: limit
      in: query
      required: false
      style: form
      explode: true
      schema:
        minimum: 0
        type: integer
        format: int32
    Client_REST_API_invoiceLimit:
      name: limit
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: integer
        format: int32
    Client_REST_API_productLimit:
      name: limit
      in: query
      required: false
      style: form
      explode: true
      schema:
        maximum: 1000
        minimum: 0
        type: integer
        format: int32
    Client_REST_API_CreatedAfter:
      name: createdAfter
      in: query
      description: >-
        Return only resources created at or after this instant (createdAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset, e.g. 2026-05-29T14:30:00Z or 2026-05-29T14:30:00+02:00.
      required: false
      schema:
        type: string
        format: date-time
    Client_REST_API_CreatedBefore:
      name: createdBefore
      in: query
      description: >-
        Return only resources created before this instant (createdAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Client_REST_API_UpdatedAfter:
      name: updatedAfter
      in: query
      description: >-
        Return only resources updated at or after this instant (updatedAt >= value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Client_REST_API_UpdatedBefore:
      name: updatedBefore
      in: query
      description: >-
        Return only resources updated before this instant (updatedAt < value). RFC 3339 / ISO-8601 date-time with timezone offset.
      required: false
      schema:
        type: string
        format: date-time
    Client_REST_API_Cursor:
      name: cursor
      in: query
      description: |
        Page token from a previous response's `pagination.nextCursor`. Omit for
        the first page.
      required: false
      schema:
        type: string
        format: uuid
    Bank_REST_API_CompanyId:
      name: companyId
      in: path
      description: The company UUID
      required: true
      style: simple
      explode: false
      schema:
        type: string
        format: uuid
x-tagGroups:
  - name: User REST API
    tags:
      - user
  - name: Company REST API
    tags:
      - company
  - name: Client REST API
    tags:
      - kleer-group_engineering_team-bank_client-rest-service_other
  - name: Project REST API
    tags:
      - project
  - name: Supplier REST API
    tags:
      - supplier
      - subcontractor
      - supplier-invoice
  - name: Expense REST API
    tags:
      - expense
  - name: Revenue REST API
    tags:
      - revenue
  - name: Bank REST API
    tags:
      - bank
  - name: Payroll REST API
    tags:
      - payroll
  - name: Accounting REST API
    tags:
      - voucher
      - dimension
  - name: Exchange Rate REST API
    tags:
      - exchangerate
