openapi: 3.0.3
info:
  title: Justimmo BusinessAPI
  contact:
    email: support@justimmo.at
  version: 1.106.0
  x-logo:
    url: https://api-docs.justimmo.at/images/justimmo-logo-apidocs.svg
    altText: Justimmo
  description: >-
    # OpenAPI Specification

    This API is documented in [OpenAPI
    3.0](https://spec.openapis.org/oas/v3.0.3) format with a few vendor
    extensions (prefixed with `x-`) for the generated HTML docs. We pledge
    ourselves to be compliant to the OpenAPI Standard, but due to different
    interpretations of the standard and different levels of implementation in
    various tools out there, we can not guarantee that the specification
    available for download above will work with any specific tool or client
    generator.


    In our experience, there is currently no client generator that supports the
    full featureset of OpenAPI 3.0, let alone newer versions, and thus we most
    likely can not support you if you run into any issues due to the use of
    incompatible generators. We may also decide to update to a newer version of
    the OpenAPI Standard in the future, which - even without any changes to the
    API itself - can also lead to further incompatibilities with certain tools
    if they haven't been updated at that point themselves. For this reason, our
    recommendation is to implement the API Calls and handle the responses by
    yourself instead of relying on generated code.


    # API URL

    Unless stated otherwise, the API endpoint is located at
    `https://api.justimmo.at/v1`.


    # Cross-Origin Resource Sharing

    This API does NOT feature any Cross-Origin Resource Sharing (CORS) /
    CORS-Headers as it is meant for server-side consumption only.


    # Authentication

    We are offering authentication via OAuth2 - an open protocol to allow secure
    authorization in a simple and standard method from web, mobile and desktop
    applications.


    For more infos see our [OAuth
    documentation](https://api-docs.justimmo.at/partner/oauth.html).


    <div></div>    

    <SecurityDefinitions />


    ## Scopes

    Not every client has access to all the properties / functionality listed in
    this document, based on predefined client scopes. If any properties or
    functionality you need are missing, please contact us and we will reevaluate
    the scopes granted to you.


    # Rate Limiting

    To protect our servers, there is a rate limit in place: You may make up to
    10 requests per second and IP address on average. Past that the server may
    refuse your request and answer with http status code `429 - Too Many
    Requests`.
servers:
  - url: https://api.justimmo.at/v1
paths:
  /acquisitions:
    post:
      tags:
        - acquisition
      operationId: createAcquisitionRealty
      summary: Create Acquisition Realty
      description: Create an new acquisition realty
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAcquisitionRealty'
      responses:
        '200':
          description: Acquisition Realty created
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    format: int64
                    example: 939482
                    description: The id of the newly created acquisition realty
                  catalogue_number:
                    $ref: '#/components/schemas/RealtyCatalogueNumber'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /activities:
    post:
      tags:
        - activity
      operationId: createActivity
      summary: Create Activity
      description: >-
        Create an activity for a realty or contact.


        Despite being nullable, either `realty_id` or `contact_id` (or both)
        need to be present in the request body.


        If called via `auth_token`, the activity will show as created by the
        token's owner.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - activity_type_id
              additionalProperties: false
              properties:
                activity_type_id:
                  type: integer
                  example: 1020
                  description: >-
                    The numerical representation of the type of activity (ie
                    "Contact has been updated", "Realty has changed status",
                    etc...).  

                    Please [contact us](mailto:support@justimmo.at) to inquire
                    what `activity_type_id` to use for your specific use case.
                realty_id:
                  type: integer
                  nullable: true
                contact_id:
                  type: integer
                  nullable: true
                text:
                  type: string
                  nullable: true
                created_at:
                  nullable: true
                  type: string
                  format: date-time
                  description: >-
                    RFC-3339


                    If no `created_at` is provided, the current time will be
                    assumed for it.
                  example: '2020-05-01T12:13:25+00:00'
      responses:
        '200':
          description: Activity created
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    format: int64
                    example: 939482
                    description: The id of the newly created activity
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /activities/{activityId}:
    get:
      tags:
        - activity
      operationId: GetActivityDetails
      summary: Activity Details
      description: Retrieve activity information
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamActivityId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Activity'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /activities/{activityId}/files:
    post:
      tags:
        - activity
      operationId: CreateActivityFile
      summary: Create Activity File
      description: Uploads a file and attaches it to the activity
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamActivityId'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
              properties:
                file:
                  type: string
                  format: binary
                title:
                  type: string
      responses:
        '200':
          description: File created
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    storage_key:
                      type: string
                      pattern: '[a-zA-Z0-9_-]+\.[a-zA-Z0-9]+'
                      description: internal storage key / id
                      example: 4yJnjOyivaIvIjxZrG0Bnd.jpg
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /activities/{activityId}/files/{storageKey}:
    delete:
      tags:
        - activity
      operationId: DeleteActivityFile
      summary: Delete Activity File
      description: Deletes a file attached to an activity
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamActivityId'
        - $ref: '#/components/parameters/PathParamStorageKey'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /appointments:
    get:
      tags:
        - appointment
      operationId: GetAppointments
      summary: List appointments
      description: Retrieve a list of appointments
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId-Optional'
        - $ref: '#/components/parameters/QueryParamFields'
        - $ref: '#/components/parameters/QueryParamLimit'
        - $ref: '#/components/parameters/QueryParamOffset'
        - in: query
          name: filters
          style: deepObject
          explode: true
          description: >-
            <span class="example-label">Example:</span> <span
            class="example-value">filters[contact_id]=123,124</span>                  

            Filters the results
          schema:
            type: object
            properties:
              agent_id:
                type: string
                description: |-
                  comma-separated list of integers  
                  Filters based on the inquiry's `agent_id`.
              contact_id:
                type: string
                description: |-
                  comma-separated list of integers  
                  Filters based on the inquiry's `contact_id`.
              realty_id:
                type: string
                description: |-
                  comma-separated list of integers  
                  Filters based on the inquiry's `realty_id`.
              type:
                type: string
                description: |-
                  comma-separated list of strings

                  Items Enum: 
                  <span class="text-enumvalue">"meeting"</span>
                  <span class="text-enumvalue">"notary"</span>
                  <span class="text-enumvalue">"viewing"</span>

                  Filters based on the appointment's `type`.
              from:
                type: string
                description: RFC-3339
                example: '2024-11-11T00:00:00+00:00'
              to:
                type: string
                description: RFC-3339
                example: '2024-11-24T23:59:59+00:00'
              state:
                type: string
                enum:
                  - open
                  - done
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentList'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
    post:
      tags:
        - appointment
      operationId: createAppointment
      summary: Create Appointment
      description: Create a new appointment
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/CreateMeetingAppointment'
                - $ref: '#/components/schemas/CreateNotaryAppointment'
                - $ref: '#/components/schemas/CreateViewingAppointment'
      responses:
        '200':
          description: Appointment created
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    format: int64
                    example: 57593657
                    description: The id of the newly created appointment
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '401':
          $ref: '#/components/responses/OauthError401Unauthorized'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '422':
          $ref: '#/components/responses/ClientError422UnprocessableEntity'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /appointments/{appointmentId}:
    patch:
      tags:
        - appointment
      operationId: UpdateAppointment
      summary: Update Appointment
      description: Update an existing appointment
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamAppointmentId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              anyOf:
                - $ref: '#/components/schemas/UpdateMeetingAppointment'
                - $ref: '#/components/schemas/UpdateNotaryAppointment'
                - $ref: '#/components/schemas/UpdateViewingAppointment'
      responses:
        '200':
          description: Appointment updated
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '401':
          $ref: '#/components/responses/OauthError401Unauthorized'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '422':
          $ref: '#/components/responses/ClientError422UnprocessableEntity'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
    delete:
      tags:
        - appointment
      operationId: DeleteAppointment
      summary: Delete Appointment
      description: Deletes an appointment
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamAppointmentId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '401':
          $ref: '#/components/responses/OauthError401Unauthorized'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /commissionContracts/accept:
    post:
      tags:
        - commissioncontracts
      operationId: AcceptCommissionContract
      summary: Accept CommissionContract
      description: >-
        Accept CommissionContract


        Use `AcceptCommissionContractOfferBody` as Request Body to accept the
        contract for an entire offer,  

        or `AcceptCommissionContractRealtyBody` to accept the contract for a
        single realty that hasn't been offered to the contact,  

        or `AcceptSearchContractBody` <span class="text-tbd">(Work in
        Progress)</span> to accept the contract for a search profile.


        <div class="container-tbd">
            <code>AcceptSearchContractBody</code> is Work in Progress for internal testing, do not use yet.
        </div>
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/AcceptCommissionContractOfferBody'
                - $ref: '#/components/schemas/AcceptCommissionContractRealtyBody'
                - $ref: '#/components/schemas/AcceptSearchContractBody'
      responses:
        '200':
          description: Contract accepted.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    format: int64
                    example: 576784
                    description: The id of the contract
                  file:
                    $ref: '#/components/schemas/File'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /commissionContracts/preview:
    post:
      tags:
        - commissioncontracts
      operationId: PreviewCommissionContract
      summary: Preview CommissionContract
      description: >-
        Preview CommissionContract


        Use `PreviewCommissionContractOfferBody` as Request Body to preview the
        contract for an entire offer,  

        or `PreviewCommissionContractRealtyBody` to preview the contract for a
        single realty that hasn't been offered to the contact,  

        or `PreviewSearchContractBody` <span class="text-tbd">(Work in
        Progress)</span> to preview the contract for a search profile.


        <div class="container-tbd">
            <code>PreviewSearchContractBody</code> is Work in Progress for internal testing, do not use yet.
        </div>
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/PreviewCommissionContractOfferBody'
                - $ref: '#/components/schemas/PreviewCommissionContractRealtyBody'
                - $ref: '#/components/schemas/PreviewSearchContractBody'
      responses:
        '200':
          description: Preview created.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - salutation
                  - teaser
                  - text
                properties:
                  salutation:
                    type: string
                    description: The salutation
                  teaser:
                    type: string
                    description: The teaser of the contract
                  text:
                    type: string
                    description: The content of the contract
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /contacts:
    get:
      tags:
        - contact
      operationId: GetContactList
      summary: List Contacts
      description: >-
        Retrieve contact list


        If different filter parameters are provided, those are related by `AND`.

        If more than one value is provided for any given filter, they are
        treated with an `OR` relation.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/QueryParamFields'
        - $ref: '#/components/parameters/QueryParamLimit'
        - $ref: '#/components/parameters/QueryParamOffset'
        - in: query
          name: filters
          style: deepObject
          explode: true
          description: Filters the results
          schema:
            type: object
            properties:
              email:
                type: string
                description: >-
                  <span class="example-label">Example:</span> <span
                  class="example-value">filters[email]=test%40example.com</span>  

                  Filters based on the contact's `email`.  

                  Partial search with `*` as placeholder is supported.
              first_name:
                type: string
                description: >-
                  <span class="example-label">Example:</span> <span
                  class="example-value">filters[first_name]=G%C3%BCnther</span>  

                  Filters based on the contact's `first_name`.  

                  Partial search with `*` as placeholder is supported.  

                  In case of contact type couple or family, only `person1` will
                  be taken into account. 
              last_name:
                type: string
                description: >-
                  <span class="example-label">Example:</span> <span
                  class="example-value">filters[last_name]=Schwarzeneg*</span>  

                  Filters based on the contact's `last_name`.  

                  Partial search with `*` as placeholder is supported.  

                  In case of contact type couple or family, only `person1` will
                  be taken into account.  
              phone:
                type: string
                description: >-
                  <span class="example-label">Example:</span> <span
                  class="example-value">filters[phone]=</span>  

                  Filters based on the contact's `phone_mobile`, `phone_private`
                  and `phone_business`.  

                  Partial search is not supported, though due to input
                  normalization, results may yield partial matches.
              active:
                type: boolean
              created_since:
                type: string
                format: datetime
                description: RFC-3339
                example: '2025-01-01T00:00:00+00:00'
              updated_since:
                type: string
                format: datetime
                description: RFC-3339
                example: '2025-01-01T00:00:00+00:00'
              id:
                type: string
                description: >-
                  Filters based on the contact's ID.

                  <span class="example-label">Example:</span> <span
                  class="example-value">filters[id]=8234567,8234568</span>

                  Comma-separated list of integers. Accepts up to 100 IDs per
                  request.
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactList'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
    post:
      tags:
        - contact
      operationId: createContact
      summary: Create Contact
      description: Create an new contact
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateContact'
      responses:
        '200':
          description: Contact created
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    format: int64
                    example: 939482
                    description: The id of the newly created contact
                  catalogue_number:
                    type: integer
                    format: int64
                    example: 15
                    description: The catalogue_number of the newly created contact
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /contacts/categories:
    get:
      tags:
        - contact
      operationId: GetContactCategoryList
      summary: List Contact Categories
      description: |-
        Retrieve contact category list

        If different filter parameters are provided, those are related by `AND`.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/QueryParamLimit'
        - $ref: '#/components/parameters/QueryParamOffset'
        - in: query
          name: filters
          style: deepObject
          explode: true
          description: Filters the results
          schema:
            type: object
            properties:
              mailerlite:
                type: boolean
              marketing:
                type: boolean
              newsletter:
                type: boolean
              name:
                type: string
                description: |-
                  comma-separated list of strings  
                  when only providing a single value, * works as placeholder  
                  Filters based on the category's `name`.
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactCategoryList'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /contacts/{contactId}:
    patch:
      tags:
        - contact
      operationId: UpdateContact
      summary: Update Contact
      description: Update an existing contact
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamContactId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateContact'
      responses:
        '200':
          description: Contact updated
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
    get:
      tags:
        - contact
      operationId: GetContactDetails
      summary: Contact Details
      description: Retrieve contact information
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamContactId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /contacts/{contactId}/activate:
    put:
      tags:
        - contact
      operationId: ActivateContact
      summary: Activate Contact
      description: Activate an existing contact
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamContactId'
      responses:
        '200':
          description: Contact activated
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /contacts/{contactId}/deactivate:
    put:
      tags:
        - contact
      operationId: DeactivateContact
      summary: Deactivate Contact
      description: Deactivate an existing contact
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamContactId'
      responses:
        '200':
          description: Contact deactivated
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /contacts/{contactId}/newsletter/unsubscribe:
    put:
      tags:
        - contact
      operationId: UnsubscribeNewsletter
      summary: Newsletter Unsubscribe
      description: >-
        Unsubscribe from any newsletters the contact may be subscribed to by
        removing their newsletter categories.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamContactId'
        - $ref: '#/components/parameters/QueryParamNewsletterCategoryId'
      responses:
        '200':
          description: Newsletter unsubscribed
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /contacts/{contactId}/emailAddresses:
    post:
      tags:
        - contact
      operationId: AddContactEmailAddress
      summary: Add an Email address
      description: Adds an email address to a contact's list of email addresses
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamContactId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateContactEmailAddress'
      responses:
        '200':
          description: Email address added
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    example: 46232
                    description: The id of the newly added email address
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /contacts/{contactId}/emailAddresses/{emailAddressId}:
    delete:
      tags:
        - contact
      operationId: DeleteContactEmailAddress
      summary: Delete Email Address
      description: Deletes an email address from a contact's list of email addresses
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamContactId'
        - $ref: '#/components/parameters/PathParamEmailAddressId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /contacts/{targetContactId}/merge/{sourceContactId}:
    put:
      tags:
        - contact
      operationId: MergeContacts
      summary: Merge Contacts
      description: Merge two contacts into one
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - in: path
          name: targetContactId
          schema:
            type: integer
            format: int64
            minimum: 1
          required: true
          description: The id of the target contact to merge into.
        - in: path
          name: sourceContactId
          schema:
            type: integer
            format: int64
            minimum: 1
          required: true
          description: >-
            The id of the source contact to merge. The source contact will be
            deleted after the merge.
      responses:
        '200':
          description: Contact merged successfully
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /contacts/{contactId}/searchProfiles:
    get:
      tags:
        - searchprofile
        - contact
      operationId: GetContactSearchProfileList
      summary: List Search Profiles
      description: Retrieve list of search profiles for a contact
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamContactId'
        - $ref: '#/components/parameters/QueryParamFields'
        - $ref: '#/components/parameters/QueryParamLocale'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchProfileList'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /file/{storageKey}:
    get:
      tags:
        - file
      operationId: GetFileContent
      summary: File Content
      description: Retrieve file content
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId-Optional'
        - $ref: '#/components/parameters/PathParamStorageKey'
      responses:
        '200':
          description: Successful operation / File Content
          content:
            '*/*':
              schema:
                type: string
                format: binary
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
        - client_credentials_impersonation: []
  /file/thumbnail/{config}/{storageKey}:
    get:
      tags:
        - file
      operationId: GetFileThumbnailContent
      summary: File Thumbnail Content
      description: Retrieve file content of a thumbnail
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId-Optional'
        - in: path
          name: config
          schema:
            type: string
          required: true
          description: The thumbnail config of the file
        - $ref: '#/components/parameters/PathParamStorageKey'
      responses:
        '200':
          description: Successful operation / File Content
          content:
            '*/*':
              schema:
                type: string
                format: binary
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
        - client_credentials_impersonation: []
  /hitlist/{contactId}:
    get:
      tags:
        - searchprofile
        - contact
      operationId: GetContactHitList
      summary: Hitlist
      description: >-
        Retrieve hitlist for a contact


        Hits are generated based on the users search profiles, but are not
        specific to them.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamContactId'
        - $ref: '#/components/parameters/QueryParamFields'
        - $ref: '#/components/parameters/QueryParamLimit'
        - $ref: '#/components/parameters/QueryParamLocale'
        - $ref: '#/components/parameters/QueryParamOffset'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - pagination
                  - items
                properties:
                  pagination:
                    $ref: '#/components/schemas/Pagination'
                  items:
                    type: array
                    items:
                      type: object
                      required:
                        - realty
                        - created_at
                      properties:
                        realty:
                          type: object
                          required:
                            - id
                          properties:
                            id:
                              type: integer
                              format: int64
                              example: 1234
                        search_profiles:
                          type: array
                          items:
                            type: object
                            required:
                              - data
                            properties:
                              data:
                                type: object
                                required:
                                  - id
                                  - auto_description
                                properties:
                                  id:
                                    type: integer
                                    format: int64
                                    example: 23
                                  auto_description:
                                    type: string
                                    description: Automatically generated name
                                    example: >-
                                      Kauf, Wohnfl.: 73 m² bis 137 m², Bezirk:
                                      Wien 3., Landstraße, Wohnung
                        created_at:
                          type: string
                          format: datetime
                          description: RFC-3339
                          example: '1985-04-12 14:12:12'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /hitlist/{contactId}/{realtyId}:
    get:
      tags:
        - searchprofile
      operationId: GetHitlistDetail
      summary: Hitlist Details
      description: Retrieve information about a hitlist entry
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamContactId'
        - $ref: '#/components/parameters/PathParamRealtyId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                required:
                  - contact
                  - realty
                  - search_profiles
                  - created_at
                properties:
                  contact:
                    type: object
                    required:
                      - id
                    properties:
                      id:
                        type: integer
                        format: int64
                        example: 5756
                  realty:
                    type: object
                    required:
                      - id
                    properties:
                      id:
                        type: integer
                        format: int64
                        example: 1234
                  search_profiles:
                    type: array
                    items:
                      type: object
                      required:
                        - data
                      properties:
                        data:
                          type: object
                          required:
                            - id
                            - auto_description
                          properties:
                            id:
                              type: integer
                              format: int64
                              example: 23
                            auto_description:
                              type: string
                              description: Automatically generated name
                              example: >-
                                Kauf, Wohnfl.: 73 m² bis 137 m², Bezirk: Wien
                                3., Landstraße, Wohnung
                  created_at:
                    type: string
                    format: datetime
                    description: RFC-3339
                    example: '1985-04-12 14:12:12'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /inquiries:
    get:
      tags:
        - inquiry
      operationId: GetInquiryList
      summary: List Inquiries
      description: >-
        Retrieve inquiry list


        If different filter parameters are provided, those are related by `AND`.

        If more than one value is provided for any given filter, they are
        treated with an `OR` relation.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/QueryParamFields'
        - $ref: '#/components/parameters/QueryParamLimit'
        - $ref: '#/components/parameters/QueryParamOffset'
        - in: query
          name: filters
          style: deepObject
          explode: true
          description: >-
            <span class="example-label">Example:</span> <span
            class="example-value">filters[contact_id]=123,124</span>                  

            Filters the results
          schema:
            type: object
            properties:
              contact_id:
                type: string
                description: |-
                  comma-separated list of integers  
                  Filters based on the inquiry's `contact_id`.
              realty_id:
                type: string
                description: |-
                  comma-separated list of integers  
                  Filters based on the inquiry's `realty_id`.
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InquiryList'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
    post:
      tags:
        - inquiry
      operationId: CreateInquiry
      summary: Create Inquiry
      description: Create an inquiry for a contact and optionally a realty.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/CreateInquiryContactIdBody'
                - $ref: '#/components/schemas/CreateInquiryContactBody'
      responses:
        '200':
          description: Inquiry created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    format: int64
                    example: 24349621
                    description: The id of the newly created inquiry
                  contact:
                    type: object
                    required:
                      - id
                    properties:
                      id:
                        type: integer
                        format: int64
                        example: 3467823
                        description: The id of the contact for this inquiry
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - client_credentials: []
  /inquiries/{inquiryId}:
    get:
      tags:
        - inquiry
      operationId: GetInquiryDetails
      summary: Inquiry Details
      description: Retrieve inquiry information
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamInquiryId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InquiryListItem'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /location/cities/autocomplete/{zip}:
    get:
      tags:
        - location
      operationId: citiesAutocomplete
      summary: City autocomplete
      description: List cities belonging to a certain zip code.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - in: path
          name: zip
          schema:
            type: integer
            minimum: 1000
            maximum: 9999
          required: true
          description: The zip code to find matching cities for.
          example: 1010
      responses:
        '200':
          description: Autocomplete result
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                  example: Wien, Innere Stadt
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /location/combined/autocomplete/{query}:
    get:
      tags:
        - location
      operationId: combinedLocationAutocomplete
      summary: Combined location autocomplete
      description: Search for locations of all types matching the given query string.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - in: path
          name: query
          schema:
            type: string
            minLength: 2
          required: true
          description: The query string to search for.
          example: Au
      responses:
        '200':
          description: Autocomplete result
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CombinedAutocompleteResponse'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /location/federalStates/autocomplete/{iso3}:
    get:
      tags:
        - location
      operationId: federalStatesAutocomplete
      summary: Federal state autocomplete
      description: List federal states for a specific country.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - in: path
          name: iso3
          schema:
            type: string
            minLength: 3
            maxLength: 3
          required: true
          description: The iso3 code of the country to list its federal states.
          example: AUT
      responses:
        '200':
          description: Autocomplete result
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LocationIdTextResponse'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /location/zips/autocomplete/{zip}:
    get:
      tags:
        - location
      operationId: zipsAutocomplete
      summary: Zip autocomplete
      description: Search for valid zips starting with given query string.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - in: path
          name: zip
          schema:
            type: integer
            minimum: 10
            maximum: 9999
          required: true
          description: The zip or partial zip to query for.
          example: 10
      responses:
        '200':
          description: Autocomplete result
          content:
            application/json:
              schema:
                type: array
                items:
                  type: integer
                  example: 1010
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /location/zips/inlocation:
    get:
      tags:
        - location
      operationId: zipsInLocation
      summary: Zips in Location
      description: >-
        This API method allows you to search a list of ZIP codes by specifying
        one or more parameters.  

        At least one parameter must be provided for the search to be valid.  

        Each parameter can accept one or more values.  


        If multiple parameters are provided, or if a single parameter has
        multiple values,  

        the search results will include any ZIP codes that match at least one of
        the provided parameters or values.  

        In other words, the parameters and their values are OR-related.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - in: query
          name: city_id
          schema:
            type: string
          description: comma-separated list of integers
          example: 17228,17229
        - in: query
          name: municipality_id
          schema:
            type: string
          description: comma-separated list of integers
          example: '90001'
        - in: query
          name: political_district_id
          schema:
            type: string
          description: comma-separated list of integers
          example: 99,100
      responses:
        '200':
          description: Autocomplete result
          content:
            application/json:
              schema:
                type: array
                example:
                  - id: 2221
                    code: '1040'
                  - id: 2215
                    code: '1060'
                  - id: 2216
                    code: '1070'
                items:
                  type: object
                  required:
                    - id
                    - code
                  properties:
                    id:
                      type: integer
                      example: 2221
                    code:
                      type: string
                      example: '1040'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /offers/{offerId}/{contactId}:
    get:
      tags:
        - offer
      operationId: GetOfferDetails
      summary: Offer Details
      description: |-
        Retrieve offer information

        <div class="container-tbd">
            <strong>S3 offer storage feature is needed to access offer documents.</strong>
        </div>
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamOfferId'
        - $ref: '#/components/parameters/PathParamContactId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Offer'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /offers/{offerId}/{contactId}/{realtyId}/notInterested:
    put:
      tags:
        - offer
      operationId: PutOfferNotInterested
      summary: Offer Not Interested
      description: Mark offer as not interested and notify the tenant
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamOfferId'
        - $ref: '#/components/parameters/PathParamContactId'
        - $ref: '#/components/parameters/PathParamRealtyId'
      responses:
        '200':
          description: Successful operation
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
  /offers/{offerId}/{contactId}/attachment/{storageKey}:
    get:
      tags:
        - offer
      operationId: GetOfferAttachmentContent
      summary: Offer Attachment Content
      description: Retrieve offer attachment content for files listed in `attachments`
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamOfferId'
        - $ref: '#/components/parameters/PathParamContactId'
        - $ref: '#/components/parameters/PathParamStorageKey'
      responses:
        '200':
          description: Successful operation / File Content
          content:
            '*/*':
              schema:
                type: string
                format: binary
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
  /realties:
    get:
      tags:
        - realty
      operationId: GetRealtyList
      summary: List Realties
      description: >-
        Retrieve realty list


        If different filter parameters are provided, those are related by `AND`.

        If more than one value is provided for any given filter, they are
        treated with an `OR` relation.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId-Optional'
        - $ref: '#/components/parameters/QueryParamFields'
        - $ref: '#/components/parameters/QueryParamLimit'
        - $ref: '#/components/parameters/QueryParamLocale'
        - $ref: '#/components/parameters/QueryParamOffset'
        - in: query
          name: filters
          style: deepObject
          explode: true
          description: >-
            <span class="example-label">Example:</span> <span
            class="example-value">filters[parent_id]=123&filters[system_type]=realty,residential_subunit</span>       

            Filters the results
          schema:
            type: object
            properties:
              marketing_type:
                type: string
                description: |-
                  comma-separated list of integers  

                  Items Enum: 
                  <span class="text-enumvalue">"buy"</span>
                  <span class="text-enumvalue">"rent"</span>

                  Filters based on the realty's `marketing_type`.
              parent_id:
                type: string
                description: |-
                  comma-separated list of integers  
                  Filters based on the realty's `parent_id`.
              status_id:
                type: string
                description: |-
                  comma-separated list of integers  
                  Filters based on the realty's `status.id`.
              system_type:
                type: string
                description: |-
                  comma-separated list of strings

                  Items Enum: 
                  <span class="text-enumvalue">"realty"</span>
                  <span class="text-enumvalue">"residential_project"</span>
                  <span class="text-enumvalue">"residential_subunit"</span>
                  <span class="text-enumvalue">"commercial_project"</span>
                  <span class="text-enumvalue">"commercial_area"</span>

                  Filters based on the realty's `system_type`.
              type_id:
                type: string
                description: |-
                  comma-separated list of integers  
                  Filters based on the realty's `type.id`.
              agent_id:
                type: string
                description: |-
                  comma-separated list of integers  
                  Filters based on the inquiry's `agent_id`.
        - in: query
          name: marketing_types[]
          deprecated: true
          schema:
            type: array
            minItems: 0
            items:
              $ref: '#/components/schemas/RealtyMarketingType'
          description: >-
            Deprecated: Use `filters` parameter instead


            Filters the results based on the realty `marketing_type`.


            see [Value Object:
            RealtyMarketingType](#section/RealtyMarketingType) and [Lookup
            Tables: RealtyMarketingType](#tag/lookup_realty_marketing_type)
        - in: query
          name: parent_ids[]
          deprecated: true
          schema:
            type: array
            minItems: 0
            items:
              type: integer
          description: |-
            Deprecated: Use `filters` parameter instead

            Filters the results based on the realty `parent_id`.
        - in: query
          name: status_ids[]
          deprecated: true
          schema:
            type: array
            minItems: 0
            items:
              type: integer
          description: >-
            Deprecated: Use `filters` parameter instead


            Filters the results based on the realty `status.id`.


            see [Value Object: RealtyStatus](#section/RealtyStatus) and [Lookup
            Tables: RealtyStatus](#tag/lookup_realty_status)
        - in: query
          name: system_types[]
          deprecated: true
          schema:
            type: array
            minItems: 0
            items:
              $ref: '#/components/schemas/RealtySystemType'
          description: >-
            Deprecated: Use `filters` parameter instead


            Filters the results based on the realty `system_type`.


            see [Value Object: RealtySystemType](#section/RealtySystemType) and
            [Lookup Tables: RealtySystemType](#tag/lookup_realty_system_type)
        - in: query
          name: type_ids[]
          deprecated: true
          schema:
            type: array
            minItems: 0
            items:
              type: integer
          description: >-
            Deprecated: Use `filters` parameter instead


            Filters the results based on the realty `type.id`.


            see [Value Object: RealtyType](#section/RealtyType) and [Lookup
            Tables: RealtyType](#tag/lookup_realty_type)
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RealtyList'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
        - client_credentials_impersonation: []
    post:
      tags:
        - realty
      operationId: createRealty
      summary: Create Realty
      description: Create an new realty
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRealty'
      responses:
        '200':
          description: Realty created
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    format: int64
                    example: 939482
                    description: The id of the newly created realty
                  catalogue_number:
                    $ref: '#/components/schemas/RealtyCatalogueNumber'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}:
    patch:
      tags:
        - realty
      operationId: updateRealty
      summary: Update Realty
      description: Update an existing realty
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRealty'
      responses:
        '200':
          description: Realty updated
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
    get:
      tags:
        - realty
      operationId: GetRealtyDetails
      summary: Realty Details
      description: Retrieve realty information
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/QueryParamLocale'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Realty'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /realties/catalogueNr/{realtyCatalogueNr}:
    get:
      tags:
        - realty
      operationId: GetRealtyDetailsByCatalogueNr
      summary: Realty Details (by Catalogue Number)
      description: >-
        Retrieve realty information by Catalogue Number (<span
        class="text-ji-term">Objektnummer</span>)
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamRealtyCatalogueNr'
        - $ref: '#/components/parameters/QueryParamLocale'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Realty'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /realties/{realtyId}/activities:
    get:
      tags:
        - activity
        - realty
      operationId: GetRealtyActivities
      summary: List Realty Activities
      description: >-
        Retrieve activities for a realty


        If different filter parameters are provided, those are related by `AND`.

        If more than one value is provided for any given filter, they are
        treated with an `OR` relation.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/QueryParamFields'
        - $ref: '#/components/parameters/QueryParamLimit'
        - $ref: '#/components/parameters/QueryParamLocale'
        - $ref: '#/components/parameters/QueryParamOffset'
        - in: query
          name: filters
          style: deepObject
          explode: true
          description: Filters the results
          schema:
            type: object
            properties:
              activity_type_id:
                type: string
                description: >-
                  <span class="example-label">Example:</span> <span
                  class="example-value">filters[activity_type_id]=123,124</span>  

                  comma-separated list of integers  

                  Filters based on the activity's `activity_type.id`.
              offer_id:
                type: string
                description: >-
                  <span class="example-label">Example:</span> <span
                  class="example-value">filters[offer_id]=123,124</span>  

                  comma-separated list of integers  

                  Filters based on the offer id.
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityList'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}/deals/{realtyDealId}:
    get:
      tags:
        - realty
      operationId: GetRealtyDeal
      summary: Get RealtyDeal
      description: |-
        "Abschlussbericht"

        Retrieve a single RealtyDeal.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/PathParamRealtyDealId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RealtyDeal'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /realties/{realtyId}/exports:
    get:
      tags:
        - realty
      operationId: GetRealtyExports
      summary: Realty Exports
      description: >-
        Retrieve an list of available export feeds for this realty and their
        status
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExportsList'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
    patch:
      tags:
        - realty
      operationId: UpdateRealtyExports
      summary: Update Realty Exports
      description: toggle the status of realty exports
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WriteRealtyExports'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}/exports/logs:
    get:
      tags:
        - realty
      operationId: GetRealtyExportLog
      summary: Realty Export Log
      description: >-
        Retrieve an export log for the realty detailing at what times the realty
        was exported to export feeds.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/QueryParamFields'
        - $ref: '#/components/parameters/QueryParamLimit'
        - $ref: '#/components/parameters/QueryParamOffset'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExportLog'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}/files:
    post:
      tags:
        - realty
        - acquisition
        - file
      operationId: CreateRealtyFile
      summary: Create Realty File
      description: Uploads a file and attaches it to the realty
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
                - group_id
              properties:
                file:
                  type: string
                  format: binary
                title:
                  type: string
                description:
                  type: string
                group_id:
                  type: string
                  pattern: \d+
                  description: >-
                    The group of the file


                    see [Lookup Tables: Realty File
                    GroupId](#tag/lookup_realty_file_groupids)
                sort_order:
                  type: string
                  pattern: \d+
                  description: >-
                    If provided, reorders the attachments of the same realty and
                    group to fit this new file in a specific position.


                    This can be a positive or negative value:

                    - **Positive** value counts from the start, starting with 0
                    for the first position, 1 for the second, etc

                    - **Negative** value counts from the end, with -1 as the
                    last position, -2 the second to last, etc
      responses:
        '200':
          description: >-
            File created. Depending on the group and the file type multiple
            files may be created. Eg pdf in a plan group will be converted to
            one image file per page.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    storage_key:
                      type: string
                      pattern: '[a-zA-Z0-9_-]+\.[a-zA-Z0-9]+'
                      description: internal storage key / id
                      example: 4yJnjOyivaIvIjxZrG0Bnd.jpg
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}/files/{storageKey}:
    get:
      tags:
        - realty
      operationId: GetRealtyFileContent
      summary: Realty File Content
      description: Retrieve realty file content for files listed in `internal_files`
      deprecated: true
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/PathParamStorageKey'
      responses:
        '200':
          description: Successful operation / File Content
          content:
            '*/*':
              schema:
                type: string
                format: binary
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
    delete:
      tags:
        - realty
        - acquisition
        - file
      operationId: DeleteRealtyFile
      summary: Delete Realty File
      description: Deletes a file attached to a realty
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/PathParamStorageKey'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}/expose/{templateId}:
    get:
      tags:
        - realty
      operationId: GetExposeContent
      summary: Realty Expose Content
      description: Retrieve realty expose content for exposes available for the tenant
      deprecated: false
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/PathParamExposeTemplateId'
        - $ref: '#/components/parameters/QueryParamLocale'
        - $ref: '#/components/parameters/QueryParamShowAddress'
        - $ref: '#/components/parameters/QueryParamShowPrices'
      responses:
        '200':
          description: Successful operation / Expose Content
          content:
            '*/*':
              schema:
                type: string
                format: binary
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
  /realties/{realtyId}/files/{storageKey}/metadata:
    patch:
      tags:
        - realty
        - file
      operationId: updateRealtyFileMetadata
      summary: Update Realty File Metadata
      description: Update an existing realty file's metadata
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/PathParamStorageKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRealtyFileMetadata'
      responses:
        '200':
          description: Metadata updated
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '422':
          $ref: '#/components/responses/ClientError422UnprocessableEntity'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}/marketingState/activateDraft:
    put:
      tags:
        - realty
      operationId: ActivateDraft
      summary: Activate Draft
      description: Start marketing for a draft realty
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
      responses:
        '200':
          description: Realty activated
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}/landRegisterEntries:
    post:
      tags:
        - realty
        - acquisition
      operationId: CreateRealtyLandRegisterEntry
      summary: Create Realty Land Register Entry
      description: Attaches a new land register entry to the realty
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLandRegisterEntry'
      responses:
        '200':
          description: Land Register Entry created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    format: int64
                    example: 939482
                    description: The id of the newly created Realty Land Register Entry
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}/landRegisterEntries/{realtyLandRegisterEntryId}:
    delete:
      tags:
        - realty
        - acquisition
      operationId: DeleteRealtyLandRegisterEntry
      summary: Delete Realty Land Register Entry
      description: Deletes a land register entry attached to a realty
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/PathParamRealtyLandRegisterEntryId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}/links:
    post:
      tags:
        - realty
        - acquisition
      operationId: CreateRealtyLink
      summary: Create Realty Link
      description: Attaches a new link to the realty
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - url
                - description
                - type
              properties:
                url:
                  type: string
                  minLength: 1
                  format: url
                  example: >-
                    https://app.immoviewer.com/portal/tour/1234567?accessKey=123f
                description:
                  type: string
                  example: Online 3D Rundgang
                type:
                  type: string
                  enum:
                    - link
                    - video
                    - tour
                    - project
                  example: tour
                export:
                  type: object
                  properties:
                    offer:
                      type: boolean
                      default: true
                    platform:
                      type: boolean
                      default: true
                    website:
                      type: boolean
                      default: true
                    other:
                      type: boolean
                      default: true
      responses:
        '200':
          description: Link created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    format: int64
                    example: 939482
                    description: The id of the newly created realty link
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}/links/{realtyLinkId}:
    delete:
      tags:
        - realty
        - acquisition
      operationId: DeleteRealtyLink
      summary: Delete Realty Link
      description: Deletes a link attached to a realty
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/PathParamRealtyLinkId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/{realtyId}/openimmo:
    get:
      tags:
        - realty
      operationId: GetRealtyOpenImmo
      summary: Realty OpenImmo
      description: Retrieve realty information in format OpenImmo 1.2.7 AT2
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamRealtyId'
      responses:
        '200':
          description: Successful operation
          content:
            text/xml:
              schema:
                $ref: '#/components/schemas/OpenImmo127AT2'
              example: |-
                <?xml version="1.0" encoding="UTF-8"?>
                <openimmo>
                    ...
                </openimmo>
                </xml>
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /realties/{realtyId}/poi/categories:
    get:
      tags:
        - realty
      operationId: GetRealtyPoiCategories
      summary: Realty POI categories
      description: >-
        Retrieve the distance of to the nearest point of interest grouped by
        groups
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/QueryParamLocale'
        - in: query
          name: precise
          schema:
            type: integer
            enum:
              - 1
              - 0
            default: 0
            description: >-
              Wether to return the precise distances or the distances depending
              on the public visible address
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                required:
                  - groups
                properties:
                  groups:
                    type: array
                    items:
                      type: object
                      required:
                        - id
                        - name
                        - categories
                      properties:
                        id:
                          type: string
                          example: health
                          description: The id of the group
                        name:
                          type: string
                          example: Gesundheit
                          description: The name of the group
                        categories:
                          type: array
                          items:
                            type: object
                            required:
                              - id
                              - name
                              - distance
                            properties:
                              id:
                                type: string
                                example: doctors
                                description: The id of the category
                              name:
                                type: string
                                example: Arzt
                                description: The name of the category
                              distance:
                                type: integer
                                example: 500
                                description: >-
                                  The distance of the nearest point of interest
                                  of this category in meters
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /realties/{realtyId}/vendors/{vendorId}:
    put:
      tags:
        - realty
        - acquisition
      operationId: PutRealtyVendor
      summary: Attach Realty Vendor
      description: Attaches a contact to a realty as a vendor
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/PathParamVendorId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
    delete:
      tags:
        - realty
        - acquisition
      operationId: DeleteRealtyVendor
      summary: Detach Realty Vendor
      description: Detaches a vendor from a realty
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamRealtyId'
        - $ref: '#/components/parameters/PathParamVendorId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /realties/features:
    get:
      tags:
        - realty
      operationId: GetRealtyFeatures
      summary: List Features
      description: |-
        "Ausstattungsmerkmale"

        Retrieve available realty features
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/QueryParamLocale'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    $ref: '#/components/schemas/RealtyFeatures'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /searchProfiles:
    post:
      tags:
        - searchprofile
      operationId: CreateSearchProfile
      summary: Create Search Profile
      description: Create an new search profile
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Actor-Default-Contact'
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSearchProfile'
      responses:
        '200':
          description: Search Profile created
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    format: int64
                    example: 763425
                    description: The id of the newly created search profile
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /searchProfiles/{searchProfileId}:
    patch:
      tags:
        - searchprofile
      operationId: UpdateSearchProfile
      summary: Update Search Profile
      description: Update an existing search profile
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Actor-Default-Contact'
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamSearchProfileId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateSearchProfile'
      responses:
        '200':
          description: Search Profile updated
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
    get:
      tags:
        - searchprofile
      operationId: GetSearchProfileDetails
      summary: Search Profile Details
      description: Retrieve search profile information
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamSearchProfileId'
        - $ref: '#/components/parameters/QueryParamLocale'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchProfile'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
    delete:
      tags:
        - searchprofile
      operationId: DeleteSearchProfile
      summary: Delete Search Profile
      description: Deletes a search profile
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Actor-Default-Contact'
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamSearchProfileId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /searchProfiles/{searchProfileId}/activate:
    put:
      tags:
        - searchprofile
      operationId: ActivateSearchProfile
      summary: Activate Search Profile
      description: Activate an existing search profile
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamSearchProfileId'
      responses:
        '200':
          description: Search Profile activated
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /searchProfiles/{searchProfileId}/deactivate:
    put:
      tags:
        - searchprofile
      operationId: DeactivateSearchProfile
      summary: Deactivate Search Profile
      description: Deactivate an existing search profile
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamSearchProfileId'
      responses:
        '200':
          description: Search Profile deactivated
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /searchProfiles/{searchProfileId}/extend:
    put:
      tags:
        - searchprofile
      operationId: ExtendSearchProfile
      summary: Extend Search Profile
      description: Extend an existing search profile
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Actor-Default-Contact'
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamSearchProfileId'
      responses:
        '200':
          description: Search Profile extended
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /users/current:
    get:
      tags:
        - user
      operationId: getCurrentUser
      summary: Current User
      description: >-
        Retrieve information about current user.  

        Needs to be run in a user context, see
        [Authentication](#section/Authentication).
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '401':
          $ref: '#/components/responses/OauthError401Unauthorized'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /users/groups:
    get:
      tags:
        - user
      operationId: GetUserGroupsList
      summary: List User Groups
      description: >-
        Retrieve user group list


        If different filter parameters are provided, those are related by `AND`.

        If more than one value is provided for any given filter, they are
        treated with an `OR` relation.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/QueryParamFields'
        - $ref: '#/components/parameters/QueryParamLimit'
        - $ref: '#/components/parameters/QueryParamOffset'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserGroupList'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /users:
    get:
      tags:
        - user
      operationId: GetUserList
      summary: List Users
      description: >-
        Retrieve user list


        If different filter parameters are provided, those are related by `AND`.

        If more than one value is provided for any given filter, they are
        treated with an `OR` relation.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/QueryParamFields'
        - $ref: '#/components/parameters/QueryParamLimit'
        - $ref: '#/components/parameters/QueryParamOffset'
        - in: query
          name: filters
          style: deepObject
          explode: true
          description: >-
            <span class="example-label">Example:</span> <span
            class="example-value">filters[foreign_id]=123,124</span>                  

            Filters the results
          schema:
            type: object
            properties:
              foreign_id:
                type: string
                description: |-
                  comma-separated list of integers  
                  Filters based on the user's `foreign_id`.
              username:
                type: string
                description: |-
                  comma-separated list of strings  
                  Filters based on the user's `username`.
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserList'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
  /webhooks:
    get:
      tags:
        - webhooks
      operationId: GetWebhookList
      summary: List webhooks
      description: Retrieve an list of all registered webhooks for this client and tenant
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookList'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
    post:
      tags:
        - webhooks
      operationId: CreateWebhook
      summary: Create webhook
      description: >-
        Create a new webhook  


        Note: This endpoint is not part of our standard packages and only made
        available if automatic/dynamic management of webhooks is really
        required.  

        Please [contact us](mailto:support@justimmo.at) if you need webhooks,
        and usually we will set them up for you.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWebhook'
      responses:
        '200':
          description: Webhook created
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    example: 0194dbe2-85b8-7598-9e40-62092ca9d86b
                    description: The id of the newly created webhook
                  secret:
                    type: string
                    description: >-
                      The Secret used to create/verify the new webhook's
                      [signatures](#tag/webhooks)
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '401':
          $ref: '#/components/responses/OauthError401Unauthorized'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '422':
          $ref: '#/components/responses/ClientError422UnprocessableEntity'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
  /webhooks/{webhookId}:
    get:
      tags:
        - webhooks
      operationId: GetWebhookDeliveryList
      summary: List webhook deliveries
      description: >-
        Retrieve a list of all deliveries of a webhook. Only deliveries of the
        last 15 days are available
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/PathParamWebhookId'
        - $ref: '#/components/parameters/QueryParamLimit'
        - $ref: '#/components/parameters/QueryParamOffset'
        - in: query
          name: filters
          style: deepObject
          explode: true
          description: Filters the results
          schema:
            type: object
            properties:
              created_before:
                type: string
                format: datetime
                description: RFC-3339
                example: '2025-01-01T00:00:00+00:00'
              created_after:
                type: string
                format: datetime
                description: RFC-3339
                example: '2025-01-01T00:00:00+00:00'
              executed_before:
                type: string
                format: datetime
                description: RFC-3339
                example: '2025-01-01T00:00:00+00:00'
              executed_after:
                type: string
                format: datetime
                description: RFC-3339
                example: '2025-01-01T00:00:00+00:00'
        - in: query
          name: sort
          description: Sorts the results
          schema:
            type: string
            enum:
              - created_at_ASC
              - created_at_DESC
              - executed_at_ASC
              - executed_at_DESC
            default: created_at_DESC
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - pagination
                  - items
                properties:
                  pagination:
                    $ref: '#/components/schemas/Pagination'
                  items:
                    type: array
                    items:
                      allOf:
                        - type: object
                          required:
                            - delivery_id
                            - state
                            - executed_at
                            - status_code
                          properties:
                            delivery_id:
                              type: string
                              format: uuid
                              example: 880658fa-f7f0-41ac-89fa-80259d3ee183
                              description: The id of the webhook delivery
                            state:
                              type: string
                              enum:
                                - new
                                - pending
                                - delivered
                              example: delivered
                              description: The state of the webhook delivery
                            executed_at:
                              type: string
                              format: Y-m-dTH:i:s.uO
                              nullable: true
                              example: 2022-08-12T14:05:30.190758+0200
                              description: >-
                                The time the webhook was delivered or the time
                                of the latest delivery attempt
                            status_code:
                              type: integer
                              nullable: true
                              example: 200
                              description: The status code received on webhook delivery
                        - anyOf:
                            - $ref: '#/components/schemas/WebhookContact'
                            - $ref: '#/components/schemas/WebhookRealty'
                            - $ref: '#/components/schemas/WebhookSearchProfile'
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials: []
    delete:
      tags:
        - webhooks
      operationId: DeleteWebhook
      summary: Delete Webhook
      description: >-
        Deletes a webhook and all the deliveries for this webhook - sent as well
        as unset ones.  


        Note: This endpoint is not part of our standard packages and and only
        made available if automatic/dynamic management of webhooks is really
        required.  

        Please [contact us](mailto:support@justimmo.at) if you need webhooks
        removed.
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-TenantId'
        - $ref: '#/components/parameters/X-Justimmo-UserId'
        - $ref: '#/components/parameters/PathParamWebhookId'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              example: {}
        '400':
          $ref: '#/components/responses/ClientError400BadRequest'
        '401':
          $ref: '#/components/responses/OauthError401Unauthorized'
        '403':
          $ref: '#/components/responses/ClientError403Forbidden'
        '404':
          $ref: '#/components/responses/ClientError404NotFound'
        '500':
          $ref: '#/components/responses/ServerError500InternalServerError'
      security:
        - auth_token: []
        - client_credentials_impersonation: []
x-webhooks:
  webhook-acquisition:
    post:
      summary: Acquisition events
      description: >-
        Called if one of the acquisition events registered to a specific webhook
        is fired
      operationId: webhook-acquisition
      security: []
      tags:
        - webhooks
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Webhook-Id'
        - $ref: '#/components/parameters/X-Justimmo-Delivery-Id'
        - $ref: '#/components/parameters/X-Justimmo-Signature'
        - $ref: '#/components/parameters/User-Agent'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                oneOf:
                  - $ref: '#/components/schemas/WebhookAcquisitionMarketing'
                  - $ref: '#/components/schemas/WebhookAcquisitionRealty'
                  - $ref: '#/components/schemas/WebhookAcquisitionState'
      responses:
        '502':
          description: >-
            **Bad Gateway**    

            If the server answers with this response, the delivery will be
            retried automatically.
        '503':
          description: >-
            **Service Unavailable**  

            If the server answers with this response, the delivery will be
            retried automatically.
        '504':
          description: >-
            **Gateway Timeout**  

            If the server answers with this response, the delivery will be
            retried automatically.
        default:
          description: Acknowledged
  webhook-activity:
    post:
      summary: Activity events
      description: >-
        Called if one of the activity events registered to a specific webhook is
        fired
      operationId: webhook-activities
      security: []
      tags:
        - webhooks
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Webhook-Id'
        - $ref: '#/components/parameters/X-Justimmo-Delivery-Id'
        - $ref: '#/components/parameters/X-Justimmo-Signature'
        - $ref: '#/components/parameters/User-Agent'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WebhookActivity'
      responses:
        '502':
          description: >-
            **Bad Gateway**    

            If the server answers with this response, the delivery will be
            retried automatically.
        '503':
          description: >-
            **Service Unavailable**  

            If the server answers with this response, the delivery will be
            retried automatically.
        '504':
          description: >-
            **Gateway Timeout**  

            If the server answers with this response, the delivery will be
            retried automatically.
        default:
          description: Acknowledged
  webhook-contact:
    post:
      summary: Contact events
      description: >-
        Called if one of the contact events registered to a specific webhook is
        fired
      operationId: webhook-contact
      security: []
      tags:
        - webhooks
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Webhook-Id'
        - $ref: '#/components/parameters/X-Justimmo-Delivery-Id'
        - $ref: '#/components/parameters/X-Justimmo-Signature'
        - $ref: '#/components/parameters/User-Agent'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WebhookContact'
      responses:
        '502':
          description: >-
            **Bad Gateway**    

            If the server answers with this response, the delivery will be
            retried automatically.
        '503':
          description: >-
            **Service Unavailable**  

            If the server answers with this response, the delivery will be
            retried automatically.
        '504':
          description: >-
            **Gateway Timeout**  

            If the server answers with this response, the delivery will be
            retried automatically.
        default:
          description: Acknowledged
  webhook-hit:
    post:
      summary: Hit events
      description: >-
        Called if one of the hit events registered to a specific webhook is
        fired
      operationId: webhook-hit
      security: []
      tags:
        - webhooks
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Webhook-Id'
        - $ref: '#/components/parameters/X-Justimmo-Delivery-Id'
        - $ref: '#/components/parameters/X-Justimmo-Signature'
        - $ref: '#/components/parameters/User-Agent'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WebhookHit'
      responses:
        '502':
          description: >-
            **Bad Gateway**    

            If the server answers with this response, the delivery will be
            retried automatically.
        '503':
          description: >-
            **Service Unavailable**  

            If the server answers with this response, the delivery will be
            retried automatically.
        '504':
          description: >-
            **Gateway Timeout**  

            If the server answers with this response, the delivery will be
            retried automatically.
        default:
          description: Acknowledged
  webhook-import:
    post:
      summary: Import events
      description: Called after a openimmo xml uploaded to an ftp server has been imported
      operationId: webhook-imports
      security: []
      tags:
        - webhooks
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Webhook-Id'
        - $ref: '#/components/parameters/X-Justimmo-Delivery-Id'
        - $ref: '#/components/parameters/X-Justimmo-Signature'
        - $ref: '#/components/parameters/User-Agent'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WebhookImport'
      responses:
        '502':
          description: >-
            **Bad Gateway**    

            If the server answers with this response, the delivery will be
            retried automatically.
        '503':
          description: >-
            **Service Unavailable**  

            If the server answers with this response, the delivery will be
            retried automatically.
        '504':
          description: >-
            **Gateway Timeout**  

            If the server answers with this response, the delivery will be
            retried automatically.
        default:
          description: Acknowledged
  webhook-inquiry:
    post:
      summary: Inquiry events
      description: >-
        Called if one of the inquiry events registered to a specific webhook is
        fired
      operationId: webhook-inquiries
      security: []
      tags:
        - webhooks
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Webhook-Id'
        - $ref: '#/components/parameters/X-Justimmo-Delivery-Id'
        - $ref: '#/components/parameters/X-Justimmo-Signature'
        - $ref: '#/components/parameters/User-Agent'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WebhookInquiry'
      responses:
        '502':
          description: >-
            **Bad Gateway**    

            If the server answers with this response, the delivery will be
            retried automatically.
        '503':
          description: >-
            **Service Unavailable**  

            If the server answers with this response, the delivery will be
            retried automatically.
        '504':
          description: >-
            **Gateway Timeout**  

            If the server answers with this response, the delivery will be
            retried automatically.
        default:
          description: Acknowledged
  webhook-newsletter:
    post:
      summary: Newsletter events
      description: >-
        Called if one of the newsletter events registered to a specific webhook
        is fired.  

        Newsletter Subscriptions are tied to the presence of a newsletter
        category on a contact. 
      operationId: webhook-newsletter
      security: []
      tags:
        - webhooks
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Webhook-Id'
        - $ref: '#/components/parameters/X-Justimmo-Delivery-Id'
        - $ref: '#/components/parameters/X-Justimmo-Signature'
        - $ref: '#/components/parameters/User-Agent'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WebhookNewsletter'
      responses:
        '502':
          description: >-
            **Bad Gateway**    

            If the server answers with this response, the delivery will be
            retried automatically.
        '503':
          description: >-
            **Service Unavailable**  

            If the server answers with this response, the delivery will be
            retried automatically.
        '504':
          description: >-
            **Gateway Timeout**  

            If the server answers with this response, the delivery will be
            retried automatically.
        default:
          description: Acknowledged
  webhook-realty:
    post:
      summary: Realty events
      description: >-
        Called if one of the realty events registered to a specific webhook is
        fired
      operationId: webhook-realties
      security: []
      tags:
        - webhooks
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Webhook-Id'
        - $ref: '#/components/parameters/X-Justimmo-Delivery-Id'
        - $ref: '#/components/parameters/X-Justimmo-Signature'
        - $ref: '#/components/parameters/User-Agent'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                oneOf:
                  - $ref: '#/components/schemas/WebhookRealty'
                  - $ref: '#/components/schemas/WebhookRealtyDeal'
                  - $ref: '#/components/schemas/WebhookRealtyExport'
      responses:
        '502':
          description: >-
            **Bad Gateway**    

            If the server answers with this response, the delivery will be
            retried automatically.
        '503':
          description: >-
            **Service Unavailable**  

            If the server answers with this response, the delivery will be
            retried automatically.
        '504':
          description: >-
            **Gateway Timeout**  

            If the server answers with this response, the delivery will be
            retried automatically.
        default:
          description: Acknowledged
  webhook-search-profile:
    post:
      summary: Search profile events
      description: >-
        Called if one of the search profile events registered to a specific
        webhook is fired
      operationId: webhook-search-profile
      security: []
      tags:
        - webhooks
      parameters:
        - $ref: '#/components/parameters/X-Justimmo-Webhook-Id'
        - $ref: '#/components/parameters/X-Justimmo-Delivery-Id'
        - $ref: '#/components/parameters/X-Justimmo-Signature'
        - $ref: '#/components/parameters/User-Agent'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WebhookSearchProfile'
      responses:
        '502':
          description: >-
            **Bad Gateway**    

            If the server answers with this response, the delivery will be
            retried automatically.
        '503':
          description: >-
            **Service Unavailable**  

            If the server answers with this response, the delivery will be
            retried automatically.
        '504':
          description: >-
            **Gateway Timeout**  

            If the server answers with this response, the delivery will be
            retried automatically.
        default:
          description: Acknowledged
components:
  schemas:
    AcquisitionRealtyAgencyAgreement:
      type: object
      properties:
        business_opportunity_knowledge_date:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '2021-06-05'
    Activity:
      type: object
      additionalProperties: false
      required:
        - id
        - tenant_id
        - created_at
        - sort_date
        - activity_type
        - agent
        - contact
        - realty
        - offer
      properties:
        id:
          type: integer
          format: int64
          example: 575693
        tenant_id:
          type: integer
          format: int64
          example: 5
        created_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        sort_date:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        from:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        to:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        activity_type:
          $ref: '#/components/schemas/ActivityType'
        agent:
          type: object
          nullable: true
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        contact:
          type: object
          nullable: true
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        realty:
          type: object
          nullable: true
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        offer:
          type: object
          nullable: true
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        comment:
          type: string
          nullable: true
          example: Balkon zu klein
        offertext:
          type: string
          nullable: true
          example: Sehr geehrter Herr Mustermann, [...]
        files:
          type: array
          items:
            $ref: '#/components/schemas/File'
    ActivityList:
      type: object
      additionalProperties: false
      required:
        - pagination
        - items
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        items:
          type: array
          items:
            $ref: '#/components/schemas/ActivityListItem'
    ActivityListItem:
      type: object
      additionalProperties: false
      required:
        - id
        - tenant_id
        - created_at
        - sort_date
        - activity_type
        - agent
        - contact
        - realty
        - offer
      properties:
        id:
          type: integer
          format: int64
          example: 575693
        tenant_id:
          type: integer
          format: int64
          example: 5
        created_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        sort_date:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        from:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        to:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        activity_type:
          $ref: '#/components/schemas/ActivityType'
        agent:
          type: object
          nullable: true
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        contact:
          type: object
          nullable: true
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        realty:
          type: object
          nullable: true
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        offer:
          type: object
          nullable: true
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        comment:
          type: string
          nullable: true
          example: Balkon zu klein
        offertext:
          type: string
          nullable: true
          example: Sehr geehrter Herr Mustermann, [...]
        files:
          type: array
          items:
            $ref: '#/components/schemas/File'
    ActivityType:
      type: object
      additionalProperties: false
      required:
        - id
        - name
      properties:
        id:
          type: integer
          format: int32
          example: 5756
        name:
          type: string
          nullable: true
          example: Objekt erstellt
    Address:
      type: object
      additionalProperties: false
      required:
        - street
        - zip
        - city
        - country
      nullable: true
      properties:
        street:
          type: string
          example: Mariahilferstraße 8/11
        zip:
          type: string
          example: '1070'
        city:
          type: string
          example: Wien
        country:
          type: string
          example: AT
          description: ISO 3166-1 alpha-2
          minLength: 2
          maxLength: 2
    AppointmentInvite:
      type: object
      nullable: true
      description: >-
        The contact as specified by `contact_id` will receive an invite via
        email.  

        They will also receive a reminder via SMS 24 hours before the
        appointment takes place, 

        if a valid phone number is on record and it's been at least 8 hours
        since the invite.


        If this property is `null`, there will not be an invite / reminder.
      required:
        - attach_address
      properties:
        attach_address:
          type: string
          enum:
            - realty
            - office
            - custom
            - none
          example: custom
          description: >-
            <span class="text-enumvalue">"realty"</span>: Sends an invite and
            attaches the realty address  

            <span class="text-enumvalue">"office"</span>: Sends an invite and
            attaches the office address  

            <span class="text-enumvalue">"custom"</span>: Sends an invite and
            attaches a custom address  

            <span class="text-enumvalue">"none"</span>: Sends an invite, but
            doesn't attach any address
        address:
          type: string
          nullable: true
          description: >-
            If `send_invite` is anything other than <span
            class="text-enumvalue">"none"</span>, this is the address that will
            be attached.
          example: Wayne Manor, 224 Park Drive, Gotham City
    AppointmentList:
      type: object
      additionalProperties: false
      required:
        - pagination
        - items
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        items:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/MeetingAppointment'
              - $ref: '#/components/schemas/NotaryAppointment'
              - $ref: '#/components/schemas/ViewingAppointment'
    AreaFromTo:
      type: object
      required:
        - from
        - to
      properties:
        from:
          type: integer
          format: int32
          nullable: true
          example: 50
          description: in m²
        to:
          type: integer
          format: int32
          nullable: true
          example: 150
          description: in m²
    BuildingCondition:
      type: object
      nullable: true
      required:
        - id
        - name
      properties:
        id:
          type: integer
        name:
          type: string
      description: >-
        <span class="text-ji-term">Hauszustand (bei Wohn./Büros/...)</span>  

        For apartments, offices etc: Condition of the building it is in


        see [Lookup Tables:
        RealtyBuildingCondition](#tag/lookup_realty_building_condition)
    ClientErrorResponse:
      type: object
      additionalProperties: false
      description: The resource owner or authorization server denied the request.
      properties:
        type:
          type: string
          description: Status Code Definitions
          example: https://tools.ietf.org/html/rfc2616#section-10
        title:
          type: string
          example: An error occurred
        status:
          type: integer
          description: A HTTP Status Code
          example: 404
        detail:
          type: string
          description: additional information why the error was triggered
          example: Example Error
    CombinedAutocompleteResponse:
      type: object
      additionalProperties: false
      properties:
        type:
          example: municipality
          enum:
            - federal_state
            - political_district
            - municipality
            - city
            - zip
            - city_zip
        items:
          type: array
          items:
            $ref: '#/components/schemas/LocationIdTextResponse'
    CommercialAreaDetails:
      type: object
      required:
        - divisible_from
        - price_per_m2
        - operating_costs_per_m2
        - heating_costs_per_m2
      properties:
        divisible_from:
          type: number
          format: float
          example: 10
        price_per_m2:
          type: object
          description: Range of net prices per square meter
          required:
            - currency
            - min
            - max
          properties:
            currency:
              type: string
              example: EUR
              description: ISO 4217 Code
            min:
              type: number
              format: float
              minimum: 0
              description: Minimum price per m²
              example: 12.5
            max:
              type: number
              format: float
              minimum: 0
              description: Maximum price per m²
              example: 18
        operating_costs_per_m2:
          type: object
          required:
            - currency
            - net
          properties:
            currency:
              type: string
              example: EUR
              description: ISO 4217 Code
            net:
              type: number
              format: float
              minimum: 0
              example: 10.12
          description: Operating costs per m²
        heating_costs_per_m2:
          type: object
          required:
            - currency
            - net
          properties:
            currency:
              type: string
              example: EUR
              description: ISO 4217 Code
            net:
              type: number
              format: float
              minimum: 0
              example: 12.5
          description: Heating costs per m²
    CommercialProjectDetails:
      type: object
      description: Detailed information specific to commercial real estate properties
      required:
        - usable_area
        - price_per_m2
        - operating_costs_per_m2
        - heating_costs_per_m2
        - currency
        - vat
      properties:
        parking:
          type: array
          items:
            $ref: '#/components/schemas/CommercialProjectParking'
        usable_area:
          type: object
          required:
            - min
            - max
          properties:
            min:
              type: number
              format: float
              minimum: 0
              example: 10
            max:
              type: number
              format: float
              minimum: 0
              example: 300
        price_per_m2:
          type: object
          description: Range of net rental prices per square meter
          required:
            - min
            - max
          properties:
            min:
              type: number
              format: float
              minimum: 0
              example: 12.5
            max:
              type: number
              format: float
              minimum: 0
              example: 18
        operating_costs_per_m2:
          type: object
          description: Range of operating costs per square meter
          required:
            - min
            - max
          properties:
            min:
              type: number
              format: float
              minimum: 0
              description: Minimum operating costs per m² (Betriebskosten pro m² von)
              example: 2.5
            max:
              type: number
              format: float
              minimum: 0
              description: Maximum operating costs per m² (Betriebskosten pro m² bis)
              example: 4.5
        heating_costs_per_m2:
          type: object
          description: Range of heating costs per square meter
          required:
            - min
            - max
          properties:
            min:
              type: number
              format: float
              minimum: 0
              description: Minimum heating costs per m² (Heizkosten pro m² von)
              example: 1.2
            max:
              type: number
              format: float
              minimum: 0
              description: Maximum heating costs per m² (Heizkosten pro m² bis)
              example: 2.8
        currency:
          type: string
          enum:
            - EUR
            - USD
            - CHF
            - HUF
            - PLN
            - RON
            - AED
          default: EUR
          description: ISO 4217 Code
          example: EUR
        vat:
          type: object
          required:
            - type
            - value
          description: Value-added tax (VAT/USt.) configuration
          properties:
            type:
              type: string
              enum:
                - percentage
                - absolute
              description: |-
                VAT calculation method.
                - percentage: VAT calculated as percentage of net price
                - absolute: VAT as fixed amount
              example: percentage
            value:
              type: number
              format: float
              minimum: 0
              description: >-
                VAT value. 

                If type is 'percentage', this is the percentage rate (e.g., 19
                for 19%).

                If type is 'absolute', this is the fixed amount.
              example: 19
    CommercialProjectParking:
      type: object
      nullable: true
      required:
        - parking_type
        - quantity
        - marketing_type
        - price_net
        - vat
        - price_gross
      description: >-
        Garage or parking space information associated with a commercial
        property
      properties:
        parking_type:
          type: string
          enum:
            - outdoor_court
            - garage
            - underground_car_park
            - carport
            - duplex
            - car_park
            - others
          description: |-
            Type of parking facility.
            - outdoor_court: Open-air parking space (Stellplatz)
            - garage: Standard garage
            - underground_car_park: Underground parking (Tiefgarage)
            - carport: Covered parking structure
            - duplex: Double-stacked parking system
            - car_park: Multi-story parking building (Parkhaus)
            - others: Other parking types (Sonstiges)
          example: underground_car_park
        quantity:
          type: integer
          minimum: 1
          example: 2
        marketing_type:
          type: string
          enum:
            - rent
            - buy
          example: rent
        price_net:
          type: number
          format: float
          minimum: 0
          example: 150
        vat:
          type: object
          required:
            - type
            - value
          description: Value-added tax (VAT/USt.) configuration
          properties:
            type:
              type: string
              enum:
                - percentage
                - absolute
              description: |-
                VAT calculation method.
                - percentage: VAT calculated as percentage of net price
                - absolute: VAT as fixed amount
              example: percentage
            value:
              type: number
              format: float
              minimum: 0
              description: >-
                VAT value. 

                If type is 'percentage', this is the percentage rate (e.g., 19
                for 19%).

                If type is 'absolute', this is the fixed amount.
              example: 19
        price_gross:
          type: number
          format: float
          minimum: 0
          readOnly: true
          example: 178.5
    CommissionPayerItem:
      type: object
      required:
        - contact
        - commission_share
        - net_value
        - vat
        - gross_value
      properties:
        contact:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 576944
        commission_share:
          type: number
          format: double
          example: 100
          description: The percentage of the commission
        net_value:
          type: number
          format: double
          example: 1000
          description: The net value of the commission
        vat:
          type: number
          format: double
          example: 100
          description: The VAT amount of the commission
        gross_value:
          type: number
          format: double
          example: 1000
          description: The gross value of the commission
    CommissionValue:
      type: object
      required:
        - value
        - type
      properties:
        value:
          type: number
          format: double
          example: 1000
          description: The amount of the commission
        type:
          type: string
          nullable: true
          example: value
          enum:
            - value
            - gross_monthly_rent
            - percent_purchase_price
    Contact:
      type: object
      additionalProperties: false
      discriminator:
        propertyName: type
        mapping:
          company: '#/components/schemas/ContactCompany'
          couple: '#/components/schemas/ContactCouple'
          family: '#/components/schemas/ContactFamily'
          person: '#/components/schemas/ContactPerson'
      required:
        - id
        - catalogue_number
        - tenant_id
        - created_at
        - updated_at
        - categories
        - realties
        - active
        - type
      properties:
        id:
          type: integer
          format: int64
          example: 5756
        catalogue_number:
          type: integer
          format: int64
          example: 5756
          nullable: true
        tenant_id:
          type: integer
          format: int64
          example: 5
        created_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        updated_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
          deprecated: true
          description: Use `email_addresses` instead
        email_addresses:
          type: array
          items:
            $ref: '#/components/schemas/ContactEmailAddress'
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          $ref: '#/components/schemas/IncompleteAddress'
        mailing_address:
          type: string
          nullable: true
          example: |-
            Mariahilferstraße 8/11
            A-1070 Wien
        mailing_salutation:
          type: string
          nullable: true
          example: Sehr geehrter Herr Immo
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        categories:
          type: array
          items:
            $ref: '#/components/schemas/ContactCategory'
        realties:
          type: array
          items:
            $ref: '#/components/schemas/ContactRealty'
        agent:
          type: object
          allOf:
            - $ref: '#/components/schemas/User'
          nullable: true
        active:
          type: boolean
        type:
          $ref: '#/components/schemas/ContactType'
    ContactList:
      type: object
      additionalProperties: false
      required:
        - pagination
        - items
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        items:
          type: array
          items:
            $ref: '#/components/schemas/ContactListItem'
    ContactListItem:
      type: object
      additionalProperties: false
      discriminator:
        propertyName: type
        mapping:
          company: '#/components/schemas/ContactCompany'
          couple: '#/components/schemas/ContactCouple'
          family: '#/components/schemas/ContactFamily'
          person: '#/components/schemas/ContactPerson'
      required:
        - id
        - catalogue_number
        - tenant_id
        - created_at
        - updated_at
        - categories
        - active
        - type
      properties:
        id:
          type: integer
          format: int64
          example: 5756
        catalogue_number:
          type: integer
          format: int64
          example: 5756
          nullable: true
        tenant_id:
          type: integer
          format: int64
          example: 5
        created_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        updated_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
          deprecated: true
          description: Use `email_addresses` instead
        email_addresses:
          type: array
          items:
            $ref: '#/components/schemas/ContactEmailAddress'
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          $ref: '#/components/schemas/IncompleteAddress'
        mailing_address:
          type: string
          nullable: true
          example: |-
            Mariahilferstraße 8/11
            A-1070 Wien
        mailing_salutation:
          type: string
          nullable: true
          example: Sehr geehrter Herr Immo
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        categories:
          type: array
          items:
            $ref: '#/components/schemas/ContactCategory'
        agent:
          $ref: '#/components/schemas/User'
        active:
          type: boolean
        type:
          $ref: '#/components/schemas/ContactType'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
    ContactCategory:
      type: object
      required:
        - id
        - name
        - is_marketing_category
        - is_newsletter_category
      properties:
        id:
          type: integer
          format: int64
          example: 123
        name:
          type: string
          example: Newsletter
        is_marketing_category:
          type: boolean
          example: false
        is_newsletter_category:
          type: boolean
          example: true
        mailerlite_group_id:
          description: ID of a group in MailerLite that this category is synced with
          type: string
          example: '186329483765601711'
    ContactCategoryList:
      type: object
      required:
        - pagination
        - items
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        items:
          type: array
          items:
            $ref: '#/components/schemas/ContactCategory'
    ContactCompany:
      description: ''
      allOf:
        - $ref: '#/components/schemas/Contact'
        - $ref: '#/components/schemas/ContactPersonPartial'
        - properties:
            company:
              type: string
              nullable: true
              example: Example GmbH
            position:
              type: string
              nullable: true
              example: CEO
            commercial_register_nr:
              type: string
              nullable: true
              description: <span class="text-ji-term">Firmenbuchnummer</span>
              example: FN 123456a
            vat_number:
              type: string
              nullable: true
              description: <span class="text-ji-term">UID</span>
              example: ATU 12345678
    ContactCouple:
      allOf:
        - $ref: '#/components/schemas/Contact'
        - properties:
            person1:
              $ref: '#/components/schemas/ContactPersonPartial'
            person2:
              $ref: '#/components/schemas/ContactPersonPartial'
    ContactEconomicRelationship:
      type: string
      deprecated: true
      description: >-
        <span class="text-ji-term">Naheverhältnis</span>


        see [Lookup Tables:
        ContactEconomicRelationship](#tag/lookup_contact_economic_relationship)
            
        <div class="container-info">
            Due to the recent change in the Austrian brokerage law act (<span class="text-ji-term">Erstauftraggeberprinzip</span>), this property is being phased out and replaced with `vendor_economic_relationship`.
            Information about dual_brokerage (<span class="text-ji-term">Doppelmaklertätigkeit</span>) is now separately available for read and write in the Realty context.
        </div>
      nullable: true
      enum:
        - family
        - family_double_agent
        - economic
        - economic_double_agent
    ContactEmailAddress:
      type: object
      additionalProperties: false
      required:
        - id
        - address
        - used_for_communication
      properties:
        id:
          type: integer
          example: 123
        address:
          type: string
          format: email
          example: support@justimmo.at
        used_for_communication:
          type: boolean
    ContactFamily:
      allOf:
        - $ref: '#/components/schemas/Contact'
        - properties:
            person1:
              $ref: '#/components/schemas/ContactPersonPartial'
            person2:
              $ref: '#/components/schemas/ContactPersonPartial'
    ContactPerson:
      allOf:
        - $ref: '#/components/schemas/Contact'
        - $ref: '#/components/schemas/ContactPersonPartial'
    ContactPersonPartial:
      type: object
      additionalProperties: false
      properties:
        salutation:
          type: string
          nullable: true
        prefix:
          type: string
          nullable: true
          example: Dr.
        gender:
          type: string
          nullable: true
          enum:
            - male
            - female
          example: female
        first_name:
          type: string
          nullable: true
          example: Justin
        last_name:
          type: string
          nullable: true
          example: Immo
        suffix:
          type: string
          nullable: true
          example: MBA
        birthday:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '1985-04-12'
    ContactRealty:
      type: object
      additionalProperties: false
      required:
        - role
        - realty
      properties:
        role:
          type: string
          enum:
            - unknown
            - vendor
          description: Role of this contact in regard to the realty
          example: vendor
        realty:
          type: object
          required:
            - id
            - created_at
            - updated_at
          properties:
            id:
              type: integer
              format: int64
              example: 5756
            created_at:
              type: string
              format: date-time
              description: RFC-3339
              example: '2020-05-01T12:13:25+00:00'
            updated_at:
              type: string
              format: date-time
              description: RFC-3339
              example: '2020-05-01T12:13:25+00:00'
    ContactType:
      type: string
      enum:
        - company
        - couple
        - family
        - person
    CreateAcquisitionRealty:
      type: object
      required:
        - address
        - type_id
        - occupancy
        - marketing_type
        - agent_id
      properties:
        address:
          $ref: '#/components/schemas/CreateRealtyAddress'
        land_registry_number:
          deprecated: true
          type: string
          example: '600'
          description: >-
            <span class="text-ji-term">Einlagezahl</span> (EZ)


            Country must be Austria.


            Deprecated: Use Create/Update RealtyLandRegisterEntry endpoints
            instead or use `land_register_entry` when creating a new acquisition
            realty.


            <span class="text-POST">POST</span> Creates a new LandRegisterEntry
            with the values provided in land_registry_number,
            cadastral_municipality and plot_numbers.

            If neither of those values are provided, the values are determined
            automatically based on the realty address.  


            <span class="text-PATCH">PATCH</span> Updates the
            land_register_entry_number of the first LandRegisterEntry or creates
            a new LandRegisterEntry if no entry exists yet.
        cadastral_municipality:
          deprecated: true
          type: string
          example: '01010'
          description: >-
            <span class="text-ji-term">Katastralgemeinde Nummer</span> (KG-NR)


            Country must be Austria.


            Deprecated: Use Create/Update RealtyLandRegisterEntry endpoints
            instead or use `land_register_entry` when creating a new acquisition
            realty.


            <span class="text-POST">POST</span> Creates a new LandRegisterEntry
            with the values provided in land_registry_number,
            cadastral_municipality and plot_numbers.

            If neither of those values are provided, the values are determined
            automatically based on the realty address.  


            <span class="text-PATCH">PATCH</span> Updates the
            cadastral_municipality_id of the first LandRegisterEntry or creates
            a new LandRegisterEntry if no entry exists yet.
        plot_number:
          deprecated: true
          type: string
          example: 1234/1, 1234/2
          description: >-
            <span class="text-ji-term">Grundstücksnummern</span> (GST-NR)


            Country must be Austria.


            Deprecated: Use Create/Update RealtyLandRegisterEntry endpoints
            instead or use `land_register_entry` when creating a new acquisition
            realty.


            <span class="text-POST">POST</span> Creates a new LandRegisterEntry
            with the values provided in land_registry_number,
            cadastral_municipality and plot_numbers.

            If neither of those values are provided, the values are determined
            automatically based on the realty address.  


            <span class="text-PATCH">PATCH</span> Overwrites all plot_numbers of
            the first LandRegisterEntry or creates a new LandRegisterEntry if no
            entry exists yet.

            The provided value is stored as a single plot number.
        type_id:
          type: integer
          description: |-
            <span class="text-ji-term">Objektart</span> Id

            see [Lookup Tables: RealtyType](#tag/lookup_realty_type)
          example: 8
        subtype_id:
          type: integer
          description: |-
            <span class="text-ji-term">Subobjektart</span> Id

            see [Lookup Tables: RealtySubType](#tag/lookup_realty_sub_type)
          example: 80
        occupancy:
          type: object
          required:
            - residential
            - commercial
            - investment
          properties:
            residential:
              type: boolean
            commercial:
              type: boolean
            investment:
              type: boolean
          description: |-
            <span class="text-ji-term">Nutzungsart</span>

            At least one of these must be `true`
        marketing_type:
          $ref: '#/components/schemas/RealtyMarketingType'
        architecture:
          $ref: '#/components/schemas/RealtyArchitecture'
        year_of_construction:
          type: integer
          nullable: true
        infrastructure_provision:
          $ref: '#/components/schemas/RealtyInfrastructureProvision'
        year_of_last_renovation:
          type: integer
          nullable: true
        year_of_last_comprehensive_renovation:
          type: integer
          nullable: true
        areas:
          type: object
          additionalProperties: false
          description: 'see [Lookup Tables: RealtyAreas](#tag/lookup_realty_areas)'
          properties:
            site_area:
              $ref: '#/components/schemas/RealtyArea'
            living_area:
              $ref: '#/components/schemas/RealtyArea'
            floor_area:
              $ref: '#/components/schemas/RealtyArea'
            developable_area:
              $ref: '#/components/schemas/RealtyArea'
            office_area:
              $ref: '#/components/schemas/RealtyArea'
            sales_area:
              $ref: '#/components/schemas/RealtyArea'
            storage_area:
              $ref: '#/components/schemas/RealtyArea'
            available_area:
              $ref: '#/components/schemas/RealtyArea'
            short_term_area:
              $ref: '#/components/schemas/RealtyArea'
            total_area:
              $ref: '#/components/schemas/RealtyArea'
            weighted_area:
              $ref: '#/components/schemas/RealtyArea'
            undeveloped_attic:
              type: boolean
              nullable: true
            undeveloped_attic_area:
              $ref: '#/components/schemas/RealtyArea'
            garden_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            basement_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            balcony_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            terrace_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            covered_balcony_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            garage_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            parking_space_area:
              $ref: '#/components/schemas/RealtyCountableArea'
        floors:
          $ref: '#/components/schemas/RealtyFloors'
        rooms:
          $ref: '#/components/schemas/WriteRooms'
        room_layout:
          $ref: '#/components/schemas/RoomLayout'
        currency:
          type: string
          enum:
            - EUR
            - USD
            - CHF
            - HUF
            - PLN
            - RON
            - AED
          minLength: 3
          maxLength: 3
          description: >-
            ISO 4217 Code


            Currently, only <span class="text-enumvalue">"EUR"</span> is
            supported.
          example: EUR
        prices:
          type: object
          additionalProperties: false
          description: >-
            The currency for these prices is determined by the realty's
            `currency` property.


            see [Lookup Tables: RealtyPrices](#tag/lookup_realty_prices)
          properties:
            purchase_price:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            rent:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            furniture_hire:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            parking:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            garage:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            operating:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            heating:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            hot_water:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            cooling:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            maintenance_funds:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            elevator:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            others:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
        earnings_per_year_net:
          type: number
          format: float
          description: |-
            <span class="text-ji-term">Nettoertrag pro Jahr</span>

            The currency is determined by the realty's `currency` property.
          example: 1234.56
        obtainable_from:
          type: object
          additionalProperties: false
          description: >-
            <span class="text-POST">POST</span> Either `date` or `text` must be
            provided and not `null`.  

            <span class="text-PATCH">PATCH</span> The properties `date` and
            `text` can both be `null` to clear the field.  

            If both are provided, only `date` will be set.
          properties:
            date:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '2021-06-05'
            text:
              type: string
              nullable: true
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          type: integer
          format: int64
          example: 5756
        texts:
          $ref: '#/components/schemas/RealtyTexts'
        energy_performance_certification:
          $ref: '#/components/schemas/InputEnergyPerformanceCertification'
        feature_ids:
          type: array
          description: <span class="text-ji-term">Ausstattungsmerkmale</span>
          items:
            type: integer
            format: int32
          example:
            - 1
            - 2
            - 1234
            - 11
            - 12
            - 5678
        accessible:
          type: boolean
          default: false
          description: <span class="text-ji-term">barrierefrei</span>
        rent_details:
          $ref: '#/components/schemas/WriteRealtyRentDetails'
        commission:
          $ref: '#/components/schemas/WriteCommission'
        condition_assessment:
          $ref: '#/components/schemas/RealtyConditionAssessment'
        realty_condition_id:
          type: integer
          nullable: true
          description: 'see [Lookup Tables: RealtyCondition](#tag/lookup_realty_condition)'
        building_condition_id:
          type: integer
          nullable: true
          description: >-
            see [Lookup Tables:
            RealtyBuildingCondition](#tag/lookup_realty_building_condition)
        agency_agreement:
          $ref: '#/components/schemas/AcquisitionRealtyAgencyAgreement'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
        automatic_hits:
          type: boolean
        land_register_entry:
          allOf:
            - description: >-
                Country must be Austria.


                If no data is provided, the land register entry is determined
                automatically based on the realty address.
                      
                If this property is provided, the deprecated properties
                `land_registry_number`, `cadastral_municipality` and
                `plot_number` are ignored.
            - $ref: '#/components/schemas/CreateLandRegisterEntry'
        created_at:
          $ref: '#/components/schemas/WriteCreatedAt'
        ownership_type_id:
          $ref: '#/components/schemas/WriteOwnershipTypeId'
        furnishing_id:
          $ref: '#/components/schemas/WriteFurnishingId'
        noise_level_id:
          $ref: '#/components/schemas/WriteNoiseLevelId'
        location_assessment:
          $ref: '#/components/schemas/WriteLocationAssessment'
        business_domain:
          type: string
          description: |-
            This field can only be set when it is configured.

            If it is configured it must be set to one of the configured values.
        referrer_id:
          type: integer
          format: int64
          nullable: true
          description: The ID of the contact who referred this realty to the tenant.
    CreateContact:
      type: object
      additionalProperties: false
      discriminator:
        propertyName: type
        mapping:
          company: '#/components/schemas/CreateContactCompany'
          couple: '#/components/schemas/CreateContactCouple'
          family: '#/components/schemas/CreateContactFamily'
          person: '#/components/schemas/CreateContactPerson'
      oneOf:
        - $ref: '#/components/schemas/CreateContactCompany'
        - $ref: '#/components/schemas/CreateContactCouple'
        - $ref: '#/components/schemas/CreateContactFamily'
        - $ref: '#/components/schemas/CreateContactPerson'
    CreateContactEmailAddress:
      type: object
      additionalProperties: false
      required:
        - address
        - used_for_communication
      properties:
        address:
          type: string
          format: email
          example: support@justimmo.at
        used_for_communication:
          type: boolean
    CreateContactCompany:
      type: object
      additionalProperties: false
      required:
        - type
        - company
        - agent_id
      properties:
        type:
          type: string
          enum:
            - company
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          type: integer
          format: int64
          example: 5756
        prefix:
          type: string
          nullable: true
          example: Dr.
        gender:
          type: string
          nullable: true
          enum:
            - male
            - female
          example: female
        first_name:
          type: string
          nullable: true
          example: Justin
        last_name:
          type: string
          nullable: true
          example: Immo
        suffix:
          type: string
          nullable: true
          example: MBA
        birthday:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '1985-04-12'
        company:
          type: string
          nullable: true
          example: Example GmbH
        position:
          type: string
          nullable: true
          example: CEO
        commercial_register_nr:
          type: string
          nullable: true
          description: <span class="text-ji-term">Firmenbuchnummer</span>
          example: FN 123456a
        vat_number:
          type: string
          nullable: true
          description: <span class="text-ji-term">UID</span>
          example: ATU 12345678
        created_at:
          $ref: '#/components/schemas/WriteCreatedAt'
        locale:
          type: string
          minLength: 2
          maxLength: 2
          default: de
        source_id:
          $ref: '#/components/schemas/CreateContactSourceId'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
    CreateContactCouple:
      type: object
      additionalProperties: false
      required:
        - type
        - person1
        - person2
        - agent_id
      properties:
        type:
          type: string
          enum:
            - couple
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          type: integer
          format: int64
          example: 5756
        person1:
          type: object
          additionalProperties: false
          required:
            - first_name
            - last_name
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        person2:
          type: object
          additionalProperties: false
          required:
            - first_name
            - last_name
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        created_at:
          $ref: '#/components/schemas/WriteCreatedAt'
        locale:
          type: string
          minLength: 2
          maxLength: 2
          default: de
        source_id:
          $ref: '#/components/schemas/CreateContactSourceId'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
    CreateContactFamily:
      type: object
      additionalProperties: false
      required:
        - type
        - person1
        - person2
        - agent_id
      properties:
        type:
          type: string
          enum:
            - family
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          type: integer
          format: int64
          example: 5756
        person1:
          type: object
          additionalProperties: false
          required:
            - first_name
            - last_name
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        person2:
          type: object
          additionalProperties: false
          required:
            - first_name
            - last_name
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        created_at:
          $ref: '#/components/schemas/WriteCreatedAt'
        locale:
          type: string
          minLength: 2
          maxLength: 2
          default: de
        source_id:
          $ref: '#/components/schemas/CreateContactSourceId'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
    CreateContactPerson:
      type: object
      additionalProperties: false
      required:
        - type
        - first_name
        - last_name
        - agent_id
      properties:
        type:
          type: string
          enum:
            - person
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          type: integer
          format: int64
          example: 5756
        prefix:
          type: string
          nullable: true
          example: Dr.
        gender:
          type: string
          nullable: true
          enum:
            - male
            - female
          example: female
        first_name:
          type: string
          nullable: true
          example: Justin
        last_name:
          type: string
          nullable: true
          example: Immo
        suffix:
          type: string
          nullable: true
          example: MBA
        birthday:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '1985-04-12'
        company:
          type: string
          nullable: true
          example: Example GmbH
        position:
          type: string
          nullable: true
          example: CEO
        created_at:
          $ref: '#/components/schemas/WriteCreatedAt'
        locale:
          type: string
          minLength: 2
          maxLength: 2
          default: de
        source_id:
          $ref: '#/components/schemas/CreateContactSourceId'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
    CreateContactSourceId:
      type: integer
      format: int32
      example: 5756
      description: >-
        The numerical representation of the source the contact was acquired from

        (ie <span class="text-ji-term">Social Media</span>, <span
        class="text-ji-term">Printanzeige</span>, 

        <span class="text-ji-term">Empfehlung</span>, <span
        class="text-ji-term">Laufkunde</span>, etc...). 

        Please [contact us](mailto:support@justimmo.at) to inquire what
        `source_id` to use for your specific use case.
    CreateContactSourceIdDeprecated:
      type: integer
      format: int32
      example: 5756
      deprecated: true
      description: >-
        The numerical representation of the source the contact was acquired from

        (ie <span class="text-ji-term">Social Media</span>, <span
        class="text-ji-term">Printanzeige</span>, 

        <span class="text-ji-term">Empfehlung</span>, <span
        class="text-ji-term">Laufkunde</span>, etc...). 

        Please [contact us](mailto:support@justimmo.at) to inquire what
        `source_id` to use for your specific use case.
    CreateInquiryContact:
      type: object
      additionalProperties: false
      description: >-
        Contact Information


        If the email is provided and already in use by a contact of this tenant,
        the inquiry will be tied to the existing contact and the contact data
        will be updated.  

        If the contact is currently not active, they will be reactivated.


        If the email isn't provided or not yet known, a new contact will be
        created.
      discriminator:
        propertyName: type
        mapping:
          company: '#/components/schemas/CreateInquiryContactCompany'
          couple: '#/components/schemas/CreateInquiryContactCouple'
          family: '#/components/schemas/CreateInquiryContactFamily'
          person: '#/components/schemas/CreateInquiryContactPerson'
      oneOf:
        - $ref: '#/components/schemas/CreateInquiryContactCompany'
        - $ref: '#/components/schemas/CreateInquiryContactCouple'
        - $ref: '#/components/schemas/CreateInquiryContactFamily'
        - $ref: '#/components/schemas/CreateInquiryContactPerson'
    CreateInquiryContactAgentId:
      type: integer
      format: int64
      example: 5756
      description: If not provided, the `agent_id` of the inquiry will be used.
    CreateInquiryContactCompany:
      type: object
      additionalProperties: false
      required:
        - type
        - company
      properties:
        type:
          type: string
          enum:
            - company
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          $ref: '#/components/schemas/CreateInquiryContactAgentId'
        prefix:
          type: string
          nullable: true
          example: Dr.
        gender:
          type: string
          nullable: true
          enum:
            - male
            - female
          example: female
        first_name:
          type: string
          nullable: true
          example: Justin
        last_name:
          type: string
          nullable: true
          example: Immo
        suffix:
          type: string
          nullable: true
          example: MBA
        birthday:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '1985-04-12'
        company:
          type: string
          nullable: true
          example: Example GmbH
        position:
          type: string
          nullable: true
          example: CEO
        commercial_register_nr:
          type: string
          nullable: true
          description: <span class="text-ji-term">Firmenbuchnummer</span>
          example: FN 123456a
        vat_number:
          type: string
          nullable: true
          description: <span class="text-ji-term">UID</span>
          example: ATU 12345678
        created_at:
          $ref: '#/components/schemas/WriteCreatedAt'
        locale:
          type: string
          minLength: 2
          maxLength: 2
          default: de
        source_id:
          $ref: '#/components/schemas/CreateContactSourceIdDeprecated'
    CreateInquiryContactCouple:
      type: object
      additionalProperties: false
      required:
        - type
        - person1
        - person2
      properties:
        type:
          type: string
          enum:
            - couple
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          $ref: '#/components/schemas/CreateInquiryContactAgentId'
        person1:
          type: object
          additionalProperties: false
          required:
            - first_name
            - last_name
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        person2:
          type: object
          additionalProperties: false
          required:
            - first_name
            - last_name
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        created_at:
          $ref: '#/components/schemas/WriteCreatedAt'
        locale:
          type: string
          minLength: 2
          maxLength: 2
          default: de
        source_id:
          $ref: '#/components/schemas/CreateContactSourceIdDeprecated'
    CreateInquiryContactFamily:
      type: object
      additionalProperties: false
      required:
        - type
        - person1
        - person2
      properties:
        type:
          type: string
          enum:
            - family
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          $ref: '#/components/schemas/CreateInquiryContactAgentId'
        person1:
          type: object
          additionalProperties: false
          required:
            - first_name
            - last_name
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        person2:
          type: object
          additionalProperties: false
          required:
            - first_name
            - last_name
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        created_at:
          $ref: '#/components/schemas/WriteCreatedAt'
        locale:
          type: string
          minLength: 2
          maxLength: 2
          default: de
        source_id:
          $ref: '#/components/schemas/CreateContactSourceIdDeprecated'
    CreateInquiryContactPerson:
      type: object
      additionalProperties: false
      required:
        - type
        - first_name
        - last_name
      properties:
        type:
          type: string
          enum:
            - person
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          $ref: '#/components/schemas/CreateInquiryContactAgentId'
        prefix:
          type: string
          nullable: true
          example: Dr.
        gender:
          type: string
          nullable: true
          enum:
            - male
            - female
          example: female
        first_name:
          type: string
          nullable: true
          example: Justin
        last_name:
          type: string
          nullable: true
          example: Immo
        suffix:
          type: string
          nullable: true
          example: MBA
        birthday:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '1985-04-12'
        created_at:
          $ref: '#/components/schemas/WriteCreatedAt'
        locale:
          type: string
          minLength: 2
          maxLength: 2
          default: de
        source_id:
          $ref: '#/components/schemas/CreateContactSourceIdDeprecated'
    CreateMeetingAppointment:
      type: object
      description: Meeting Appointment
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - meeting
        from:
          type: string
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:30:00+00:00'
        to:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:37:00+00:00'
        agent_id:
          type: integer
          nullable: true
          format: int64
          example: 979443
          description: >-
            The agent this appointment should be assigned to. If not provided or
            `null`, the creator (header `X-Justimmo-User`) will be used.
        contact_id:
          type: integer
          nullable: true
          format: int64
          example: 579696
          description: >-
            <span class="text-required">required</span> if `invite` is set and
            not `null`.
        realty_id:
          type: integer
          nullable: true
          format: int64
          example: 4869
          description: >-
            <span class="text-required">required</span> if `invite` is set to
            <span class="text-enumvalue">"realty"</span>.
        invite:
          $ref: '#/components/schemas/WriteAppointmentInvite'
        comment:
          type: string
          nullable: true
        exclude_from_report:
          type: boolean
          default: false
    CreateNotaryAppointment:
      type: object
      description: Appointment with a notary
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - notary
        from:
          type: string
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:30:00+00:00'
        to:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:37:00+00:00'
        agent_id:
          type: integer
          nullable: true
          format: int64
          example: 979443
          description: >-
            The agent this appointment should be assigned to. If not provided or
            `null`, the creator (header `X-Justimmo-User`) will be used.
        contact_id:
          type: integer
          nullable: true
          format: int64
          example: 579696
          description: >-
            <span class="text-required">required</span> if `invite` is set and
            not `null`.
        realty_id:
          type: integer
          nullable: true
          format: int64
          example: 4869
          description: >-
            <span class="text-required">required</span> if `invite` is set to
            <span class="text-enumvalue">"realty"</span>.
        invite:
          $ref: '#/components/schemas/WriteAppointmentInvite'
        comment:
          type: string
          nullable: true
        exclude_from_report:
          type: boolean
          default: false
    CreateLandRegisterEntry:
      type: object
      additionalProperties: false
      required:
        - cadastral_municipality_id
      description: |-
        Either `land_register_entry_number` or `plot_numbers` must be provided.

        Country must be Austria.
      properties:
        land_register_entry_number:
          type: string
          minLength: 1
          description: |-
            <span class="text-ji-term">Einlagezahl</span> (EZ)

            Country must be Austria.
          example: '600'
        cadastral_municipality_id:
          type: string
          minLength: 1
          description: |-
            <span class="text-ji-term">Katastralgemeinde Nummer</span> (KG-NR)

            Country must be Austria.
          example: '01010'
        plot_numbers:
          type: array
          minItems: 1
          description: |-
            <span class="text-ji-term">Grundstücksnummern</span> (GST-NRn)

            Country must be Austria.
          items:
            type: string
            minLength: 1
            example: '274'
        owner_sequence_numbers:
          description: >-
            <span class="text-ji-term">Laufende Nummern im Eigentumsblatt
            (B-Blatt)</span>


            Country must be Austria.
          type: array
          items:
            type: integer
            example: 3
    CreateRealty:
      type: object
      required:
        - address
        - system_type
        - type_id
        - occupancy
        - marketing_type
        - agent_id
      properties:
        catalogue_number_plain:
          type: integer
          format: int64
          example: 123
          description: >-
            Depending on tenant settings, this value might be auto-generated and
            thus the property may either be <span
            class="text-required">required</span> or ignored.


            Must be a unique, unused value
        address:
          $ref: '#/components/schemas/CreateRealtyAddress'
        land_registry_number:
          deprecated: true
          type: string
          example: '600'
          description: >-
            <span class="text-ji-term">Einlagezahl</span> (EZ)


            Country must be Austria.


            Deprecated: Use Create/Update RealtyLandRegisterEntry endpoints
            instead or use `land_register_entry` when creating a new realty.


            <span class="text-POST">POST</span> Creates a new LandRegisterEntry
            with the values provided in land_registry_number,
            cadastral_municipality and plot_numbers.

            If neither of those values are provided, the values are determined
            automatically based on the realty address.  


            <span class="text-PATCH">PATCH</span> Updates the
            land_register_entry_number of the first LandRegisterEntry or creates
            a new LandRegisterEntry if no entry exists yet.
        cadastral_municipality:
          deprecated: true
          type: string
          example: '01010'
          description: >-
            <span class="text-ji-term">Katastralgemeinde Nummer</span> (KG-NR)


            Country must be Austria.


            Deprecated: Use Create/Update RealtyLandRegisterEntry endpoints
            instead or use `land_register_entry` when creating a new realty.


            <span class="text-POST">POST</span> Creates a new LandRegisterEntry
            with the values provided in land_registry_number,
            cadastral_municipality and plot_numbers.

            If neither of those values are provided, the values are determined
            automatically based on the realty address.  


            <span class="text-PATCH">PATCH</span> Updates the
            cadastral_municipality_id of the first LandRegisterEntry or creates
            a new LandRegisterEntry if no entry exists yet.
        plot_number:
          deprecated: true
          type: string
          example: 1234/1, 1234/2
          description: >-
            <span class="text-ji-term">Grundstücksnummern</span> (GST-NR)


            Country must be Austria.


            Deprecated: Use Create/Update RealtyLandRegisterEntry endpoints
            instead or use `land_register_entry` when creating a new realty.


            <span class="text-POST">POST</span> Creates a new LandRegisterEntry
            with the values provided in land_registry_number,
            cadastral_municipality and plot_numbers.

            If neither of those values are provided, the values are determined
            automatically based on the realty address.  


            <span class="text-PATCH">PATCH</span> Overwrites all plot_numbers of
            the first LandRegisterEntry or creates a new LandRegisterEntry if no
            entry exists yet.

            The provided value is stored as a single plot number.
        system_type:
          type: string
          enum:
            - realty
            - residential_project
            - residential_subunit
            - commercial_project
            - commercial_area
          description: >-
            <span class="text-ji-term">Objekttyp</span>


            see [Lookup Tables:
            RealtySystemType](#tag/lookup_realty_system_type)


            Currently, only <span class="text-enumvalue">"realty"</span> is
            supported.
        parent_id:
          type: integer
          format: int64
          example: 5755
          description: >-
            The realty Id of the parent residential or commercial project


            Currently unused because `system_type` <span
            class="text-enumvalue">"realty"</span> doesn't have a parent
        type_id:
          type: integer
          description: |-
            <span class="text-ji-term">Objektart</span> Id

            see [Lookup Tables: RealtyType](#tag/lookup_realty_type)
          example: 8
        subtype_id:
          type: integer
          description: |-
            <span class="text-ji-term">Subobjektart</span> Id

            see [Lookup Tables: RealtySubType](#tag/lookup_realty_sub_type)
          example: 80
        occupancy:
          type: object
          required:
            - residential
            - commercial
            - investment
          properties:
            residential:
              type: boolean
            commercial:
              type: boolean
            investment:
              type: boolean
          description: |-
            <span class="text-ji-term">Nutzungsart</span>

            At least one of these must be `true`
        marketing_type:
          $ref: '#/components/schemas/RealtyMarketingType'
        architecture:
          $ref: '#/components/schemas/RealtyArchitecture'
        year_of_construction:
          type: integer
          nullable: true
        infrastructure_provision:
          $ref: '#/components/schemas/RealtyInfrastructureProvision'
        year_of_last_renovation:
          type: integer
          nullable: true
        year_of_last_comprehensive_renovation:
          type: integer
          nullable: true
        areas:
          type: object
          additionalProperties: false
          description: 'see [Lookup Tables: RealtyAreas](#tag/lookup_realty_areas)'
          properties:
            site_area:
              $ref: '#/components/schemas/RealtyArea'
            living_area:
              $ref: '#/components/schemas/RealtyArea'
            floor_area:
              $ref: '#/components/schemas/RealtyArea'
            developable_area:
              $ref: '#/components/schemas/RealtyArea'
            office_area:
              $ref: '#/components/schemas/RealtyArea'
            sales_area:
              $ref: '#/components/schemas/RealtyArea'
            storage_area:
              $ref: '#/components/schemas/RealtyArea'
            available_area:
              $ref: '#/components/schemas/RealtyArea'
            short_term_area:
              $ref: '#/components/schemas/RealtyArea'
            total_area:
              $ref: '#/components/schemas/RealtyArea'
            weighted_area:
              $ref: '#/components/schemas/RealtyArea'
            undeveloped_attic:
              type: boolean
              nullable: true
            undeveloped_attic_area:
              $ref: '#/components/schemas/RealtyArea'
            garden_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            basement_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            balcony_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            terrace_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            covered_balcony_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            garage_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            parking_space_area:
              $ref: '#/components/schemas/RealtyCountableArea'
        floors:
          $ref: '#/components/schemas/RealtyFloors'
        rooms:
          $ref: '#/components/schemas/WriteRooms'
        room_layout:
          $ref: '#/components/schemas/RoomLayout'
        currency:
          type: string
          enum:
            - EUR
            - USD
            - CHF
            - HUF
            - PLN
            - RON
            - AED
          minLength: 3
          maxLength: 3
          description: >-
            ISO 4217 Code


            Currently, only <span class="text-enumvalue">"EUR"</span> is
            supported.
          example: EUR
        prices:
          type: object
          additionalProperties: false
          description: >-
            The currency for these prices is determined by the realty's
            `currency` property.


            see [Lookup Tables: RealtyPrices](#tag/lookup_realty_prices)
          properties:
            publish_prices:
              type: boolean
              description: Whether the prices are visible on public platforms
            purchase_price:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            rent:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            furniture_hire:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            parking:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            garage:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            operating:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            heating:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            hot_water:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            cooling:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            maintenance_funds:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            elevator:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            others:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
        earnings_per_year_net:
          type: number
          format: float
          description: |-
            <span class="text-ji-term">Nettoertrag pro Jahr</span>

            The currency is determined by the realty's `currency` property.
          example: 1234.56
        obtainable_from:
          type: object
          additionalProperties: false
          description: >-
            <span class="text-POST">POST</span> Either `date` or `text` must be
            provided and not `null`.  

            <span class="text-PATCH">PATCH</span> The properties `date` and
            `text` can both be `null` to clear the field.  

            If both are provided, only `date` will be set.
          properties:
            date:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '2021-06-05'
            text:
              type: string
              nullable: true
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          type: integer
          format: int64
          example: 5756
        texts:
          $ref: '#/components/schemas/RealtyTexts'
        energy_performance_certification:
          $ref: '#/components/schemas/InputEnergyPerformanceCertification'
        feature_ids:
          type: array
          description: <span class="text-ji-term">Ausstattungsmerkmale</span>
          items:
            type: integer
            format: int32
          example:
            - 1
            - 2
            - 1234
            - 11
            - 12
            - 5678
        accessible:
          type: boolean
          default: false
          description: <span class="text-ji-term">barrierefrei</span>
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        rent_details:
          $ref: '#/components/schemas/WriteRealtyRentDetails'
        commission:
          $ref: '#/components/schemas/WriteCommission'
        dual_brokerage:
          $ref: '#/components/schemas/RealtyDualBrokerage'
        condition_assessment:
          $ref: '#/components/schemas/RealtyConditionAssessment'
        realty_condition_id:
          type: integer
          nullable: true
          description: 'see [Lookup Tables: RealtyCondition](#tag/lookup_realty_condition)'
        building_condition_id:
          type: integer
          nullable: true
          description: >-
            see [Lookup Tables:
            RealtyBuildingCondition](#tag/lookup_realty_building_condition)
        agency_agreement:
          $ref: '#/components/schemas/RealtyAgencyAgreement'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
        automatic_hits:
          type: boolean
        land_register_entry:
          allOf:
            - description: >-
                Country must be Austria.


                If no data is provided, the land register entry is determined
                automatically based on the realty address.


                If this property is provided, the deprecated properties
                `land_registry_number`, `cadastral_municipality` and
                `plot_number` are ignored.
            - $ref: '#/components/schemas/CreateLandRegisterEntry'
        created_at:
          $ref: '#/components/schemas/WriteCreatedAt'
        ownership_type_id:
          $ref: '#/components/schemas/WriteOwnershipTypeId'
        furnishing_id:
          $ref: '#/components/schemas/WriteFurnishingId'
        noise_level_id:
          $ref: '#/components/schemas/WriteNoiseLevelId'
        location_assessment:
          $ref: '#/components/schemas/WriteLocationAssessment'
        business_domain:
          type: string
          description: |-
            This field can only be set when it is configured.

            If it is configured it must be set to one of the configured values.
        referrer_id:
          type: integer
          format: int64
          nullable: true
          description: The ID of the contact who referred this realty to the tenant.
    CreateRealtyAddress:
      type: object
      additionalProperties: false
      required:
        - zip
        - city
        - country
      properties:
        street:
          type: string
          nullable: true
          example: Mariahilferstraße
        number:
          type: string
          nullable: true
          example: '127'
        entrance:
          type: string
          nullable: true
          example: '5'
        door:
          type: string
          nullable: true
          example: 3a
        zip:
          type: string
          minLength: 1
          example: '1070'
        city:
          type: string
          minLength: 1
          example: Wien
        country:
          type: string
          minLength: 2
          maxLength: 2
          description: ISO 3166-1 alpha-2
          example: AT
        floor_idx:
          $ref: '#/components/schemas/RealtyFloorIdx'
        floor_description:
          type: string
          nullable: true
          example: 3. Stock
    CreateSearchProfile:
      type: object
      additionalProperties: false
      required:
        - contact_id
        - agent_id
        - expires_in
        - criteria
      properties:
        contact_id:
          type: integer
          format: int64
          example: 5756
        agent_id:
          type: integer
          format: int64
          example: 5756
          description: >-
            The `id` of a Justimmo user responsible for managing this profile
            from here on.
        creator_id:
          type: integer
          format: int64
          example: 5756
          deprecated: true
          description: >-
            Has to be either the same as `contact_id` if the profile was created
            by the contact themselves, or the `id` of a Justimmo user if the
            profile was created by an agent. 


            If no `creator_id` is provided, it will be assumed the profile has
            been created by the contact.
        referrer_id:
          type: integer
          format: int64
          example: 5756
          description: The `id` of a contact who has referred this profile.
        expires_in:
          type: integer
          nullable: true
          description: Months until expiration
          enum:
            - 3
            - 6
            - 12
            - 24
            - 36
        notes:
          type: string
        created_at:
          $ref: '#/components/schemas/WriteCreatedAt'
        criteria:
          $ref: '#/components/schemas/CreateSearchProfileCriteria'
        automatic_hits:
          type: boolean
          default: false
    CreateSearchProfileCriteria:
      type: object
      description: >-
        Criteria for potential matches  

        Availability of certain properties depends on the selected `type`s.
        <span class="text-required">required</span> properties are always
        present.
      required:
        - type_ids
        - location
      properties:
        type_ids:
          type: array
          minItems: 1
          description: |-
            <span class="text-ji-term">Objektart</span> Id

            see [Lookup Tables: RealtyType](#tag/lookup_realty_type)
          items:
            type: integer
          example:
            - 8
            - 9
        subtype_ids:
          type: array
          description: |-
            <span class="text-ji-term">Subobjektart</span> Id

            see [Lookup Tables: RealtySubType](#tag/lookup_realty_sub_type)
          items:
            type: integer
          example:
            - 5
            - 7
        occupancy:
          type: string
          nullable: true
          enum:
            - residential
            - commercial
            - investment
          description: <span class="text-ji-term">Nutzungsart</span>
        marketing_type:
          type: string
          description: >-
            <span class="text-ji-term">Vermarktungsart</span>


            see [Lookup Tables:
            RealtyMarketingType](#tag/lookup_realty_marketing_type)
          enum:
            - buy
            - rent
        rent_duration:
          type: object
          required:
            - from
            - unlimited
          properties:
            from:
              type: integer
              nullable: true
              description: in months
            unlimited:
              type: boolean
              description: <span class="text-ji-term">unbefristet</span>
        price:
          $ref: '#/components/schemas/IntFromTo'
        price_per_area:
          type: object
          required:
            - from
            - to
          properties:
            from:
              type: number
              format: float
              nullable: true
              example: 1234.56
              description: price per m²
            to:
              type: number
              format: float
              nullable: true
              example: 1234.56
              description: price per m²
        rooms:
          $ref: '#/components/schemas/IntFromTo'
        yield:
          type: object
          description: <span class="text-ji-term">Nettorendite</span>
          required:
            - from
          properties:
            from:
              type: number
              format: float
              nullable: true
              description: in %
        site_area:
          $ref: '#/components/schemas/AreaFromTo'
        living_area:
          $ref: '#/components/schemas/AreaFromTo'
        floor_area:
          $ref: '#/components/schemas/AreaFromTo'
        office_area:
          $ref: '#/components/schemas/AreaFromTo'
        sales_area:
          $ref: '#/components/schemas/AreaFromTo'
        storage_area:
          $ref: '#/components/schemas/AreaFromTo'
        commission_free:
          type: boolean
        location:
          oneOf:
            - $ref: '#/components/schemas/CreateSearchProfileLocationAddressAustria'
            - $ref: '#/components/schemas/SearchProfileLocationAddressOther'
            - $ref: '#/components/schemas/SearchProfileLocationDistance'
        architecture:
          type: string
          nullable: true
          enum:
            - new
            - old
          description: <span class="text-ji-term">Bauart (Neubau / Altbau)</span>
        year_of_construction:
          $ref: '#/components/schemas/IntFromTo'
        condition_ids:
          type: array
          description: |-
            <span class="text-ji-term">Zustand</span>            

            see [Lookup Tables: RealtyCondition](#tag/lookup_realty_condition)
          items:
            type: integer
            format: int32
          example:
            - 1
            - 2
            - 1234
            - 11
            - 12
            - 5678
        floor:
          type: string
          nullable: true
          enum:
            - ground
            - no_ground
            - lower
            - middle
            - upper
            - no_roof
            - roof
        energy_performance_class:
          type: string
          description: <span class="text-ji-term">Energieausweis (ab Klasse)</span>
          nullable: true
          enum:
            - A++
            - A+
            - A
            - B
            - C
            - D
            - E
            - F
            - G
          example: C
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        furnishing_ids:
          type: array
          description: |-
            <span class="text-ji-term">Möblierung</span>

            see [Lookup Tables: RealtyFurnishing](#tag/lookup_realty_furnishing)
          items:
            type: integer
            format: int32
          example:
            - 1
            - 2
            - 17
        covered_balcony:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        balcony:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        terrace:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        garden:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        accessible:
          type: boolean
          description: <span class="text-ji-term">barrierefrei</span>
        feature_ids:
          type: array
          description: <span class="text-ji-term">Ausstattungsmerkmale</span>
          items:
            type: integer
            format: int32
          example:
            - 1
            - 2
            - 1234
            - 11
            - 12
            - 5678
    CreateSearchProfileLocationAddressAustria:
      type: object
      required:
        - location_ids
      description: Location based on addresses in Austria
      properties:
        location_ids:
          type: array
          uniqueItems: true
          description: >-
            see [Combined location
            autocomplete](#tag/location/operation/combinedLocationAutocomplete)
          items:
            type: object
            required:
              - type
              - id
            properties:
              type:
                type: string
                enum:
                  - federal_state
                  - political_district
                  - municipality
                  - city
                  - zip
                  - city_zip
              id:
                type: integer
                format: int64
                example: 123
    CreateViewingAppointment:
      type: object
      description: Viewing Appointment
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - viewing
        from:
          type: string
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:30:00+00:00'
        to:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:37:00+00:00'
        agent_id:
          type: integer
          nullable: true
          format: int64
          example: 979443
          description: >-
            The agent this appointment should be assigned to. If not provided or
            `null`, the creator (header `X-Justimmo-User`) will be used.
        contact_id:
          type: integer
          nullable: true
          format: int64
          example: 579696
          description: >-
            <span class="text-required">required</span> if `invite` is set and
            not `null`.
        realty_id:
          type: integer
          nullable: true
          format: int64
          example: 4869
          description: >-
            <span class="text-required">required</span> if `invite` is set to
            <span class="text-enumvalue">"realty"</span>.
        invite:
          $ref: '#/components/schemas/WriteAppointmentInvite'
        comment:
          type: string
          nullable: true
        exclude_from_report:
          type: boolean
          default: false
    CreateWebhook:
      type: object
      required:
        - endpoint
        - events
      properties:
        endpoint:
          type: string
          format: url
          example: https://example.com/webhook/5c55093497f6
        events:
          type: array
          items:
            type: string
          example:
            - contact:create
            - contact:update
            - contact:delete
          description: |-
            The List of events that should be sent to the webhook.

            This call is currently limited to contact and newsletter events.
    CustomField:
      type: object
      additionalProperties: false
      discriminator:
        propertyName: type
        mapping:
          boolean: '#/components/schemas/CustomFieldBoolean'
          datetime: '#/components/schemas/CustomFieldDateTime'
          int32: '#/components/schemas/CustomFieldInt32'
          int64: '#/components/schemas/CustomFieldInt64'
          number: '#/components/schemas/CustomFieldNumber'
          text: '#/components/schemas/CustomFieldText'
          string: '#/components/schemas/CustomFieldString'
          user: '#/components/schemas/CustomFieldUser'
          user_location: '#/components/schemas/CustomFieldUserLocation'
      oneOf:
        - $ref: '#/components/schemas/CustomFieldBoolean'
        - $ref: '#/components/schemas/CustomFieldDateTime'
        - $ref: '#/components/schemas/CustomFieldInt32'
        - $ref: '#/components/schemas/CustomFieldInt64'
        - $ref: '#/components/schemas/CustomFieldNumber'
        - $ref: '#/components/schemas/CustomFieldText'
        - $ref: '#/components/schemas/CustomFieldString'
        - $ref: '#/components/schemas/CustomFieldUser'
        - $ref: '#/components/schemas/CustomFieldUserLocation'
    CustomFieldBoolean:
      type: object
      additionalProperties: false
      required:
        - type
        - name
        - value
      properties:
        type:
          type: string
          enum:
            - boolean
        name:
          type: string
          example: active
        value:
          type: boolean
    CustomFieldDateTime:
      type: object
      additionalProperties: false
      required:
        - type
        - name
        - value
      properties:
        type:
          type: string
          enum:
            - datetime
        name:
          type: string
          example: created_at
        value:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
    CustomFieldInt32:
      type: object
      additionalProperties: false
      required:
        - type
        - name
        - value
      properties:
        type:
          type: string
          enum:
            - int32
        name:
          type: string
          example: distance
        value:
          type: integer
          format: int32
          example: 123
    CustomFieldInt64:
      type: object
      additionalProperties: false
      required:
        - type
        - name
        - value
      properties:
        type:
          type: string
          enum:
            - int64
        name:
          type: string
          example: distance
        value:
          type: integer
          format: int64
          example: 123
    CustomFieldNumber:
      type: object
      additionalProperties: false
      required:
        - type
        - name
        - value
      properties:
        type:
          type: string
          enum:
            - number
        name:
          type: string
          example: price
        value:
          type: number
          example: 123.45
    CustomFieldText:
      type: object
      additionalProperties: false
      required:
        - type
        - name
        - value
        - locale
      properties:
        type:
          type: string
          enum:
            - text
        name:
          type: string
          example: price
        value:
          type: string
          example: some text, maybe even <strong>html</strong>
        locale:
          type: string
          minLength: 2
          maxLength: 2
          example: de
    CustomFieldString:
      type: object
      additionalProperties: false
      required:
        - type
        - name
        - value
      properties:
        type:
          type: string
          enum:
            - string
        name:
          type: string
          example: contact_source
        value:
          type: string
          example: some plain text
    CustomFieldUser:
      type: object
      additionalProperties: false
      required:
        - type
        - name
        - value
      properties:
        type:
          type: string
          enum:
            - user
        name:
          type: string
          example: responsible_agent
        value:
          $ref: '#/components/schemas/User'
    CustomFieldUserLocation:
      type: object
      additionalProperties: false
      required:
        - type
        - name
        - value
      properties:
        type:
          type: string
          enum:
            - user_location
        name:
          type: string
          example: office
        value:
          $ref: '#/components/schemas/UserLocation'
    EnergyPerformanceCertification:
      type: object
      description: >-
        <span class="text-ji-term">Energieausweis</span>


        Depending on `energy_performance_type`, the following fields are
        considered (all other fields are ignored):

        - `heating_demand_energy_performance` (HWB + fGEE):
        `energy_performance`, `heating_demand`, `valid_until`

        - `heating_demand_final_energy_demand` (HWB + EEB):
        `final_energy_demand`, `heating_demand`, `valid_until`

        - `provided_later`: `auto_disclaimer` (must not be null)

        - `not_necessary`: `auto_disclaimer` (must not be null)
      required:
        - energy_performance
        - heating_demand
        - valid_until
        - auto_disclaimer
      properties:
        energy_performance_type:
          type: string
          enum:
            - heating_demand_energy_performance
            - heating_demand_final_energy_demand
            - provided_later
            - not_necessary
          description: |-
            - heating_demand_energy_performance: HWB + fGEE
            - heating_demand_final_energy_demand: HWB + EEB
            - provided_later: wird nachgereicht
            - not_necessary: nicht notwendig
        final_energy_demand:
          type: object
          description: '"Endenergiebedarf" (EEB)'
          required:
            - value
            - class
          properties:
            value:
              type: number
              format: float
              nullable: true
              example: 123.78
            class:
              type: string
              nullable: true
              enum:
                - A
                - B
                - B fossil
                - C
                - C fossil
                - D
                - D fossil
                - E
                - E fossil
                - F
                - F fossil
                - G
                - G fossil
              example: C fossil
        energy_performance:
          type: object
          description: '"Gesamtenergieeffizienz-Faktor" (fGEE)'
          required:
            - value
            - class
          properties:
            value:
              type: number
              format: float
              nullable: true
              example: 1.67
            class:
              type: string
              nullable: true
              enum:
                - A++
                - A+
                - A
                - B
                - C
                - D
                - E
                - F
                - G
              example: C
        heating_demand:
          type: object
          description: '"Heizwärmebedarf" (HWB) in kWh/m²a'
          required:
            - value
            - class
          properties:
            value:
              type: number
              format: float
              nullable: true
              example: 95.65
            class:
              type: string
              nullable: true
              enum:
                - A++
                - A+
                - A
                - B
                - C
                - D
                - E
                - F
                - G
              example: C
        valid_until:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '2022-07-18'
        auto_disclaimer:
          type: boolean
          nullable: true
          default: false
    ExportFeed:
      type: object
      additionalProperties: false
      required:
        - id
        - name
        - category
      properties:
        id:
          type: integer
          example: 42
        name:
          type: string
          example: willhaben.at
        category:
          type: string
          enum:
            - platform
            - website
            - other
          example: platform
    ExportsList:
      type: object
      required:
        - active
        - exports
      properties:
        active:
          type: boolean
          description: >-
            Whether <span class="text-ji-term">Exporte aktivieren</span> is
            active or not
        exports:
          type: array
          items:
            $ref: '#/components/schemas/ExportsListItem'
    ExportsListItem:
      type: object
      properties:
        id:
          type: integer
          example: 43634
        name:
          type: string
          example: Example Platform
        category:
          type: object
          properties:
            value:
              type: string
              enum:
                - website
                - platform
                - other
              example: platform
            name:
              type: string
              example: Plattform
        enabled:
          type: boolean
          description: Whether this export is currently enabled for this realty or not
        export_state:
          type: object
          description: State of the export feed
          properties:
            value:
              type: string
              enum:
                - ok
                - temporarily_disabled
                - limit_exceeded
                - soft_limit_exceeded
              example: limit_exceeded
            name:
              type: string
              example: Limit überschritten
        log_state:
          type: object
          description: State of this realty within the export feed
          properties:
            value:
              type: string
              enum:
                - online
                - offline
                - error
                - limit
            name:
              type: string
              example: übertragen
        url:
          type: string
          nullable: true
          example: https://example-platform.immo/realties/1234
        limit:
          type: object
          properties:
            current:
              type: integer
              example: 11
              description: How many realties are currently being exported on this feed
            limit_soft:
              type: integer
              nullable: true
              example: 5
              description: <span class="text-ji-term">Warnlimit</span>
            limit:
              type: integer
              nullable: true
              example: 10
              description: <span class="text-ji-term">Exportlimit</span>
        last_export:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-20T16:22:00+00:00'
    ExportLog:
      type: object
      additionalProperties: false
      required:
        - pagination
        - items
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        items:
          type: array
          items:
            $ref: '#/components/schemas/ExportLogEntry'
    ExportLogEntry:
      type: object
      additionalProperties: false
      required:
        - realty
        - started_at
        - stopped_at
        - feed
        - platform
      properties:
        realty:
          type: object
          additionalProperties: false
          properties:
            id:
              type: integer
              format: int64
              example: 42
        started_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        stopped_at:
          type: string
          format: date-time
          nullable: true
          description: |-
            RFC-3339

            If null, the realty is still exported to this export feed
          example: '2020-05-05T14:10:31+00:00'
        feed:
          $ref: '#/components/schemas/ExportFeed'
        platform:
          $ref: '#/components/schemas/ExportPlatform'
    ExportPlatform:
      type: object
      nullable: true
      additionalProperties: false
      required:
        - id
        - name
      properties:
        id:
          type: integer
          example: 6
        name:
          type: string
          example: willhaben.at
    File:
      type: object
      additionalProperties: false
      discriminator:
        propertyName: type
        mapping:
          document: '#/components/schemas/FileDocument'
          image: '#/components/schemas/FileImage'
          vector_image: '#/components/schemas/FileVectorImage'
          video: '#/components/schemas/FileVideo'
      oneOf:
        - $ref: '#/components/schemas/FileDocument'
        - $ref: '#/components/schemas/FileImage'
        - $ref: '#/components/schemas/FileVectorImage'
        - $ref: '#/components/schemas/FileVideo'
    FileDocument:
      type: object
      additionalProperties: false
      required:
        - type
        - storage_key
        - url
        - original_filename
        - title
        - description
        - sort_order
        - visibility
        - active
        - group
        - original_filesize
        - mime_type
        - uploaded_at
      properties:
        type:
          type: string
          enum:
            - document
        storage_key:
          $ref: '#/components/schemas/StorageKey'
          example: 4yJnjOyivaIvIjxZrG0Bnd.pdf
        url:
          type: string
          minLength: 1
          format: url
          example: https://storage.justimmo.at/file/4yJnjOyivaIvIjxZrG0Bnd.doc
        original_filename:
          type: string
          minLength: 1
          example: Nebenkostenübersicht.pdf
        title:
          type: string
          example: Nebenkostenübersicht
        description:
          type: string
          example: Nebenkostenübersicht zum Objekt
        sort_order:
          type: integer
          nullable: true
          example: 13
          description: Sort order within the file's group, sorted ascending
        visibility:
          type: string
          enum:
            - public
            - private
          description: >-
            Public files are publicly accessible without authorization header
            and can be used in exports

            Private files require authorization header and are not to be shared
            with other platforms
        active:
          type: boolean
          description: >-
            Only files that are active are used in exports and general
            presentation logic, inactive files are for internal use only
        group:
          type: object
          nullable: true
          additionalProperties: false
          required:
            - id
          properties:
            id:
              type: integer
              description: <span class="text-tbd">TBD</span>
        original_filesize:
          type: integer
          description: in bytes
        mime_type:
          type: string
          format: mime
          example: application/pdf
        uploaded_at:
          type: string
          format: datetime
          description: RFC-3339
          example: '1985-04-12 14:12:12'
    FileImage:
      type: object
      additionalProperties: false
      required:
        - type
        - storage_key
        - url
        - original_filename
        - title
        - description
        - sort_order
        - visibility
        - active
        - group
        - original_filesize
        - mime_type
        - uploaded_at
        - width
        - height
        - thumbnails
      properties:
        type:
          type: string
          enum:
            - image
        storage_key:
          $ref: '#/components/schemas/StorageKey'
          example: 5fJnj1yjvbIaIjyXrG2Bnd.jpg
        url:
          type: string
          minLength: 1
          format: url
          example: https://storage.justimmo.at/file/5fJnj1yjvbIaIjyXrG2Bnd.jpg
        original_filename:
          type: string
          minLength: 1
          example: AusblickBalkon.jpg
        title:
          type: string
          example: Ausblick Balkon
        description:
          type: string
          example: Foto des wunderschönen Ausblicks vom Balkon
        sort_order:
          type: integer
          nullable: true
          example: 13
          description: Sort order within the file's group, sorted ascending
        visibility:
          type: string
          enum:
            - public
            - private
          description: >-
            Public files are publicly accessible without authorization header
            and can be used in exports

            Private files require authorization header and are not to be shared
            with other platforms
        active:
          type: boolean
          description: >-
            Only files that are active are used in exports and general
            presentation logic, inactive files are for internal use only
        group:
          type: object
          nullable: true
          additionalProperties: false
          required:
            - id
          properties:
            id:
              type: integer
              description: <span class="text-tbd">TBD</span>
        original_filesize:
          type: integer
          description: in bytes
        mime_type:
          type: string
          format: mime
          example: image/jpeg
        uploaded_at:
          type: string
          format: datetime
          description: RFC-3339
          example: '1985-04-12 14:12:12'
        width:
          type: integer
        height:
          type: integer
        thumbnails:
          type: array
          items:
            $ref: '#/components/schemas/Thumbnail'
    FileVectorImage:
      type: object
      additionalProperties: false
      required:
        - type
        - storage_key
        - url
        - original_filename
        - title
        - description
        - sort_order
        - visibility
        - active
        - group
        - original_filesize
        - mime_type
        - uploaded_at
      properties:
        type:
          type: string
          enum:
            - vector_image
        storage_key:
          $ref: '#/components/schemas/StorageKey'
          example: 4fJnj1yivbIvIjyZrG1Bnd.svg
        url:
          type: string
          minLength: 1
          format: url
          example: https://storage.justimmo.at/file/4fJnj1yivbIvIjyZrG1Bnd.svg
        original_filename:
          type: string
          minLength: 1
          example: Firmenlogo.svg
        title:
          type: string
          example: Firmenlogo
        description:
          type: string
          example: Logo der Mustermann Immo GmbH
        sort_order:
          type: integer
          nullable: true
          example: 13
          description: Sort order within the file's group, sorted ascending
        visibility:
          type: string
          enum:
            - public
            - private
          description: >-
            Public files are publicly accessible without authorization header
            and can be used in exports

            Private files require authorization header and are not to be shared
            with other platforms
        active:
          type: boolean
          description: >-
            Only files that are active are used in exports and general
            presentation logic, inactive files are for internal use only
        group:
          type: object
          nullable: true
          additionalProperties: false
          required:
            - id
          properties:
            id:
              type: integer
              description: <span class="text-tbd">TBD</span>
        original_filesize:
          type: integer
          description: in bytes
        mime_type:
          type: string
          format: mime
          example: image/svg+xml
        uploaded_at:
          type: string
          format: datetime
          description: RFC-3339
          example: '1985-04-12 14:12:12'
    FileVideo:
      type: object
      additionalProperties: false
      required:
        - type
        - storage_key
        - url
        - original_filename
        - title
        - description
        - sort_order
        - visibility
        - active
        - group
        - original_filesize
        - mime_type
        - uploaded_at
        - width
        - height
        - duration
        - thumbnails
      properties:
        type:
          type: string
          enum:
            - video
        storage_key:
          $ref: '#/components/schemas/StorageKey'
          example: 6fJnj1yivbBcIjyArG3Bnd.mp4
        url:
          type: string
          minLength: 1
          format: url
          example: https://storage.justimmo.at/file/6fJnj1yivbBcIjyArG3Bnd.mp4
        original_filename:
          type: string
          minLength: 1
          example: Besichtigung.mp4
        title:
          type: string
          example: Besichtigung
        description:
          type: string
          example: Wohnungsbesichtigung als Video
        sort_order:
          type: integer
          nullable: true
          example: 13
          description: Sort order within the file's group, sorted ascending
        visibility:
          type: string
          enum:
            - public
            - private
          description: >-
            Public files are publicly accessible without authorization header
            and can be used in exports

            Private files require authorization header and are not to be shared
            with other platforms
        active:
          type: boolean
          description: >-
            Only files that are active are used in exports and general
            presentation logic, inactive files are for internal use only
        group:
          type: object
          nullable: true
          additionalProperties: false
          required:
            - id
          properties:
            id:
              type: integer
              description: <span class="text-tbd">TBD</span>
        original_filesize:
          type: integer
          description: in bytes
        mime_type:
          type: string
          format: mime
          example: video/mp4
        uploaded_at:
          type: string
          format: datetime
          description: RFC-3339
          example: '1985-04-12 14:12:12'
        width:
          type: integer
          nullable: true
        height:
          type: integer
          nullable: true
        duration:
          type: integer
          nullable: true
          description: in ms
        thumbnails:
          type: array
          items:
            $ref: '#/components/schemas/Thumbnail'
    Image:
      type: object
      additionalProperties: false
      required:
        - storage_key
        - sizes
      nullable: true
      properties:
        storage_key:
          type: string
          pattern: '[a-zA-Z0-9_-]+\.[a-zA-Z0-9]+'
          description: internal storage key / id
          example: 4j9dVEXKRWNzu2a25yruVN.jpg
        sizes:
          type: object
          description: urls to various sizes of this image
          example:
            original: https://storage.justimmo.at/file/4j9dVEXKRWNzu2a25yruVN.jpg
            fm_small: >-
              https://storage.justimmo.at/thumb/2b07a4f14fa931d30b1ab5e6816639c7/fcc_h75_w100/4j9dVEXKRWNzu2a25yruVN.jpg
            medium: >-
              https://storage.justimmo.at/thumb/228813bbba443807da81e631733e15ee/fc_h480_w630/4j9dVEXKRWNzu2a25yruVN.jpg
    IncompleteAddress:
      type: object
      additionalProperties: false
      required:
        - street
        - zip
        - city
        - country
      nullable: true
      properties:
        street:
          type: string
          nullable: true
          example: Mariahilferstraße 8/11
        zip:
          type: string
          nullable: true
          example: '1070'
        city:
          type: string
          nullable: true
          example: Wien
        country:
          type: string
          nullable: true
          example: AT
          description: ISO 3166-1 alpha-2
          minLength: 2
          maxLength: 2
    InputEnergyPerformanceCertification:
      type: object
      nullable: true
      description: >-
        <span class="text-ji-term">Energieausweis</span>


        `energy_performance_type` determines which fields are allowed and which
        of them are required — see the four variants below.


        If `energy_performance_type` is not provided, <span
        class="text-enumvalue">"heating_demand_energy_performance"</span> (HWB +
        fGEE) is assumed.
      oneOf:
        - $ref: '#/components/schemas/InputEnergyPerformanceCertificationHwbFgee'
        - $ref: '#/components/schemas/InputEnergyPerformanceCertificationHwbEeb'
        - $ref: >-
            #/components/schemas/InputEnergyPerformanceCertificationProvidedLater
        - $ref: '#/components/schemas/InputEnergyPerformanceCertificationNotNecessary'
    InputEnergyPerformanceCertificationHwbEeb:
      type: object
      title: HWB + EEB
      description: >-
        <span class="text-ji-term">Energieausweis</span> based on <span
        class="text-ji-term">Heizwärmebedarf</span> (HWB) and <span
        class="text-ji-term">Endenergiebedarf</span> (EEB).


        If a `valid_until` date is specified, either `final_energy_demand` or
        `heating_demand` must be provided without `null` values.
      required:
        - energy_performance_type
        - final_energy_demand
        - heating_demand
        - valid_until
      properties:
        energy_performance_type:
          type: string
          enum:
            - heating_demand_final_energy_demand
          description: HWB + EEB
        final_energy_demand:
          type: object
          nullable: true
          description: '"Endenergiebedarf" (EEB) in kWh/m²a'
          required:
            - value
            - class
          properties:
            value:
              type: number
              format: float
              nullable: true
              example: 123.78
            class:
              type: string
              nullable: true
              enum:
                - A
                - B
                - B fossil
                - C
                - C fossil
                - D
                - D fossil
                - E
                - E fossil
                - F
                - F fossil
                - G
                - G fossil
              example: C fossil
        heating_demand:
          type: object
          nullable: true
          description: '"Heizwärmebedarf" (HWB) in kWh/m²a'
          required:
            - value
            - class
          properties:
            value:
              type: number
              format: float
              nullable: true
              example: 95.65
            class:
              type: string
              nullable: true
              enum:
                - A++
                - A+
                - A
                - B
                - C
                - D
                - E
                - F
                - G
              example: C
        valid_until:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '2022-07-18'
    InputEnergyPerformanceCertificationHwbFgee:
      type: object
      title: HWB + fGEE
      description: >-
        <span class="text-ji-term">Energieausweis</span> based on <span
        class="text-ji-term">Heizwärmebedarf</span> (HWB) and <span
        class="text-ji-term">Gesamtenergieeffizienz-Faktor</span> (fGEE).


        Applies if `energy_performance_type` is <span
        class="text-enumvalue">"heating_demand_energy_performance"</span> or if
        `energy_performance_type` is not provided at all.


        If a `valid_until` date is specified, either `energy_performance` or
        `heating_demand` must be provided without `null` values.
      required:
        - energy_performance
        - heating_demand
        - valid_until
      properties:
        energy_performance_type:
          type: string
          enum:
            - heating_demand_energy_performance
          description: HWB + fGEE. May be omitted, in which case this variant is assumed.
        energy_performance:
          type: object
          nullable: true
          description: '"Gesamtenergieeffizienz-Faktor" (fGEE)'
          required:
            - value
            - class
          properties:
            value:
              type: number
              format: float
              nullable: true
              example: 1.67
            class:
              type: string
              nullable: true
              enum:
                - A++
                - A+
                - A
                - B
                - C
                - D
                - E
                - F
                - G
              example: C
        heating_demand:
          type: object
          nullable: true
          description: '"Heizwärmebedarf" (HWB) in kWh/m²a'
          required:
            - value
            - class
          properties:
            value:
              type: number
              format: float
              nullable: true
              example: 95.65
            class:
              type: string
              nullable: true
              enum:
                - A++
                - A+
                - A
                - B
                - C
                - D
                - E
                - F
                - G
              example: C
        valid_until:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '2022-07-18'
    InputEnergyPerformanceCertificationNotNecessary:
      type: object
      title: nicht notwendig
      description: >-
        No <span class="text-ji-term">Energieausweis</span> is necessary ("nicht
        notwendig").
      required:
        - energy_performance_type
        - auto_disclaimer
      properties:
        energy_performance_type:
          type: string
          enum:
            - not_necessary
          description: nicht notwendig
        auto_disclaimer:
          type: boolean
    InputEnergyPerformanceCertificationProvidedLater:
      type: object
      title: wird nachgereicht
      description: >-
        The <span class="text-ji-term">Energieausweis</span> will be provided
        later ("wird nachgereicht").


        This type can be switched off per tenant. If it is disabled, writing it
        is rejected unless the realty already carries it.
      required:
        - energy_performance_type
        - auto_disclaimer
      properties:
        energy_performance_type:
          type: string
          enum:
            - provided_later
          description: wird nachgereicht
        auto_disclaimer:
          type: boolean
    InquiryList:
      type: object
      required:
        - pagination
        - items
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        items:
          type: array
          items:
            $ref: '#/components/schemas/InquiryListItem'
    InquiryListItem:
      type: object
      required:
        - id
        - created_at
        - message
        - agent
        - contact
        - realty
        - source
      properties:
        id:
          type: integer
          format: int64
          example: 7598
        created_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        message:
          type: string
        agent:
          type: object
          nullable: true
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        contact:
          type: object
          required:
            - id
            - cache
          properties:
            id:
              type: integer
              format: int64
              example: 5756
            cache:
              type: object
              nullable: true
              description: >-
                State of the contact when inquiry was created. For updated
                information on the contact, use the [Contact Details
                Call](#tag/contact/operation/GetContactDetails)
              properties:
                company_name:
                  type: string
                  nullable: true
                first_name:
                  type: string
                  nullable: true
                last_name:
                  type: string
                  nullable: true
                email:
                  type: string
                  nullable: true
                phone:
                  type: string
                  nullable: true
                address:
                  type: string
                  nullable: true
        realty:
          type: object
          nullable: true
          required:
            - id
            - cache
          properties:
            id:
              type: integer
              format: int64
              nullable: true
              example: 576944
            cache:
              type: object
              nullable: true
              description: >-
                State of the realty when inquiry was created. For updated
                information on the realty, use the [Realty Details
                Call](#tag/realty/operation/GetRealtyDetails)
              properties:
                title:
                  type: string
                  nullable: true
                address:
                  type: string
                  nullable: true
                url:
                  type: string
                  nullable: true
        source:
          type: object
          nullable: true
          required:
            - id
            - name
            - feed
            - platform
          properties:
            id:
              type: integer
              format: int64
              example: 8
            name:
              type: string
              example: Immobilienplattform
            feed:
              type: object
              nullable: true
              required:
                - id
                - name
                - category
              properties:
                id:
                  type: integer
                  format: int64
                  example: 58304
                name:
                  type: string
                  example: willhaben.at
                category:
                  type: string
                  enum:
                    - platform
                    - website
                    - other
                  example: platform
            platform:
              type: object
              nullable: true
              required:
                - id
                - name
              properties:
                id:
                  type: integer
                  format: int64
                  example: 6
                name:
                  type: string
                  example: willhaben.at
    IntFromTo:
      type: object
      required:
        - from
        - to
      properties:
        from:
          type: integer
          format: int32
          nullable: true
          example: 3
        to:
          type: integer
          nullable: true
          example: 4
    InvoiceFrom:
      type: object
      nullable: true
      required:
        - type
      properties:
        type:
          type: string
          example: from_date
          enum:
            - on_demand
            - immediately
            - from_date
        date:
          type: string
          format: date
          description: RFC-3339
          example: '2022-07-18'
    LocationIdTextResponse:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
          example: 123
        text:
          type: string
          example: Wien
    MeetingAppointment:
      type: object
      required:
        - id
        - type
        - from
        - to
        - state
        - agent
        - contact
        - realty
        - invite
        - comment
        - exclude_from_report
      properties:
        id:
          type: integer
          format: int64
          example: 5629
        type:
          type: string
          enum:
            - meeting
        from:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:30:00+00:00'
        to:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:37:00+00:00'
        state:
          type: object
          required:
            - state
          properties:
            state:
              type: string
              enum:
                - open
                - done
              example: done
            changed_at:
              type: string
              nullable: true
              format: date-time
              description: RFC-3339
              example: '2024-11-06T13:37:00+00:00'
        agent:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5674
        contact:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 4356
        realty:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 3245
        invite:
          $ref: '#/components/schemas/AppointmentInvite'
        comment:
          type: string
          nullable: true
        exclude_from_report:
          type: boolean
          default: false
    NotaryAppointment:
      type: object
      required:
        - id
        - type
        - from
        - to
        - state
        - agent
        - contact
        - realty
        - invite
        - comment
        - exclude_from_report
      properties:
        id:
          type: integer
          format: int64
          example: 5629
        type:
          type: string
          enum:
            - notary
        from:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:30:00+00:00'
        to:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:37:00+00:00'
        state:
          type: object
          required:
            - state
          properties:
            state:
              type: string
              enum:
                - open
                - done
              example: done
            changed_at:
              type: string
              nullable: true
              format: date-time
              description: RFC-3339
              example: '2024-11-06T13:37:00+00:00'
        agent:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5674
        contact:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 4356
        realty:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 3245
        invite:
          $ref: '#/components/schemas/AppointmentInvite'
        comment:
          type: string
          nullable: true
        exclude_from_report:
          type: boolean
          default: false
    NullableInputRealtyPrice:
      type: object
      nullable: true
      additionalProperties: false
      required:
        - net
        - vat
      properties:
        net:
          type: number
          format: float
          example: 1234.56
        vat:
          type: object
          required:
            - value
            - type
          properties:
            value:
              type: number
              format: float
              example: 20
            type:
              type: string
              enum:
                - absolute
                - percentage
    NullableInputRealtyPriceOptional:
      type: object
      nullable: true
      additionalProperties: false
      required:
        - net
        - vat
        - optional
      properties:
        net:
          type: number
          format: float
          example: 1234.56
        vat:
          type: object
          required:
            - value
            - type
          properties:
            value:
              type: number
              format: float
              example: 123.45
            type:
              type: string
              enum:
                - absolute
                - percentage
        optional:
          type: boolean
          example: true
    Offer:
      type: object
      additionalProperties: false
      required:
        - offer_id
        - contact
        - tenant_id
        - sender
        - created_at
        - send_start
        - send_end
        - state
        - settings
        - realties
        - documents
      properties:
        offer_id:
          type: integer
          format: int64
          example: 5756
        contact:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        tenant_id:
          type: integer
          format: int64
          example: 5
        sender:
          $ref: '#/components/schemas/User'
        created_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        send_start:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        send_end:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        urls:
          $ref: '#/components/schemas/OfferUrls'
        state:
          $ref: '#/components/schemas/OfferState'
        settings:
          $ref: '#/components/schemas/OfferSettings'
        realties:
          type: array
          items:
            $ref: '#/components/schemas/OfferRealty'
        attachments:
          type: array
          items:
            $ref: '#/components/schemas/File'
        documents:
          type: array
          items:
            $ref: '#/components/schemas/File'
        texts:
          $ref: '#/components/schemas/OfferTexts'
        commission_assurance:
          $ref: '#/components/schemas/OfferCommissionAssurance'
    OfferCommissionAssurance:
      type: object
      nullable: true
      additionalProperties: false
      required:
        - salutation
        - teaser
        - text
        - mail_subject
        - mail_text
      properties:
        salutation:
          type: string
        teaser:
          type: string
        text:
          type: string
        mail_subject:
          type: string
        mail_text:
          type: string
    OfferRealty:
      type: object
      required:
        - id
        - sub_realty_ids
        - documents
      properties:
        id:
          type: integer
          format: int64
          example: 123
        sub_realty_ids:
          type: array
          description: ids of residential subunits or commercial subunits
          items:
            type: integer
            format: int64
            example: 123
        documents:
          type: array
          items:
            $ref: '#/components/schemas/File'
    OfferSettings:
      type: object
      additionalProperties: false
      required:
        - type
        - is_weboffer
        - is_commission_assurance
        - is_automated
        - with_prices
        - with_links
        - with_address
        - culture
      properties:
        type:
          type: string
          enum:
            - offer
            - acquisition
            - rejection
        is_weboffer:
          type: boolean
        is_commission_assurance:
          type: boolean
        is_automated:
          type: boolean
        with_prices:
          type: boolean
        with_links:
          type: boolean
        with_address:
          type: boolean
        culture:
          type: string
          minLength: 2
          maxLength: 2
          example: de
    OfferState:
      type: object
      additionalProperties: false
      required:
        - send_state
        - spam_complaint
        - mail_opened
      properties:
        send_state:
          type: string
          enum:
            - new
            - transferred
            - processed
            - deferred
            - delivered
            - dropped
            - bounced
        spam_complaint:
          type: boolean
          description: if the contact marked the offer as spam
        mail_opened:
          type: string
          enum:
            - unknown
            - opened
          description: whether the email has been opened
        weboffer_visit_counter:
          type: integer
          description: how many times the weboffer was visited
        commission_instructed:
          type: boolean
        commission_accepted:
          type: boolean
        commission_accepted_at:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        weboffer_reminder_state:
          type: string
          enum:
            - inactive
            - open
            - reminded
          description: >-
            whether the reminder feature is inactive, the reminder is yet to be
            sent (open) or has already been sent (reminded)
    OfferTexts:
      type: object
      additionalProperties: false
      required:
        - subject
        - text
      properties:
        subject:
          type: string
        text:
          type: string
    OfferUrls:
      type: object
      additionalProperties: false
      required:
        - tracking_url
        - offer_url
      properties:
        tracking_url:
          type: string
          example: >-
            https://apps.justimmo.at/nachricht/1234567/1234567/abcdefghijklmnopqrstuvwxyz/trackVisit
          description: tracking URL. increases weboffer_visit_counter.
        offer_url:
          type: string
          example: >-
            https://apps.justimmo.at/nachricht/1234567/1234567/abcdefghijklmnopqrstuvwxyz
          description: URL to the weboffer.
    OAuthErrorResponse:
      type: object
      additionalProperties: false
      description: The resource owner or authorization server denied the request.
      properties:
        error:
          type: string
          description: internal oauth server error code
          example: access_denied
        error_description:
          type: string
          example: The resource owner or authorization server denied the request.
        hint:
          type: string
          description: additional information why the error was triggered
          example: Only authorization_code grants are allowed to access this resource.
        message:
          type: string
          example: The resource owner or authorization server denied the request.
    OpenImmo127AT2:
      type: string
      externalDocs:
        description: OpenImmo 1.2.7 AT2 Documentation
        url: http://www.openimmo.de/
    OptionalRealtyPrice:
      type: object
      additionalProperties: false
      required:
        - currency
        - net
        - gross
        - vat_absolute
        - vat_percentage
        - optional
      properties:
        currency:
          type: string
          example: EUR
          description: ISO 4217 Code
          minLength: 3
          maxLength: 3
        net:
          type: number
          format: float
          example: 1234.56
        gross:
          type: number
          format: float
          example: 1481.47
        vat_absolute:
          type: number
          format: float
          example: 246.91
        vat_percentage:
          type: number
          format: float
          example: 20
        optional:
          type: boolean
    OwnerBasedPermissionState:
      type: string
      example: own
      enum:
        - none
        - own
        - all
    Pagination:
      type: object
      required:
        - limit
        - offset
        - total
      properties:
        limit:
          type: integer
          description: Currently applied limit
          example: 10
        offset:
          type: integer
          description: Currently applied offset
          example: 0
        total:
          type: integer
          description: Total number of results without limit/offset
          example: 445
    Permissions:
      type: object
      required:
        - realty_module_enabled
        - realty_create
        - realty_view
        - realty_view_vendors
        - realty_view_internal_files
        - realty_edit
        - realty_delete
        - realty_export
        - contact_module_enabled
        - contact_create
        - contact_view
        - contact_edit
        - contact_delete
      nullable: true
      properties:
        realty_module_enabled:
          type: boolean
        realty_create:
          type: boolean
        realty_view:
          $ref: '#/components/schemas/OwnerBasedPermissionState'
        realty_view_vendors:
          $ref: '#/components/schemas/OwnerBasedPermissionState'
        realty_view_internal_files:
          $ref: '#/components/schemas/OwnerBasedPermissionState'
        realty_edit:
          $ref: '#/components/schemas/OwnerBasedPermissionState'
        realty_delete:
          $ref: '#/components/schemas/OwnerBasedPermissionState'
        realty_export:
          $ref: '#/components/schemas/OwnerBasedPermissionState'
        contact_module_enabled:
          type: boolean
        contact_create:
          type: boolean
        contact_view:
          $ref: '#/components/schemas/OwnerBasedPermissionState'
        contact_edit:
          $ref: '#/components/schemas/OwnerBasedPermissionState'
        contact_delete:
          $ref: '#/components/schemas/OwnerBasedPermissionState'
    PublicFile:
      type: object
      additionalProperties: false
      required:
        - storage_key
        - filename
        - title
      nullable: true
      properties:
        storage_key:
          type: string
          pattern: '[a-zA-Z0-9_-]+\.[a-zA-Z0-9]+'
          description: internal storage key / id
          example: 4yJnjOyivaIvIjxZrG0Bnd.jpg
        filename:
          type: string
          description: original name of the file when uploaded
          example: file.jpg
        title:
          type: string
          description: title of the file as selected by user
          nullable: true
          example: Example File Description
    Realty:
      type: object
      description: ''
      required:
        - id
        - tenant_id
        - created_at
        - updated_at
        - published_at
        - catalogue_number
        - status
        - public_address
        - system_type
        - parent_id
        - type
        - subtype
        - occupancy
        - architecture
        - year_of_construction
        - infrastructure_provision
        - year_of_last_renovation
        - year_of_last_comprehensive_renovation
        - areas
        - rooms
        - room_layout
        - prices
        - obtainable_from
        - preview_image
        - categories
        - custom_fields
        - active_for_export
        - accessible
        - contacts
        - is_public
        - files
        - internal_files
        - texts
        - energy_performance_certification
        - features
        - dual_brokerage
        - condition_assessment
        - agency_agreement
        - automatic_hits
        - ownership_type
        - furnishing
        - noise_level
        - location_assessment
      properties:
        id:
          type: integer
          format: int64
          example: 5756
        tenant_id:
          type: integer
          format: int64
          example: 5
        created_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        updated_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        published_at:
          type: string
          format: date-time
          description: RFC-3339
          nullable: true
          example: '2020-05-01T12:13:25+00:00'
        catalogue_number:
          $ref: '#/components/schemas/RealtyCatalogueNumber'
        status:
          $ref: '#/components/schemas/RealtyStatus'
        conclusion:
          description: Structure depends on `marketing_type` of the realty.
          oneOf:
            - $ref: '#/components/schemas/RealtyConclusionRent'
            - $ref: '#/components/schemas/RealtyConclusionBuy'
        address:
          $ref: '#/components/schemas/RealtyAddress'
        public_address:
          $ref: '#/components/schemas/RealtyPublicAddress'
        land_registry_number:
          deprecated: true
          type: string
          nullable: true
          example: '600'
          description: >-
            <span class="text-ji-term">Einlagezahl</span> (EZ)


            Country must be Austria.


            Deprecated: Use first element in `land_register_entries` instead.


            Holds the land_register_entry_number of the first LandRegisterEntry
            of this realty.
        cadastral_municipality:
          deprecated: true
          type: string
          nullable: true
          example: '01010'
          description: >-
            <span class="text-ji-term">Katastralgemeinde Nummer</span> (KG)


            Country must be Austria.


            Deprecated: Use first element in `land_register_entries` instead.


            Holds the cadastral_municipality_id of the first LandRegisterEntry
            of this realty.
        plot_number:
          deprecated: true
          type: string
          nullable: true
          example: 1234/1, 1234/2
          description: >-
            <span class="text-ji-term">Grundstücksnummern</span> (GST-NRn)


            Country must be Austria.
                
            Deprecated: Use first element in `land_register_entries` instead.


            Holds the plot_numbers of the first LandRegisterEntry of this
            realty, concatenated by commas.
        system_type:
          $ref: '#/components/schemas/RealtySystemType'
        parent_id:
          type: integer
          format: int64
          nullable: true
          example: 5755
          description: The realty `id` of the parent residential or commercial project
        type:
          $ref: '#/components/schemas/RealtyType'
        subtype:
          $ref: '#/components/schemas/RealtySubType'
        occupancy:
          $ref: '#/components/schemas/RealtyOccupancy'
        marketing_type:
          $ref: '#/components/schemas/RealtyMarketingType'
        architecture:
          $ref: '#/components/schemas/RealtyArchitecture'
        year_of_construction:
          type: integer
          nullable: true
        infrastructure_provision:
          $ref: '#/components/schemas/RealtyInfrastructureProvision'
        year_of_last_renovation:
          type: integer
          nullable: true
          description: <span class="text-ji-term">Letzte Sanierung</span>
        year_of_last_comprehensive_renovation:
          type: integer
          nullable: true
          description: <span class="text-ji-term">Letzte Generalsanierung</span>
        areas:
          $ref: '#/components/schemas/RealtyAreas'
        floors:
          $ref: '#/components/schemas/RealtyFloors'
        rooms:
          $ref: '#/components/schemas/RealtyRooms'
        room_layout:
          $ref: '#/components/schemas/RoomLayout'
        prices:
          $ref: '#/components/schemas/RealtyPrices'
        earnings_per_year:
          $ref: '#/components/schemas/RealtyEarningsPerYear'
        obtainable_from:
          $ref: '#/components/schemas/RealtyObtainableFrom'
        preview_image:
          $ref: '#/components/schemas/Image'
        preview_plan:
          $ref: '#/components/schemas/Image'
        categories:
          type: array
          items:
            $ref: '#/components/schemas/RealtyCategory'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
        agent:
          $ref: '#/components/schemas/User'
        active_for_export:
          type: boolean
        accessible:
          type: boolean
          description: <span class="text-ji-term">barrierefrei</span>
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/RealtyContact'
        files:
          type: array
          items:
            $ref: '#/components/schemas/File'
        internal_files:
          type: array
          deprecated: true
          items:
            $ref: '#/components/schemas/RealtyFile'
        texts:
          $ref: '#/components/schemas/RealtyTexts'
        energy_performance_certification:
          $ref: '#/components/schemas/EnergyPerformanceCertification'
        features:
          $ref: '#/components/schemas/RealtyFeatures'
        links:
          type: array
          items:
            type: object
            additionalProperties: false
            required:
              - id
              - url
              - description
              - type
              - export
            properties:
              id:
                type: integer
              url:
                type: string
                minLength: 1
                format: url
                example: https://app.immoviewer.com/portal/tour/1234567?accessKey=123f
              description:
                type: string
                example: Online 3D Rundgang
              type:
                type: string
                enum:
                  - link
                  - video
                  - tour
                  - project
                example: tour
              export:
                type: object
                properties:
                  offer:
                    type: boolean
                  platform:
                    type: boolean
                  website:
                    type: boolean
                  other:
                    type: boolean
        residential_aggregation_data:
          $ref: '#/components/schemas/RealtyResidentialAggregationData'
        commission:
          $ref: '#/components/schemas/RealtyCommission'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        dual_brokerage:
          $ref: '#/components/schemas/RealtyDualBrokerage'
        condition_assessment:
          $ref: '#/components/schemas/RealtyConditionAssessment'
        realty_condition:
          $ref: '#/components/schemas/RealtyCondition'
        building_condition:
          $ref: '#/components/schemas/BuildingCondition'
        is_public:
          type: boolean
          description: Whether the realty is currently on a public export platform
        agency_agreement:
          $ref: '#/components/schemas/RealtyAgencyAgreement'
        automatic_hits:
          type: boolean
        rent_details:
          $ref: '#/components/schemas/RealtyRentDetails'
        commercial_project_details:
          $ref: '#/components/schemas/CommercialProjectDetails'
        commercial_area_details:
          $ref: '#/components/schemas/CommercialAreaDetails'
        land_register_entries:
          type: array
          items:
            $ref: '#/components/schemas/RealtyLandRegisterEntry'
        ownership_type:
          type: object
          nullable: true
          description: >-
            <span class="text-ji-term">Eigentumsform</span>


            see [Lookup Tables:
            RealtyOwnershipType](#tag/lookup_realty_ownership_type)
          required:
            - id
            - name
          properties:
            id:
              type: integer
            name:
              type: string
        furnishing:
          type: object
          nullable: true
          description: |-
            <span class="text-ji-term">Möblierung</span>

            see [Lookup Tables: RealtyFurnishing](#tag/lookup_realty_furnishing)
          required:
            - id
            - name
          properties:
            id:
              type: integer
            name:
              type: string
        noise_level:
          type: object
          nullable: true
          description: >-
            <span class="text-ji-term">Lärmpegel</span>


            see [Lookup Tables:
            RealtyNoiseLevel](#tag/lookup_realty_noise_level)
          required:
            - id
            - name
          properties:
            id:
              type: integer
            name:
              type: string
        location_assessment:
          type: object
          nullable: true
          description: >-
            <span class="text-ji-term">Lagebewertung</span>


            see [Lookup Tables:
            RealtyLocationAssessment](#tag/lookup_realty_location_assessment)
          required:
            - value
            - name
          properties:
            value:
              type: string
            name:
              type: string
        business_domain:
          type: string
          description: This field is only returned when it is set for the realty.
    RealtyAddress:
      type: object
      additionalProperties: false
      nullable: true
      required:
        - street
        - number
        - entrance
        - door
        - zip
        - city
        - country
        - geo_coordinates
        - floor
        - floor_idx
        - floor_description
        - political_district
        - federal_state
      properties:
        street:
          type: string
          nullable: true
          example: Mariahilferstraße
        number:
          type: string
          nullable: true
          example: '127'
        entrance:
          type: string
          nullable: true
          example: '5'
        door:
          type: string
          nullable: true
          example: 3a
        zip:
          type: string
          nullable: true
          example: '1070'
        city:
          type: string
          nullable: true
          example: Wien
        country:
          type: string
          nullable: true
          minLength: 2
          maxLength: 2
          description: ISO 3166-1 alpha-2
          example: AT
        geo_coordinates:
          type: object
          nullable: true
          description: Precise coordinates of the realty.
          required:
            - latitude
            - longitude
          properties:
            latitude:
              type: number
              format: double
            longitude:
              type: number
              format: double
        floor:
          type: string
          nullable: true
          example: 2. Etage
        floor_idx:
          $ref: '#/components/schemas/RealtyFloorIdx'
        floor_description:
          type: string
          nullable: true
          example: 2. Stock
        political_district:
          $ref: '#/components/schemas/RealtyPoliticalDistrict'
        federal_state:
          $ref: '#/components/schemas/RealtyFederalState'
    RealtyArchitecture:
      type: string
      nullable: true
      enum:
        - new
        - old
      description: <span class="text-ji-term">Bauart (Neubau / Altbau)</span>
    RealtyArea:
      type: object
      additionalProperties: false
      nullable: true
      properties:
        area:
          type: number
          nullable: true
          format: float
          example: 50.5
          description: Area in square meters
    RealtyAreas:
      type: object
      additionalProperties: false
      description: 'see [Lookup Tables: RealtyAreas](#tag/lookup_realty_areas)'
      properties:
        site_area:
          $ref: '#/components/schemas/RealtyArea'
        living_area:
          $ref: '#/components/schemas/RealtyArea'
        floor_area:
          $ref: '#/components/schemas/RealtyArea'
        developable_area:
          $ref: '#/components/schemas/RealtyArea'
        office_area:
          $ref: '#/components/schemas/RealtyArea'
        sales_area:
          $ref: '#/components/schemas/RealtyArea'
        storage_area:
          $ref: '#/components/schemas/RealtyArea'
        available_area:
          $ref: '#/components/schemas/RealtyArea'
        short_term_area:
          $ref: '#/components/schemas/RealtyArea'
        total_area:
          $ref: '#/components/schemas/RealtyArea'
        weighted_area:
          $ref: '#/components/schemas/RealtyArea'
        undeveloped_attic:
          type: boolean
          nullable: true
        undeveloped_attic_area:
          $ref: '#/components/schemas/RealtyArea'
        garden_area:
          $ref: '#/components/schemas/RealtyCountableArea'
        basement_area:
          $ref: '#/components/schemas/RealtyCountableArea'
        balcony_area:
          $ref: '#/components/schemas/RealtyCountableArea'
        terrace_area:
          $ref: '#/components/schemas/RealtyCountableArea'
        covered_balcony_area:
          $ref: '#/components/schemas/RealtyCountableArea'
        garage_area:
          $ref: '#/components/schemas/RealtyCountableArea'
        parking_space_area:
          $ref: '#/components/schemas/RealtyCountableArea'
    RealtyDeal:
      type: object
      required:
        - id
        - created_at
        - general
        - commission_settlement
        - commission_allocation
      properties:
        id:
          type: integer
          format: int64
          example: 7598
        created_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        general:
          type: object
          required:
            - realty
            - concluded_at
            - calculation_base_price
          properties:
            realty:
              type: object
              required:
                - id
              properties:
                id:
                  type: integer
                  format: int64
                  example: 576944
            concluded_at:
              type: string
              format: date-time
              description: RFC-3339
              example: '2020-05-01T12:13:25+00:00'
            calculation_base_price:
              type: number
              format: double
              example: 740.99
            final_rent:
              type: number
              format: double
              example: 840.99
            renting_from:
              type: string
              nullable: true
              format: date-time
              description: RFC-3339
              example: '2020-05-01T12:13:25+00:00'
            renting_until:
              type: string
              nullable: true
              format: date-time
              description: RFC-3339
              example: '2020-05-01T12:13:25+00:00'
        commission_settlement:
          type: object
          required:
            - vendor
            - acquirer
            - total_net_commission
          properties:
            vendor:
              type: object
              required:
                - commission
                - vat_percentage
                - vendors
              properties:
                commission:
                  $ref: '#/components/schemas/CommissionValue'
                vat_percentage:
                  type: number
                  format: double
                  example: 20
                service_from:
                  type: string
                  format: date-time
                  description: |-
                    RFC-3339  
                    <span class="text-ji-term">Leistungszeitraum Beginn</span>
                  example: '2020-05-01T12:13:25+00:00'
                payment_until:
                  type: string
                  format: date-time
                  description: |-
                    RFC-3339  
                    <span class="text-ji-term">Zahlungsziel bis</span>
                  example: '2020-05-01T12:13:25+00:00'
                invoice_from:
                  $ref: '#/components/schemas/InvoiceFrom'
                vendors:
                  type: array
                  items:
                    $ref: '#/components/schemas/CommissionPayerItem'
            acquirer:
              type: object
              required:
                - commission
                - vat_percentage
                - acquirers
              properties:
                commission:
                  $ref: '#/components/schemas/CommissionValue'
                vat_percentage:
                  type: number
                  format: double
                  example: 20
                service_from:
                  type: string
                  format: date-time
                  description: RFC-3339
                  example: '2020-05-01T12:13:25+00:00'
                payment_until:
                  type: string
                  format: date-time
                  description: RFC-3339
                  example: '2020-05-01T12:13:25+00:00'
                invoice_from:
                  $ref: '#/components/schemas/InvoiceFrom'
                acquirers:
                  type: array
                  items:
                    $ref: '#/components/schemas/CommissionPayerItem'
            total_net_commission:
              type: number
              format: double
              example: 2000
        commission_allocation:
          type: array
          items:
            $ref: '#/components/schemas/RealtyDealPerson'
    RealtyDealPerson:
      type: object
      required:
        - referrer
        - vendor_percentage
        - vendor_absolute
        - acquirer_percentage
        - acquirer_absolute
      properties:
        contact:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 576944
        user:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 576944
        referrer:
          type: boolean
          description: Indicates if the person is a referrer for the deal
        vendor_percentage:
          type: number
          nullable: true
          format: float
          example: 100
          description: Percentage of commission from the vendor
        vendor_absolute:
          type: number
          format: float
          example: 1000
          description: Absolute commission from the vendor
        acquirer_percentage:
          type: number
          nullable: true
          format: float
          example: 100
          description: Percentage of commission from the acquirer
        acquirer_absolute:
          type: number
          format: float
          example: 1000
          description: Absolute commission from the acquirer
    RealtyRooms:
      type: object
      additionalProperties: false
      description: 'see [Lookup Tables: RealtyRooms](#tag/lookup_realty_rooms)'
      properties:
        rooms:
          type: number
          format: float
          nullable: true
          example: 4.5
        toilets:
          type: integer
          nullable: true
          example: 3
        bathrooms:
          type: integer
          nullable: true
          example: 2
        storerooms:
          type: integer
          nullable: true
          example: 1
    RealtyCatalogueNumber:
      type: object
      required:
        - plain
        - display
      properties:
        plain:
          type: integer
          format: int64
          nullable: true
          example: 123
        display:
          type: string
          nullable: true
          example: 5/123
    RealtyCategory:
      type: object
      required:
        - id
        - name
      properties:
        id:
          type: integer
          format: int64
          example: 123
        name:
          type: string
          example: Interessent
    RealtyCommission:
      type: object
      required:
        - prospect
        - vendor
      properties:
        prospect:
          type: object
          required:
            - principle_of_first_instruction
            - value
            - type
            - vat
            - auto_text
            - text_value
          properties:
            principle_of_first_instruction:
              type: boolean
              nullable: true
              description: >-
                "Erstauftraggeberprinzip" (§17a MaklerG)


                Determines if the "Principle of First Instruction" applies to
                this realty.
            value:
              type: number
              format: float
              nullable: true
              example: 3
            type:
              type: object
              nullable: true
              required:
                - value
                - name
              properties:
                value:
                  type: string
                  enum:
                    - percentage_text
                    - percentage_value
                    - monthly_rent_text
                    - monthly_rent_value
                    - value
                    - free
                    - principle_of_first_instruction
                  example: percentage_value
                  description: >-
                    see [Lookup Tables:
                    RealtyCommissionProspectType](#tag/lookup_realty_commission_prospect_type)
                name:
                  type: string
                  example: '% des Kaufpreises (Wert)'
                includes_operation_costs:
                  type: boolean
                  nullable: true
            vat:
              type: number
              format: float
              nullable: true
              example: 20
            auto_text:
              type: boolean
              nullable: true
              example: true
            text_value:
              type: string
              nullable: true
              example: 3% des Kaufpreises zzgl. 20% USt.
        vendor:
          type: object
          required:
            - value
            - type
            - vat
            - auto_text
            - text_value
          properties:
            value:
              type: number
              format: float
              nullable: true
              example: 3
            type:
              type: object
              nullable: true
              required:
                - value
                - name
              properties:
                value:
                  type: string
                  enum:
                    - percentage_value
                    - monthly_rent_value
                    - value
                  example: percentage_value
                  description: >-
                    see [Lookup Tables:
                    RealtyCommissionVendorType](#tag/lookup_realty_commission_prospect_type)
                name:
                  type: string
                  example: '% des Kaufpreises'
            vat:
              type: number
              format: float
              nullable: true
              example: 20
            auto_text:
              type: boolean
              nullable: true
              example: true
            text_value:
              type: string
              nullable: true
              example: 36.000,00 €
    RealtyCondition:
      type: object
      nullable: true
      required:
        - id
        - name
      properties:
        id:
          type: integer
        name:
          type: string
      description: |-
        <span class="text-ji-term">Zustand</span>  
        Condition of the realty itself

        see [Lookup Tables: RealtyCondition](#tag/lookup_realty_condition)
    RealtyConditionAssessment:
      type: string
      nullable: true
      enum:
        - very_good
        - good
        - medium
        - bad
      description: <span class="text-ji-term">Zustandsbewertung</span>
    RealtyConclusionBuy:
      type: object
      description: >-
        Contains information relevant to the conclusion of the contract
        ("Vertragsabschluss")
      required:
        - concluded_at
        - final_price
      properties:
        concluded_at:
          type: string
          format: date-time
          description: RFC-3339
          nullable: true
          example: '2024-05-21T10:38:59+00:00'
        final_price:
          type: number
          format: float
        teaser:
          type: boolean
          readOnly: true
    RealtyConclusionRent:
      type: object
      description: >-
        Contains information relevant to the conclusion of the contract
        ("Vertragsabschluss")
      required:
        - concluded_at
        - renting_from
        - renting_until
        - final_rent
        - final_rent_for_commission
      properties:
        concluded_at:
          type: string
          format: date-time
          description: RFC-3339
          nullable: true
          example: '2024-05-21T10:38:59+00:00'
        renting_from:
          type: string
          format: date-time
          description: RFC-3339
          nullable: true
          example: '2024-05-21T10:38:59+00:00'
        renting_until:
          type: string
          format: date-time
          description: RFC-3339
          nullable: true
          example: '2027-05-21T10:38:59+00:00'
        final_rent:
          type: number
          format: float
        final_rent_for_commission:
          type: number
          format: float
        teaser:
          type: boolean
          readOnly: true
    RealtyContact:
      type: object
      additionalProperties: false
      required:
        - role
        - contact
      properties:
        role:
          type: string
          enum:
            - unknown
            - vendor
            - prospect
            - buyer
            - renter
            - referrer
          example: prospect
          description: |-
            Role of the contact in regard to this realty

            | Role     | Description
            | -------- | -----------
            | unknown  |
            | vendor   | "Abgeber"
            | prospect | "Interessent"
            | buyer    | "Käufer"
            | renter   | "Mieter"
            | referrer | "Tippgeber"

            Multiple contacts of each role are possible.
        prospect_state:
          type: string
          enum:
            - reserved
            - contract_preparation
          example: reserved
          description: >-
            State of prospective buyer, if `role` is prospect.


            | State                | Description

            | -------------------- | -----------

            | reserved             | The realty is reserved for this contact

            | contract_preparation | Contracts are being prepared for this
            contact, the deal is about to be closed


            Multiple contacts in each state may be possible in the future.
        contact:
          type: object
          required:
            - id
            - created_at
            - updated_at
          properties:
            id:
              type: integer
              format: int64
              example: 5756
            created_at:
              type: string
              format: date-time
              description: RFC-3339
              example: '2020-05-01T12:13:25+00:00'
            updated_at:
              type: string
              format: date-time
              description: RFC-3339
              example: '2020-05-01T12:13:25+00:00'
    RealtyCosts:
      type: object
      nullable: true
      properties:
        buyout:
          type: number
          format: float
          description: <span class="text-ji-term">Ablöse</span>
          example: 0
        security_deposit:
          type: object
          description: <span class="text-ji-term">Kaution</span>
          properties:
            value:
              type: number
              format: float
              example: 2.5
            type:
              type: string
              enum:
                - monthly_rent_gross_text
                - monthly_rent_gross_value
                - monthly_rent_net_text
                - monthly_rent_net_value
                - value
              example: monthly_rent_gross_text
              description: >-
                | Value                                                        |
                Name                      |

                |--------------------------------------------------------------|---------------------------|

                | <span class="text-enumvalue">monthly_rent_gross_text</span>  |
                Bruttomonatsmieten (Text) |

                | <span class="text-enumvalue">monthly_rent_gross_value</span> |
                Bruttomonatsmieten (Wert) |

                | <span class="text-enumvalue">monthly_rent_net_text</span>    |
                Nettomonatsmieten (Text)  |

                | <span class="text-enumvalue">monthly_rent_net_value</span>   |
                Nettomonatsmieten (Wert)  |

                | <span class="text-enumvalue">value</span>                    |
                Wert                      |
            auto_text:
              type: boolean
              example: true
            text:
              type: string
              nullable: true
              example: 2,5 Bruttomonatsmieten
        financing_contribution:
          type: number
          format: float
          description: <span class="text-ji-term">Finanzierungsbeitrag</span>
          example: 0
        explanation:
          type: string
          nullable: true
          description: <span class="text-ji-term">Erklärung Kosten</span>
        stamp_duty:
          type: object
          description: <span class="text-ji-term">Vergebührung</span>
          properties:
            auto_value:
              type: boolean
              default: true
              description: >-
                <span class="text-ji-term">Vergebührung automatisch
                berechnen</span>  

                automatische Berechnung ohne Gewähr
            value:
              type: number
              format: float
              example: 1
            text:
              type: string
              nullable: true
              description: <span class="text-ji-term">Vergebührung Text</span>
    RealtyCountableArea:
      type: object
      additionalProperties: false
      nullable: true
      properties:
        area:
          type: number
          format: float
          nullable: true
          example: 50.5
          description: Total area in square meters
        count:
          type: integer
          nullable: true
          example: 2
          description: Count of sub areas
    RealtyDualBrokerage:
      type: boolean
      description: <span class="text-ji-term">Doppelmaklertätigkeit</span>
      nullable: true
    RealtyEarningsPerYear:
      type: object
      description: |-
        <span class="text-ji-term">Nettoertrag pro Jahr</span>

        only included in response when applicable based on `marketing_type`
      required:
        - currency
        - net
      properties:
        currency:
          type: string
          example: EUR
          description: ISO 4217 Code
          minLength: 3
          maxLength: 3
        net:
          type: number
          format: float
          example: 1234.56
    RealtyFeatures:
      type: array
      items:
        type: object
        required:
          - group_label
          - items
        properties:
          group_label:
            type: string
            nullable: true
          items:
            type: array
            items:
              type: object
              required:
                - id
                - label
              properties:
                id:
                  type: integer
                  format: int32
                label:
                  type: string
                  nullable: true
                tenant_id:
                  type: integer
                  format: int64
                  nullable: true
      description: <span class="text-ji-term">Ausstattungsmerkmale</span>
      example:
        - group_label: Boden
          items:
            - id: 1
              label: Dielen
            - id: 2
              label: Doppelboden
            - id: 1234
              label: Spezialstahl
              tenant_id: 123
        - group_label: Befeuerung
          items:
            - id: 11
              label: Elektro
            - id: 12
              label: Erdwärme
            - id: 5678
              label: Nuklear
              tenant_id: 123
    RealtyFederalState:
      type: object
      description: Federal state.
      additionalProperties: false
      nullable: true
      required:
        - id
        - iso_3166_2_code
        - name
      properties:
        id:
          type: integer
          nullable: false
          example: 134
        iso_3166_2_code:
          type: string
          nullable: true
          example: AT-1
        name:
          type: string
          nullable: false
          example: Burgenland
    RealtyFloors:
      type: object
      properties:
        count_floors:
          type: integer
          nullable: true
          description: <span class="text-ji-term">Anzahl Etagen</span>
        count_attic_floors:
          type: integer
          nullable: true
          description: <span class="text-ji-term">Anzahl Dachgeschosse</span>
        mezzanine:
          type: boolean
          nullable: true
          default: false
    RealtyFloorIdx:
      type: integer
      nullable: true
      example: 2
      description: >-
        0-based numeric index of the floor. 


        The resulting floor is dependant on the values within the realty's
        `floors` property.


        Assuming a building with a 8 floors (`floors.count_floors` is 8) of
        which 2 are attic floors (`floors.count_attic_floors` is 2), the
        indexing would look like this:
            
        | idx | without mezzanine | with mezzanine |

        | --- | ----------------- | -------------- |

        |  -4 | 4. KG             | 4. KG          |

        |  -3 | 3. KG             | 3. KG          |

        |  -2 | 2. KG             | 2. KG          |

        |  -1 | 1. KG             | 1. KG          |

        |   0 | EG                | EG             |

        |   1 | 1. Etage          | MZ             |

        |   2 | 2. Etage          | 1. Etage       |

        |   3 | 3. Etage          | 2. Etage       |

        |   4 | 4. Etage          | 3. Etage       |

        |   5 | 5. Etage          | 4. Etage       |

        |   6 | 1. DG             | 1. DG          |

        |   7 | 2. DG             | 2. DG          |
    RealtyFile:
      type: object
      additionalProperties: false
      required:
        - storage_key
        - filename
        - title
      nullable: true
      properties:
        storage_key:
          type: string
          pattern: '[a-zA-Z0-9_-]+\.[a-zA-Z0-9]+'
          description: internal storage key / id
          example: 4yJnjOyivaIvIjxZrG0Bnd.jpg
        filename:
          type: string
          description: original name of the file when uploaded
          example: file.jpg
        title:
          type: string
          description: title of the file as selected by user
          nullable: true
          example: Example File Description
    RealtyInfrastructureProvision:
      type: string
      nullable: true
      enum:
        - not_developed
        - partially_developed
        - fully_developed
      description: >-
        <span class="text-ji-term">Erschließung (Unerschlossen / Teilerschlossen
        / Vollerschlossen)</span>
    RealtyLandRegisterEntry:
      type: object
      required:
        - id
        - land_register_entry_number
        - cadastral_municipality_id
        - cadastral_municipality_name
        - plot_numbers
        - owner_sequence_numbers
      properties:
        id:
          type: integer
          format: int64
          example: 123
        land_register_entry_number:
          type: string
          nullable: true
          description: |-
            <span class="text-ji-term">Einlagezahl</span> (EZ)

            Country must be Austria.
          example: '600'
        cadastral_municipality_id:
          type: string
          nullable: true
          description: |-
            <span class="text-ji-term">Katastralgemeinde Nummer</span> (KG-NR)

            Country must be Austria.
          example: '01010'
        cadastral_municipality_name:
          type: string
          nullable: true
          description: |-
            <span class="text-ji-term">Katastralgemeinde Name</span> (KG-Name)

            Country must be Austria.
          example: Neubau
        plot_numbers:
          type: array
          description: |-
            <span class="text-ji-term">Grundstücksnummern</span> (GST-NRn)

            Country must be Austria.
          items:
            type: string
            example: '274'
        owner_sequence_numbers:
          description: >-
            <span class="text-ji-term">Laufende Nummern im Eigentumsblatt
            (B-Blatt)</span>            


            Country must be Austria.
          type: array
          items:
            type: integer
            example: 3
    RealtyMarketingType:
      type: string
      description: >-
        <span class="text-ji-term">Vermarktungsart</span>


        see [Lookup Tables:
        RealtyMarketingType](#tag/lookup_realty_marketing_type)
      enum:
        - buy
        - rent
    RealtyObtainableFrom:
      type: object
      additionalProperties: false
      nullable: true
      description: Either `date` or `text` is provided
      properties:
        date:
          type: string
          format: date
          description: RFC-3339
          example: '2021-06-05'
        text:
          type: string
    RealtyOccupancy:
      type: object
      required:
        - residential
        - commercial
        - investment
      properties:
        residential:
          type: boolean
        commercial:
          type: boolean
        investment:
          type: boolean
      description: <span class="text-ji-term">Nutzungsart</span>
    RealtyPoliticalDistrict:
      type: object
      description: Political district.
      additionalProperties: false
      nullable: true
      required:
        - id
        - code
        - name
      properties:
        id:
          type: integer
          nullable: false
          example: 94
        code:
          type: integer
          nullable: false
          example: 101
        name:
          type: string
          nullable: false
          example: Eisenstadt
    RealtyPrice:
      type: object
      additionalProperties: false
      required:
        - currency
        - net
        - gross
        - vat_absolute
        - vat_percentage
      properties:
        currency:
          type: string
          example: EUR
          description: ISO 4217 Code
          minLength: 3
          maxLength: 3
        net:
          type: number
          format: float
          example: 1234.56
        gross:
          type: number
          format: float
          example: 1481.47
        vat_absolute:
          type: number
          format: float
          example: 246.91
        vat_percentage:
          type: number
          format: float
          example: 20
    RealtyPrices:
      type: object
      additionalProperties: false
      description: 'see [Lookup Tables: RealtyPrices](#tag/lookup_realty_prices)'
      required:
        - publish_prices
        - parking
        - garage
        - operating
        - heating
        - hot_water
        - cooling
        - maintenance_funds
        - elevator
        - others
      properties:
        publish_prices:
          type: boolean
          description: Whether the prices are visible on public platforms
        purchase_price:
          $ref: '#/components/schemas/RealtyPrice'
        rent:
          $ref: '#/components/schemas/RealtyPrice'
        furniture_hire:
          $ref: '#/components/schemas/OptionalRealtyPrice'
        parking:
          $ref: '#/components/schemas/OptionalRealtyPrice'
        garage:
          $ref: '#/components/schemas/OptionalRealtyPrice'
        operating:
          $ref: '#/components/schemas/RealtyPrice'
        heating:
          $ref: '#/components/schemas/RealtyPrice'
        hot_water:
          $ref: '#/components/schemas/RealtyPrice'
        cooling:
          $ref: '#/components/schemas/RealtyPrice'
        maintenance_funds:
          $ref: '#/components/schemas/RealtyPrice'
        elevator:
          $ref: '#/components/schemas/OptionalRealtyPrice'
        others:
          $ref: '#/components/schemas/RealtyPrice'
    RealtyPublicAddress:
      type: object
      description: Address chosen by the agent for use on public platforms.
      additionalProperties: false
      nullable: true
      required:
        - street
        - number
        - entrance
        - door
        - zip
        - city
        - country
        - geo_coordinates
        - fuzzy_geo_coordinates
        - floor
        - floor_idx
        - floor_description
        - political_district
        - federal_state
      properties:
        street:
          type: string
          nullable: true
          example: Mariahilferstraße
        number:
          type: string
          nullable: true
          example: '127'
        entrance:
          type: string
          nullable: true
          example: '5'
        door:
          type: string
          nullable: true
          example: 3a
        zip:
          type: string
          nullable: true
          example: '1070'
        city:
          type: string
          nullable: true
          example: Wien
        country:
          type: string
          nullable: true
          minLength: 2
          maxLength: 2
          description: ISO 3166-1 alpha-2
          example: AT
        geo_coordinates:
          type: object
          nullable: true
          description: Coordinates that are exported to platforms.
          required:
            - latitude
            - longitude
          properties:
            latitude:
              type: number
              format: double
            longitude:
              type: number
              format: double
        fuzzy_geo_coordinates:
          type: object
          nullable: true
          description: Fuzzy location of the realty to hide the precise location.
          required:
            - latitude
            - longitude
            - radius
          properties:
            latitude:
              type: number
              format: double
            longitude:
              type: number
              format: double
            radius:
              type: integer
              description: Radius in meters
        floor:
          type: string
          nullable: true
          example: 2. Etage
        floor_idx:
          $ref: '#/components/schemas/RealtyFloorIdx'
        floor_description:
          type: string
          nullable: true
          example: 2. OG
        political_district:
          $ref: '#/components/schemas/RealtyPoliticalDistrict'
        federal_state:
          $ref: '#/components/schemas/RealtyFederalState'
    RealtyRentDetails:
      type: object
      properties:
        maximum_rental_period:
          type: integer
          nullable: true
          example: 60
          description: Maximum rental period in months
        unlimited_rental_period:
          type: boolean
          example: false
        waiver_of_cancellation_period:
          type: integer
          nullable: true
          example: 15
          description: Waiver of cancellation period in months
        deposit:
          type: string
          nullable: true
          deprecated: true
          example: 2 Bruttomonatsmieten zzgl. 20% USt.
        costs:
          $ref: '#/components/schemas/RealtyCosts'
        purchase_option:
          type: boolean
          description: Whether there is an option to purchase the realty in the future.
    RealtyStatus:
      type: object
      required:
        - id
        - name
      description: 'see [Lookup Tables: RealtyStatus](#tag/lookup_realty_status)'
      properties:
        id:
          type: integer
        name:
          type: string
        until:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
    RealtySubType:
      type: object
      nullable: true
      description: |-
        <span class="text-ji-term">Subobjektart</span>

        see [Lookup Tables: RealtySubType](#tag/lookup_realty_sub_type)
      required:
        - id
        - name
        - openimmo_key
      properties:
        id:
          type: integer
          example: 80
        name:
          type: string
          example: Hochregallager
        openimmo_key:
          type: string
          nullable: true
          example: HOCHREGALLAGER
    RealtySystemType:
      type: string
      description: |-
        <span class="text-ji-term">Objekttyp</span>

        see [Lookup Tables: RealtySystemType](#tag/lookup_realty_system_type)
      enum:
        - realty
        - residential_project
        - residential_subunit
        - commercial_project
        - commercial_area
    RealtyTexts:
      type: object
      properties:
        label:
          type: string
          example: W-1728
        title:
          type: array
          items:
            type: object
            required:
              - value
              - locale
            properties:
              value:
                type: string
                example: 3-Zimmer-Wohnung mit Balkon Nähe Unterhupfing
              locale:
                type: string
                minLength: 2
                maxLength: 2
                example: de
        location:
          type: array
          items:
            type: object
            required:
              - value
              - locale
            properties:
              value:
                type: string
                example: >-
                  Am Rande des der Kleinstadt Unterhupfing, unweit eines schönen
                  Badesees in einer ruhigen Nebenstraße
              locale:
                type: string
                minLength: 2
                maxLength: 2
                example: de
        description:
          type: array
          items:
            type: object
            required:
              - value
              - locale
            properties:
              value:
                type: string
                example: >-
                  Die Wohnung befindet sich in einer kleinen sehr ruhigen
                  Wohnanlage in unmittelbarer Nähe zum Badesee.


                  Der geräumige Südbalkon ist überdacht und bietet einen schönen
                  Ausblick.
              locale:
                type: string
                minLength: 2
                maxLength: 2
                example: de
        description_expose:
          type: array
          items:
            type: object
            required:
              - value
              - locale
            properties:
              value:
                type: string
                example: >-
                  Die Wohnung befindet sich in einer kleinen sehr ruhigen
                  Wohnanlage in unmittelbarer Nähe zum Badesee.


                  Der geräumige Südbalkon ist überdacht und bietet einen schönen
                  Ausblick.
              locale:
                type: string
                minLength: 2
                maxLength: 2
                example: de
        project_preamble:
          type: array
          description: >-
            <span class="text-ji-term">Vorschalttext</span>  

            Preamble for the residential project this residential subunit
            belongs to
          items:
            type: object
            required:
              - value
              - locale
            properties:
              value:
                type: string
                example: Diese Wohnung ist Teil eines tollen Projektes.
              locale:
                type: string
                minLength: 2
                maxLength: 2
                example: de
        description_internal:
          type: string
          example: Interne Notiz
    RealtyType:
      type: object
      nullable: true
      description: |-
        <span class="text-ji-term">Objektart</span>

        see [Lookup Tables: RealtyType](#tag/lookup_realty_type)
      required:
        - id
        - name
        - openimmo_key
      properties:
        id:
          type: integer
          example: 8
        name:
          type: string
          example: Industrie / Gewerbe
        openimmo_key:
          type: string
          nullable: true
          example: hallen_lager_prod
    RealtyResidentialAggregationData:
      type: object
      description: Only included in response if `system_type = residential_project`
      required:
        - area
        - price
        - rooms
        - subunits_available
      properties:
        area:
          type: object
          required:
            - from
            - to
          properties:
            from:
              type: number
              format: float
              nullable: true
              example: 52.1
              description: in m²
            to:
              type: number
              format: float
              nullable: true
              example: 178.93
              description: in m²
        price:
          type: object
          required:
            - currency
            - from
            - to
          properties:
            currency:
              type: string
              example: EUR
              description: ISO 4217 Code
              minLength: 3
              maxLength: 3
            from:
              type: number
              format: float
              nullable: true
              example: 257000.99
            to:
              type: number
              format: float
              nullable: true
              example: 939500.5
        rooms:
          type: object
          description: Includes "half rooms"
          required:
            - from
            - to
          properties:
            from:
              type: number
              format: float
              nullable: true
              example: 2
            to:
              type: number
              format: float
              nullable: true
              example: 5.5
        subunits_available:
          type: integer
          nullable: true
          example: 15
          description: >-
            How many subunits of this project are available for sale/rent.


            A subunit is considered available, if `active_for_export = true` and
            `status` is an active marketing status (values 5, 7, 11, see [Lookup
            Tables: RealtyStatus](#tag/lookup_realty_status))
    RealtyList:
      type: object
      additionalProperties: false
      required:
        - pagination
        - items
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        items:
          type: array
          items:
            $ref: '#/components/schemas/RealtyListItem'
    RealtyListItem:
      type: object
      description: ''
      additionalProperties: false
      required:
        - id
        - tenant_id
        - created_at
        - updated_at
        - published_at
        - catalogue_number
        - status
        - public_address
        - system_type
        - parent_id
        - type
        - subtype
        - occupancy
        - areas
        - rooms
        - room_layout
        - prices
        - obtainable_from
        - preview_image
        - categories
        - custom_fields
        - active_for_export
        - accessible
        - contacts
        - is_public
        - texts
      properties:
        id:
          type: integer
          format: int64
          example: 5756
        tenant_id:
          type: integer
          format: int64
          example: 5
        created_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        updated_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2020-05-01T12:13:25+00:00'
        published_at:
          type: string
          format: date-time
          description: RFC-3339
          nullable: true
          example: '2020-05-01T12:13:25+00:00'
        catalogue_number:
          $ref: '#/components/schemas/RealtyCatalogueNumber'
        status:
          $ref: '#/components/schemas/RealtyStatus'
        conclusion:
          description: Structure depends on `marketing_type` of the realty.
          oneOf:
            - $ref: '#/components/schemas/RealtyConclusionRent'
            - $ref: '#/components/schemas/RealtyConclusionBuy'
        address:
          $ref: '#/components/schemas/RealtyAddress'
        public_address:
          $ref: '#/components/schemas/RealtyPublicAddress'
        land_registry_number:
          deprecated: true
          type: string
          nullable: true
          example: '600'
          description: >-
            <span class="text-ji-term">Einlagezahl</span> (EZ)


            Deprecated: Use first element in `land_register_entries` in Realty
            Details instead.


            Holds the land_register_entry_number of the first LandRegisterEntry
            of this realty.
        cadastral_municipality:
          deprecated: true
          type: string
          nullable: true
          example: '01010'
          description: >-
            <span class="text-ji-term">Katastralgemeinde Nummer</span> (KG)


            Deprecated: Use first element in `land_register_entries` in Realty
            Details instead.


            Holds the cadastral_municipality_id of the first LandRegisterEntry
            of this realty.
        plot_number:
          deprecated: true
          type: string
          nullable: true
          example: 1234/1, 1234/2
          description: >-
            <span class="text-ji-term">Grundstücksnummern</span> (GST-NRn)


            Deprecated: Use first element in `land_register_entries` in Realty
            Details instead.


            Holds the plot_numbers of the first LandRegisterEntry of this
            realty, concatenated by commas.
        system_type:
          $ref: '#/components/schemas/RealtySystemType'
        parent_id:
          type: integer
          format: int64
          nullable: true
          example: 5755
          description: The realty `id` of the parent residential or commercial project
        type:
          $ref: '#/components/schemas/RealtyType'
        subtype:
          $ref: '#/components/schemas/RealtySubType'
        occupancy:
          $ref: '#/components/schemas/RealtyOccupancy'
        marketing_type:
          $ref: '#/components/schemas/RealtyMarketingType'
        areas:
          $ref: '#/components/schemas/RealtyAreas'
        rooms:
          $ref: '#/components/schemas/RealtyRooms'
        room_layout:
          $ref: '#/components/schemas/RoomLayout'
        prices:
          $ref: '#/components/schemas/RealtyPrices'
        earnings_per_year:
          $ref: '#/components/schemas/RealtyEarningsPerYear'
        obtainable_from:
          $ref: '#/components/schemas/RealtyObtainableFrom'
        preview_image:
          $ref: '#/components/schemas/Image'
        preview_plan:
          $ref: '#/components/schemas/Image'
        categories:
          type: array
          items:
            $ref: '#/components/schemas/RealtyCategory'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
        active_for_export:
          type: boolean
        accessible:
          type: boolean
          description: <span class="text-ji-term">barrierefrei</span>
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/RealtyContact'
        is_public:
          type: boolean
          description: Whether the realty is currently on a public export platform
        texts:
          type: object
          properties:
            title:
              type: array
              items:
                type: object
                required:
                  - value
                  - locale
                properties:
                  value:
                    type: string
                    example: 3-Zimmer-Wohnung mit Balkon Nähe Unterhupfing
                  locale:
                    type: string
                    minLength: 2
                    maxLength: 2
                    example: de
        agent:
          type: object
          allOf:
            - $ref: '#/components/schemas/User'
          nullable: true
    RoomLayout:
      type: string
      nullable: true
      enum:
        - centrally_accessible
        - partly_centrally_accessible
        - circularly_accessible
        - loft
      description: >-
        <span class="text-enumvalue">"centrally_accessible"</span>: <span
        class="text-ji-term">zentral begehbar</span>  

        <span class="text-enumvalue">"partly_centrally_accessible"</span>: <span
        class="text-ji-term">teilweise zentral begehbar</span>   

        <span class="text-enumvalue">"circularly_accessible"</span>: <span
        class="text-ji-term">kreisförmig begehbar</span>  

        <span class="text-enumvalue">"loft"</span>: <span
        class="text-ji-term">Loft</span>  
    RealtyAgencyAgreement:
      type: object
      properties:
        valid_from:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '2021-06-05'
        valid_until:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '2021-06-05'
        agency_agreement_type:
          type: string
          nullable: true
          enum:
            - sole_agency_agreement
            - co_sole_agency_agreement
            - simple_agency_agreement
          description: >-
            see [Lookup Tables:
            RealtyAgencyAgreementType](#tag/lookup_realty_agency_agreement_type)
        agreement_method:
          type: string
          nullable: true
          enum:
            - verbal
            - written
            - written_bilateral
          description: >-
            see [Lookup Tables:
            RealtyAgencyAgreementMethod](#tag/lookup_realty_agency_agreement_method)
        business_opportunity_knowledge_date:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '2021-06-05'
    SearchProfileList:
      type: array
      items:
        $ref: '#/components/schemas/SearchProfile'
    SearchProfile:
      type: object
      required:
        - id
        - contact
        - agent
        - creator
        - created_at
        - updated_at
        - expires_at
        - search_contract
        - search_contract_accepted_at
        - state
        - auto_description
        - notes
        - criteria
        - automatic_hits
      properties:
        id:
          type: integer
          format: int64
          example: 5756
        contact:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        agent:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 6789
        creator:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
        created_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2023-05-01T12:13:25+00:00'
        updated_at:
          type: string
          format: date-time
          description: RFC-3339
          example: '2023-05-01T12:13:25+00:00'
        expires_at:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '2024-05-01'
        search_contract:
          type: boolean
        search_contract_accepted_at:
          type: string
          nullable: true
          format: date-time
          description: >-
            RFC-3339  


            Date of when the search contract was signed/accepted.


            If `search_contract` is `true`, but this is `null`, the contract
            flag was manually added to the search profile by the agent. In this
            case we have no information when the contract was signed.
          example: '2023-07-12T12:28:23+00:00'
        state:
          type: string
          enum:
            - active
            - inactive
            - expired
        auto_description:
          type: string
          description: Automatically generated name
          example: >-
            Kauf, Wohnfl.: 73 m² bis 137 m², Bezirk: Wien 3., Landstraße,
            Wohnung
        notes:
          type: string
        criteria:
          $ref: '#/components/schemas/SearchProfileCriteria'
        automatic_hits:
          type: boolean
        referrer:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5756
    SearchProfileCriteria:
      type: object
      description: >-
        Criteria for potential matches  

        Availability of certain properties depends on the selected `type`s.
        <span class="text-required">required</span> properties are always
        present.
      required:
        - types
        - subtypes
        - occupancy
        - marketing_type
        - price
        - commission_free
        - location
        - architecture
        - year_of_construction
        - energy_performance_class
        - category_ids
        - accessible
        - features
      properties:
        types:
          type: array
          items:
            $ref: '#/components/schemas/RealtyType'
        subtypes:
          type: array
          items:
            $ref: '#/components/schemas/RealtySubType'
        occupancy:
          type: string
          nullable: true
          enum:
            - residential
            - commercial
            - investment
          description: <span class="text-ji-term">Nutzungsart</span>
        marketing_type:
          type: string
          nullable: true
          description: >-
            <span class="text-ji-term">Vermarktungsart</span>


            see [Lookup Tables:
            RealtyMarketingType](#tag/lookup_realty_marketing_type)
          enum:
            - buy
            - rent
        rent_duration:
          type: object
          required:
            - from
            - unlimited
          properties:
            from:
              type: integer
              nullable: true
              description: in months
            unlimited:
              type: boolean
              description: <span class="text-ji-term">unbefristet</span>
        price:
          $ref: '#/components/schemas/IntFromTo'
        price_per_area:
          type: object
          required:
            - from
            - to
          properties:
            from:
              type: number
              format: float
              nullable: true
              example: 1234.56
              description: price per m²
            to:
              type: number
              format: float
              nullable: true
              example: 1234.56
              description: price per m²
        rooms:
          $ref: '#/components/schemas/IntFromTo'
        yield:
          type: object
          description: <span class="text-ji-term">Nettorendite</span>
          properties:
            from:
              type: number
              format: float
              nullable: true
              description: in %
        site_area:
          $ref: '#/components/schemas/AreaFromTo'
        living_area:
          $ref: '#/components/schemas/AreaFromTo'
        floor_area:
          $ref: '#/components/schemas/AreaFromTo'
        office_area:
          $ref: '#/components/schemas/AreaFromTo'
        sales_area:
          $ref: '#/components/schemas/AreaFromTo'
        storage_area:
          $ref: '#/components/schemas/AreaFromTo'
        commission_free:
          type: boolean
        location:
          oneOf:
            - $ref: '#/components/schemas/SearchProfileLocationAddressAustria'
            - $ref: '#/components/schemas/SearchProfileLocationAddressOther'
            - $ref: '#/components/schemas/SearchProfileLocationDistance'
        architecture:
          type: string
          nullable: true
          enum:
            - new
            - old
          description: <span class="text-ji-term">Bauart (Neubau / Altbau)</span>
        year_of_construction:
          $ref: '#/components/schemas/IntFromTo'
        conditions:
          type: array
          description: |-
            <span class="text-ji-term">Zustand</span>

            see [Lookup Tables: RealtyCondition](#tag/lookup_realty_condition)
          items:
            type: object
            required:
              - id
              - name
            properties:
              id:
                type: integer
                example: 1234
              name:
                type: string
                example: baufällig
        floor:
          type: string
          nullable: true
          enum:
            - ground
            - no_ground
            - lower
            - middle
            - upper
            - no_roof
            - roof
        energy_performance_class:
          type: string
          description: <span class="text-ji-term">Energieausweis (ab Klasse)</span>
          nullable: true
          enum:
            - A++
            - A+
            - A
            - B
            - C
            - D
            - E
            - F
            - G
          example: C
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        furnishings:
          type: array
          description: |-
            <span class="text-ji-term">Möblierung</span>

            see [Lookup Tables: RealtyFurnishing](#tag/lookup_realty_furnishing)
          items:
            type: object
            required:
              - id
              - name
            properties:
              id:
                type: integer
                example: 1234
              name:
                type: string
                example: Kochnische
        covered_balcony:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        balcony:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        terrace:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        garden:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        accessible:
          type: boolean
          description: <span class="text-ji-term">barrierefrei</span>
        features:
          $ref: '#/components/schemas/RealtyFeatures'
    SearchProfileLocationAddressAustria:
      type: object
      required:
        - location_ids
      description: Location based on addresses in Austria
      properties:
        location_ids:
          type: array
          uniqueItems: true
          description: >-
            see [Combined location
            autocomplete](#tag/location/operation/combinedLocationAutocomplete)
          items:
            type: object
            required:
              - type
              - id
              - text
            properties:
              type:
                type: string
                enum:
                  - federal_state
                  - political_district
                  - municipality
                  - city
                  - zip
                  - city_zip
              id:
                type: integer
                format: int64
                example: 123
              text:
                type: string
                example: Wien
    SearchProfileLocationAddressOther:
      type: object
      required:
        - country
        - federal_state_ids
      description: Location based on addresses in countries other than Austria
      properties:
        country:
          type: string
          minLength: 2
          maxLength: 2
          description: ISO 3166-1 alpha-2
          example: DE
        federal_state_ids:
          type: array
          description: >-
            see [Federal State
            autocomplete](#tag/location/operation/federalStatesAutocomplete)
          items:
            type: integer
            format: int32
    SearchProfileLocationDistance:
      type: object
      required:
        - latitude
        - longitude
        - radius
      description: Location based on geo coordinates
      properties:
        latitude:
          type: number
          format: double
        longitude:
          type: number
          format: double
        radius:
          type: integer
          minimum: 250
          maximum: 50000
          description: Search radius in meters
    ServerErrorResponse:
      type: object
      additionalProperties: false
      properties:
        type:
          type: string
          description: Status Code Definitions
          example: https://tools.ietf.org/html/rfc2616#section-10
        title:
          type: string
          example: An error occurred
        status:
          type: integer
          description: A HTTP Status Code
          example: 500
        detail:
          type: string
          description: additional information why the error was triggered
          example: Example Error
    StorageKey:
      type: string
      pattern: '[a-zA-Z0-9_-]+\.[a-zA-Z0-9]+'
      description: unique storage key / id
      example: 4j9dVEXKRWNzu2a25yruVN.jpg
    Tenant:
      type: object
      additionalProperties: false
      required:
        - id
      properties:
        id:
          type: integer
          format: int64
          example: 123
        name:
          type: string
          example: Justimmo
        email:
          type: string
          example: support@justimmo.at
          format: email
        phone:
          type: string
          nullable: true
          example: +43 1 2345678
        address:
          $ref: '#/components/schemas/Address'
    Thumbnail:
      type: object
      additionalProperties: false
      required:
        - name
        - url
      properties:
        name:
          type: string
        url:
          type: string
          format: url
    ToggleableAreaFrom:
      type: object
      required:
        - enabled
        - from
      properties:
        enabled:
          type: boolean
        from:
          type: integer
          format: int32
          nullable: true
          example: 17
          description: in m²
    UpdateContact:
      type: object
      additionalProperties: false
      discriminator:
        propertyName: type
        mapping:
          company: '#/components/schemas/UpdateContactCompany'
          couple: '#/components/schemas/UpdateContactCouple'
          family: '#/components/schemas/UpdateContactFamily'
          person: '#/components/schemas/UpdateContactPerson'
      oneOf:
        - $ref: '#/components/schemas/UpdateContactCompany'
        - $ref: '#/components/schemas/UpdateContactCouple'
        - $ref: '#/components/schemas/UpdateContactFamily'
        - $ref: '#/components/schemas/UpdateContactPerson'
    UpdateContactCompany:
      type: object
      additionalProperties: false
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - company
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
          deprecated: true
          description: >-
            If the email already exists for this contact, it will be ignored.  

            If the email doesn't exist yet, it will be added to the existing
            emails.  


            To just add an email address, we recommend using the [Add Email
            Address Call](#tag/contact/operation/AddContactEmailAddress)
            instead.  

            To delete an email address, use the [Delete Email Address
            Call](#tag/contact/operation/DeleteContactEmailAddress).
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          type: integer
          format: int64
          example: 5756
        prefix:
          type: string
          nullable: true
          example: Dr.
        gender:
          type: string
          nullable: true
          enum:
            - male
            - female
          example: female
        first_name:
          type: string
          nullable: true
          example: Justin
        last_name:
          type: string
          nullable: true
          example: Immo
        suffix:
          type: string
          nullable: true
          example: MBA
        birthday:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '1985-04-12'
        company:
          type: string
          nullable: true
          example: Example GmbH
        position:
          type: string
          nullable: true
          example: CEO
        commercial_register_nr:
          type: string
          nullable: true
          description: <span class="text-ji-term">Firmenbuchnummer</span>
          example: FN 123456a
        vat_number:
          type: string
          nullable: true
          description: <span class="text-ji-term">UID</span>
          example: ATU 12345678
        locale:
          type: string
          minLength: 2
          maxLength: 2
          example: de
        source_id:
          $ref: '#/components/schemas/UpdateContactSourceId'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
    UpdateContactCouple:
      type: object
      additionalProperties: false
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - couple
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
          deprecated: true
          description: >-
            If the email already exists for this contact, it will be ignored.  

            If the email doesn't exist yet, it will be added to the existing
            emails.  


            To just add an email address, we recommend using the [Add Email
            Address Call](#tag/contact/operation/AddContactEmailAddress)
            instead.  

            To delete an email address, use the [Delete Email Address
            Call](#tag/contact/operation/DeleteContactEmailAddress).
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          type: integer
          format: int64
          example: 5756
        person1:
          type: object
          additionalProperties: false
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        person2:
          type: object
          additionalProperties: false
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        locale:
          type: string
          minLength: 2
          maxLength: 2
          example: de
        source_id:
          $ref: '#/components/schemas/UpdateContactSourceId'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
    UpdateContactFamily:
      type: object
      additionalProperties: false
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - family
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
          deprecated: true
          description: >-
            If the email already exists for this contact, it will be ignored.  

            If the email doesn't exist yet, it will be added to the existing
            emails.  


            To just add an email address, we recommend using the [Add Email
            Address Call](#tag/contact/operation/AddContactEmailAddress)
            instead.  

            To delete an email address, use the [Delete Email Address
            Call](#tag/contact/operation/DeleteContactEmailAddress).
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          type: integer
          format: int64
          example: 5756
        person1:
          type: object
          additionalProperties: false
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        person2:
          type: object
          additionalProperties: false
          properties:
            prefix:
              type: string
              nullable: true
              example: Dr.
            gender:
              type: string
              nullable: true
              enum:
                - male
                - female
              example: female
            first_name:
              type: string
              nullable: true
              example: Justin
            last_name:
              type: string
              nullable: true
              example: Immo
            suffix:
              type: string
              nullable: true
              example: MBA
            birthday:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '1985-04-12'
        locale:
          type: string
          minLength: 2
          maxLength: 2
          example: de
        source_id:
          $ref: '#/components/schemas/UpdateContactSourceId'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
    UpdateContactPerson:
      type: object
      additionalProperties: false
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - person
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
          deprecated: true
          description: >-
            If the email already exists for this contact, it will be ignored.  

            If the email doesn't exist yet, it will be added to the existing
            emails.  


            To just add an email address, we recommend using the [Add Email
            Address Call](#tag/contact/operation/AddContactEmailAddress)
            instead.  

            To delete an email address, use the [Delete Email Address
            Call](#tag/contact/operation/DeleteContactEmailAddress).
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_private:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        address:
          type: object
          additionalProperties: false
          properties:
            street:
              type: string
              nullable: true
              example: Mariahilferstraße 8/11
            zip:
              type: string
              nullable: true
              example: '1070'
            city:
              type: string
              nullable: true
              example: Wien
            country:
              type: string
              nullable: true
              example: AT
              description: ISO 3166-1 alpha-2
              minLength: 2
              maxLength: 2
        economic_relationship:
          $ref: '#/components/schemas/ContactEconomicRelationship'
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          type: integer
          format: int64
          example: 5756
        prefix:
          type: string
          nullable: true
          example: Dr.
        gender:
          type: string
          nullable: true
          enum:
            - male
            - female
          example: female
        first_name:
          type: string
          nullable: true
          example: Justin
        last_name:
          type: string
          nullable: true
          example: Immo
        suffix:
          type: string
          nullable: true
          example: MBA
        birthday:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '1985-04-12'
        company:
          type: string
          nullable: true
          example: Example GmbH
        position:
          type: string
          nullable: true
          example: CEO
        locale:
          type: string
          minLength: 2
          maxLength: 2
          example: de
        source_id:
          $ref: '#/components/schemas/UpdateContactSourceId'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
    UpdateContactSourceId:
      type: integer
      nullable: true
      format: int32
      example: 5756
      description: >-

        The numerical representation of the source the contact was acquired
        from 

        (ie <span class="text-ji-term">Social Media</span>, <span
        class="text-ji-term">Printanzeige</span>, 

        <span class="text-ji-term">Empfehlung</span>, <span
        class="text-ji-term">Laufkunde</span>, etc...). 

        Please [contact us](mailto:support@justimmo.at) to inquire what
        `source_id` to use for your specific use case.
    UpdateMeetingAppointment:
      type: object
      description: Appointment for a meeting
      properties:
        from:
          type: string
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:30:00+00:00'
        to:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:37:00+00:00'
        agent_id:
          type: integer
          format: int64
          example: 979443
          description: The agent this appointment should be assigned to.
        contact_id:
          description: >-
            Changing the contact is not allowed if it has previously been set
            already
          type: integer
          format: int64
          example: 579696
        realty_id:
          type: integer
          format: int64
          example: 4869
        invite:
          $ref: '#/components/schemas/WriteAppointmentInvite'
        comment:
          type: string
          nullable: true
        exclude_from_report:
          type: boolean
          default: false
    UpdateNotaryAppointment:
      type: object
      description: Appointment with a notary
      properties:
        from:
          type: string
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:30:00+00:00'
        to:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:37:00+00:00'
        agent_id:
          type: integer
          format: int64
          example: 979443
          description: The agent this appointment should be assigned to.
        contact_id:
          description: >-
            Changing the contact is not allowed if it has previously been set
            already
          type: integer
          format: int64
          example: 579696
        realty_id:
          type: integer
          format: int64
          example: 4869
        invite:
          $ref: '#/components/schemas/WriteAppointmentInvite'
        comment:
          type: string
          nullable: true
        exclude_from_report:
          type: boolean
          default: false
    UpdateRealty:
      type: object
      properties:
        catalogue_number_plain:
          type: integer
          format: int64
          example: 123
          description: >-
            Depending on tenant settings, this value might be auto-generated and
            thus the property may either be <span
            class="text-required">required</span> or ignored.


            Must be a unique, unused value
        address:
          $ref: '#/components/schemas/UpdateRealtyAddress'
        land_registry_number:
          deprecated: true
          type: string
          example: '600'
          description: >-
            <span class="text-ji-term">Einlagezahl</span> (EZ)


            Country must be Austria.


            Deprecated: Use Create/Update RealtyLandRegisterEntry endpoints
            instead or use `land_register_entry` when creating a new realty.


            <span class="text-POST">POST</span> Creates a new LandRegisterEntry
            with the values provided in land_registry_number,
            cadastral_municipality and plot_numbers.

            If neither of those values are provided, the values are determined
            automatically based on the realty address.  


            <span class="text-PATCH">PATCH</span> Updates the
            land_register_entry_number of the first LandRegisterEntry or creates
            a new LandRegisterEntry if no entry exists yet.
        cadastral_municipality:
          deprecated: true
          type: string
          example: '01010'
          description: >-
            <span class="text-ji-term">Katastralgemeinde Nummer</span> (KG-NR)


            Country must be Austria.


            Deprecated: Use Create/Update RealtyLandRegisterEntry endpoints
            instead or use `land_register_entry` when creating a new realty.


            <span class="text-POST">POST</span> Creates a new LandRegisterEntry
            with the values provided in land_registry_number,
            cadastral_municipality and plot_numbers.

            If neither of those values are provided, the values are determined
            automatically based on the realty address.  


            <span class="text-PATCH">PATCH</span> Updates the
            cadastral_municipality_id of the first LandRegisterEntry or creates
            a new LandRegisterEntry if no entry exists yet.
        plot_number:
          deprecated: true
          type: string
          example: 1234/1, 1234/2
          description: >-
            <span class="text-ji-term">Grundstücksnummern</span> (GST-NR)


            Country must be Austria.


            Deprecated: Use Create/Update RealtyLandRegisterEntry endpoints
            instead or use `land_register_entry` when creating a new realty.


            <span class="text-POST">POST</span> Creates a new LandRegisterEntry
            with the values provided in land_registry_number,
            cadastral_municipality and plot_numbers.

            If neither of those values are provided, the values are determined
            automatically based on the realty address.  


            <span class="text-PATCH">PATCH</span> Overwrites all plot_numbers of
            the first LandRegisterEntry or creates a new LandRegisterEntry if no
            entry exists yet.

            The provided value is stored as a single plot number.
        system_type:
          type: string
          enum:
            - realty
            - residential_project
            - residential_subunit
            - commercial_project
            - commercial_area
          description: >-
            <span class="text-ji-term">Objekttyp</span>


            see [Lookup Tables:
            RealtySystemType](#tag/lookup_realty_system_type)


            Currently, only <span class="text-enumvalue">"realty"</span> is
            supported.
        parent_id:
          type: integer
          format: int64
          example: 5755
          description: >-
            The realty Id of the parent residential or commercial project


            Currently unused because `system_type` <span
            class="text-enumvalue">"realty"</span> doesn't have a parent
        type_id:
          type: integer
          description: |-
            <span class="text-ji-term">Objektart</span> Id

            see [Lookup Tables: RealtyType](#tag/lookup_realty_type)
          example: 8
        subtype_id:
          type: integer
          description: |-
            <span class="text-ji-term">Subobjektart</span> Id

            see [Lookup Tables: RealtySubType](#tag/lookup_realty_sub_type)
          example: 80
        occupancy:
          type: object
          required:
            - residential
            - commercial
            - investment
          properties:
            residential:
              type: boolean
            commercial:
              type: boolean
            investment:
              type: boolean
          description: |-
            <span class="text-ji-term">Nutzungsart</span>

            At least one of these must be `true`
        marketing_type:
          $ref: '#/components/schemas/RealtyMarketingType'
        architecture:
          $ref: '#/components/schemas/RealtyArchitecture'
        year_of_construction:
          type: integer
          nullable: true
        infrastructure_provision:
          $ref: '#/components/schemas/RealtyInfrastructureProvision'
        year_of_last_renovation:
          type: integer
          nullable: true
        year_of_last_comprehensive_renovation:
          type: integer
          nullable: true
        areas:
          type: object
          additionalProperties: false
          description: 'see [Lookup Tables: RealtyAreas](#tag/lookup_realty_areas)'
          properties:
            site_area:
              $ref: '#/components/schemas/RealtyArea'
            living_area:
              $ref: '#/components/schemas/RealtyArea'
            floor_area:
              $ref: '#/components/schemas/RealtyArea'
            developable_area:
              $ref: '#/components/schemas/RealtyArea'
            office_area:
              $ref: '#/components/schemas/RealtyArea'
            sales_area:
              $ref: '#/components/schemas/RealtyArea'
            storage_area:
              $ref: '#/components/schemas/RealtyArea'
            available_area:
              $ref: '#/components/schemas/RealtyArea'
            short_term_area:
              $ref: '#/components/schemas/RealtyArea'
            total_area:
              $ref: '#/components/schemas/RealtyArea'
            weighted_area:
              $ref: '#/components/schemas/RealtyArea'
            undeveloped_attic:
              type: boolean
              nullable: true
            undeveloped_attic_area:
              $ref: '#/components/schemas/RealtyArea'
            garden_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            basement_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            balcony_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            terrace_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            covered_balcony_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            garage_area:
              $ref: '#/components/schemas/RealtyCountableArea'
            parking_space_area:
              $ref: '#/components/schemas/RealtyCountableArea'
        floors:
          $ref: '#/components/schemas/RealtyFloors'
        rooms:
          $ref: '#/components/schemas/WriteRooms'
        room_layout:
          $ref: '#/components/schemas/RoomLayout'
        currency:
          type: string
          enum:
            - EUR
            - USD
            - CHF
            - HUF
            - PLN
            - RON
            - AED
          minLength: 3
          maxLength: 3
          description: >-
            ISO 4217 Code


            Currently, only <span class="text-enumvalue">"EUR"</span> is
            supported.
          example: EUR
        prices:
          type: object
          additionalProperties: false
          description: >-
            The currency for these prices is determined by the realty's
            `currency` property.


            see [Lookup Tables: RealtyPrices](#tag/lookup_realty_prices)
          properties:
            publish_prices:
              type: boolean
              description: Whether the prices are visible on public platforms
            purchase_price:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            rent:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            furniture_hire:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            parking:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            garage:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            operating:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            heating:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            hot_water:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            cooling:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            maintenance_funds:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
            elevator:
              $ref: '#/components/schemas/NullableInputRealtyPriceOptional'
            others:
              $ref: '#/components/schemas/NullableInputRealtyPrice'
        earnings_per_year_net:
          type: number
          format: float
          nullable: true
          description: |-
            <span class="text-ji-term">Nettoertrag pro Jahr</span>

            The currency is determined by the realty's `currency` property.
          example: 1234.56
        obtainable_from:
          type: object
          additionalProperties: false
          description: >-
            <span class="text-POST">POST</span> Either `date` or `text` must be
            provided and not `null`.  

            <span class="text-PATCH">PATCH</span> The properties `date` and
            `text` can both be `null` to clear the field.  

            If both are provided, only `date` will be set.
          properties:
            date:
              type: string
              nullable: true
              format: date
              description: RFC-3339
              example: '2021-06-05'
            text:
              type: string
              nullable: true
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        agent_id:
          type: integer
          format: int64
          example: 5756
        texts:
          $ref: '#/components/schemas/RealtyTexts'
        energy_performance_certification:
          $ref: '#/components/schemas/InputEnergyPerformanceCertification'
        feature_ids:
          type: array
          description: <span class="text-ji-term">Ausstattungsmerkmale</span>
          items:
            type: integer
            format: int32
          example:
            - 1
            - 2
            - 1234
            - 11
            - 12
            - 5678
        accessible:
          type: boolean
          default: false
          description: <span class="text-ji-term">barrierefrei</span>
        vendor_economic_relationship:
          $ref: '#/components/schemas/VendorEconomicRelationship'
        rent_details:
          $ref: '#/components/schemas/WriteRealtyRentDetails'
        commission:
          $ref: '#/components/schemas/WriteCommission'
        dual_brokerage:
          $ref: '#/components/schemas/RealtyDualBrokerage'
        condition_assessment:
          $ref: '#/components/schemas/RealtyConditionAssessment'
        realty_condition_id:
          type: integer
          nullable: true
          description: 'see [Lookup Tables: RealtyCondition](#tag/lookup_realty_condition)'
        building_condition_id:
          type: integer
          nullable: true
          description: >-
            see [Lookup Tables:
            RealtyBuildingCondition](#tag/lookup_realty_building_condition)
        agency_agreement:
          $ref: '#/components/schemas/RealtyAgencyAgreement'
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
        automatic_hits:
          type: boolean
        ownership_type_id:
          $ref: '#/components/schemas/WriteOwnershipTypeId'
        furnishing_id:
          $ref: '#/components/schemas/WriteFurnishingId'
        noise_level_id:
          $ref: '#/components/schemas/WriteNoiseLevelId'
        location_assessment:
          $ref: '#/components/schemas/WriteLocationAssessment'
        business_domain:
          type: string
          description: |-
            This field can only be set when it is configured.

            Only the configured values can be set.
        referrer_id:
          type: integer
          format: int64
          nullable: true
          description: The ID of the contact who referred this realty to the tenant.
    UpdateRealtyAddress:
      type: object
      additionalProperties: false
      properties:
        street:
          type: string
          nullable: true
          example: Mariahilferstraße
        number:
          type: string
          nullable: true
          example: '127'
        entrance:
          type: string
          nullable: true
          example: '5'
        door:
          type: string
          nullable: true
          example: 3a
        zip:
          type: string
          minLength: 1
          example: '1070'
        city:
          type: string
          minLength: 1
          example: Wien
        country:
          type: string
          minLength: 2
          maxLength: 2
          description: ISO 3166-1 alpha-2
          example: AT
        floor_idx:
          $ref: '#/components/schemas/RealtyFloorIdx'
        floor_description:
          type: string
          nullable: true
          example: 3. Stock
    UpdateRealtyFileMetadata:
      type: object
      properties:
        title:
          type: string
          description: >-
            As the title is part of the file itself, not the attachment,
            changing it is only allowed on files that are attached to this
            realty only.  

            Attempting to update a file that's attached to multiple realties
            will result in response code `422`.
        description:
          type: string
          description: >-
            As the description is part of the file itself, not the attachment,
            changing it is only allowed on files that are attached to this
            realty only.  

            Attempting to update a file that's attached to multiple realties
            will result in response code `422`.
        sort_order:
          type: integer
          description: >-
            If provided, reorders the attachments of the same realty and group
            to fit this new file in a specific position.


            This can be a positive or negative value:

            - **Positive** value counts from the start, starting with 0 for the
            first position, 1 for the second, etc

            - **Negative** value counts from the end, with -1 as the last
            position, -2 the second to last, etc
    UpdateSearchProfile:
      type: object
      additionalProperties: false
      properties:
        contact_id:
          type: integer
          format: int64
          example: 5756
        agent_id:
          type: integer
          format: int64
          example: 5756
        referrer_id:
          type: integer
          format: int64
          example: 5756
          description: The `id` of a contact who has referred this profile.
        expires_in:
          type: integer
          nullable: true
          description: >-
            Months until expiration. 


            This does not extend the expiration date (`expires_at`) itself. 

            It just determines how much to extend by the next time it is
            extended.
          enum:
            - 3
            - 6
            - 12
            - 24
            - 36
        extend_expiration:
          type: boolean
          deprecated: true
          description: |-
            <div class="container-info">
                This property has been deprecated in favour of the [Extend Search Profile Call](#tag/searchprofile/operation/ExtendSearchProfile). 
                However, if the `X-Justimmo-Actor`-Header is set to `contact` in this call, the search profile will be automatically extended and no extra call to extend it is necessary.
            </div>
        notes:
          type: string
        criteria:
          $ref: '#/components/schemas/UpdateSearchProfileCriteria'
        automatic_hits:
          type: boolean
    UpdateSearchProfileCriteria:
      type: object
      description: >-
        Criteria for potential matches  

        Availability of certain properties depends on the selected `type`s.
        <span class="text-required">required</span> properties are always
        present.
      properties:
        type_ids:
          type: array
          minItems: 1
          description: |-
            <span class="text-ji-term">Objektart</span> Id

            see [Lookup Tables: RealtyType](#tag/lookup_realty_type)
          items:
            type: integer
          example:
            - 8
            - 9
        subtype_ids:
          type: array
          description: |-
            <span class="text-ji-term">Subobjektart</span> Id

            see [Lookup Tables: RealtySubType](#tag/lookup_realty_sub_type)
          items:
            type: integer
          example:
            - 5
            - 7
        occupancy:
          type: string
          nullable: true
          enum:
            - residential
            - commercial
            - investment
          description: >-
            <span class="text-ji-term">Nutzungsart</span>


            <span class="text-PATCH">PATCH</span> Can be `null` to clear the
            field.
        marketing_type:
          type: string
          description: >-
            <span class="text-ji-term">Vermarktungsart</span>


            see [Lookup Tables:
            RealtyMarketingType](#tag/lookup_realty_marketing_type)
          enum:
            - buy
            - rent
        rent_duration:
          type: object
          required:
            - from
            - unlimited
          properties:
            from:
              type: integer
              nullable: true
              description: in months
            unlimited:
              type: boolean
              description: <span class="text-ji-term">unbefristet</span>
        price:
          $ref: '#/components/schemas/IntFromTo'
        price_per_area:
          type: object
          required:
            - from
            - to
          properties:
            from:
              type: number
              format: float
              nullable: true
              example: 1234.56
              description: price per m²
            to:
              type: number
              format: float
              nullable: true
              example: 1234.56
              description: price per m²
        rooms:
          $ref: '#/components/schemas/IntFromTo'
        yield:
          type: object
          description: <span class="text-ji-term">Nettorendite</span>
          required:
            - from
          properties:
            from:
              type: number
              format: float
              nullable: true
              description: in %
        site_area:
          $ref: '#/components/schemas/AreaFromTo'
        living_area:
          $ref: '#/components/schemas/AreaFromTo'
        floor_area:
          $ref: '#/components/schemas/AreaFromTo'
        office_area:
          $ref: '#/components/schemas/AreaFromTo'
        sales_area:
          $ref: '#/components/schemas/AreaFromTo'
        storage_area:
          $ref: '#/components/schemas/AreaFromTo'
        commission_free:
          type: boolean
        location:
          oneOf:
            - $ref: '#/components/schemas/CreateSearchProfileLocationAddressAustria'
            - $ref: '#/components/schemas/SearchProfileLocationAddressOther'
            - $ref: '#/components/schemas/SearchProfileLocationDistance'
        architecture:
          type: string
          nullable: true
          enum:
            - new
            - old
          description: <span class="text-ji-term">Bauart (Neubau / Altbau)</span>
        year_of_construction:
          $ref: '#/components/schemas/IntFromTo'
        condition_ids:
          type: array
          description: |-
            <span class="text-ji-term">Zustand</span>            

            see [Lookup Tables: RealtyCondition](#tag/lookup_realty_condition)
          items:
            type: integer
            format: int32
          example:
            - 1
            - 2
            - 1234
            - 11
            - 12
            - 5678
        floor:
          type: string
          nullable: true
          enum:
            - ground
            - no_ground
            - lower
            - middle
            - upper
            - no_roof
            - roof
        energy_performance_class:
          type: string
          description: <span class="text-ji-term">Energieausweis (ab Klasse)</span>
          nullable: true
          enum:
            - A++
            - A+
            - A
            - B
            - C
            - D
            - E
            - F
            - G
          example: C
        category_ids:
          type: array
          items:
            type: integer
            format: int64
            example: 123
        furnishing_ids:
          type: array
          description: |-
            <span class="text-ji-term">Möblierung</span>

            see [Lookup Tables: RealtyFurnishing](#tag/lookup_realty_furnishing)
          items:
            type: integer
            format: int32
          example:
            - 1
            - 2
            - 17
        covered_balcony:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        balcony:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        terrace:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        garden:
          $ref: '#/components/schemas/ToggleableAreaFrom'
        accessible:
          type: boolean
          description: <span class="text-ji-term">barrierefrei</span>
        feature_ids:
          type: array
          description: <span class="text-ji-term">Ausstattungsmerkmale</span>
          items:
            type: integer
            format: int32
          example:
            - 1
            - 2
            - 1234
            - 11
            - 12
            - 5678
    UpdateViewingAppointment:
      type: object
      description: Viewing Appointment
      properties:
        from:
          type: string
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:30:00+00:00'
        to:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:37:00+00:00'
        agent_id:
          type: integer
          format: int64
          example: 979443
          description: The agent this appointment should be assigned to.
        contact_id:
          description: >-
            Changing the contact is not allowed if it has previously been set
            already
          type: integer
          format: int64
          example: 579696
        realty_id:
          type: integer
          format: int64
          example: 4869
        invite:
          $ref: '#/components/schemas/WriteAppointmentInvite'
        comment:
          type: string
          nullable: true
        exclude_from_report:
          type: boolean
          default: false
    User:
      type: object
      additionalProperties: false
      required:
        - id
        - tenant
      properties:
        id:
          type: integer
          format: int64
          example: 5756
        username:
          type: string
          example: jimmo
        prefix:
          type: string
          nullable: true
          example: Dr.
        first_name:
          type: string
          example: Justine
        last_name:
          type: string
          example: Immo
        gender:
          type: string
          nullable: true
          enum:
            - male
            - female
          example: female
        date_of_birth:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '1971-03-27'
        suffix:
          type: string
          nullable: true
          example: MBA
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
        phone:
          type: string
          deprecated: true
          nullable: true
          example: 0123 4567890
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        phone_fax:
          type: string
          nullable: true
          example: 0123 4567890
        profile_picture:
          $ref: '#/components/schemas/PublicFile'
        position:
          type: string
          nullable: true
        immobiliencard_id:
          type: string
          nullable: true
          description: <span class="text-ji-term">Immobiliencard ID</span>
          example: AT01234567
        immobiliencard_uid:
          type: string
          nullable: true
          description: <span class="text-ji-term">Immobiliencard Firmen-ID</span>
        foreign_id:
          type: integer
          format: int32
          nullable: true
          description: |-
            <span class="text-ji-term">Mitarbeiter-ID</span>

            Often used for imported IDs from external systems
          example: 1234
        role:
          $ref: '#/components/schemas/UserRole'
        permissions:
          $ref: '#/components/schemas/Permissions'
        tenant:
          $ref: '#/components/schemas/Tenant'
        groups:
          type: array
          items:
            $ref: '#/components/schemas/UserGroupListItem'
        location:
          $ref: '#/components/schemas/UserLocation'
    UserGroupList:
      type: object
      additionalProperties: false
      required:
        - pagination
        - items
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        items:
          type: array
          items:
            $ref: '#/components/schemas/UserGroupListItem'
    UserGroupListItem:
      type: object
      description: ''
      required:
        - id
        - name
      properties:
        id:
          type: integer
          format: int64
          example: 5756
        name:
          type: string
          example: Außendienst
    UserList:
      type: object
      additionalProperties: false
      required:
        - pagination
        - items
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        items:
          type: array
          items:
            $ref: '#/components/schemas/UserListItem'
    UserListItem:
      type: object
      description: ''
      additionalProperties: false
      required:
        - id
        - tenant_id
      properties:
        id:
          type: integer
          format: int64
          example: 5756
        username:
          type: string
          example: jimmo
        prefix:
          type: string
          nullable: true
          example: Dr.
        first_name:
          type: string
          example: Justine
        last_name:
          type: string
          example: Immo
        gender:
          type: string
          nullable: true
          enum:
            - male
            - female
          example: female
        date_of_birth:
          type: string
          nullable: true
          format: date
          description: RFC-3339
          example: '1971-03-27'
        suffix:
          type: string
          nullable: true
          example: MBA
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
        phone:
          type: string
          deprecated: true
          nullable: true
          example: 0123 4567890
        phone_mobile:
          type: string
          nullable: true
          example: 0123 4567890
        phone_business:
          type: string
          nullable: true
          example: 0123 4567890
        phone_fax:
          type: string
          nullable: true
          example: 0123 4567890
        profile_picture:
          $ref: '#/components/schemas/PublicFile'
        position:
          type: string
          nullable: true
        immobiliencard_id:
          type: string
          nullable: true
          description: <span class="text-ji-term">Immobiliencard ID</span>
          example: AT01234567
        immobiliencard_uid:
          type: string
          nullable: true
          description: <span class="text-ji-term">Immobiliencard Firmen-ID</span>
        foreign_id:
          type: integer
          format: int32
          nullable: true
          description: |-
            <span class="text-ji-term">Mitarbeiter-ID</span>

            Often used for imported IDs from external systems
          example: 1234
        role:
          $ref: '#/components/schemas/UserRole'
        tenant_id:
          type: integer
          format: int64
          example: 1234
        groups:
          type: array
          items:
            $ref: '#/components/schemas/UserGroupListItem'
        location:
          $ref: '#/components/schemas/UserLocation'
    UserLocation:
      type: object
      description: ''
      additionalProperties: false
      nullable: true
      required:
        - id
        - name
        - address
      properties:
        id:
          type: integer
          format: int64
          example: 5756
        name:
          type: string
          example: Justimmo Wien
        address:
          $ref: '#/components/schemas/Address'
        phone:
          type: string
          nullable: true
          example: +43 1 2345678
        email:
          type: string
          nullable: true
          format: email
          example: support@justimmo.at
        fax:
          type: string
          nullable: true
          example: +43 1 2345679
        website:
          type: string
          nullable: true
          example: https://www.justimmo.at
    UserRole:
      type: string
      enum:
        - employee
        - admin
    VendorEconomicRelationship:
      type: string
      description: >-
        <span class="text-ji-term">Naheverhältnis</span>


        see [Lookup Tables:
        VendorEconomicRelationship](#tag/lookup_vendor_economic_relationship)
      nullable: true
      enum:
        - none
        - family_or_economic
        - economic_interconnection
    ViewingAppointment:
      type: object
      required:
        - id
        - type
        - from
        - to
        - state
        - agent
        - contact
        - realty
        - invite
        - comment
        - exclude_from_report
      properties:
        id:
          type: integer
          format: int64
          example: 5629
        type:
          type: string
          enum:
            - viewing
        from:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:30:00+00:00'
        to:
          type: string
          nullable: true
          format: date-time
          description: RFC-3339
          example: '2024-11-06T13:37:00+00:00'
        state:
          type: object
          required:
            - state
          properties:
            state:
              type: string
              enum:
                - open
                - done
              example: done
            changed_at:
              type: string
              nullable: true
              format: date-time
              description: RFC-3339
              example: '2024-11-06T13:37:00+00:00'
        agent:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 5674
        contact:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 4356
        realty:
          type: object
          required:
            - id
          properties:
            id:
              type: integer
              format: int64
              example: 3245
        invite:
          $ref: '#/components/schemas/AppointmentInvite'
        comment:
          type: string
          nullable: true
        exclude_from_report:
          type: boolean
          default: false
    WebhookAcquisitionMarketing:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - acquisition:marketing:start
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - acquisition_realty_id
            - marketing_realty_id
            - tenant_id
          properties:
            acquisition_realty_id:
              type: integer
              format: int64
              example: 1234
              description: The acquisition realty id
            marketing_realty_id:
              type: integer
              format: int64
              example: 1235
              description: The marketing realty id
            tenant_id:
              type: integer
              format: int64
              example: 939482
              description: The tenant id of the realty
    WebhookAcquisitionRealty:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - acquisition:realty:create
            - acquisition:realty:update
            - acquisition:realty:delete
            - acquisition:realty:vendor:update
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - acquisition_realty_id
            - tenant_id
          properties:
            acquisition_realty_id:
              type: integer
              format: int64
              example: 1234
              description: The acquisition realty id
            tenant_id:
              type: integer
              format: int64
              example: 939482
              description: The tenant id of the realty
    WebhookAcquisitionState:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - acquisition:successful
            - acquisition:unsuccessful
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - acquisition_realty_id
            - tenant_id
          properties:
            acquisition_realty_id:
              type: integer
              format: int64
              example: 1234
              description: The acquisition realty id
            tenant_id:
              type: integer
              format: int64
              example: 939482
              description: The tenant id of the realty
    WebhookActivity:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - activity:create
            - activity:update
            - activity:delete
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - activity_id
            - activity_type_id
            - realty_id
            - contact_id
            - tenant_id
          properties:
            activity_id:
              type: integer
              format: int64
              example: 1234
            activity_type_id:
              type: integer
              format: int64
              example: 1234
            contact_id:
              type: integer
              format: int64
              nullable: true
              example: 1234
            realty_id:
              type: integer
              format: int64
              nullable: true
              example: 1234
            tenant_id:
              type: integer
              format: int64
              example: 939482
    WebhookContact:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - contact:create
            - contact:update
            - contact:delete
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - contact_id
            - tenant_id
          properties:
            contact_id:
              type: integer
              format: int64
              example: 1234
              description: The contact id
            tenant_id:
              type: integer
              format: int64
              example: 939482
              description: The tenant id of the contact
    WebhookHit:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - hit:create:match
            - hit:delete:unmatch
            - hit:delete:offer
            - hit:delete:inapt
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - realty_id
            - contact_id
            - tenant_id
          properties:
            realty_id:
              type: integer
              format: int64
              example: 1234
              description: The realty id
            contact_id:
              type: integer
              format: int64
              example: 939482
              description: The contact id
            tenant_id:
              type: integer
              format: int64
              example: 939482
              description: The tenant id of the contact
    WebhookImport:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - import:realty:success
            - import:realty:fail
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - feed_id
            - tenant_id
            - file
          properties:
            feed_id:
              type: integer
              format: int64
              example: 1234
              description: The realty id
            tenant_id:
              type: integer
              format: int64
              example: 939482
              description: The tenant id of the realty
            file:
              type: string
              example: upload-test-3.xml
              description: The name of the uploaded file which has been imported
            succeeded:
              type: integer
              format: int64
              example: 15
              description: The number of realties successfully imported
            failed:
              type: integer
              format: int64
              example: 2
              description: The number of realteis where the import failed
    WebhookInquiry:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - inquiry:create
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - inquiry_id
            - realty_id
            - contact_id
            - tenant_id
          properties:
            inquiry_id:
              type: integer
              format: int64
              example: 1234
            contact_id:
              type: integer
              format: int64
              example: 1234
            realty_id:
              type: integer
              format: int64
              nullable: true
              example: 1234
            tenant_id:
              type: integer
              format: int64
              example: 939482
    WebhookList:
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            type: object
            required:
              - id
              - client_id
              - tenant_id
              - endpoint
              - created_by_client
              - events
            properties:
              id:
                type: string
                format: uuid
                example: 0194db4c-601c-7ef5-ba4a-d7164219a769
              client_id:
                type: string
                example: example_client
              tenant_id:
                type: integer
                format: int64
                example: 5
              endpoint:
                type: string
                format: url
                example: https://example.com/webhook/5c55093497f6
              created_by_client:
                type: boolean
                deprecated: true
              source:
                type: object
                properties:
                  id:
                    type: string
                    example: business_api
                  label:
                    type: string
                    example: Business API
              events:
                type: array
                example:
                  - contact:create
                  - contact:update
                  - contact:delete
                items:
                  type: string
    WebhookNewsletter:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - newsletter:subscribe
            - newsletter:unsubscribe
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - contact_id
            - tenant_id
            - category_id
            - email_address
          properties:
            contact_id:
              type: integer
              format: int64
              example: 1234
              description: The contact id
            tenant_id:
              type: integer
              format: int64
              example: 939482
              description: The tenant id of the contact
            category_id:
              type: integer
              format: int64
              example: 1234
              description: |-
                The newsletter category id
                Can be used to distinguish between different newsletters
            email_address:
              type: string
              nullable: true
              format: email
              example: support@justimmo.at
              description: The primary email address at the time of the event
    WebhookSearchProfile:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - search-profile:create
            - search-profile:update
            - search-profile:delete
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - search_profile_id
            - tenant_id
          properties:
            search_profile_id:
              type: integer
              format: int64
              example: 1234
              description: The search profile id id
            tenant_id:
              type: integer
              format: int64
              example: 939482
              description: The tenant id of the contact
    WebhookRealty:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - realty:create
            - realty:update
            - realty:delete
            - realty:state:update
            - realty:vendor:update
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - realty_id
            - tenant_id
          properties:
            realty_id:
              type: integer
              format: int64
              example: 1234
              description: The realty id
            tenant_id:
              type: integer
              format: int64
              example: 939482
              description: The tenant id of the realty
    WebhookRealtyDeal:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - realty:deal:created
            - realty:deal:updated
            - realty:deal:sent
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - realty_id
            - realty_deal_id
            - tenant_id
          properties:
            realty_id:
              type: integer
              format: int64
              example: 1234
              description: The realty id
            realty_deal_id:
              type: integer
              format: int64
              example: 56547
              description: The id of the realty deal
            tenant_id:
              type: integer
              format: int64
              example: 939482
              description: The tenant id of the realty
    WebhookRealtyExport:
      type: object
      required:
        - event
        - time
        - data
      properties:
        event:
          type: string
          enum:
            - realty:export:start
            - realty:export:stop
          description: The name of the event
        time:
          type: string
          format: Y-m-dTH:i:s.uO
          example: 2022-08-12T14:05:30.190758+0200
          description: The time the event which triggered the webhook originally happened
        data:
          type: object
          required:
            - realty_id
            - tenant_id
            - feed_id
            - platform_id
          properties:
            realty_id:
              type: integer
              format: int64
              example: 1234
              description: The realty id
            tenant_id:
              type: integer
              format: int64
              example: 939482
              description: The tenant id of the realty
            feed_id:
              type: integer
              format: int64
              example: 939482
              description: The feed id to which the realty was exported to
            platform_id:
              type: integer
              nullable: true
              format: int64
              example: 939482
              description: The platform id to which the realty was exported to
    WriteAppointmentInvite:
      type: object
      nullable: true
      description: >-
        The contact as specified by `contact_id` will receive an invite via
        email.  

        They will also receive a reminder via SMS 24 hours before the
        appointment takes place, 

        if a valid phone number is on record and it's been at least 8 hours
        since the invite.


        If this property is `null` or `undefined`, there will not be an invite /
        reminder. Otherwise, `contact_id` is required.
      required:
        - attach_address
      properties:
        attach_address:
          type: string
          enum:
            - realty
            - office
            - custom
            - none
          example: custom
          description: >-
            <span class="text-enumvalue">"realty"</span>: Send an invite and
            attach the realty address (requires `realty_id` to be set)  

            <span class="text-enumvalue">"office"</span>: Send an invite and
            attach the office address  

            <span class="text-enumvalue">"custom"</span>: Send an invite and
            attach a custom address (requires `custom_address` to be set)  

            <span class="text-enumvalue">"none"</span>: Send an invite, but
            don't attach any address
        custom_address:
          type: string
          nullable: true
          description: >-
            If `send_invite` is <span class="text-enumvalue">"custom"</span>,
            this is the custom address to send.  

            <span class="text-required">required</span> if `attach_address` is
            set to <span class="text-enumvalue">"custom"</span>.
          example: Wayne Manor, 224 Park Drive, Gotham City
    WriteCommission:
      type: object
      additionalProperties: false
      properties:
        prospect:
          type: object
          additionalProperties: false
          properties:
            principle_of_first_instruction:
              type: boolean
              nullable: true
              description: >-
                "Erstauftraggeberprinzip" (§17a MaklerG)


                Determines if the "Principle of First Instruction" applies to
                this realty.


                <span class="text-POST">POST</span> If not explicitly set to
                `true` or `false`, the value will be assumed based on several
                other properties.  


                <span class="text-PATCH">PATCH</span> If set to `true`, other
                prospect commission properties will be cleared. If set to
                `false`, previously cleared values might be restored.
            type:
              type: string
              enum:
                - percentage_text
                - percentage_value
                - monthly_rent_text
                - monthly_rent_value
                - value
                - free
              example: percentage_value
              description: >-
                see [Lookup Tables:
                RealtyCommissionProspectType](#tag/lookup_realty_commission_prospect_type)
            value:
              type: number
              format: float
              nullable: true
              default: 0
              example: 3
              description: Usage dependant on chosen `type`
            vat:
              type: number
              format: float
              nullable: true
              default: 20
              example: 20
              description: VAT in percent
            auto_text:
              type: boolean
              nullable: true
              description: >-
                Automatically generate the `text_value` based on `value`, `type`
                and `vat`.

                Even if `auto_text` is `false`, those 3 values should be set to
                aid in calculations.
              example: false
            text_value:
              type: string
              nullable: true
              description: If `auto_text` is `false`, this is the text to display
              example: 3% des Kaufpreises zzgl. 20% USt.
        vendor:
          type: object
          additionalProperties: false
          properties:
            type:
              type: string
              enum:
                - percentage_value
                - monthly_rent_value
                - value
              example: percentage_value
              description: >-
                see [Lookup Tables:
                RealtyCommissionVendorType](#tag/lookup_realty_commission_prospect_type)
            value:
              type: number
              format: float
              nullable: true
              default: 0
              example: 3
              description: Usage dependant on chosen `type`
            vat:
              type: number
              format: float
              nullable: true
              default: 20
              example: 20
              description: VAT in percent
            auto_text:
              type: boolean
              nullable: true
              description: >-
                Automatically generate the `text_value` based on `value`, `type`
                and `vat`.

                Even if `auto_text` is `false`, those 3 values should be set to
                aid in calculations.
              example: true
    WriteCreatedAt:
      type: string
      format: date-time
      nullable: false
      description: |-
        RFC-3339

        If no `created_at` is provided, the current time will be assumed for it.
      example: '2020-05-01T12:13:25+00:00'
    WriteFurnishingId:
      type: integer
      nullable: true
      example: 2
      description: |-
        <span class="text-ji-term">Möblierung</span>

        see [Lookup Tables: RealtyFurnishing](#tag/lookup_realty_furnishing)
    WriteLocationAssessment:
      type: string
      nullable: true
      enum:
        - very good
        - good
        - medium
        - bad
      description: >-
        <span class="text-ji-term">Lagebewertung</span>


        see [Lookup Tables:
        RealtyLocationAssessment](#tag/lookup_realty_location_assessment)
    WriteNoiseLevelId:
      type: integer
      nullable: true
      example: 2
      description: |-
        <span class="text-ji-term">Lärmpegel</span>

        see [Lookup Tables: RealtyNoiseLevel](#tag/lookup_realty_noise_level)
    WriteOwnershipTypeId:
      type: integer
      nullable: true
      example: 2
      description: >-
        <span class="text-ji-term">Eigentumsform</span>


        see [Lookup Tables:
        RealtyOwnershipType](#tag/lookup_realty_ownership_type)
    WriteRealtyExports:
      type: object
      properties:
        active:
          type: boolean
          description: <span class="text-ji-term">Exporte aktivieren</span>
        exports:
          type: array
          items:
            type: object
            required:
              - id
              - enabled
            properties:
              id:
                type: integer
                example: 43634
                description: >-
                  `id` of the export. See [Lookup Tables: Realty Exports
                  Call](#tag/realty/operation/GetRealtyExports)
              enabled:
                type: boolean
                description: Whether this export should be enabled for this realty or not
    WriteRealtyRentDetails:
      type: object
      properties:
        costs:
          type: object
          nullable: true
          properties:
            buyout:
              type: number
              format: float
              nullable: true
              description: <span class="text-ji-term">Ablöse</span>
              example: 0
            security_deposit:
              type: object
              description: <span class="text-ji-term">Kaution</span>
              required:
                - value
                - type
                - auto_text
              properties:
                value:
                  type: number
                  format: float
                  example: 3
                type:
                  type: string
                  enum:
                    - monthly_rent_gross_text
                    - monthly_rent_gross_value
                    - monthly_rent_net_text
                    - monthly_rent_net_value
                    - value
                  example: monthly_rent_gross_text
                  description: >-
                    |
                    Value                                                       
                    | Name                      |

                    |--------------------------------------------------------------|---------------------------|

                    | <span
                    class="text-enumvalue">monthly_rent_gross_text</span>  |
                    Bruttomonatsmieten (Text) |

                    | <span
                    class="text-enumvalue">monthly_rent_gross_value</span> |
                    Bruttomonatsmieten (Wert) |

                    | <span
                    class="text-enumvalue">monthly_rent_net_text</span>    |
                    Nettomonatsmieten (Text)  |

                    | <span
                    class="text-enumvalue">monthly_rent_net_value</span>   |
                    Nettomonatsmieten (Wert)  |

                    | <span
                    class="text-enumvalue">value</span>                    |
                    Wert                      |
                auto_text:
                  type: boolean
                  example: true
                  description: >-
                    Automatically generate the `text` based on `value` and
                    `type`.

                    Even if `auto_text` is `false`, those 3 values need to be
                    set to aid in calculations.
                text:
                  type: string
                  nullable: true
                  description: >-
                    <span class="text-required">required</span> if `auto_text`
                    is false.
                  example: 3 Bruttomonatsmieten
            financing_contribution:
              type: number
              format: float
              nullable: true
              description: <span class="text-ji-term">Finanzierungsbeitrag</span>
              example: 0
            explanation:
              type: string
              nullable: true
              description: <span class="text-ji-term">Erklärung Kosten</span>
            stamp_duty:
              type: object
              description: <span class="text-ji-term">Vergebührung</span>
              properties:
                auto_value:
                  type: boolean
                  default: true
                  description: >-
                    <span class="text-ji-term">Vergebührung automatisch
                    berechnen</span>  

                    automatische Berechnung ohne Gewähr
                value:
                  type: number
                  format: float
                  default: null
                  description: >-
                    <span class="text-required">required</span> if `auto_value`
                    is false.
                text:
                  type: string
                  nullable: true
                  description: <span class="text-ji-term">Vergebührung Text</span>
        purchase_option:
          type: boolean
          default: false
          nullable: true
          description: Whether there is an option to purchase the realty in the future.
    WriteRooms:
      type: object
      nullable: true
      properties:
        rooms:
          type: number
          format: integer
          nullable: true
          example: 4
        rooms_add_half:
          type: boolean
          default: false
        toilets:
          type: integer
          nullable: true
          example: 3
        bathrooms:
          type: integer
          nullable: true
          example: 2
        storerooms:
          type: integer
          nullable: true
          example: 1
    AcceptCommissionContractOfferBody:
      type: object
      required:
        - offer_id
        - contact_id
        - accepted_by_ip
      additionalProperties: false
      properties:
        offer_id:
          type: integer
          format: int64
          example: 6578612
        contact_id:
          type: integer
          format: int64
          example: 23478439
        accepted_by_ip:
          type: string
          description: IPv4 (123.123.123.123) or IPv6 (fe80::1ff:fe23:4567:890a)
          example: 123.123.123.123
    AcceptCommissionContractRealtyBody:
      type: object
      required:
        - realty_id
        - contact_id
        - accepted_by_ip
        - subrealties
      additionalProperties: false
      properties:
        realty_id:
          type: integer
          format: int64
          example: 11104565
        contact_id:
          type: integer
          format: int64
          example: 23478439
        accepted_by_ip:
          type: string
          description: IPv4 (123.123.123.123) or IPv6 (fe80::1ff:fe23:4567:890a)
          example: 123.123.123.123
        subrealties:
          type: array
          description: >-
            If the main realty is a residential project, the IDs of it's
            subrealties to include in the contract  

            Otherwise: empty array
          items:
            type: integer
            format: int64
        locale:
          type: string
          nullable: true
          description: Defaults to locale of the tenant
          minLength: 2
          maxLength: 2
          example: de
    AcceptSearchContractBody:
      type: object
      required:
        - search_profile_id
        - accepted_by_ip
      additionalProperties: false
      properties:
        search_profile_id:
          type: integer
          format: int64
          example: 1235312
        accepted_by_ip:
          type: string
          description: IPv4 (123.123.123.123) or IPv6 (fe80::1ff:fe23:4567:890a)
          example: 123.123.123.123
        locale:
          type: string
          nullable: true
          description: Defaults to locale of the tenant
          minLength: 2
          maxLength: 2
          example: de
    CreateInquiryContactIdBody:
      type: object
      required:
        - contact_id
      additionalProperties: false
      properties:
        contact_id:
          type: integer
          format: int64
          description: >-
            The id of a preexisting contact. If the contact is currently not
            active, they will be reactivated.
          example: 23478439
        realty_id:
          type: integer
          format: int64
          nullable: true
          example: 11104565
        message:
          type: string
          nullable: true
          example: Ich habe Interesse an dieser Wohnung.
        source_id:
          type: integer
          description: The id of the source where the contact heard about the realty offer.
          nullable: true
        feed_id:
          type: integer
          description: >-
            The id of the export feed where the contact heard about the realty
            offer.
          nullable: true
        platform_id:
          type: integer
          description: >-
            The id of the export feed template where the contact heard about the
            realty offer.


            If feed_id is set this value will be ignored.
          nullable: true
        agent_id:
          type: integer
          format: int64
          example: 5756
          description: >-
            The agent to whom the inquiry will be assigned to.


            If omitted, the inquiry will be assigned to the owner of the realty,
            if available. Otherwise the inquiry is assigned to the first
            administrator user of the tenant.
        funding_inquiry_request:
          type: boolean
          example: false
          default: false
          description: >-
            If this option is set to `true`, all recipients configured in this
            service will receive the financing consultation request via email.


            Additional paid service that can be activated in Justimmo.
    CreateInquiryContactBody:
      type: object
      required:
        - contact
      additionalProperties: false
      properties:
        contact:
          $ref: '#/components/schemas/CreateInquiryContact'
        realty_id:
          type: integer
          format: int64
          nullable: true
          example: 11104565
        message:
          type: string
          nullable: true
          example: Ich habe Interesse an dieser Wohnung.
        source_id:
          type: integer
          description: The id of the source where the contact heard about the realty offer.
          nullable: true
        feed_id:
          type: integer
          description: >-
            The id of the export feed where the contact heard about the realty
            offer.
          nullable: true
        platform_id:
          type: integer
          description: >-
            The id of the platform where the contact heard about the realty
            offer.


            If feed_id is set this value will be ignored.
          nullable: true
        agent_id:
          type: integer
          format: int64
          example: 5756
          description: >-
            The agent to whom the inquiry will be assigned to.


            If omitted, the inquiry will be assigned to the owner of the realty,
            if available. Otherwise the inquiry is assigned to the first
            administrator user of the tenant.
        funding_inquiry_request:
          type: boolean
          example: false
          default: false
          description: >-
            If this option is set to `true`, all recipients configured in this
            service will receive the financing consultation request via email.


            Additional paid service that can be activated in Justimmo.
    PreviewCommissionContractOfferBody:
      type: object
      required:
        - offer_id
        - contact_id
      additionalProperties: false
      properties:
        offer_id:
          type: integer
          format: int64
          example: 6578612
        contact_id:
          type: integer
          format: int64
          example: 23478439
    PreviewCommissionContractRealtyBody:
      type: object
      required:
        - realty_id
        - contact_id
        - subrealties
      additionalProperties: false
      properties:
        realty_id:
          type: integer
          format: int64
          example: 11104565
        contact_id:
          type: integer
          format: int64
          example: 23478439
        subrealties:
          type: array
          description: >-
            If the main realty is a residential project, the IDs of it's
            subrealties to include in the contract  

            Otherwise: empty array
          items:
            type: integer
            format: int64
        locale:
          type: string
          nullable: true
          description: Defaults to locale of the tenant
          minLength: 2
          maxLength: 2
          example: de
    PreviewSearchContractBody:
      type: object
      required:
        - search_profile_id
      additionalProperties: false
      properties:
        search_profile_id:
          type: integer
          format: int64
          example: 1235312
        locale:
          type: string
          nullable: true
          description: Defaults to locale of the tenant
          minLength: 2
          maxLength: 2
          example: de
  parameters:
    PathParamActivityId:
      in: path
      name: activityId
      schema:
        type: integer
        format: int64
        minimum: 1
      required: true
      description: The id of the activity
    PathParamAppointmentId:
      in: path
      name: appointmentId
      schema:
        type: integer
        format: int64
        minimum: 1
      required: true
      description: The id of the appointment
    PathParamContactId:
      in: path
      name: contactId
      schema:
        type: integer
        format: int64
        minimum: 1
      required: true
      description: The id of the contact
    PathParamEmailAddressId:
      in: path
      name: emailAddressId
      schema:
        type: integer
        minimum: 1
      required: true
      description: The id of the email address
    PathParamInquiryId:
      in: path
      name: inquiryId
      schema:
        type: integer
        minimum: 1
      required: true
      description: The id of the inquiry
    PathParamOfferId:
      in: path
      name: offerId
      schema:
        type: integer
        minimum: 1
      required: true
      description: The id of the offer
    PathParamRealtyCatalogueNr:
      in: path
      name: realtyCatalogueNr
      schema:
        type: integer
        format: int64
        minimum: 1
      required: true
      description: >-
        The plain catalogue number of the realty (<span
        class="text-ji-term">Objektnummer</span>)
    PathParamRealtyDealId:
      in: path
      name: realtyDealId
      schema:
        type: integer
        format: int64
        minimum: 1
      required: true
      description: The id of the realtyDeal
    PathParamRealtyId:
      in: path
      name: realtyId
      schema:
        type: integer
        format: int64
        minimum: 1
      required: true
      description: The id of the realty
    PathParamRealtyLandRegisterEntryId:
      in: path
      name: realtyLandRegisterEntryId
      schema:
        type: integer
        format: int64
        minimum: 1
      required: true
      description: The id of the land register entry
    PathParamRealtyLinkId:
      in: path
      name: realtyLinkId
      schema:
        type: integer
        format: int64
        minimum: 1
      required: true
      description: The id of the realty link
    PathParamSearchProfileId:
      in: path
      name: searchProfileId
      schema:
        type: integer
        minimum: 1
      required: true
      description: The id of the search profile
    PathParamStorageKey:
      in: path
      name: storageKey
      schema:
        type: string
        pattern: '[a-zA-Z0-9_-]+\.[a-zA-Z0-9]+'
      required: true
      description: The storageKey of the file
    PathParamExposeTemplateId:
      in: path
      name: templateId
      schema:
        type: integer
        format: int64
        minimum: 1
      required: true
      description: >-
        The ID of the Exposé template is available upon request from Justimmo
        Support.
    PathParamVendorId:
      in: path
      name: vendorId
      schema:
        type: integer
        format: int64
        minimum: 1
      required: true
      description: The id of the vendor
    PathParamWebhookId:
      in: path
      name: webhookId
      schema:
        type: string
        format: uuid
      required: true
      description: The id of the webhook
    QueryParamFields:
      in: query
      name: fields
      description: |-
        Comma-separated list of fields to query for each item or `*` for all  
        Currently only `*` is implemented
      required: true
      example: '*'
      schema:
        type: string
    QueryParamLimit:
      in: query
      name: limit
      description: Max count of items returned at once
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 10
    QueryParamLocale:
      in: query
      name: locale
      schema:
        type: string
        minLength: 2
        maxLength: 2
        example: de
    QueryParamNewsletterCategoryId:
      in: query
      name: categoryId
      description: >-
        ID of the newsletter category to unsubscribe from. If not provided, all
        newsletters will be unsubscribed
      schema:
        type: integer
        minimum: 1
    QueryParamOffset:
      in: query
      name: offset
      description: Skip the first `offset` items
      schema:
        type: integer
        minimum: 0
        default: 0
    QueryParamShowAddress:
      in: query
      name: showAddress
      schema:
        type: integer
        minimum: 0
        maximum: 1
      required: false
      description: Forces to show the full address, otherwise it uses the realty setting.
    QueryParamShowPrices:
      in: query
      name: showPrices
      schema:
        type: integer
        minimum: 0
        maximum: 1
      required: false
      description: >-
        Forces to show the prices. It works only with those Expose templates
        which support this feature.
    X-Justimmo-Actor-Default-Contact:
      in: header
      name: X-Justimmo-Actor
      required: false
      description: >-
        This header allows you to specify if this request acts on behalf of a
        contact (default behaviour) or an agent.
      schema:
        type: string
        enum:
          - agent
          - contact
          - referrer
        default: contact
    X-Justimmo-Delivery-Id:
      in: header
      name: X-Justimmo-Delivery-Id
      required: true
      example: 880658fa-f7f0-41ac-89fa-80259d3ee183
      description: The id of the webhook delivery
      schema:
        type: string
        format: uuid
    X-Justimmo-Signature:
      in: header
      name: X-Justimmo-Signature
      required: true
      example: 5cc92460676f037c053381108a4e0cc3bec70ef60036605ba8c131585fca52b7
      description: HMAC signature of the payload
      schema:
        type: string
    X-Justimmo-TenantId:
      in: header
      name: X-Justimmo-TenantId
      required: true
      example: 1372
      description: This is necessary to determine which tenant's data to operate on.
      schema:
        type: integer
    X-Justimmo-UserId:
      in: header
      name: X-Justimmo-UserId
      required: false
      example: 22021910
      description: >-
        This is necessary to allow your client to act on behalf of a specific
        user, adhering to the user's permissions.  


        <span class="text-required">required</span> for authorization method
        `client_credentials_impersonation`.
      schema:
        type: integer
    X-Justimmo-UserId-Optional:
      in: header
      name: X-Justimmo-UserId
      required: false
      example: 22021910
      description: >-
        This allows your client to act on behalf of a specific user, adhering to
        the user's permissions.  


        <span class="text-required">required</span> only for authorization
        method `client_credentials_impersonation`.
      schema:
        type: integer
    X-Justimmo-Webhook-Id:
      in: header
      name: X-Justimmo-Webhook-Id
      required: true
      example: a06e68e7-22f1-11ed-bc0a-b8cb29967e61
      description: The id of the webhook
      schema:
        type: string
        format: uuid
    User-Agent:
      in: header
      name: User-Agent
      required: true
      example: Justimmo (Webhook)
      description: >-
        The User-Agent string used to send Webhooks. This is the same for all
        Webhooks
      schema:
        type: string
        default: Justimmo (Webhook)
  securitySchemes:
    auth_token:
      type: oauth2
      description: |-
        Authorization Code Grant

        **Header:** `X-Justimmo-TenantId: <id>`  
        This is necessary to determine which tenant's data to operate on.
      flows:
        authorizationCode:
          authorizationUrl: https://auth.justimmo.at/authorize
          tokenUrl: https://auth.justimmo.at/access_token
          scopes: {}
    client_credentials:
      type: oauth2
      description: |-
        Client Credential Grant

        **Header:** `X-Justimmo-TenantId: <id>`  
        This is necessary to determine which tenant's data to operate on.
      flows:
        clientCredentials:
          tokenUrl: https://auth.justimmo.at/access_token
          scopes: {}
    client_credentials_impersonation:
      type: oauth2
      description: >-
        Client Credential Grant with User Impersonation


        **Header:** `X-Justimmo-TenantId: <id>`  

        This is necessary to determine which tenant's data to operate on.  

        **Header:** `X-Justimmo-UserId: <id>`  

        This is necessary to allow your client to act on behalf of a specific
        user, adhering to the user's permissions.
      flows:
        clientCredentials:
          tokenUrl: https://auth.justimmo.at/access_token
          scopes: {}
  responses:
    ClientError400BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ClientErrorResponse'
    OauthError401Unauthorized:
      description: The resource owner or authorization server denied the request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/OAuthErrorResponse'
    ClientError403Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ClientErrorResponse'
    ClientError404NotFound:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ClientErrorResponse'
    ClientError422UnprocessableEntity:
      description: Unprocessable Entity
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ClientErrorResponse'
    ServerError500InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ServerErrorResponse'
tags:
  - name: activity
    x-displayName: Activity
    description: Create activities for realties or contacts or retrieve realty activities
  - name: appointment
    x-displayName: Appointment
    description: Retrieve or manipulate appointment related information
  - name: acquisition
    x-displayName: Acquisition
    description: Retrieve or manipulate acquisition realty related information
  - name: contact
    x-displayName: Contact
    description: Retrieve or manipulate contact related information
  - name: commissioncontracts
    x-displayName: Commission Contract
    description: Retrieve or manipulate commission contract information
  - name: file
    x-displayName: File
    description: Retrieve file contents
  - name: inquiry
    x-displayName: Inquiry
    description: Create general inquiries or inquiries for realties
  - name: location
    x-displayName: Location
    description: Retrieve location autocomplete data
  - name: offer
    x-displayName: Offer
    description: Retrieve offer data
  - name: realty
    x-displayName: Realty
    description: Retrieve or manipulate realty related information
  - name: searchprofile
    x-displayName: Search Profile
    description: Retrieve or manipulate search profile related information
  - name: user
    x-displayName: User
    description: Retrieve user related information
  - name: webhooks
    x-displayName: Webhooks
    description: >-
      Webhooks are delivered using the HTTP <span class="text-POST">POST</span>
      method and are processed in **FIFO** (first-in, first-out) order.


      In the event of a **network error** or when the receiving server responds
      with one of the status codes **502**, **503**, or **504**, the delivery
      will be **retried** automatically.

      Responses with other **4xx** or **5xx** status codes are considered
      permanent failures and will **not** be retried.

      It is the responsibility of the receiving endpoint to implement
      appropriate **outage recovery** and **reconciliation** mechanisms.


      ## Signature

      The payload is signed with **HMAC** using **sha256**. The secret is unique
      per webhook and will be provided when creating a webhook.


      The computed signature is provided in the `X-Justimmo-Signature` header.  

      Receivers should verify this signature using the shared secret to ensure
      the **authenticity** and **integrity** of the payload, and refuse any
      requests that do not pass the signature test (recommendation: status code
      401)


      Example:

      ```

      expectedSignature = hex( HMAC_SHA256( raw_body_bytes, webhook_secret ) )

      ```
  - name: lookup_contact_economic_relationship
    x-displayName: ContactEconomicRelationship
    description: >-
      <span class="text-deprecated">Deprecated</span> 


      <div class="container-info">
          Due to the recent change in the Austrian brokerage law act (<span class="text-ji-term">Erstauftraggeberprinzip</span>), this property is being phased out 
          and replaced with <a href="#tag/lookup_vendor_economic_relationship">VendorEconomicRelationship</a>.<br/>
          Information about dual_brokerage (<span class="text-ji-term">Doppelmaklertätigkeit</span>) is now separately available for read and write in the Realty context.
      </div>


      | Value                   | <span
      class="text-ji-term">Naheverhältnis</span> |

      | ----------------------- | ---------------------------------------- |

      | `family`                | familiär                                 |

      | `family_double_agent`   | familiär mit Doppelmaklertätigkeit       |

      | `economic`              | wirtschaftlich                           |

      | `economic_double_agent` | wirtschaftlich mit Doppelmaklertätigkeit | 
  - name: lookup_vendor_economic_relationship
    x-displayName: VendorEconomicRelationship
    description: >-
      | Value                      | <span
      class="text-ji-term">Naheverhältnis</span>                    |

      | -------------------------- |
      ------------------------------------------------------------------- |

      | `none`                     | Kein
      Naheverhältnis                                                 |

      | `family_or_economic`       | Familiäres oder wirtschaftliches
      Naheverhältnis                     |

      | `economic_interconnection` | Wirtschaftliches Naheverhältnis mit
      gesellschaftlicher Verflechtung |
  - name: lookup_realty_areas
    x-displayName: RealtyAreas
    description: >-
      | Value                    | Type of Area         | Value
      Object                                        |

      | ------------------------ | -------------------- |
      --------------------------------------------------- |

      | `site_area`              | "Grundfläche"        |
      [RealtyArea](#section/RealtyArea)                   |

      | `living_area`            | "Wohnfläche"         |
      [RealtyArea](#section/RealtyArea)                   |

      | `floor_area`             | "Nutzfläche"         |
      [RealtyArea](#section/RealtyArea)                   |

      | `developable_area`       | "Verbaubare Fläche"  |
      [RealtyArea](#section/RealtyArea)                   |

      | `office_area`            | "Bürofläche"         |
      [RealtyArea](#section/RealtyArea)                   |

      | `sales_area`             | "Verkaufsfläche"     |
      [RealtyArea](#section/RealtyArea)                   |

      | `storage_area`           | "Lagerfläche"        |
      [RealtyArea](#section/RealtyArea)                   |

      | `available_area`         | "Freie Fläche"       |
      [RealtyArea](#section/RealtyArea)                   |

      | `short_term_area`        | "Befristete Fläche"  |
      [RealtyArea](#section/RealtyArea)                   |

      | `total_area`             | "Gesamtfläche"       |
      [RealtyArea](#section/RealtyArea)                   |

      | `weighted_area`          | "Gewichtete Fläche"  |
      [RealtyArea](#section/RealtyArea)                   |

      | `undeveloped_attic_area` | "Rohdachbodenfläche" |
      [RealtyArea](#section/RealtyArea)                   |

      | `garden_area`            | "Gartenfläche"       |
      [RealtyCountableArea](#section/RealtyCountableArea) |

      | `basement_area`          | "Kellerfläche"       |
      [RealtyCountableArea](#section/RealtyCountableArea) |

      | `balcony_area`           | "Balkonfläche"       |
      [RealtyCountableArea](#section/RealtyCountableArea) |

      | `terrace_area`           | "Terrassenfläche"    |
      [RealtyCountableArea](#section/RealtyCountableArea) |

      | `covered_balcony_area`   | "Loggiafläche"       |
      [RealtyCountableArea](#section/RealtyCountableArea) |

      | `garage_area`            | "Garagenfläche"      |
      [RealtyCountableArea](#section/RealtyCountableArea) |

      | `parking_space_area`     | "Stellplatzfläche"   |
      [RealtyCountableArea](#section/RealtyCountableArea) |
  - name: lookup_realty_file_groupids
    x-displayName: Realty File GroupId
    description: |-
      | ID | Name                     |
      | -- | ------------------------ |
      | 1  | Public / Pictures        |
      | 2  | Public / Plans           |
      | 3  | Public / Video           |
      | 4  | Public / Documents       |
      | 7  | Public / 360             |
      | 8  | Offer / Pictures         |
      | 9  | Offer / Plans            |
      | 43 | Offer / Videos           |
      | 44 | Offer / Documents        |
      | 26 | Shared / Pictures        |
      | 27 | Shared / Documents       |
      | 6  | Internal / Pictures      |
      | 5  | Internal / Documents     |
  - name: lookup_realty_rooms
    x-displayName: RealtyRooms
    description: |-
      | Value        | Description           | Value Type     |
      | ------------ | --------------------- | -------------- |
      | `rooms`      | "Anzahl Zimmer"       | `float`|`null` |
      | `toilets`    | "Anzahl WC"           | `int`|`null`   |
      | `bathrooms`  | "Anzahl Bäder"        | `int`|`null`   |
      | `storerooms` | "Anzahl Abstellräume" | `int`|`null`   |
  - name: lookup_realty_marketing_type
    x-displayName: RealtyMarketingType
    description: |-
      | Value  | <span class="text-ji-term">Vermarktungsart</span> |
      | ------ | ----------------- |
      | `buy`  | "Kauf"            |
      | `rent` | "Miete/Pacht"     |
  - name: lookup_realty_prices
    x-displayName: RealtyPrices
    description: >-
      | Value               | Type of Price       | Value
      Object                        |

      | ------------------- | ------------------- |
      ----------------------------------- |

      | `purchase_price`    | "Kaufpreis"         |
      [RealtyPrice](#section/RealtyPrice) |

      | `rent`              | "Miete"             |
      [RealtyPrice](#section/RealtyPrice) |

      | `furniture_hire`    | "Möbelmiete"        |
      [RealtyPrice](#section/RealtyPrice) |

      | `parking`           | "Parkplatz"         |
      [RealtyPrice](#section/RealtyPrice) |

      | `garage`            | "Garage"            |
      [RealtyPrice](#section/RealtyPrice) |

      | `operating`         | "Betriebskosten"    |
      [RealtyPrice](#section/RealtyPrice) |

      | `heating`           | "Heizkosten"        |
      [RealtyPrice](#section/RealtyPrice) |

      | `hot_water`         | "Warmwasser"        |
      [RealtyPrice](#section/RealtyPrice) |

      | `cooling`           | "Kühlung"           |
      [RealtyPrice](#section/RealtyPrice) |

      | `maintenance_funds` | "Reparaturrücklage" |
      [RealtyPrice](#section/RealtyPrice) |

      | `elevator`          | "Liftkosten"        |
      [RealtyPrice](#section/RealtyPrice) |

      | `others`            | "Sonstiges"         |
      [RealtyPrice](#section/RealtyPrice) |


      `purchase_price` and `rent` are only included in response when applicable
      based on `marketing_type`.
  - name: lookup_realty_status
    x-displayName: RealtyStatus
    description: |-
      | ID | Name                   |
      | -- | ---------------------- |
      | 4  | "Entwurf"              |
      | 5  | "aktiv"                |
      | 6  | "inaktiv (Deprecated)" |
      | 7  | "reserviert"           |
      | 8  | "vermittelt"           |
      | 9  | "storniert"            |
      | 10 | "fremdvermittelt"      |
      | 11 | "Vertragserrichtung"   |
  - name: lookup_realty_system_type
    x-displayName: RealtySystemType
    description: |-
      | Value                 | <span class="text-ji-term">Objekttyp</span> |
      | --------------------- | ----------------------------- |
      | `realty`              | "Eigenständiges Objekt"       |
      | `residential_project` | "Wohnbauprojekt"              |
      | `residential_subunit` | "Wohnbauprojekt Untereinheit" |
      | `commercial_project`  | "Gewerbeprojekt"              |
      | `commercial_area`     | "Gewerbeprojekt Fläche"       |
  - name: lookup_realty_type
    x-displayName: RealtyType
    description: >-

      Value Object: [RealtyType](#section/RealtyType)


      List of all available main realty types (Objektarten) of Justimmo. If
      "OpenImmo Key" is empty, the Main Type is not part of the OpenImmo
      standard.


      | ID |
      Name                                                                  |
      OpenImmo Key                 |

      |----|-----------------------------------------------------------------------|------------------------------|

      | 1  |
      [Zimmer](#section/Zimmer)                                             |
      zimmer                       |

      | 2  |
      [Wohnung](#section/Wohnung)                                           |
      wohnung                      |

      | 3  |
      [Haus](#section/Haus)                                                 |
      haus                         |

      | 4  |
      [Grundstück](#section/Grundstuck)                                     |
      grundstueck                  |

      | 5  | [Büro /
      Praxis](#section/Buro-Praxis)                                 |
      buero_praxen                 |

      | 6  |
      [Einzelhandel](#section/Einzelhandel)                                 |
      einzelhandel                 |

      | 7  |
      [Gastgewerbe](#section/Gastgewerbe)                                   |
      gastgewerbe                  |

      | 8  | [Industrie /
      Gewerbe](#section/Industrie-Gewerbe)                     |
      hallen_lager_prod            |

      | 9  | [Land und
      Forstwirtschaft](#section/Land-und-Forstwirtschaft)         |
      land_und_forstwirtschaft     |

      | 10 | [Sonstige /
      Sonderobjekte](#section/Sonstige-Sonderobjekte)           |
      sonstige                     |

      | 11 | [Freizeitimmobilie
      gewerblich](#section/Freizeitimmobilie-gewerblich) |
      freizeitimmobilie_gewerblich |

      | 12 | [Zinshaus /
      Renditeobjekt](#section/Zinshaus-Renditeobjekt)           |
      zinshaus_renditeobjekt       |

      | 13 |
      [Parken](#section/Parken)                                             |
      parken                       |
  - name: lookup_realty_sub_type
    x-displayName: RealtySubType
    description: >-

      Value Object: [RealtySubType](#section/RealtySubType)


      List of all available sub realty types (Unterobjektarten) of Justimmo.  If
      "OpenImmo Key" is empty, the Sub Type is not part of the OpenImmo
      standard.


      | ID  | Name                               | OpenImmo
      Key                       |

      |-----|------------------------------------|------------------------------------|

      | 1   | Baugrund Eigenheim                 |
      WOHNEN                             |

      | 2   | Großvolumiger Wohnbau             
      |                                    |

      | 3   | Wohn- und Geschäftsbaugrund       
      |                                    |

      | 4   | Betriebsbaugrund                   |
      GEWERBE                            |

      | 5   | Seegrund                           |
      SEELIEGENSCHAFT                    |

      | 6   | Sonstiger Grund                   
      |                                    |

      | 7   | Industriebaugrund                  |
      INDUSTRIE                          |

      | 8   | Einfamilienhaus                    |
      EINFAMILIENHAUS                    |

      | 9   | Mehrfamilienhaus                   |
      MEHRFAMILIENHAUS                   |

      | 10  | Reihenhaus                         |
      REIHENHAUS                         |

      | 11  | Bauernhaus                         |
      BAUERNHAUS                         |

      | 12  | Laube-Datsche-Gartenhaus           |
      LAUBE-DATSCHE-GARTENHAUS           |

      | 13  | Sonstiges Haus                    
      |                                    |

      | 14  | Rohbau                            
      |                                    |

      | 15  | Reihenendhaus                      |
      REIHENEND                          |

      | 16  | Reihenmittelhaus                   |
      REIHENMITTEL                       |

      | 17  | Reiheneckhaus                      |
      REIHENECK                          |

      | 18  | Doppelhaushälfte                   |
      DOPPELHAUSHAELFTE                  |

      | 19  | Bungalow                           |
      BUNGALOW                           |

      | 20  | Villa                              |
      VILLA                              |

      | 21  | Strandhaus                         |
      STRANDHAUS                         |

      | 22  | Landhaus                           |
      LANDHAUS                           |

      | 23  | Terrassenhaus                     
      |                                    |

      | 24  | Sacherl                           
      |                                    |

      | 25  | Büro                              
      |                                    |

      | 26  | Bürohaus                           |
      BUEROHAUS                          |

      | 27  | Sonstiges Büro                    
      |                                    |

      | 28  | Praxis                             |
      PRAXIS                             |

      | 29  | Ausstellungsfläche                 |
      AUSSTELLUNGSFLAECHE                |

      | 30  | Gastronomie/Restaurant             |
      GASTRONOMIE                        |

      | 31  | Imbiss                            
      |                                    |

      | 32  | Café                               |
      CAFE                               |

      | 33  | Veranstaltungsobjekt              
      |                                    |

      | 34  | Landwirtschaftliche Betriebe       |
      LANDWIRTSCHAFTLICHE_BETRIEBE       |

      | 35  | Bauernhof                          |
      BAUERNHOF                          |

      | 36  | Gartenbau                          |
      GARTENBAU                          |

      | 37  | Ackerbau                           |
      ACKERBAU                           |

      | 38  | Weinbau                            |
      WEINBAU                            |

      | 39  | Viehwirtschaft                     |
      VIEHWIRTSCHAFT                     |

      | 40  | Jagd und Forstwirtschaft           |
      JAGD_UND_FORSTWIRTSCHAFT           |

      | 41  | Jagdrevier                         |
      JAGDREVIER                         |

      | 42  | Teich / Fischzucht                 |
      TEICH_UND_FISCHWIRTSCHAFT          |

      | 43  | Scheune                            |
      SCHEUNEN                           |

      | 44  | Reiterhof                          |
      REITERHOEFE                        |

      | 45  | Wohnung                           
      |                                    |

      | 46  | Genossenschaftswohnung            
      |                                    |

      | 47  | Rohdachboden                       |
      ROHDACHBODEN                       |

      | 49  | Penthouse                          |
      PENTHOUSE                          |

      | 50  | Sonstige Wohnung                  
      |                                    |

      | 51  | Maisonette                         |
      MAISONETTE                         |

      | 52  | Loft-Studio-Atelier                |
      LOFT-STUDIO-ATELIER                |

      | 53  | Dachgeschoß                        |
      DACHGESCHOSS                       |

      | 54  | Terrassenwohnung                   |
      TERRASSEN                          |

      | 55  | Souterrain                         |
      SOUTERRAIN                         |

      | 56  | Vorsorgewohnung                   
      |                                    |

      | 57  | Schloss                            |
      SCHLOSS                            |

      | 59  | Garçonnière                       
      |                                    |

      | 60  | Apartment                          |
      APARTMENT                          |

      | 61  | Bürofläche                         |
      BUEROFLAECHE                       |

      | 62  | Ladenlokal                         |
      LADENLOKAL                         |

      | 63  | Einzelhandelsladen                 |
      EINZELHANDELSLADEN                 |

      | 64  | Verbrauchermarkt                   |
      VERBRAUCHERMARKT                   |

      | 65  | Einkaufszentrum                    |
      EINKAUFSZENTRUM                    |

      | 66  | Sportanlagen                       |
      SPORTANLAGEN                       |

      | 67  | Vergnügungsparks / -center         |
      VERGNUEGUNGSPARKS_UND_CENTER       |

      | 68  | Gastronomie und Wohnung            |
      GASTRONOMIE_UND_WOHNUNG            |

      | 69  | Pensionen                          |
      PENSIONEN                          |

      | 70  | Hotels                             |
      HOTELS                             |

      | 71  | weitere Beherbergungsbetriebe      |
      WEITERE_BEHERBERGUNGSBETRIEBE      |

      | 72  | Land- und Forstwirtschaft          |
      LAND_FORSTWIRSCHAFT                |

      | 73  | Freizeit                           |
      FREIZEIT                           |

      | 74  | Gemischt                           |
      GEMISCHT                           |

      | 75  | Sondernutzung                      |
      SONDERNUTZUNG                      |

      | 76  | Halle                              |
      HALLE                              |

      | 77  | Lager                              |
      LAGER                              |

      | 78  | Produktion / Betriebsobjekt        |
      PRODUKTION                         |

      | 79  | Werkstatt                          |
      WERKSTATT                          |

      | 80  | Hochregallager                     |
      HOCHREGALLAGER                     |

      | 81  | Service                            |
      SERVICE                            |

      | 82  | Freiflächen                        |
      FREIFLAECHEN                       |

      | 83  | Stadthaus                          |
      STADTHAUS                          |

      | 84  | Resthof                            |
      RESTHOF                            |

      | 85  | Zweifamilienhaus                   |
      ZWEIFAMILIENHAUS                   |

      | 86  | Ferienhaus                         |
      FERIENHAUS                         |

      | 87  | Berghütte                          |
      BERGHUETTE                         |

      | 88  | Chalet                             |
      CHALET                             |

      | 89  | Krankenhaus                        |
      KRANKENHAUS                        |

      | 90  | Pflegeheim                         |
      PFLEGEHEIM                         |

      | 91  | Sanatorium                         |
      SANATORIUM                         |

      | 92  | Seniorenheim                       |
      SENIORENHEIM                       |

      | 93  | Betreutes Wohnen                   |
      BETREUTES-WOHNEN                   |

      | 95  | Aussiedlerhof                      |
      AUSSIEDLERHOF                      |

      | 96  | Sonstige Landwirtschaftsimmobilien |
      SONSTIGE_LANDWIRTSCHAFTSIMMOBILIEN |

      | 97  | Parkhaus                           |
      PARKHAUS                           |

      | 98  | Tankstelle                         |
      TANKSTELLE                         |

      | 99  | Einzelgarage                       |
      EINZELGARAGE                       |

      | 100 | Stellplatz                         |
      STELLPLATZ                         |

      | 101 | Sonstige                           |
      SONSTIGE                           |

      | 102 | Etagenwohnung                      |
      ETAGE                              |

      | 103 | Erdgeschoß                         |
      ERDGESCHOSS                        |

      | 104 | Mehrfamilienhaus                   |
      MEHRFAMILIENHAUS                   |

      | 105 | Wohn- und Geschäftshaus            |
      WOHN_UND_GESCHAEFTSHAUS            |

      | 106 | Geschäftshaus                      |
      GESCHAEFTSHAUS                     |

      | 107 | Bürogebäude                        |
      BUEROGEBAEUDE                      |

      | 108 | Selbstbedienungsmärkte             |
      SB_MAERKTE                         |

      | 109 | Einkaufszentren                    |
      EINKAUFSCENTREN                    |

      | 110 | Wohnanlagen                        |
      WOHNANLAGEN                        |

      | 111 | Verbrauchermärkte                  |
      VERBRAUCHERMAERKTE                 |

      | 112 | Industrieanlagen                   |
      INDUSTRIEANLAGEN                   |

      | 113 | Geschäftslokal                    
      |                                    |

      | 114 | Renditeobjekt                     
      |                                    |

      | 115 | Verwertungsobjekt                 
      |                                    |

      | 116 | Entwicklungsobjekt                
      |                                    |

      | 117 | Gartenwohnung                     
      |                                    |

      | 118 | Apartmenthaus                      |
      APARTMENTHAUS                      |

      | 119 | Ferienwohnung                      |
      FERIENWOHNUNG                      |

      | 120 | Galeriewohnung                     |
      GALERIE                            |

      | 121 | Seeliegenschaft                    |
      SEELIEGENSCHAFT                    |

      | 122 | Seeliegenschaft                   
      |                                    |

      | 123 | Anwesen                            |
      ANWESEN                            |

      | 124 | Speditionslager                    |
      SPEDITIONSLAGER                    |

      | 125 | Bootsliegeplatz                    |
      BOOTSLIEGEPLATZ                    |

      | 126 | Burg                               |
      BURG                               |

      | 127 | Herrenhaus                         |
      HERRENHAUS                         |

      | 128 | Finca                              |
      FINCA                              |

      | 129 | Fertighaus                         |
      FERTIGHAUS                         |

      | 130 | Gewerbepark                        |
      GEWERBEPARK                        |

      | 131 | Bürozentrum                        |
      BUEROZENTRUM                       |

      | 132 | Loft / Atelier                     |
      LOFT_ATELIER                       |

      | 133 | Praxisfläche                       |
      PRAXISFLAECHE                      |

      | 134 | Praxishaus                         |
      PRAXISHAUS                         |

      | 135 | Coworking Space                    |
      COWORKING                          |

      | 136 | Shared Office                      |
      SHARED_OFFICE                      |

      | 137 | Kaufhaus                           |
      KAUFHAUS                           |

      | 138 | Factory outlet                     |
      FACTORY_OUTLET                     |

      | 141 | Kiosk                              |
      KIOSK                              |

      | 142 | Verkaufsfläche                     |
      VERKAUFSFLAECHE                    |

      | 143 | Ausstellungsfläche                 |
      AUSSTELLUNGSFLAECHE                |

      | 144 | Bar                                |
      BAR                                |

      | 145 | Discothek                          |
      DISCOTHEK                          |

      | 146 | Industriehalle                     |
      INDUSTRIEHALLE                     |

      | 147 | Lagerflächen                       |
      LAGERFLAECHEN                      |

      | 148 | Lager mit Freifläche               |
      LAGER_MIT_FREIFLAECHE              |

      | 149 | Kühlhaus                           |
      KUEHLHAUS                          |

      | 150 | Freizeitanlage                     |
      FREIZEITANLAGE                     |

      | 152 | Carport                            |
      CARPORT                            |

      | 153 | Doppelgarage                       |
      DOPPELGARAGE                       |

      | 154 | Duplex                             |
      DUPLEX                             |

      | 155 | Tiefgarage                         |
      TIEFGARAGE                         |

      | 156 | Parkhaus                           |
      PARKHAUS                           |

      | 157 | Tiefgaragenstellplatz              |
      TIEFGARAGENSTELLPLATZ              |

      | 158 | Parkplatz mit Ladestation          |
      PARKPLATZ_STROM                    |


      Lists of all Sub Types grouped by their corresponding Main Type.


      ## Zimmer


      None


      ## Wohnung


      | ID  | Name                   | OpenImmo Key        |

      |-----|------------------------|---------------------|

      | 45  | Wohnung                |                     |

      | 46  | Genossenschaftswohnung |                     |

      | 47  | Rohdachboden           | ROHDACHBODEN        |

      | 49  | Penthouse              | PENTHOUSE           |

      | 50  | Sonstige Wohnung       |                     |

      | 51  | Maisonette             | MAISONETTE          |

      | 52  | Loft-Studio-Atelier    | LOFT-STUDIO-ATELIER |

      | 53  | Dachgeschoß            | DACHGESCHOSS        |

      | 54  | Terrassenwohnung       | TERRASSEN           |

      | 55  | Souterrain             | SOUTERRAIN          |

      | 56  | Vorsorgewohnung        |                     |

      | 59  | Garçonnière            |                     |

      | 60  | Apartment              | APARTMENT           |

      | 102 | Etagenwohnung          | ETAGE               |

      | 103 | Erdgeschoß             | ERDGESCHOSS         |

      | 117 | Gartenwohnung          |                     |

      | 119 | Ferienwohnung          | FERIENWOHNUNG       |

      | 120 | Galeriewohnung         | GALERIE             |


      ## Haus


      | ID  | Name                     | OpenImmo Key             |

      |-----|--------------------------|--------------------------|

      | 8   | Einfamilienhaus          | EINFAMILIENHAUS          |

      | 9   | Mehrfamilienhaus         | MEHRFAMILIENHAUS         |

      | 10  | Reihenhaus               | REIHENHAUS               |

      | 11  | Bauernhaus               | BAUERNHAUS               |

      | 12  | Laube-Datsche-Gartenhaus | LAUBE-DATSCHE-GARTENHAUS |

      | 13  | Sonstiges Haus           |                          |

      | 14  | Rohbau                   |                          |

      | 15  | Reihenendhaus            | REIHENEND                |

      | 16  | Reihenmittelhaus         | REIHENMITTEL             |

      | 17  | Reiheneckhaus            | REIHENECK                |

      | 18  | Doppelhaushälfte         | DOPPELHAUSHAELFTE        |

      | 19  | Bungalow                 | BUNGALOW                 |

      | 20  | Villa                    | VILLA                    |

      | 21  | Strandhaus               | STRANDHAUS               |

      | 22  | Landhaus                 | LANDHAUS                 |

      | 23  | Terrassenhaus            |                          |

      | 24  | Sacherl                  |                          |

      | 57  | Schloss                  | SCHLOSS                  |

      | 83  | Stadthaus                | STADTHAUS                |

      | 84  | Resthof                  | RESTHOF                  |

      | 85  | Zweifamilienhaus         | ZWEIFAMILIENHAUS         |

      | 86  | Ferienhaus               | FERIENHAUS               |

      | 87  | Berghütte                | BERGHUETTE               |

      | 88  | Chalet                   | CHALET                   |

      | 118 | Apartmenthaus            | APARTMENTHAUS            |

      | 122 | Seeliegenschaft          |                          |

      | 126 | Burg                     | BURG                     |

      | 127 | Herrenhaus               | HERRENHAUS               |

      | 128 | Finca                    | FINCA                    |

      | 129 | Fertighaus               | FERTIGHAUS               |


      ## Grundstück


      | ID  | Name                        | OpenImmo Key        |

      |-----|-----------------------------|---------------------|

      | 1   | Baugrund Eigenheim          | WOHNEN              |

      | 2   | Großvolumiger Wohnbau       |                     |

      | 3   | Wohn- und Geschäftsbaugrund |                     |

      | 4   | Betriebsbaugrund            | GEWERBE             |

      | 5   | Seegrund                    | SEELIEGENSCHAFT     |

      | 6   | Sonstiger Grund             |                     |

      | 7   | Industriebaugrund           | INDUSTRIE           |

      | 72  | Land- und Forstwirtschaft   | LAND_FORSTWIRSCHAFT |

      | 73  | Freizeit                    | FREIZEIT            |

      | 74  | Gemischt                    | GEMISCHT            |

      | 75  | Sondernutzung               | SONDERNUTZUNG       |

      | 121 | Seeliegenschaft             | SEELIEGENSCHAFT     |

      | 130 | Gewerbepark                 | GEWERBEPARK         |


      ## Büro / Praxis


      | ID  | Name               | OpenImmo Key        |

      |-----|--------------------|---------------------|

      | 25  | Büro               |                     |

      | 26  | Bürohaus           | BUEROHAUS           |

      | 27  | Sonstiges Büro     |                     |

      | 28  | Praxis             | PRAXIS              |

      | 29  | Ausstellungsfläche | AUSSTELLUNGSFLAECHE |

      | 61  | Bürofläche         | BUEROFLAECHE        |

      | 131 | Bürozentrum        | BUEROZENTRUM        |

      | 132 | Loft / Atelier     | LOFT_ATELIER        |

      | 133 | Praxisfläche       | PRAXISFLAECHE       |

      | 134 | Praxishaus         | PRAXISHAUS          |

      | 135 | Coworking Space    | COWORKING           |

      | 136 | Shared Office      | SHARED_OFFICE       |


      ## Einzelhandel


      | ID  | Name               | OpenImmo Key        |

      |-----|--------------------|---------------------|

      | 62  | Ladenlokal         | LADENLOKAL          |

      | 63  | Einzelhandelsladen | EINZELHANDELSLADEN  |

      | 64  | Verbrauchermarkt   | VERBRAUCHERMARKT    |

      | 65  | Einkaufszentrum    | EINKAUFSZENTRUM     |

      | 113 | Geschäftslokal     |                     |

      | 137 | Kaufhaus           | KAUFHAUS            |

      | 138 | Factory outlet     | FACTORY_OUTLET      |

      | 141 | Kiosk              | KIOSK               |

      | 142 | Verkaufsfläche     | VERKAUFSFLAECHE     |

      | 143 | Ausstellungsfläche | AUSSTELLUNGSFLAECHE |


      ## Gastgewerbe


      | ID  | Name                          | OpenImmo Key                  |

      |-----|-------------------------------|-------------------------------|

      | 30  | Gastronomie/Restaurant        | GASTRONOMIE                   |

      | 31  | Imbiss                        |                               |

      | 32  | Café                          | CAFE                          |

      | 33  | Veranstaltungsobjekt          |                               |

      | 68  | Gastronomie und Wohnung       | GASTRONOMIE_UND_WOHNUNG       |

      | 69  | Pensionen                     | PENSIONEN                     |

      | 70  | Hotels                        | HOTELS                        |

      | 71  | weitere Beherbergungsbetriebe | WEITERE_BEHERBERGUNGSBETRIEBE |

      | 144 | Bar                           | BAR                           |

      | 145 | Discothek                     | DISCOTHEK                     |


      ## Industrie / Gewerbe


      | ID  | Name                        | OpenImmo Key          |

      |-----|-----------------------------|-----------------------|

      | 76  | Halle                       | HALLE                 |

      | 77  | Lager                       | LAGER                 |

      | 78  | Produktion / Betriebsobjekt | PRODUKTION            |

      | 79  | Werkstatt                   | WERKSTATT             |

      | 80  | Hochregallager              | HOCHREGALLAGER        |

      | 81  | Service                     | SERVICE               |

      | 82  | Freiflächen                 | FREIFLAECHEN          |

      | 124 | Speditionslager             | SPEDITIONSLAGER       |

      | 146 | Industriehalle              | INDUSTRIEHALLE        |

      | 147 | Lagerflächen                | LAGERFLAECHEN         |

      | 148 | Lager mit Freifläche        | LAGER_MIT_FREIFLAECHE |

      | 149 | Kühlhaus                    | KUEHLHAUS             |


      ## Land und Forstwirtschaft


      | ID  | Name                               | OpenImmo
      Key                       |

      |-----|------------------------------------|------------------------------------|

      | 34  | Landwirtschaftliche Betriebe       |
      LANDWIRTSCHAFTLICHE_BETRIEBE       |

      | 35  | Bauernhof                          |
      BAUERNHOF                          |

      | 36  | Gartenbau                          |
      GARTENBAU                          |

      | 37  | Ackerbau                           |
      ACKERBAU                           |

      | 38  | Weinbau                            |
      WEINBAU                            |

      | 39  | Viehwirtschaft                     |
      VIEHWIRTSCHAFT                     |

      | 40  | Jagd und Forstwirtschaft           |
      JAGD_UND_FORSTWIRTSCHAFT           |

      | 41  | Jagdrevier                         |
      JAGDREVIER                         |

      | 42  | Teich / Fischzucht                 |
      TEICH_UND_FISCHWIRTSCHAFT          |

      | 43  | Scheune                            |
      SCHEUNEN                           |

      | 44  | Reiterhof                          |
      REITERHOEFE                        |

      | 95  | Aussiedlerhof                      |
      AUSSIEDLERHOF                      |

      | 96  | Sonstige Landwirtschaftsimmobilien |
      SONSTIGE_LANDWIRTSCHAFTSIMMOBILIEN |

      | 123 | Anwesen                            |
      ANWESEN                            |


      ## Sonstige / Sonderobjekte


      | ID  | Name        | OpenImmo Key |

      |-----|-------------|--------------|

      | 89  | Krankenhaus | KRANKENHAUS  |

      | 97  | Parkhaus    | PARKHAUS     |

      | 98  | Tankstelle  | TANKSTELLE   |

      | 101 | Sonstige    | SONSTIGE     |


      ## Freizeitimmobilie gewerblich


      | ID  | Name                       | OpenImmo Key                 |

      |-----|----------------------------|------------------------------|

      | 66  | Sportanlagen               | SPORTANLAGEN                 |

      | 67  | Vergnügungsparks / -center | VERGNUEGUNGSPARKS_UND_CENTER |

      | 150 | Freizeitanlage             | FREIZEITANLAGE               |


      ## Zinshaus / Renditeobjekt


      | ID  | Name                    | OpenImmo Key            |

      |-----|-------------------------|-------------------------|

      | 90  | Pflegeheim              | PFLEGEHEIM              |

      | 91  | Sanatorium              | SANATORIUM              |

      | 92  | Seniorenheim            | SENIORENHEIM            |

      | 93  | Betreutes Wohnen        | BETREUTES-WOHNEN        |

      | 104 | Mehrfamilienhaus        | MEHRFAMILIENHAUS        |

      | 105 | Wohn- und Geschäftshaus | WOHN_UND_GESCHAEFTSHAUS |

      | 106 | Geschäftshaus           | GESCHAEFTSHAUS          |

      | 107 | Bürogebäude             | BUEROGEBAEUDE           |

      | 108 | Selbstbedienungsmärkte  | SB_MAERKTE              |

      | 109 | Einkaufszentren         | EINKAUFSCENTREN         |

      | 110 | Wohnanlagen             | WOHNANLAGEN             |

      | 111 | Verbrauchermärkte       | VERBRAUCHERMAERKTE      |

      | 112 | Industrieanlagen        | INDUSTRIEANLAGEN        |

      | 114 | Renditeobjekt           |                         |

      | 115 | Verwertungsobjekt       |                         |

      | 116 | Entwicklungsobjekt      |                         |


      ## Parken


      | ID  | Name                      | OpenImmo Key          |

      |-----|---------------------------|-----------------------|

      | 99  | Einzelgarage              | EINZELGARAGE          |

      | 100 | Stellplatz                | STELLPLATZ            |

      | 125 | Bootsliegeplatz           | BOOTSLIEGEPLATZ       |

      | 152 | Carport                   | CARPORT               |

      | 153 | Doppelgarage              | DOPPELGARAGE          |

      | 154 | Duplex                    | DUPLEX                |

      | 155 | Tiefgarage                | TIEFGARAGE            |

      | 156 | Parkhaus                  | PARKHAUS              |

      | 157 | Tiefgaragenstellplatz     | TIEFGARAGENSTELLPLATZ |

      | 158 | Parkplatz mit Ladestation | PARKPLATZ_STROM       |
  - name: lookup_realty_condition
    x-displayName: RealtyCondition
    description: >-
      | ID | <span class="text-ji-term">Zustand</span> | OpenImmo
      Key             |

      | -- | --------------------- | ------------------------ |

      | 1  | Erstbezug             | ERSTBEZUG                |

      | 2  | renovierungsbedürftig | TEIL_VOLLRENOVIERUNGSBED |

      | 3  | neuwertig             | NEUWERTIG                |

      | 4  | vollsaniert           | VOLL_SANIERT             |

      | 5  | vollrenoviert         | TEIL_VOLLRENOVIERT       |

      | 6  | baufällig             | BAUFAELLIG               |

      | 7  | nach Vereinbarung     | NACH_VEREINBARUNG        |

      | 8  | modernisiert          | MODERNISIERT             |

      | 9  | gepflegt              | GEPFLEGT                 |

      | 10 | Rohbau                | ROHBAU                   |

      | 11 | entkernt              | ENTKERNT                 |

      | 12 | Abrissobjekt          | ABRISSOBJEKT             |

      | 13 | projektiert           | PROJEKTIERT              |

      | 14 | teilsaniert           | TEIL_SANIERT             |

      | 15 | teilrenoviert         | TEIL_VOLLRENOVIERT       |

      | 16 | sanierungsbedürftig   | SANIERUNGSBEDUERFTIG     |
  - name: lookup_realty_building_condition
    x-displayName: RealtyBuildingCondition
    description: >-
      | ID | <span class="text-ji-term">Zustand</span> | OpenImmo
      Key             |

      | -- | --------------------- | ------------------------ |

      | 1  | Erstbezug             | ERSTBEZUG                |

      | 2  | renovierungsbedürftig | TEIL_VOLLRENOVIERUNGSBED |

      | 3  | neuwertig             | NEUWERTIG                |

      | 4  | vollsaniert           | VOLL_SANIERT             |

      | 5  | vollrenoviert         | TEIL_VOLLRENOVIERT       |

      | 6  | baufällig             | BAUFAELLIG               |

      | 7  | nach Vereinbarung     | NACH_VEREINBARUNG        |

      | 8  | modernisiert          | MODERNISIERT             |

      | 9  | gepflegt              | GEPFLEGT                 |

      | 10 | Rohbau                | ROHBAU                   |

      | 11 | entkernt              | ENTKERNT                 |

      | 12 | Abrissobjekt          | ABRISSOBJEKT             |

      | 13 | projektiert           | PROJEKTIERT              |

      | 14 | teilsaniert           | TEIL_SANIERT             |

      | 15 | teilrenoviert         | TEIL_VOLLRENOVIERT       |
  - name: lookup_realty_furnishing
    x-displayName: RealtyFurnishing
    description: |-
      | ID | <span class="text-ji-term">Möblierung</span> | OpenImmo Key |
      | -- | --------------------- | ------------ |
      | 1  | möbliert              | VOLL         |
      | 2  | teilmöbliert          | TEIL         |
      | 3  | nicht möbliert        |              |
      | 4  | optional              |              |
      | 7  | Küche                 |              |
      | 8  | Küche, Bad            |              |
      | 9  | Kochnische            |              |
      | 10 | Geschäftseinrichtung  |              |
      | 11 | Bad                   |              |
  - name: lookup_realty_agency_agreement_type
    x-displayName: RealtyAgencyAgreementType
    description: |-
      | Value                    | Description                    |
      |--------------------------|--------------------------------|
      | sole_agency_agreement    | Alleinvermittlungsauftrag      |
      | co_sole_agency_agreement | Co-Alleinvermittlungsauftrag   |
      | simple_agency_agreement  | schlichter Vermittlungsauftrag |
  - name: lookup_realty_agency_agreement_method
    x-displayName: RealtyAgencyAgreementMethod
    description: |-
      | Value             | Description              |
      |-------------------|--------------------------|
      | verbal            | mündlich                 |
      | written           | schriftlich              |
      | written_bilateral | schriftlich (beidseitig) |
  - name: lookup_realty_ownership_type
    x-displayName: RealtyOwnershipType
    description: |-
      | ID | Name                                         |
      |----|----------------------------------------------|
      |  1 | Alleineigentum                               |
      |  2 | Miteigentum                                  |
      |  3 | Miteigentum m. Benutzungsregelung            |
      |  4 | Wohnungseigentum                             |
      |  5 | Wohnungseigentum geplant                     |
      |  6 | Wohnungseigentum in Entstehung               |
      |  7 | Baurecht                                     |
      |  8 | Superädifikat                                |
      |  9 | Schlichtes Miteigentum                       |
      | 10 | Schlichtes Miteigentum m. Benutzungsregelung |
  - name: lookup_realty_noise_level
    x-displayName: RealtyNoiseLevel
    description: |-
      | ID | Name                               |
      |----|------------------------------------|
      |  1 | absolute Ruhelage                  |
      |  2 | geringe Beeinträchtigung           |
      |  3 | durchschnittliche Beeinträchtigung |
      |  4 | Beeinträchtigung gegeben           |
      |  5 | Ruhelage                           |
  - name: lookup_realty_location_assessment
    x-displayName: RealtyLocationAssessment
    description: |-
      | Value                                         | Name     |
      |-----------------------------------------------|----------|
      | <span class="text-enumvalue">very good</span> | sehr gut |
      | <span class="text-enumvalue">good</span>      | gut      |
      | <span class="text-enumvalue">medium</span>    | mittel   |
      | <span class="text-enumvalue">bad</span>       | schlecht |
  - name: lookup_realty_commission_prospect_type
    x-displayName: RealtyCommissionProspectType
    description: >-
      Valid values depend on the realty `marketing_type`


      | Value                                                              |
      Name                       | Buy | Rent | |

      |--------------------------------------------------------------------|---------------------------|:---:|:---:|---|

      | <span class="text-enumvalue">percentage_text</span>                | %
      des Kaufpreises (Text)      | x |   |   |

      | <span class="text-enumvalue">percentage_value</span>               | %
      des Kaufpreises (Wert)      | x |   |   |

      | <span class="text-enumvalue">monthly_rent_text</span>              | x
      Bruttomonatsmieten (Text)   |   | x |   |

      | <span class="text-enumvalue">monthly_rent_value</span>             | x
      Bruttomonatsmieten (Wert)   |   | x |   |

      | <span class="text-enumvalue">value</span>                          |
      Wert                          | x | x |   |

      | <span class="text-enumvalue">free</span>                           |
      Provision bezahlt der Abgeber | x | x |   |

      | <span class="text-enumvalue">principle_of_first_instruction</span> |
      Erstauftraggeberprinzip       |   | x | may not be set directly |
  - name: lookup_realty_commission_vendor_type
    x-displayName: RealtyCommissionVendorType
    description: >-
      Valid values depend on the realty `marketing_type`


      | Value                                                  | Name         |
      Buy | Rent |

      |--------------------------------------------------------|---------------|:---:|:---:|

      | <span class="text-enumvalue">percentage_value</span>   | % des
      Kaufpreises | x |   |

      | <span class="text-enumvalue">monthly_rent_value</span> | x
      Monatsmieten    |   | x |

      | <span class="text-enumvalue">value</span>              |
      Wert              | x | x |
x-tagGroups:
  - name: Calls
    tags:
      - activity
      - appointment
      - acquisition
      - contact
      - file
      - inquiry
      - location
      - offer
      - searchprofile
      - realty
      - user
      - webhooks
  - name: Lookup Tables
    tags:
      - lookup_contact_economic_relationship
      - lookup_realty_areas
      - lookup_realty_rooms
      - lookup_realty_marketing_type
      - lookup_realty_prices
      - lookup_realty_status
      - lookup_realty_system_type
      - lookup_realty_type
      - lookup_realty_sub_type
      - lookup_realty_condition
      - lookup_realty_building_condition
      - lookup_realty_furnishing
      - lookup_realty_agency_agreement_type
      - lookup_realty_agency_agreement_method
      - lookup_realty_file_groupids
      - lookup_realty_ownership_type
      - lookup_realty_noise_level
      - lookup_realty_location_assessment
      - lookup_vendor_economic_relationship
      - lookup_realty_commission_prospect_type
      - lookup_realty_commission_vendor_type
