openapi: 3.1.0
info:
  title: coveto e-recruiting REST API
  version: '2025-11-03'
  contact:
    name: coveto Support Team
    email: info@coveto.de
    url: https://help.coveto.de/20250608225407-rest-api
  description: |-

    The endpoint URLs depends on the URL of your personal coveto 
    instance. See **Servers** for details.

    ## Authentication
    * Create an API key in coveto (Settings » REST-API).
    * For security reasons each API key should be restricted to a certain IP address.
    * Pass the API key with each request using the `X-API-Key` header field.

    ## Rate Limiting
    There is a rate limit of 100 API calls every 60 seconds.
    If the rate limit is exceeded, you will receive a HTTP 429 (Too Many Requests) response.

    ## Pagination
    Some endpoints that return collections are paginated. 
    For these endpoints, the object will tell you the 
    current page, the size of a page, the total number of pages, 
    total count of the collection, the nextPage and prevPage.
    Use the query parameters ```page=1``` and ```show=25```
    to change the values.

    ## Filtering
    You can filter most endpoints that return collections by using 
    a GET parameter with the field name as key and the query term as value.

    Example: ```lightsaber=green```

    You can use an asterisk (`*`) as a wildcard. Beware that filtering 
    with a leading asterisk makes the query operation very slow, especially 
    on fields containing long strings.

    Good example: ```droid=R2-D2*``` - Bad/slow example: ```droid=*R2-D2*```

    You can negate a term (NOT) with an exclamation mark as a prefix.

    Example: ```force=!Jedi```

    ## Free text fields
    Some objects have up to 50 free text fields, that are configurable 
    by the admin. They might have certain rules for the content.   
    Those fields aren't mentioned in this documentation, due to the
    dynamic nature. Please check with the coveto keyuser or the company 
    or try to query freitextfeld1, freitextfeld2, etc.

    ## Beware of the job confusion

    > These aren't the jobs you are looking for … 

    A job requisition (Personalbedarfsmeldung) ist created 
    by the hiring manager (Ansprechpartner/Entscheider). 
    With the help of the HR user (Benutzer) it eventually becomes a 
    job (Jobs & Projekte). Or even multiple jobs.

    Maybe you want to display the jobs on a webpage?   
    Or you want to sync them with a job board?

    In that case, the /job endpoints are useless, because they
    contain the raw, unparsed and unstyled data.
    Use the endpoint /stellenanzeige instead, which contains the
    finished job adverts you are probably looking for.

    ## Why are there no PUT methods?
    We support only PATCH to allow safe, partial updates without 
    requiring clients to send a complete resource representation. 
    PUT’s full-replacement semantics can inadvertently erase omitted 
    fields, so we omit it to prevent unintentional data loss.

    ## Why are there German words?

    > https://www.coveto.de/german.png

    We use German for conceptually and technically established concepts 
    (e.g. “Bewerber”, “Personalbedarfsmeldung”) to meet the expectations 
    of our German speaking users, and English for technical terms such as 
    HTTP methods and parameters (‘PATCH’, “fields”) because these are 
    internationally standardized and are available in many SDKs and tools. 
    This mix ensures both linguistic comprehensibility for our target group 
    and compatibility with common developer tools. 
    The description of each tag shows you an english explanation. 
servers:
  - url: https://{IhreKundennummer}.coveto.de/public/api/v1
    description: Produktionssystem
    variables:
      IhreKundennummer:
        default: kxxxxx
        description: |
          Ihre Kundennummer. Beginnt mit k.
          Beispiel: k01234
  - url: https://demo.coveto.de/public/api/v1
    description: Öffentliche Sandbox
security:
  - ApiKeyAuth: []
tags:
  - name: Benutzer
    description: Regular HR user.
  - name: Bewerber
    description: Applicant.
  - name: Firma
    description: Company. Usually company branches or external companies.
  - name: Ansprechpartner
    description: Hiring Manager. Belongs to a company. May have access to the extranet.
  - name: Job
    description: Jobs, Projects, Collection lists of Applicants. See "Beware of the job confusion".
  - name: Personalbedarfsmeldung
    description: Job requisition. Normally created by a hiring manager.
  - name: Standort
    description: Company branch.
  - name: Stellenanzeige
    description: Job advert, use this if you want to publish jobs
  - name: Task
    description: Activities, Follow-ups, Tasks and Kanban Board of the tasks including the columns.
  - name: Log
    description: Access logs to speed up your synchronization.
  - name: ZIP Code
    description: Search for ZIP codes
paths:
  /benutzer:
    get:
      operationId: listBenutzer
      tags:
        - Benutzer
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/benutzer-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/benutzer-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /benutzer/{id}:
    get:
      operationId: getBenutzerById
      tags:
        - Benutzer
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/benutzer-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber:
    get:
      operationId: listBewerber
      tags:
        - Bewerber
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/bewerber-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/bewerber-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    post:
      operationId: createBewerber
      tags:
        - Bewerber
      summary: Creates a new object.
      requestBody:
        $ref: '#/components/requestBodies/bewerber-post'
      responses:
        '201':
          $ref: '#/components/responses/201-created'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber/{id}:
    get:
      operationId: getBewerberById
      tags:
        - Bewerber
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/bewerber-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    patch:
      operationId: updateBewerber
      tags:
        - Bewerber
      summary: Updates one object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      requestBody:
        $ref: '#/components/requestBodies/bewerber-patch'
      responses:
        '200':
          $ref: '#/components/responses/200-ok-updated'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber/{id}/job:
    get:
      operationId: listApplicantsJobs
      tags:
        - Bewerber
      summary: Lists all job of the applicant
      parameters:
        - name: id
          in: path
          description: ID of the applicant
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        '200':
          $ref: '#/components/responses/bewerber-jobs-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber/{id}/job/{job}:
    put:
      operationId: addBewerberToJob
      tags:
        - Bewerber
      summary: Add an applicant to a job by ID.
      parameters:
        - name: id
          in: path
          description: ID of the applicant
          required: true
          schema:
            type: integer
            minimum: 1
        - name: job
          in: path
          description: ID of the job
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        '204':
          $ref: '#/components/responses/204-no-content'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    delete:
      operationId: removeBewerberFromJob
      tags:
        - Bewerber
      summary: Remove an applicant from a job by ID.
      parameters:
        - name: id
          in: path
          description: ID of the applicant
          required: true
          schema:
            type: integer
            minimum: 1
        - name: job
          in: path
          description: ID of the job
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        '204':
          $ref: '#/components/responses/204-no-content'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber/{id}/eingangsbestaetigung:
    post:
      operationId: sendEingangsbestaetigung
      tags:
        - Bewerber
      summary: Send an autoreply message to the applicant to confirm the application
      parameters:
        - name: id
          in: path
          description: ID of the applicant
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        '204':
          $ref: '#/components/responses/204-no-content'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber-status:
    get:
      operationId: listBewerberStatus
      tags:
        - Bewerber
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/bewerber-status-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/bewerber-status-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber-status/{id}:
    get:
      operationId: getBewerberStatusById
      tags:
        - Bewerber
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/bewerber-status-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber/{id}/bewerbungsverfahren:
    get:
      operationId: getBewerbungsverfahren
      tags:
        - Bewerber
      summary: Get data of the current Bewerbungsverfahren
      parameters:
        - name: id
          in: path
          description: ID
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        '200':
          $ref: '#/components/responses/bewerbungsverfahren-ok'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber/{id}/bewerbungsverfahren/{job}:
    put:
      operationId: setBewerbungsverfahren
      tags:
        - Bewerber
      summary: Set the job ID of the Bewerbungsverfahren
      parameters:
        - name: id
          in: path
          description: ID
          required: true
          schema:
            type: integer
            minimum: 1
        - name: job
          in: path
          description: Job ID
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        '204':
          $ref: '#/components/responses/204-no-content'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber/{id}/setArbeitsbeginn:
    post:
      operationId: setArbeitsbeginn
      tags:
        - Bewerber
      summary: Stores the candidate’s first working day date.
      parameters:
        - name: id
          in: path
          description: ID of the applicant
          required: true
          schema:
            type: integer
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                arbeitsbeginn:
                  type: string
                  format: date
              required:
                - arbeitsbeginn
      responses:
        '204':
          $ref: '#/components/responses/204-no-content'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /firma:
    get:
      operationId: listFirma
      tags:
        - Firma
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/firma-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/firma-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    post:
      operationId: createFirma
      tags:
        - Firma
      summary: Creates a new object.
      requestBody:
        $ref: '#/components/requestBodies/firma-post'
      responses:
        '201':
          $ref: '#/components/responses/201-created'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /firma/{id}:
    get:
      operationId: getFirmaById
      tags:
        - Firma
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/firma-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    patch:
      operationId: updateFirma
      tags:
        - Firma
      summary: Updates one object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      requestBody:
        $ref: '#/components/requestBodies/firma-patch'
      responses:
        '200':
          $ref: '#/components/responses/200-ok-updated'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /firmen-status:
    get:
      operationId: listFirmenStatus
      tags:
        - Firma
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/firmen-status-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/firmen-status-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /firmen-status/{id}:
    get:
      operationId: getFirmenStatusById
      tags:
        - Firma
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/firmen-status-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /ansprechpartner:
    get:
      operationId: listAnsprechpartner
      tags:
        - Ansprechpartner
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/ansprechpartner-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/ansprechpartner-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    post:
      operationId: createAnsprechpartner
      tags:
        - Ansprechpartner
      summary: Creates a new object.
      requestBody:
        $ref: '#/components/requestBodies/ansprechpartner-post'
      responses:
        '201':
          $ref: '#/components/responses/201-created'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /ansprechpartner/{id}:
    get:
      operationId: getAnsprechpartnerById
      tags:
        - Ansprechpartner
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/ansprechpartner-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    patch:
      operationId: updateAnsprechpartner
      tags:
        - Ansprechpartner
      summary: Updates one object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      requestBody:
        $ref: '#/components/requestBodies/ansprechpartner-patch'
      responses:
        '200':
          $ref: '#/components/responses/200-ok-updated'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /job:
    get:
      operationId: listJob
      tags:
        - Job
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/job-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/job-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    post:
      operationId: createJob
      tags:
        - Job
      summary: Creates a new object.
      requestBody:
        $ref: '#/components/requestBodies/job-post'
      responses:
        '201':
          $ref: '#/components/responses/201-created'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /job/{id}:
    get:
      operationId: getJobById
      tags:
        - Job
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/job-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    patch:
      operationId: updateJob
      tags:
        - Job
      summary: Updates one object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      requestBody:
        $ref: '#/components/requestBodies/job-patch'
      responses:
        '200':
          $ref: '#/components/responses/200-ok-updated'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /job-kategorie:
    get:
      operationId: listJobKategorie
      tags:
        - Job
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/job-kategorie-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/job-kategorie-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /job-kategorie/{id}:
    get:
      operationId: getJobKategorieById
      tags:
        - Job
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/job-kategorie-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /personalbedarfsmeldung:
    get:
      operationId: listPersonalbedarfsmeldung
      tags:
        - Personalbedarfsmeldung
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/personalbedarfsmeldung-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/personalbedarfsmeldung-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    post:
      operationId: createPersonalbedarfsmeldung
      tags:
        - Personalbedarfsmeldung
      summary: Creates a new object.
      requestBody:
        $ref: '#/components/requestBodies/personalbedarfsmeldung-post'
      responses:
        '201':
          $ref: '#/components/responses/201-created'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /personalbedarfsmeldung/{id}:
    get:
      operationId: getPersonalbedarfsmeldungById
      tags:
        - Personalbedarfsmeldung
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/personalbedarfsmeldung-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    patch:
      operationId: updatePersonalbedarfsmeldung
      tags:
        - Personalbedarfsmeldung
      summary: Updates one object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      requestBody:
        $ref: '#/components/requestBodies/personalbedarfsmeldung-patch'
      responses:
        '200':
          $ref: '#/components/responses/200-ok-updated'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /stellenanzeige:
    get:
      operationId: listStellenanzeige
      tags:
        - Stellenanzeige
      summary: All public jobs
      parameters:
        - $ref: '#/components/parameters/stellenanzeige-fields'
      responses:
        '200':
          $ref: '#/components/responses/stellenanzeige-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /stellenanzeige/{id}:
    get:
      operationId: getStellenanzeige
      tags:
        - Stellenanzeige
      summary: One public job
      parameters:
        - name: id
          in: path
          required: true
          description: ID of the job
          schema:
            type: integer
            minimum: 1
      responses:
        '200':
          $ref: '#/components/responses/stellenanzeige-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /standort:
    get:
      operationId: listStandort
      tags:
        - Standort
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/standort-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/standort-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    post:
      operationId: createStandort
      tags:
        - Standort
      summary: Creates a new object.
      requestBody:
        $ref: '#/components/requestBodies/standort-post'
      responses:
        '201':
          $ref: '#/components/responses/201-created'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /standort/{id}:
    get:
      operationId: getStandortById
      tags:
        - Standort
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/standort-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    patch:
      operationId: updateStandort
      tags:
        - Standort
      summary: Updates one object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      requestBody:
        $ref: '#/components/requestBodies/standort-patch'
      responses:
        '200':
          $ref: '#/components/responses/200-ok-updated'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /task:
    get:
      operationId: listTask
      tags:
        - Task
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/task-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/task-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    post:
      operationId: createTask
      tags:
        - Task
      summary: Creates a new object.
      requestBody:
        $ref: '#/components/requestBodies/task-post'
      responses:
        '201':
          $ref: '#/components/responses/201-created'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /task/{id}:
    get:
      operationId: getTaskById
      tags:
        - Task
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/task-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
    patch:
      operationId: updateTask
      tags:
        - Task
      summary: Updates one object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      requestBody:
        $ref: '#/components/requestBodies/task-patch'
      responses:
        '200':
          $ref: '#/components/responses/200-ok-updated'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /task-art:
    get:
      operationId: listTaskArt
      tags:
        - Task
      summary: Listing. Returns a collection.
      parameters:
        - $ref: '#/components/parameters/task-art-fields'
        - $ref: '#/components/parameters/dir'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/show'
      responses:
        '200':
          $ref: '#/components/responses/task-art-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /task-art/{id}:
    get:
      operationId: getTaskArtById
      tags:
        - Task
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/task-art-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /task-board:
    get:
      operationId: listTaskBoard
      tags:
        - Task
      summary: Listing. Returns a collection.
      responses:
        '200':
          $ref: '#/components/responses/task-board-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /task-board/{id}:
    get:
      operationId: getTaskBoardById
      tags:
        - Task
      summary: Returns details of a single object by its ID.
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          $ref: '#/components/responses/task-board-ok'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '404':
          $ref: '#/components/responses/404-not-found'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /zip/{zip}/{country}:
    get:
      operationId: getPlz
      tags:
        - ZIP Code
      summary: Get ZIP code information
      parameters:
        - $ref: '#/components/parameters/zip'
        - $ref: '#/components/parameters/country'
      responses:
        '200':
          $ref: '#/components/responses/zip-info'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /zip/{zip}/{country}/nearby/{radius}:
    get:
      operationId: plzUmkreis
      tags:
        - ZIP Code
      summary: Search ZIP codes nearby
      parameters:
        - $ref: '#/components/parameters/zip'
        - $ref: '#/components/parameters/country'
        - $ref: '#/components/parameters/radius'
      responses:
        '200':
          $ref: '#/components/responses/zip-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /log/delete/{type}/{year}/{month}:
    get:
      operationId: getDeleteLog
      tags:
        - Log
      summary: Get a log of the deleted data to keep your system in sync
      parameters:
        - $ref: '#/components/parameters/type'
        - $ref: '#/components/parameters/year'
        - $ref: '#/components/parameters/month'
      responses:
        '200':
          $ref: '#/components/responses/log-delete-array'
        '401':
          $ref: '#/components/responses/401-unauthorized'
        '429':
          $ref: '#/components/responses/429-too-many-requests'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber/{id}/datei:
    get:
      operationId: getBewerberDateien
      tags:
        - Bewerber
      summary: List all files for an applicant
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          description: Successful response with an array of file summaries
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FileSummary'
        '404':
          $ref: '#/components/responses/404-not-found'
        default:
          $ref: '#/components/responses/ServerError'
    post:
      operationId: uploadBewerberDatei
      tags:
        - Bewerber
      summary: Upload a new file for an applicant
      parameters:
        - $ref: '#/components/parameters/generic-id'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: The file to upload
                folder:
                  type: string
                  description: Is it a file (dokumente) or a photo (fotos)
                  enum:
                    - dokumente
                    - fotos
                job:
                  type: integer
                  description: Job identifier
                task:
                  type: integer
                  description: Task identifier
                tags:
                  type: array
                  description: Tags for the file
                  items:
                    type: string
              required:
                - file
                - folder
      responses:
        '201':
          $ref: '#/components/responses/201-created'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '404':
          $ref: '#/components/responses/404-not-found'
        '409':
          $ref: '#/components/responses/409-conflict'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber/{id}/datei/{datei}:
    get:
      operationId: getBewerberDateiById
      tags:
        - Bewerber
      summary: Download a file for an applicant
      parameters:
        - $ref: '#/components/parameters/generic-id'
        - $ref: '#/components/parameters/datei-id'
      responses:
        '200':
          description: File binary stream (content-type depends on file)
          content:
            '*/*':
              schema:
                type: string
                format: binary
        '404':
          $ref: '#/components/responses/404-not-found'
        default:
          $ref: '#/components/responses/ServerError'
    put:
      operationId: updateBewerberDateiMetaData
      tags:
        - Bewerber
      summary: Update metadata of a file
      parameters:
        - $ref: '#/components/parameters/generic-id'
        - $ref: '#/components/parameters/datei-id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentMetaUpdate'
      responses:
        '200':
          description: Metadata updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentResponse'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '404':
          $ref: '#/components/responses/404-not-found'
        '422':
          $ref: '#/components/responses/422-unprocessable-entity'
        default:
          $ref: '#/components/responses/ServerError'
    delete:
      operationId: deleteBewerberDateiById
      tags:
        - Bewerber
      summary: Delete a file for an applicant
      parameters:
        - $ref: '#/components/parameters/generic-id'
        - $ref: '#/components/parameters/datei-id'
      responses:
        '204':
          description: File deleted successfully
        '404':
          $ref: '#/components/responses/404-not-found'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber/{id}/datei/{datei}/ocr:
    get:
      operationId: getBewerberDateiOcrContentById
      tags:
        - Bewerber
      summary: Get the text-only content of the file. Uses OCR. Useful for search.
      parameters:
        - $ref: '#/components/parameters/generic-id'
        - $ref: '#/components/parameters/datei-id'
      responses:
        '200':
          description: Get the text-only content of the file. Uses OCR. Useful for search.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                  ocr:
                    type: string
        '404':
          $ref: '#/components/responses/404-not-found'
        default:
          $ref: '#/components/responses/ServerError'
  /firma/{id}/datei:
    get:
      operationId: getFirmaDateien
      tags:
        - Firma
      summary: List all files for a company
      parameters:
        - $ref: '#/components/parameters/generic-id'
      responses:
        '200':
          description: Successful response with an array of file summaries
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FileSummary'
        '404':
          $ref: '#/components/responses/404-not-found'
        default:
          $ref: '#/components/responses/ServerError'
    post:
      operationId: uploadFirmaDatei
      tags:
        - Firma
      summary: Upload a new file for a company
      parameters:
        - $ref: '#/components/parameters/generic-id'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: The file to upload
                folder:
                  type: string
                  description: Is it a file (dokumente) or a photo (fotos)
                  enum:
                    - dokumente
                    - fotos
                job:
                  type: integer
                  description: Job identifier
                task:
                  type: integer
                  description: Task identifier
                tags:
                  type: array
                  description: Tags for the file
                  items:
                    type: string
              required:
                - file
                - folder
      responses:
        '201':
          $ref: '#/components/responses/201-created'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '404':
          $ref: '#/components/responses/404-not-found'
        '409':
          $ref: '#/components/responses/409-conflict'
        default:
          $ref: '#/components/responses/ServerError'
  /firma/{id}/datei/{datei}:
    get:
      operationId: getFirmaDateiById
      tags:
        - Firma
      summary: Download a file for a company
      parameters:
        - $ref: '#/components/parameters/generic-id'
        - $ref: '#/components/parameters/datei-id'
      responses:
        '200':
          description: File binary stream (content-type depends on file)
          content:
            '*/*':
              schema:
                type: string
                format: binary
        '404':
          $ref: '#/components/responses/404-not-found'
        default:
          $ref: '#/components/responses/ServerError'
    put:
      operationId: updateFirmaDateiMetaData
      tags:
        - Firma
      summary: Update metadata of a file
      parameters:
        - $ref: '#/components/parameters/generic-id'
        - $ref: '#/components/parameters/datei-id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentMetaUpdate'
      responses:
        '200':
          description: Metadata updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentResponse'
        '400':
          $ref: '#/components/responses/400-bad-request'
        '404':
          $ref: '#/components/responses/404-not-found'
        '422':
          $ref: '#/components/responses/422-unprocessable-entity'
        default:
          $ref: '#/components/responses/ServerError'
    delete:
      operationId: deleteFirmaDateiById
      tags:
        - Firma
      summary: Delete a file for company
      parameters:
        - $ref: '#/components/parameters/generic-id'
        - $ref: '#/components/parameters/datei-id'
      responses:
        '204':
          description: File deleted successfully
        '404':
          $ref: '#/components/responses/404-not-found'
        default:
          $ref: '#/components/responses/ServerError'
  /firma/{id}/datei/{datei}/ocr:
    get:
      operationId: getFirmaDateiOcrContentById
      tags:
        - Firma
      summary: Get the text-only content of the file. Uses OCR. Useful for search.
      parameters:
        - $ref: '#/components/parameters/generic-id'
        - $ref: '#/components/parameters/datei-id'
      responses:
        '200':
          description: Get the text-only content of the file. Uses OCR. Useful for search.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                  ocr:
                    type: string
        '404':
          $ref: '#/components/responses/404-not-found'
        default:
          $ref: '#/components/responses/ServerError'
  /bewerber/search:
    get:
      operationId: searchBewerber
      tags:
        - Bewerber
      summary: Simple search for an applicant by name. Use GET /bewerber to search with multiple filters.
      description: |
        A single word is considered the last name.
        If the term consists of multiple words, it is split at the first space and interpreted as first name and last name.
        Each part is searched using a wildcard.
        Therefore, it’s best to shorten the search terms if you’re not sure about the spelling of the name.
        Both “Muster” and “Tho Muster” will find, for example, “Thomas Muster” and “Thomas Mustermann.”
        A maximum of 25 results are returned.
      parameters:
        - name: query
          in: query
          description: Query string
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      example: 235
                    name:
                      type: string
                      example: Thomas Test
        '400':
          $ref: '#/components/responses/400-bad-request'
        '404':
          $ref: '#/components/responses/404-not-found'
        default:
          $ref: '#/components/responses/ServerError'
  /firma/search:
    get:
      operationId: searchFirma
      tags:
        - Firma
      summary: Simple search for a company by name. Use GET /firma to search with multiple filters.
      description: |
        A single word is considered the last name.
        If the term consists of multiple words, it is split at the first space and interpreted as first name and last name.
        Each part is searched using a wildcard.
        Therefore, it’s best to shorten the search terms if you’re not sure about the spelling of the name.
        “Muster” will find “Thomas Muster GmbH”.
        A maximum of 25 results are returned.
      parameters:
        - name: query
          in: query
          description: Query string
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      example: 17
                    name:
                      type: string
                      example: Thomas Test GmbH
        '400':
          $ref: '#/components/responses/400-bad-request'
        '404':
          $ref: '#/components/responses/404-not-found'
        default:
          $ref: '#/components/responses/ServerError'
  /ansprechpartner/search:
    get:
      operationId: searchAnsprechpartner
      tags:
        - Ansprechpartner
      summary: Simple search for a person by name. Use GET /ansprechpartner to search with multiple filters.
      description: |
        A single word is considered the last name.
        If the term consists of multiple words, it is split at the first space and interpreted as first name and last name.
        Each part is searched using a wildcard.
        Therefore, it’s best to shorten the search terms if you’re not sure about the spelling of the name.
        Both “Muster” and “Tho Muster” will find, for example, “Thomas Muster” and “Thomas Mustermann.”
        A maximum of 25 results are returned.
      parameters:
        - name: query
          in: query
          description: Query string
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      example: 1753
                    name:
                      type: string
                      example: Thomas Test
        '400':
          $ref: '#/components/responses/400-bad-request'
        '404':
          $ref: '#/components/responses/404-not-found'
        default:
          $ref: '#/components/responses/ServerError'
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
  parameters:
    benutzer-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - anrede
            - nachname
            - vorname
            - email
            - email_from
            - aktiv
            - telefon
            - mobil
            - whatsapp
            - position
            - freitextfeld1
            - freitextfeld2
            - freitextfeld3
            - freitextfeld4
            - mandant
        uniqueItems: true
      style: form
      explode: false
    dir:
      name: dir
      in: query
      description: The direction you want to sort.
      required: false
      schema:
        type: string
        enum:
          - asc
          - desc
        default: asc
    page:
      name: page
      in: query
      description: Page number
      required: false
      schema:
        type: integer
        default: 1
    show:
      name: show
      in: query
      description: Number of element on a page
      required: false
      schema:
        type: integer
        default: 25
        minimum: 1
        maximum: 100
    generic-id:
      name: id
      in: path
      description: ID
      required: true
      schema:
        type: integer
        minimum: 1
    bewerber-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - aktiv
            - anrede
            - titel
            - vorname
            - name
            - geburtsdatum
            - geburtsort
            - familienstand
            - strasse
            - plz
            - ort
            - land
            - telefon
            - mobil
            - email
            - email2
            - email3
            - profil_schulausbildung
            - profil_berufspraxis
            - profil_sonstiges
            - profil_skills
            - kontonummer
            - blz
            - notizen
            - mandant
            - schichtdienst
            - vollzeit
            - teilzeit
            - minijob
            - hat_pkw
            - nachtdienst
            - gesundheit
            - berufe
            - fuehrerscheine
        uniqueItems: true
      style: form
      explode: false
    bewerber-status-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - name
            - aktiv
            - beschreibung
        uniqueItems: true
      style: form
      explode: false
    firma-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - name
            - strasse
            - plz
            - ort
            - land
            - telefon
            - fax
            - email
            - webseite
            - ustid
            - debitor
            - aktiv
            - kundengruppe
            - mutter
            - notizen
            - mandant
        uniqueItems: true
      style: form
      explode: false
    firmen-status-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - name
            - aktiv
            - beschreibung
        uniqueItems: true
      style: form
      explode: false
    ansprechpartner-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - anrede
            - titel
            - vorname
            - name
            - email
            - email2
            - email3
            - telefon
            - mobil
            - firma
            - aktiv
            - notiz
            - mandant
        uniqueItems: true
      style: form
      explode: false
    job-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - name
            - beschreibung
            - slogan
            - bild
            - video
            - einleitung
            - aufgaben
            - profil
            - einwandvorwegnahme
            - kultur_werte
            - wir_bieten
            - vertrauensaufbau
            - so_geht_es_weiter
            - einarbeitung
            - handlungsaufforderung
            - stellenname
            - standort
            - kategorie
            - entgelt
            - oeffentlich
            - template
            - remote
            - bewerbungsformular
            - mandant
            - strasse
            - plz
            - ort
            - land
            - firma
            - workingplan
            - hoursperweek
            - minijob
            - mandant
            - ansprechpartner
            - application_startdate
            - application_enddate
            - assignment_startdate
            - assignment_enddate
        uniqueItems: true
      style: form
      explode: false
    job-kategorie-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - name
            - beschreibung
            - reihenfolge
        uniqueItems: true
      style: form
      explode: false
    personalbedarfsmeldung-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - plan
            - abteilung
            - bedarf
            - ersatz_fuer
            - vorgeschlagene_person
            - grund
            - notiz
            - ansprechpartner
            - stellenname
            - einsatzstrasse
            - einsatzort
            - einsatzplz
            - einsatzland
            - einsatzregion
            - aa_joboffertype
            - aa_assignmentstartdate
            - aa_assignmentenddate
            - aa_schedule_workingplan
            - aa_schedule_hoursperweek
            - aa_schedule_duration_termdate
            - aa_schedule_duration_termlength
            - aa_minijob
            - entgelt
            - gesuchte_faehigkeiten
            - aufgaben
            - remote
            - zeitpunkt
        uniqueItems: true
      style: form
      explode: false
    stellenanzeige-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - mid
            - fid
            - title
            - text
            - html
            - street
            - city
            - zip
            - region
            - country
            - category
            - category_id
            - images.image
            - images.category
            - images.logo_square
            - images.logo
            - images.socialmedia
            - images.background
            - images.recruiter
            - colors
            - contact
            - link
            - apply
            - pubDate
            - lastModifiedDateTime
            - earliestStartDate
            - employmentType
            - hoursPerWeek
            - jsonld
            - salary
            - veroeffentlicht_am
            - revision
            - linkedin_company_id
        uniqueItems: true
      style: form
      explode: false
    standort-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - standort
            - aktiv
            - aa_hiring_org
            - firma
            - strasse
            - plz
            - ort
            - aa_countrycode
            - aa_region
            - telefon
            - fax
            - email_from
            - whatsapp
            - linkedin_company_id
        uniqueItems: true
      style: form
      explode: false
    task-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - name
            - bewerber
            - arge
            - ansprechpartner
            - task_art
            - zeitpunkt
            - standort
            - beschreibung
            - board
            - zugewiesen_an
            - wvl_am
            - deadline
            - status
            - prioritaet
            - wartet_auf
            - mutter
            - mandant
        uniqueItems: true
      style: form
      explode: false
    task-art-fields:
      name: fields
      in: query
      description: Comma seperated list of fields.
      required: false
      schema:
        type: array
        items:
          type: string
          enum:
            - id
            - name
            - aktiv
            - ist_kontakt
            - beschreibung
        uniqueItems: true
      style: form
      explode: false
    zip:
      name: zip
      in: path
      description: ZIP code
      required: true
      schema:
        type: integer
        minimum: 1000
        maximum: 999999
    country:
      name: country
      in: path
      description: Country code, ISO 3166-1 alpha-2
      required: true
      schema:
        type: string
    radius:
      name: radius
      in: path
      description: Distance in kilometers
      required: true
      schema:
        type: integer
        minimum: 1
        maximum: 100
    type:
      name: type
      in: path
      description: Type (bewerber, firma, ansprechpartner)
      required: true
      schema:
        type: string
    year:
      name: year
      in: path
      description: Year YYYY
      required: true
      schema:
        type: string
    month:
      name: month
      in: path
      description: Month MM
      required: true
      schema:
        type: string
    datei-id:
      name: datei
      in: path
      description: File ID
      required: true
      schema:
        type: integer
        minimum: 1
  responses:
    ServerError:
      description: Unexpected server error
    benutzer-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/benutzer'
    401-unauthorized:
      description: Unauthorized.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
    429-too-many-requests:
      description: Rate limit exceeded
    benutzer-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/benutzer'
    404-not-found:
      description: The specified resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
    bewerber-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/bewerber'
    201-created:
      description: Created.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/created'
    400-bad-request:
      description: Bad request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
    bewerber-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/bewerber'
    200-ok-updated:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/created'
    bewerber-jobs-array:
      description: List of jobs
      content:
        application/json:
          schema:
            type: array
            items:
              type: object
              properties:
                id:
                  type: integer
                  example: 1004
                name:
                  type: string
                  example: Mitarbeiter im Vertrieb (m/w/d)
                klassifizierung:
                  type: string
                  example: Ohne Status
    204-no-content:
      description: No content.
    bewerber-status-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/bewerber-status'
    bewerber-status-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/bewerber-status'
    bewerbungsverfahren-ok:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              job:
                type: string
              firma:
                type: object
                properties:
                  name:
                    type: string
                  strasse:
                    type: string
                  plz:
                    type: string
                  ort:
                    type: string
                  land:
                    type: string
              arbeitsbeginn_am:
                type: string
                format: date
              absage_am:
                type: string
                format: date
    firma-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/firma'
    firma-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/firma'
    firmen-status-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/firmen-status'
    firmen-status-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/firmen-status'
    ansprechpartner-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/ansprechpartner'
    ansprechpartner-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ansprechpartner'
    job-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/job'
    job-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/job'
    job-kategorie-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/job-kategorie'
    job-kategorie-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/job-kategorie'
    personalbedarfsmeldung-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/personalbedarfsmeldung'
    personalbedarfsmeldung-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/personalbedarfsmeldung'
    stellenanzeige-array:
      description: OK.
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/stellenanzeige'
    stellenanzeige-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/stellenanzeige'
    standort-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/standort'
    standort-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/standort'
    task-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/task'
    task-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/task'
    task-art-array:
      description: OK.
      content:
        application/json:
          schema:
            type: object
            properties:
              page:
                type: integer
                description: Current page
                example: 1
              show:
                type: integer
                description: Number of objects on this page
                example: 25
              total:
                type: integer
                description: total number of objects
                example: 102
              totalPages:
                type: integer
                description: total number of pages
                example: 5
              nextPage:
                type:
                  - integer
                  - 'null'
                description: Next page or null
                example: 2
              prevPage:
                type:
                  - integer
                  - 'null'
                description: Previous page or null
                example: null
              data:
                type: array
                items:
                  $ref: '#/components/schemas/task-art'
    task-art-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/task-art'
    task-board-array:
      description: OK.
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/task-board'
    task-board-ok:
      description: OK.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/task-board'
    zip-info:
      description: OK
      content:
        application/json:
          schema:
            type: array
            items:
              type: object
              properties:
                plz:
                  type: string
                ort:
                  type: string
                lat:
                  type: string
                lon:
                  type: string
                bundesland:
                  type: string
                land:
                  type: string
    zip-array:
      description: OK.
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/zip-nearby'
    log-delete-array:
      description: OK.
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/log-delete'
    409-conflict:
      description: Conflict. A document with this name already exists in this folder.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
    422-unprocessable-entity:
      description: Unprocessable entity
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
  schemas:
    benutzer:
      description: One object
      type: object
      properties:
        id:
          type: integer
          readOnly: true
          example: 1
        anrede:
          type: string
        nachname:
          type: string
        vorname:
          type: string
        email:
          type: string
          format: email
        email_from:
          type: string
        aktiv:
          type: string
        telefon:
          type: string
        mobil:
          type: string
        whatsapp:
          type: string
        position:
          type: string
        freitextfeld1:
          type: string
        freitextfeld2:
          type: string
        freitextfeld3:
          type: string
        freitextfeld4:
          type: string
        mandant:
          type: integer
    error:
      type: object
      properties:
        message:
          type: string
        errors:
          type: array
    bewerber:
      description: One object
      type: object
      properties:
        id:
          type: string
        status:
          type: integer
          example: 17
          description: See /bewerber-status
        aktiv:
          type: string
          enum:
            - Ja
            - Nein
        anrede:
          type: string
          enum:
            - Herr
            - Frau
            - Unbekannt
        titel:
          type: string
          example: Dr.
        vorname:
          type: string
          example: Max
        name:
          type: string
          example: Mustermann
        geburtsdatum:
          type: string
          format: date
        geburtsort:
          type: string
        familienstand:
          type: string
          example: ledig
        strasse:
          description: 'Use one of the official values. See: https://www.destatis.de/DE/Themen/Gesellschaft-Umwelt/Bevoelkerung/Haushalte-Familien/Glossar/familienstand.html'
          type: string
        plz:
          type: string
          example: 63667
        ort:
          type: string
          example: Nidda
        land:
          type: string
          example: DE
        telefon:
          type: string
          example: +49 6043 98598-13
        mobil:
          type: string
          example: +49 171 39200 00
        email:
          type: string
          format: email
        email2:
          type: string
        email3:
          type: string
        profil_schulausbildung:
          type: array
          items:
            type: object
            properties:
              von_bis:
                type: string
                example: 2002 - 2006
              wert:
                type: string
                example: Grundschule Nidda
            additionalProperties: false
        profil_berufspraxis:
          type: array
          items:
            type: object
            properties:
              von_bis:
                type: string
                example: April 2020 - heute
              titel:
                type: string
                example: Vertriebsleiter
              firma:
                type: string
                example: Muster GmbH
              ort:
                type: string
                example: Nidda
              hinweise:
                type: string
                example: Leitung des Innen- und Außendienstes mit 15 Mitarbeitern
            additionalProperties: false
        profil_sonstiges:
          type: string
        profil_skills:
          type: array
          items:
            type: object
            properties:
              attribut:
                type: string
                example: Englisch
              wert:
                type: string
                example: B1
            additionalProperties: false
        kontonummer:
          type: string
          example: DE89370400440532013000
          description: IBAN
        blz:
          type: string
          example: DEUTDEFFXXX
          description: BIC
        notizen:
          type: string
          description: Notes. Please use the /task endpoint instead to record history, phone calls, and other CRM data.
        mandant:
          type: integer
        schichtdienst:
          type: string
          enum:
            - Ja
            - Nein
            - Nicht bekannt
        vollzeit:
          type: string
          enum:
            - Ja
            - Nein
            - Nicht bekannt
        teilzeit:
          type: string
          enum:
            - Ja
            - Nein
            - Nicht bekannt
        minijob:
          type: string
          enum:
            - Ja
            - Nein
            - Nicht bekannt
        hat_pkw:
          type: string
          enum:
            - Ja
            - Nein
            - Nicht bekannt
        nachtdienst:
          type: string
          enum:
            - Ja
            - Nein
            - Nicht bekannt
        gesundheit:
          type: string
          example: GdB 50, hörgeschädigt, Gebärdensprachdolmetscher nötig
        berufe:
          type: string
          example: Bürokaufmann, Sachbearbeiter
        fuehrerscheine:
          type: array
          items:
            type: string
            enum:
              - AM
              - A1
              - A2
              - A
              - B
              - BE
              - C1
              - C1E
              - C
              - CE
              - D1
              - D1E
              - D
              - DE
              - T
              - L
              - B1
              - F
              - G
              - M
          example:
            - A
            - B
            - C1E
    created:
      type: object
      properties:
        id:
          type: integer
    bewerber-status:
      description: One object
      type: object
      properties:
        id:
          type: integer
          readOnly: true
          example: 1
        name:
          type: string
        aktiv:
          type: string
        beschreibung:
          type: string
    firma:
      description: One object
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
          example: coveto ATS GmbH
        strasse:
          type: string
          example: Alois-Thums-Straße 11
        plz:
          type: string
          example: 63667
        ort:
          type: string
          example: Nidda
        land:
          type: string
          example: DE
        telefon:
          type: string
          example: +49 6043 98598-13
        email:
          type: string
          format: email
        webseite:
          type: string
          format: url
        ustid:
          type: string
          example: DE318105630
        aktiv:
          type: string
          example: Ja
          enum:
            - Ja
            - Nein
        kundengruppe:
          type: string
          example: 3
        mutter:
          type: integer
          example: 1043
          description: ID of the parent company
        notizen:
          type: string
          description: Notes. Please use the /task endpoint instead to record history, phone calls, and other CRM data.
        mandant:
          type: integer
    firmen-status:
      description: One object
      type: object
      properties:
        id:
          type: integer
          readOnly: true
          example: 1
        name:
          type: string
        aktiv:
          type: string
        beschreibung:
          type: string
    ansprechpartner:
      description: One object
      type: object
      properties:
        id:
          type: integer
        anrede:
          type: string
          enum:
            - Herr
            - Frau
            - Unbekannt
          description: Salutation
        titel:
          type: string
          example: Dr.
          description: Academic title
        vorname:
          type: string
          example: Max
          description: Firstname
        name:
          type: string
          example: Mustermann
          description: Lastname
        email:
          type: string
          format: email
        email2:
          type: string
        email3:
          type: string
        telefon:
          type: string
          example: +49 6043 98598-13
          description: Landline phone number
        mobil:
          type: string
          example: +49 171 39200 00
          description: Mobile phone number
        firma:
          type: integer
          example: 1005
          description: ID of the Company
        aktiv:
          type: string
          enum:
            - Ja
            - Nein
        notizen:
          type: string
          description: Notes. Please use the /task endpoint instead to record history, phone calls, and other CRM data.
        mandant:
          type: integer
    job:
      description: One object
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
          example: Nachfolger für Herr Schmidt
          description: Internal name
        beschreibung:
          type: string
          description: Internal description
        slogan:
          type: string
          example: Kurze Fahrt zur Arbeit und der Held der Kunden sein?
          description: Short slogan
        bild:
          type: string
          example: http://…/foo.png
          description: Image
        video:
          type: string
          example: //www.youtube-nocookie.com/embed/khyedIoB5Yo?rel=0
          description: An URL to a video file or a YouTube video.
        stellenname:
          type: string
          example: Softwareentwickler XYZ (m/w/d)
          description: Public job title
        einleitung:
          type: string
          description: Introduction (WIIFM) - How does the applicant benefit?. HTML.
        aufgaben:
          type: string
          description: Tasks - What tasks await the applicant? HTML.
        profil:
          type: string
          description: Profile - What should the applicant bring to the table? HTML.
        einwandvorwegnahme:
          type: string
          description: Anticipating objections - Addressing the applicant's concerns. HTML.
        kultur_werte:
          type: string
          description: Values and culture - Information about the corporate culture. HTML.
        wir_bieten:
          type: string
          description: We offer - What benefits and offers are there for the applicant? HTML.
        vertrauensaufbau:
          type: string
          description: Building trust - Creating trust through transparent information. HTML.
        so_geht_es_weiter:
          type: string
          description: What happens next - information on the further course of the application process. HTML.
        einarbeitung:
          type: string
          description: Induction - How will the new employee be inducted? HTML.
        handlungsaufforderung:
          type: string
          description: Call to action - Invitation to apply. HTML.
        standort:
          type: integer
        kategorie:
          type: integer
        entgelt:
          type: object
          properties:
            min:
              type: number
            max:
              type: number
            einheit:
              type: string
            whrg:
              type: string
            hinweis:
              type: string
          additionalProperties: false
        oeffentlich:
          type: string
          enum:
            - Ja
            - Nein
        template:
          type: string
        remote:
          type: string
          enum:
            - Nein
            - fully remote
            - wfhf
        bewerbungsformular:
          type: string
        mandant:
          type: integer
        strasse:
          type: string
        plz:
          type: string
        ort:
          type: string
        land:
          type: string
        firma:
          type: integer
        workingplan:
          type: array
          description: |-
            1 = Vollzeit
            2 = Schicht / Nacht / Wochenende
            7 = Teilzeit - Vormittag
            8 = Teilzeit - Nachmittag
            9 = Teilzeit - Abend
            10 = Teilzeit - flexibel
          items:
            type: integer
            enum:
              - 1
              - 2
              - 7
              - 8
              - 9
              - 10
        hoursperweek:
          type: number
        minijob:
          type: string
          enum:
            - Ja
            - Nein
        ansprechpartner:
          type: integer
          description: The id of an active user. See /benutzer
        application_startdate:
          type: string
          format: date
          description: Earliest application date.
        application_enddate:
          type: string
          format: date
          description: Latest application date.
        assignment_startdate:
          type: string
          format: date
          description: Earliest possible start date.
        assignment_enddate:
          type: string
          format: date
          description: Latest possible start date.
    job-kategorie:
      description: One object
      type: object
      properties:
        id:
          type: integer
          readOnly: true
          example: 1
        name:
          type: string
        beschreibung:
          type: string
        reihenfolge:
          type: integer
          example: Neu
    personalbedarfsmeldung:
      description: One object
      type: object
      properties:
        id:
          type: integer
          readOnly: true
          example: 1
        plan:
          type: string
          example: Geplant
        abteilung:
          type: string
          example: Vertrieb
        bedarf:
          type: string
          example: Neu
        ersatz_fuer:
          type: string
          example: kein Ersatz, neu
        vorgeschlagene_person:
          type: string
          example: Klaus Mustermann
        grund:
          type: string
          example: Marketing liefert 124% mehr Leads als im Vorjahr …
        notiz:
          type: string
          example: Dies ist eine Notiz
        ansprechpartner:
          type: integer
          example: 1006
        stellenname:
          type: string
          example: Vertriebsmitarbeiter (m/w/d)
        einsatzstrasse:
          type: string
          example: Alois-Thums-Straße 11
        einsatzort:
          type: string
          example: Nidda
        einsatzplz:
          type: string
          example: '63667'
        einsatzland:
          type: string
          example: DE
        einsatzregion:
          type: integer
          example: 7
        aa_joboffertype:
          type: integer
          example: 1
        aa_assignmentstartdate:
          type: string
          format: date
          example: '0000-00-00'
        aa_assignmentenddate:
          type: string
          format: date
          example: '0000-00-00'
        aa_schedule_workingplan:
          type: string
          example: 1
        aa_schedule_hoursperweek:
          type: string
          example: 40
        aa_schedule_duration_termdate:
          type: string
          format: date
          example: '0000-00-00'
        aa_schedule_duration_termlength:
          type: integer
          example: 0
        aa_minijob:
          type: string
          example: Nein
        entgelt:
          type: object
          properties:
            min:
              type: number
              example: 12.5
            max:
              type: number
              example: 18.75
            einheit:
              type: string
              example: Stunde
            whrg:
              type: string
              example: EUR
            hinweis:
              type: string
              example: BKV, Tankgutschein, Weihnachtsgeld
        gesuchte_faehigkeiten:
          type: string
          example: |-
            Sales Techniken.
            Sehr gute …
        aufgaben:
          type: string
          example: |-
            Telefonischer Vertrieb.
            Inbound …
        remote:
          type: string
          example: Nein
        zeitpunkt:
          type: string
          example: '2025-06-06 05:32:46'
    stellenanzeige:
      description: One public job
      type: object
      properties:
        title:
          type: string
          description: Job title
          example: IT-affine Bürokauffrau(m/w/d)
        text:
          type: string
          description: Job description as plain text
          example: |
            Wir suchen
        html:
          type: string
          description: Job description as HTML
          example: <h1>Wir suchen …
        id:
          type: integer
          description: ID of the job
          example: 1000
        mid:
          type: integer
          description: ID of the parent job
          example: 1000
        fid:
          type: string
          description: Fully qualified job ID. Uses the customer number as prefix.
          example: kxxxxx.1000
        street:
          type: string
          description: Street of the work place
          example: Alois-Thums-Straße 11
        city:
          type: string
          description: City of the work place
          example: Nidda
        zip:
          type: string
          description: ZIP code of the work place
          example: '63667'
        region:
          type: string
          description: Region of the work place
          example: Hessen
        country:
          type: string
          description: Country of the work place
          example: DE
        category:
          type: string
          description: Name of the job category
          example: Kaufmännisch
        category_id:
          type: integer
          description: ID of the job category
          example: 1
        images:
          type: object
          properties:
            image:
              type: string
              description: Main image of the job
              example: https://kxxxx.coveto.de/public_data/jobs/fotos/person.jpg
            category:
              type: string
              description: Image of the job category
              example: https://kxxxx.coveto.de/public_data/jobs/fotos/person.jpg
            logo_square:
              type: string
              description: Company logo in a 1:1 format
              example: https://kxxxx.coveto.de/v1234/public_data/logo-icon.png
            logo:
              type: string
              description: Company logo
              example: https://kxxxx.coveto.de/public_data/logo.jpg
            socialmedia:
              type: string
              description: Image for social media
              example: https://kxxxx.coveto.de/v1234/public_data/logo-facebook.jpg
            background:
              type: string
              description: Larger background image
              example: https://kxxxx.coveto.de/v1234/public_data/backgroundimage.jpg
            recruiter:
              type: string
              description: Photo of the recruiter
              example: https://kxxxx.coveto.de/public_data/amaBenutzer/2/2.png
        colors:
          type: object
          properties:
            background:
              type: string
              description: Background color as hex string
              example: '#ffffff'
            headline:
              type: string
              description: Headline color as hex string
              example: '#009ed6'
        contact:
          type: object
          properties:
            company:
              type: string
              description: Company name
              example: coveto ATS GmbH
            position:
              type: string
              description: Business title of the recruiter, i.e. CEO, Recruiter, …
              example: Geschäftsführer
            salutation:
              type: string
              description: Salutation of the recruiter
              example: Frau
            firstname:
              type: string
              description: Firstname of the recruiter
              example: Pia
            lastname:
              type: string
              description: Lastname of the recruiter
              example: Tischer
            strasse:
              type: string
              description: Address of the recruiter, Street
              example: Alois-Thums-Straße 11
            plz:
              type: string
              description: Address of the recruiter, ZIP Code
              example: '63667'
            ort:
              type: string
              description: Address of the recruiter, City
              example: Nidda
            countrycode:
              type: string
              description: Address of the recruiter, Country
              example: DE
            phone:
              type: string
              description: Landline or mobile phone number of the recruiter
              example: +49 6043 98598-0
            email:
              type: string
              description: Email address of the recruiter
              example: info@coveto.de
        link:
          type: string
          description: Deeplink to the job
          example: https://kxxxx.coveto.de/job-examinierte-pflegefachkraft-m-w-d-nidda-1000.html
        apply:
          type: string
          description: Link zu the application form
          example: https://kxxxx.coveto.de/public/bewerbung/?id=1000
        pubDate:
          type: string
          format: date
          description: Date of the first publication
          example: '2025-06-09'
          readOnly: true
        lastModifiedDateTime:
          type: string
          description: Date and time of the last change
          example: '2025-08-15 13:37:00'
          readOnly: true
        earliestStartDate:
          type: string
          format: date
          description: Earliest start date for the new employee
          example: '0000-00-00'
        employmentType:
          type: array
          items:
            type: string
            enum:
              - FULL_TIME
              - PART_TIME
              - CONTRACTOR
              - INTERN
          description: List of possible employment types
          example: FULL_TIME
        hoursPerWeek:
          type: number
          description: Number of weekly working hours
          example: 38.5,
        jsonld:
          type: string
          description: JSONLD for Google
          example: <script type="application/ld+json">…
        salary:
          type: object
          properties:
            min:
              type: number
              example: 12.5
            max:
              type: number
              example: 18.75
            unit:
              type: array
              items:
                type: string
                enum:
                  - h
                  - m
                  - 'y'
              example: h
            currency:
              type: array
              items:
                type: string
                enum:
                  - EUR
                  - BGN
                  - CZK
                  - DKK
                  - HUF
                  - PLN
                  - RON
                  - SEK
                  - CHF
                  - GBP
                  - USD
              example: EUR
        linkedin_company_id:
          type: string
          example: '20107494'
    standort:
      description: One object
      type: object
      properties:
        id:
          type: integer
          readOnly: true
          example: 1
        standort:
          type: string
        aktiv:
          type: string
        aa_hiring_org:
          type: string
        firma:
          type: string
        strasse:
          type: string
        plz:
          type: string
        ort:
          type: string
        aa_countrycode:
          type: string
        aa_region:
          type: string
        telefon:
          type: string
        email_from:
          type: string
        whatsapp:
          type: string
        linkedin_company_id:
          type: string
    task:
      description: One object
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
          example: 'Re: Your question'
          description: Short text. Could be the subject of an email or the visible text on the kanban board.
        bewerber:
          type: integer
          example: 1028
          description: ID of an applicant.
        arge:
          type: integer
          example: 1045
          description: ID of a company.
        ansprechpartner:
          type: integer
          example: 2459
          description: ID of a person that belongs to the company
        task_art:
          type: integer
          example: 4
          description: ID of the Task-Art
        zeitpunkt:
          type: string
          example: '2025-06-19 22:05:00'
          description: Date and time of the event that created this task.
        standort:
          type: integer
          example: 17
          description: ID of a Standort
        beschreibung:
          type: string
          example: To whom it may belongs, …
          description: Long text that contains the message.
        board:
          type: integer
          example: 1
          description: ID of a Kanban Board. If 0, the task is not visible on any board.
        zugewiesen_an:
          type: integer
          example: 4
          description: ID of a Benutzer
        wvl_am:
          type: string
          example: '2025-07-19 22:05:00'
          description: Date and time, when this task should be visible on the kanban board.
        deadline:
          type: string
          example: '2025-08-19 22:05:00'
          description: Date and time, when this task is due.
        status:
          type: integer
          example: 1
          description: Jobs/Projects classification of an Applicant. See possible values in coveto.
        prioritaet:
          type: integer
          example: 1
          description: 1 (Normal), 2 (Hoch), 3 (Panik), -1 (Niedrig)
        wartet_auf:
          type: string
          example: Answer to my email
          description: What is this task waiting for?
        mutter:
          type: integer
          example: 354
          description: Parent task
        mandant:
          type: integer
    task-art:
      description: One object
      type: object
      properties:
        id:
          type: integer
          readOnly: true
          example: 1
        name:
          type: string
        aktiv:
          type: string
        ist_kontakt:
          type: string
        beschreibung:
          type: string
    task-board:
      description: One object
      type: object
      properties:
        id:
          type: integer
          readOnly: true
          example: 1
        name:
          type: string
        verschwindet_nach_tagen:
          type: integer
        spalten:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
              definition:
                type: string
              reihenfolge:
                type: integer
    zip-nearby:
      description: One ZIP result
      type: object
      properties:
        zip:
          type: string
          example: 63667
        city:
          type: string
          example: Nidda
        country:
          type: string
          example: DE
        distance:
          type:
            - integer
            - number
          example: 7.523
    log-delete:
      type: array
      items:
        type: integer
        description: ID of the deleted record
    FileSummary:
      type: object
      properties:
        id:
          type: integer
        filename:
          type: string
        extension:
          type: string
        folder:
          type: string
        tags:
          type: array
          items:
            type: string
        task:
          type: integer
        job:
          type: integer
      required:
        - id
        - filename
        - extension
        - folder
        - tags
        - task
        - job
      additionalProperties: false
    DocumentMetaUpdate:
      type: object
      properties:
        filename:
          type: string
          description: Filename without extension
        tags:
          type: array
          description: Tags to assign
          items:
            type: string
        job:
          type: integer
          description: Job identifier
        task:
          type: integer
          description: Task identifier
      required:
        - filename
      additionalProperties: false
    DocumentResponse:
      type: object
      properties:
        id:
          type: integer
          description: Identifier of the document
      required:
        - id
      additionalProperties: false
  requestBodies:
    bewerber-post:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/bewerber'
    bewerber-patch:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/bewerber'
    firma-post:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/firma'
    firma-patch:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/firma'
    ansprechpartner-post:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ansprechpartner'
    ansprechpartner-patch:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ansprechpartner'
    job-post:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/job'
    job-patch:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/job'
    personalbedarfsmeldung-post:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/personalbedarfsmeldung'
    personalbedarfsmeldung-patch:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/personalbedarfsmeldung'
    standort-post:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/standort'
    standort-patch:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/standort'
    task-post:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/task'
    task-patch:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/task'
