openapi: 3.0.1
info:
  title: VaultRE
  description: Please ensure all API requests use HTTP/1.1. See https://github.com/VaultGroup/api-samples
    for code samples.
  contact:
    name: VaultRE
    url: https://www.vaultre.com.au
    email: api@vaultre.com.au
  version: "1.3"
servers:
- url: https://ap-southeast-2.api.vaultre.com.au/api/v1.3
tags:
- name: advertising
  description: Operations related to property and agent advertising
- name: categories
  description: Operations related to categories
- name: lists
  description: Operations related to distribution lists
- name: contacts
  description: Operations related to contacts
- name: precincts
  description: Operations related to precincts
- name: user
  description: Operations related to users
- name: properties
  description: Operations related to properties
- name: conjunctionals
  description: Operations related to conjunctional property deals
- name: openhomes
  description: Operations related to open homes
- name: propertyOfferConditions
  description: Operations related to property offer conditions
- name: propertyOffer
  description: Operations related to property offers
- name: feedback
  description: Operations related to property feedback
- name: residentialProperties
  description: Operations related to residential properties
- name: ruralProperties
  description: Operations related to rural properties
- name: commercialProperties
  description: Operations related to commercial properties
- name: businessProperties
  description: Operations related to business properties
- name: landProperties
  description: Operations related to land properties
- name: holidayRentalProperties
  description: Operations related to holiday rental properties
- name: livestockProperties
  description: Operations related to livestock properties
- name: clearingSalesProperties
  description: Operations related to clearing sales properties
- name: search
  description: Operations related to performing searches
- name: suggest
  description: Operations related to suggest services
- name: buildings
  description: Operations related to buildings
- name: calendar
  description: Operations related to calendar events
- name: tasks
  description: Operations related to tasks
- name: corelogic
  description: Operations related to CoreLogic
- name: reinz
  description: Operations related to REINZ
- name: types
  description: Operations related to various VaultRE object types
- name: enquiries
  description: Operations related to listing enquiries
- name: fmsleads
  description: Operations related to FMS leads
- name: propertyStats
  description: Operations related to property portal stats
- name: integrator
  description: Special endpoints for access by integrating partners
- name: sms
  description: Operations related to SMS
- name: email
  description: Operations related to email
- name: templates
  description: Operations related to SMS and email templates
- name: mergeFields
  description: Operations related to merge fields for SMS and email templates
- name: maintenance
  description: Operations related to maintenance jobs
- name: inspections
  description: Operations related to inspections
- name: suppliers
  description: Operations related to creditors / suppliers
- name: bulk
  description: Bulk operations
- name: deals
  description: Operations related to commercial deals
- name: suburbs
  description: Operations related to suburbs
- name: messages
  description: Operations related to franchise and user messages
- name: keys
  description: Operations related to property keys
- name: eventStream
  description: Operations related to the event stream
- name: campaigns
  description: Operations related to marketing campaigns
- name: tenancies
  description: Operations related to tenancies
- name: invoices
  description: Operations related to invoices
- name: aml
  description: Operations related to AML checks
paths:

  /eventStream:
    get:
      tags:
      - eventStream
      summary: Poll the event stream
      description: Retrieve events from the event stream.
      operationId: getEventStream
      parameters:
      - name: eventsSince
        in: query
        description: Retrieve events since this date. Note that events expire after 30 days.
        schema:
          type: string
          format: date-time
      - name: cursor
        in: query
        description: Used for pagination. Retrieve results starting from this cursor position.
        schema:
          type: string
      responses:
        200:
          description: Events retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/EventStreamItem'
                  urls:
                    type: object
                    properties:
                      next:
                        type: string
      security:
      - Api-Key: []
        Bearer: []
  /integrator/accounts:
    get:
      tags:
      - integrator
      summary: Retrieve a list of accounts linked to this integrator
      description: Retrieve a list of accounts linked to this integrator
      operationId: getIntegratorAccounts
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Accounts retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Account'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /integrator/accounts/{id}:
    get:
      tags:
      - integrator
      summary: Retrieve an account linked to this integrator
      description: Retrieve an account linked to this integrator
      operationId: getIntegratorAccount
      parameters:
      - name: id
        in: path
        description: ID of the account
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Account retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
      security:
      - Api-Key: []
        Bearer: []
  /integrator/accounts/{id}/users:
    get:
      tags:
      - integrator
      summary: Retrieve a list of users for this account
      description: Retrieve a list of users for this account
      operationId: getIntegratorAccountUsers
      parameters:
      - name: id
        in: path
        description: ID of the account
        required: true
        schema:
          type: integer
          format: int64
      - name: email
        in: query
        description: Filter users matching the given email address
        schema:
          type: string
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - firstName
          - lastName
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Users retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /integrator/accounts/{accountid}/users/{id}:
    get:
      tags:
      - integrator
      summary: Retrieve a user for this account
      description: Retrieve a user for this account
      operationId: getIntegratorAccountUser
      parameters:
      - name: accountid
        in: path
        description: ID of the account
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the user
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: User retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
      security:
      - Api-Key: []
        Bearer: []
  /integrator/scopes:
    get:
      tags:
      - integrator
      summary: Retrieve a list of possible scopes for your API key
      description: Retrieve a list of possible scopes for your API key. Note that
        individual bearer tokens may have fewer scopes applied.
      operationId: getIntegratorScopes
      responses:
        200:
          description: Scopes retrieved
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
      security:
      - Api-Key: []
        Bearer: []
  /integrator/tokens:
    get:
      tags:
      - integrator
      summary: Retrieve a list of bearer tokens, with accounts, linked to this integrator
      description: Retrieve a list of bearer tokens, with accounts, linked to this
        integrator
      operationId: getIntegratorTokens
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: accountId
        in: query
        description: Filter tokens belonging to this account ID
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Tokens retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Token'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /integrator/validateUser:
    post:
      tags:
      - integrator
      summary: Validate a user's credentials
      description: Validate a user's credentials
      operationId: validateIntegratorUser
      requestBody:
        description: Credential object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Credential'
        required: true
      responses:
        200:
          description: API Call completed successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  userId:
                    type: integer
                    format: int64
                  accountId:
                    type: integer
                    format: int64
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /integrator/merge-fields:
    get:
      tags:
      - integrator
      summary: Retrieve available merge fields for an account
      description: |-
        Integrator-authenticated version of the merge fields endpoint.
        Returns available merge fields for a given template type and delivery method for the specified account.
        The account must be enabled for the integrator.
        When `context` is omitted, returns a tiered response grouping fields by their availability requirements.
        When `context` is provided, returns a flat response containing only the fields usable in that context.
      operationId: getIntegratorMergeFields
      parameters:
      - name: account_id
        in: query
        description: ID of the account to fetch merge fields for. Must be enabled for this integrator.
        required: true
        schema:
          type: integer
          format: int64
      - name: template_type
        in: query
        description: Template type ID (e.g. market_report, buyer_match, property_alert).
        required: true
        schema:
          type: string
      - name: delivery_method
        in: query
        description: Delivery method to filter fields by. Defaults to email.
        schema:
          type: string
          enum:
          - email
          - sms
          - cloud_letter
          default: email
      - name: context
        in: query
        description: |-
          Context ID (e.g. contact_only, contact_property_sale). When provided the response
          is a flat list of fields usable in that context. When omitted the response is tiered
          showing all availability levels.
        schema:
          type: string
      - name: include_custom
        in: query
        description: Include account-specific custom contact and property merge fields.
        schema:
          type: boolean
          default: false
      - name: search
        in: query
        description: Filter fields by matching against the field name, description, or token.
        schema:
          type: string
      responses:
        200:
          description: Merge fields retrieved
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/MergeFieldsTieredResponse'
                - $ref: '#/components/schemas/MergeFieldsFlatResponse'
        400:
          description: account_id is required, or an invalid parameter value was supplied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        404:
          description: Account not found or not enabled for this integrator
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/{salelease}/{lifeid}/externalStats:
    put:
      tags:
      - integrator
      summary: Integrator property statistics
      description: Update the property stats
      operationId: updateExternalPropertyStats
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease
        required: true
        schema:
          type: string
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: List of property stats
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateIntegratorPropertyStats'
        required: true
      responses:
        200:
          description: Property stats updated
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UpdateIntegratorPropertyStats'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    post:
      tags:
      - integrator
      summary: Integrator property statistics
      description: Add or update a property stat
      operationId: updateExternalPropertyStat
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease
        required: true
        schema:
          type: string
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Property stat to add or update
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IntegratorPropertyStat'
        required: true
      responses:
        200:
          description: Property stats updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntegratorPropertyStat'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /scopes:
    get:
      tags:
      - integrator
      summary: Retrieve a list of granted scopes for this bearer token
      description: Retrieve a list of granted scopes for this bearer token
      operationId: getTokenScopes
      responses:
        200:
          description: Scopes retrieved
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
      security:
      - Api-Key: []
        Bearer: []
  /responseCodes:
    get:
      tags:
      - types
      summary: Retrieve a list of response codes used in this API
      description: Retrieve a list of response codes used in this API
      operationId: getResponseCodes
      responses:
        200:
          description: Response codes retrieved
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ResponseCode'
      security:
      - Api-Key: []
  /types/propertyClass:
    get:
      tags:
      - types
      summary: Retrieve a list of property classes
      description: Retrieve a list of property classes
      operationId: getPropertyClasses
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Property classes retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyClass'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /types/propertyType:
    get:
      tags:
      - types
      summary: Retrieve a list of property types
      description: Retrieve a list of property types applicable to this account
      operationId: getPropertyTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Property types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /types/customUnsubscribe:
    get:
      tags:
      - types
      summary: Retrieve a list of custom unsubscribe types
      description: Retrieve a list of custom unsubscribe types for this account
      operationId: getCustomUnsubscribeTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Custom unsubscribe types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/UnsubscribeType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /types/contactInterest:
    get:
      tags:
      - types
      summary: Retrieve a list of contact interest types
      description: Retrieve a list of contact interest types
      operationId: getContactInterestTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Contact interest types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactInterest'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /types/entityTypes:
    get:
      tags:
      - types
      summary: Retrieve a list of contact entity types
      description: Retrieve a list of contact entity types
      operationId: getContactEntityTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/EntityType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /types/externalLinks:
    get:
      tags:
      - types
      summary: Retrieve a list of property external link types
      description: Retrieve a list of property external link types
      operationId: getExternalLinkTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ExternalLinkType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /types/contactnotes:
    get:
      tags:
      - types
      summary: Retrieve a list of contact note types for this account
      description: Retrieve a list of contact note types for this account
      operationId: getContactNoteTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Note types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactNoteType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /types/contactnotes/{id}:
    get:
      tags:
      - types
      summary: Retrieve a single contact note type
      description: Retrieve a single contact note type
      operationId: getContactNoteType
      parameters:
      - name: id
        in: path
        description: ID of the note type
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Note type retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactNoteType'
      security:
      - Api-Key: []
        Bearer: []
  /types/propertynotes:
    get:
      tags:
      - types
      summary: Retrieve a list of property note types for this account
      description: Retrieve a list of property note types for this account
      operationId: getPropertyNoteTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Note types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyNoteType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /types/propertynotes/{id}:
    get:
      tags:
      - types
      summary: Retrieve a single property note type
      description: Retrieve a single property note type
      operationId: getPropertyNoteType
      parameters:
      - name: id
        in: path
        description: ID of the note type
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Note type retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyNoteType'
      security:
      - Api-Key: []
        Bearer: []
  /buildings:
    get:
      tags:
      - buildings
      summary: Retrieve a list of buildings
      description: Retrieve a list of buildings
      operationId: getBuildings
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Buildings retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Building'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - buildings
      summary: Create a building record
      description: Create a building record
      operationId: addBuilding
      requestBody:
        description: Building object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddUpdateBuilding'
        required: true
      responses:
        200:
          description: Building already exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Building'
        201:
          description: Building created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Building'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /buildings/{id}:
    get:
      tags:
      - buildings
      summary: Retrieve a single building
      description: Retrieve a single building
      operationId: getBuilding
      parameters:
      - name: id
        in: path
        description: ID of the building
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Building retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Building'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - buildings
      summary: Update the building
      description: Update the building
      operationId: updateBuilding
      parameters:
      - name: id
        in: path
        description: ID of the building
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Building object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateBuilding'
        required: true
      responses:
        200:
          description: Building updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Building'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - buildings
      summary: Delete the building
      description: Delete the building
      operationId: deleteBuilding
      parameters:
      - name: id
        in: path
        description: ID of the building
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Building deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /categories/contact/groups:
    get:
      tags:
      - categories
      summary: Retrieve a list of contact category groups
      description: Retrieve a list of contact category groups
      operationId: getContactCategoryGroups
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Contact category groups retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CategoryGrouping'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - categories
      summary: Create a contact category grouping
      description: Create a contact category grouping
      operationId: addContactCategoryGroup
      requestBody:
        description: Category Grouping object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddUpdateCategoryGrouping'
        required: true
      responses:
        201:
          description: Category grouping created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CategoryGroupingSimple'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /categories/contact/groups/{id}:
    get:
      tags:
      - categories
      summary: Retrieve a single contact category group
      description: Retrieve a single contact category group
      operationId: getContactCategoryGroup
      parameters:
      - name: id
        in: path
        description: ID of the category group
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Category group retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CategoryGrouping'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - categories
      summary: Update a contact category grouping
      description: Update a contact category grouping
      operationId: updateContactCategoryGroup
      parameters:
      - name: id
        in: path
        description: ID of the category group
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Category Grouping object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddUpdateCategoryGrouping'
        required: true
      responses:
        200:
          description: Category grouping updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CategoryGroupingSimple'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /categories/contact/groups/{id}/categories:
    get:
      tags:
      - categories
      summary: Retrieve a list of categories in this contact category group
      description: Retrieve a list of categories in this contact category group
      operationId: getContactCategoryGroupCategories
      parameters:
      - name: id
        in: path
        description: ID of the category group
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Categories retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Category'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - categories
      summary: Create a contact category in this grouping
      description: Create a contact category in this grouping
      operationId: addContactCategoryGroupCategory
      parameters:
      - name: id
        in: path
        description: ID of the category group
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Category object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddUpdateCategory'
        required: true
      responses:
        201:
          description: Category created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /categories/contact/groups/{groupingid}/categories/{id}:
    get:
      tags:
      - categories
      summary: Retrieve a single category in this contact category group
      description: Retrieve a single category in this contact category group
      operationId: getContactCategoryGroupCategory
      parameters:
      - name: groupingid
        in: path
        description: ID of the category group
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the category
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Category retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - categories
      summary: Update a contact category in this grouping
      description: Update a contact category in this grouping
      operationId: updateContactCategoryGroupCategory
      parameters:
      - name: groupingid
        in: path
        description: ID of the category group
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the category
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Category object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddUpdateCategory'
        required: true
      responses:
        200:
          description: Category updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /categories/contact:
    get:
      tags:
      - categories
      summary: Retrieve a list of contact categories
      description: Retrieve a list of contact categories
      operationId: getContactCategories
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Categories retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Category'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /categories/contact/{id}:
    get:
      tags:
      - categories
      summary: Retrieve a single contact category
      description: Retrieve a single contact category
      operationId: getContactCategory
      parameters:
      - name: id
        in: path
        description: ID of the category
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Category retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
      security:
      - Api-Key: []
        Bearer: []
  /categories/property/groups:
    get:
      tags:
      - categories
      summary: Retrieve a list of property category groups
      description: Retrieve a list of property category groups
      operationId: getPropertyCategoryGroups
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Property category groups retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CategoryGrouping'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /categories/property/groups/{id}:
    get:
      tags:
      - categories
      summary: Retrieve a single property category group
      description: Retrieve a single property category group
      operationId: getPropertyCategoryGroup
      parameters:
      - name: id
        in: path
        description: ID of the category group
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Category group retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CategoryGrouping'
      security:
      - Api-Key: []
        Bearer: []
  /categories/property:
    get:
      tags:
      - categories
      summary: Retrieve a list of property categories
      description: Retrieve a list of property categories
      operationId: getPropertyCategories
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Categories retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Category'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /categories/property/{id}:
    get:
      tags:
      - categories
      summary: Retrieve a single property category
      description: Retrieve a single property category
      operationId: getPropertyCategory
      parameters:
      - name: id
        in: path
        description: ID of the category
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Category retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
      security:
      - Api-Key: []
        Bearer: []
  /contacts:
    get:
      tags:
      - contacts
      summary: Retrieve a list of contacts
      description: Retrieve a list of contacts
      operationId: getContacts
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - name: lists
        in: query
        description: Filter contacts belonging to distribution list IDs
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      - name: categories
        in: query
        description: Filter contacts belonging to category IDs
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      - name: entityType
        in: query
        description: Filter contacts by entity type
        schema:
          type: integer
          format: int64
      - name: archived
        in: query
        description: Filter contacts by archived status
        schema:
          type: boolean
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - firstName
          - lastName
          - inserted
          - modified
          - touched
      - $ref: '#/components/parameters/sortOrder'
      - name: marketingUser
        in: query
        description: Filter by marketing user(s)
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      - name: marketingUserPosition
        in: query
        description: Used in conjuction with marketingUser, filter by marketing user
          position ID
        schema:
          type: integer
          format: int64
      - name: accessBy
        in: query
        description: Filter contacts accessible by these user IDs. NOTE - Use the ID "-1" to filter contacts which are accessible by Everyone.
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      responses:
        200:
          description: Contacts retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Contact'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - contacts
      summary: Create a contact
      description: Create a contact
      operationId: addContact
      requestBody:
        description: Contact object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddContact'
        required: true
      responses:
        201:
          description: Contact created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/{id}:
    get:
      tags:
      - contacts
      summary: Retrieve a single contact
      description: Retrieve a single contact
      operationId: getContact
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Contact retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - contacts
      summary: Update a single contact
      description: Update a single contact
      operationId: updateContact
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Contact object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateContact'
        required: true
      responses:
        200:
          description: Contact updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - contacts
      summary: Delete a contact
      description: Delete a contact
      operationId: deleteContact
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Contact deleted
          content: {}
        400:
          description: Invalid data
          content: {}
        403:
          description: User does not have permission to delete contacts
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/{id}/sms:
    post:
      tags:
      - contacts
      - sms
      summary: Send an SMS to this contact
      description: Send an SMS to this contact from the authenticated user or selected
        user (charges may apply).
      operationId: sendContactSMS
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: SMS object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SMS'
        required: true
      responses:
        201:
          description: SMS message queued to be sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have permission to send SMS
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/sms:
    post:
      tags:
      - contacts
      - sms
      summary: Send multiple SMS messages to contacts
      description: Send multiple SMS messages to these contacts from the authenticated
        user or selected user (charges may apply). Maximum 50 recipients in any one
        request.
      operationId: sendBulkContactSMS
      requestBody:
        description: Array of SMS objects
        content:
          application/json:
            schema:
              type: object
              properties:
                user:
                  $ref: '#/components/schemas/ID'
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/BulkSMS'
        required: true
      responses:
        201:
          description: SMS messages queued to be sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have permission to send SMS
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/{id}/email:
    post:
      tags:
      - contacts
      - email
      summary: Send an email to this contact
      description: Send an email to this contact from the authenticated user or selected
        user (if provided).
      operationId: sendContactEmail
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Email object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Email'
        required: true
      responses:
        201:
          description: Email message queued to be sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have permission to send email
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/email:
    post:
      tags:
      - contacts
      - email
      summary: Send multiple emails to contacts
      description: Send multiple emails to these contacts from the authenticated user
        or selected user (if provided). Maximum 50 recipients in any one request.
      operationId: sendBulkContactEmail
      requestBody:
        description: Array of Email objects
        content:
          application/json:
            schema:
              type: object
              properties:
                user:
                  $ref: '#/components/schemas/ID'
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/BulkEmail'
        required: true
      responses:
        201:
          description: Email messages queued to be sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have permission to send email
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/{id}/context:
    get:
      tags:
      - contacts
      summary: Retrieve contextual information about this contact
      description: Retrieve contextual information about this contact
      operationId: getContactContext
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Contact context retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactContext'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/recentlyAccessed:
    get:
      tags:
      - contacts
      summary: Retrieve a list of recently accessed contacts
      description: Retrieve a list of recently accessed contacts
      operationId: getRecentlyAccessedContacts
      parameters:
      - name: archived
        in: query
        description: Filter contacts by archived status
        schema:
          type: boolean
      responses:
        200:
          description: Contacts retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Contact'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/{id}/notes:
    get:
      tags:
      - contacts
      summary: Retrieve a list of notes attached to this contact
      description: Retrieve a list of notes attached to this contact
      operationId: getContactNotes
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - name: types
        in: query
        description: Filter notes with type IDs
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Contact notes retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactNote'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - contacts
      summary: Add a note to this contact
      description: Add a note to this contact
      operationId: addContactNote
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Contact note object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddContactNote'
        required: true
      responses:
        201:
          description: Contact note created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactNoteExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/notes:
    post:
      tags:
      - contacts
      summary: Add multiple contact notes
      description: Add multiple contact notes in a batch. Maximum 100 notes in any
        one request.
      operationId: addBulkContactNote
      requestBody:
        description: Bulk contact note object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkContactNote'
        required: true
      responses:
        201:
          description: Contact notes created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/{contactid}/notes/{id}:
    get:
      tags:
      - contacts
      summary: Retrieve a single contact note
      description: Retrieve a single contact note
      operationId: getContactNote
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the note
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Contact note retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactNoteExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - contacts
      summary: Update a contact note
      description: Update a contact note
      operationId: updateContactNote
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the note
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Contact Note object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateContactNote'
        required: true
      responses:
        200:
          description: Note updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactNoteExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have permission to modify contact notes or note
            is read-only
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - contacts
      summary: Delete a contact note
      description: Delete a contact note
      operationId: deleteContactNote
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the note
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Contact Note deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have permission to delete contact notes or note
            is read-only
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/{id}/categories:
    get:
      tags:
      - contacts
      summary: Retrieve a list of categories to which this contact belongs
      description: Retrieve a list of categories to which this contact belongs
      operationId: getCategoriesContact
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Contact categories retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Category'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - contacts
      summary: Update the categories to which this contact belongs
      description: Update the categories to which this contact belongs
      operationId: updateCategoriesContact
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Items object containing array of contact category IDs
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Contact categories updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    post:
      tags:
      - contacts
      summary: Attach one or more categories to this contact
      description: Attach one or more categories to this contact
      operationId: attachCategoryContact
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Items object containing array of contact category IDs
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Contact category attached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/{id}/categories/remove:
    put:
      tags:
      - contacts
      summary: Remove categories from this contact
      description: Remove categories from this contact
      operationId: removeCategoryContact
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Items object containing array of contact category IDs
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Contact categories removed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/{id}/custom:
    get:
      tags:
      - contacts
      summary: Retrieve a list of custom fields for this contact
      description: Retrieve a list of custom fields for this contact
      operationId: getContactCustomFields
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Custom fields retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CustomFieldGrouping'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - contacts
      summary: Update the custom fields for this contact
      description: Update the custom fields for this contact
      operationId: updateContactCustomFields
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Items object containing array of custom fields
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/AddUpdateCustomField'
        required: true
      responses:
        200:
          description: Custom fields updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/{id}/files:
    get:
      tags:
      - contacts
      summary: Retrieve a list of files attached to this contact
      description: Retrieve a list of files attached to this contact
      operationId: getContactFiles
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Files retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactFile'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - contacts
      summary: Attach a file to this contact
      description: Attach a file to this contact. This endpoint is suitable for smaller
        files (<5MB). For larger files use POST /contacts/{id}/files/upload
      operationId: addContactFile
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        content:
          multipart/form-data:
            schema:
              required:
              - file
              properties:
                file:
                  type: string
                  description: The file to be uploaded
                  format: binary
        required: true
      responses:
        201:
          description: File attached successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactFile'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/{id}/files/upload:
    post:
      tags:
      - contacts
      summary: Attach a file to this contact
      description: Attach a file to this contact. This endpoint returns an upload_url
        where the file data can be PUT. Can be used for large files.
      operationId: addContactFileUpload
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: File upload object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactFileUpload'
        required: true
      responses:
        201:
          description: File record created. File data can now be posted to the returned
            URL.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileToBeUploaded'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/{contactid}/files/{id}:
    get:
      tags:
      - contacts
      summary: Retrieve a single file attached to this contact
      description: Retrieve a single file attached to this contact
      operationId: getContactFile
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the file
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: File retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactFile'
      security:
      - Api-Key: []
        Bearer: []
    delete:
      tags:
      - contacts
      summary: Delete a file attached to this contact
      description: Delete a file attached to this contact
      operationId: deleteContactFile
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the file
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: File deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/{id}/events:
    get:
      tags:
      - contacts
      - calendar
      summary: Retrieve a list of calendar events attached to this contact
      description: Retrieve a list of calendar events attached to this contact
      operationId: getContactEvents
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - start
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Calendar events retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CalendarEvent'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/{id}/touch:
    put:
      tags:
      - contacts
      summary: Mark the contact record as touched
      description: Mark the contact record as touched
      operationId: touchContact
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Contact touched
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/{id}/requirements:
    get:
      tags:
      - contacts
      summary: Retrieve a list of buying/renting requirements for this contact
      description: Retrieve a list of buying/renting requirements for this contact
      operationId: getContactRequirements
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - name: active
        in: query
        description: Filter active/inactive requirements
        schema:
          type: boolean
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Requirements retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactRequirement'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - contacts
      summary: Add a requirement for this contact
      description: Add a requirement for this contact
      operationId: addContactRequirement
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Contact Requirement object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateContactRequirement'
        required: true
      responses:
        201:
          description: Contact Requirement created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactRequirement'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/{contactid}/requirements/{id}:
    get:
      tags:
      - contacts
      summary: Retrieve a single buying/renting requirement for this contact
      description: Retrieve a single buying/renting requirement for this contact
      operationId: getContactRequirement
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the requirement
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Contact requirement retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactRequirement'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - contacts
      summary: Update a requirement for this contact
      description: Update a requirement for this contact
      operationId: updateContactRequirement
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the requirement
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Contact Requirement object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateContactRequirement'
        required: true
      responses:
        200:
          description: Contact Requirement updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactRequirement'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - contacts
      summary: Delete a buying/renting requirement for the contact
      description: Delete a buying/renting requirement for the contact
      operationId: deleteContactRequirement
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the requirement
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Requirement deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /user:
    get:
      tags:
      - user
      summary: Retrieve information about the authenticated user
      description: Retrieve information about the authenticated user
      operationId: getUser
      responses:
        200:
          description: User retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAndTeams'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - user
      summary: Update the authenticated user
      description: Update the authenticated user
      operationId: updateMeUser
      requestBody:
        description: User object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateUser'
        required: true
      responses:
        200:
          description: User updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserAndTeams'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /user/subscriptions:
    get:
      tags:
      - user
      summary: Retrieve active subscriptions for the authenticated user
      description: Retrieve active subscriptions for the authenticated user
      operationId: getUserSubscriptions
      responses:
        200:
          description: User subscriptions retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserSubscriptions'
      security:
      - Api-Key: []
        Bearer: []
  /user/teams:
    get:
      tags:
      - user
      summary: Retrieve a list of teams to which the authenticated user belongs
      description: Retrieve a list of teams to which the authenticated user belongs
      operationId: getUserTeams
      parameters:
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: User teams retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Team'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /user/summary/grossCommission:
    get:
      tags:
      - user
      summary: Retrieve a summary of recent gross commission for the authenticated
        user
      description: Retrieve a month by month summary of recent gross commission (previous
        six months) for the authenticated user
      operationId: getUserSummaryGrossCommission
      responses:
        200:
          description: Summary retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  months:
                    type: array
                    items:
                      type: object
                      properties:
                        date:
                          type: string
                        value:
                          type: number
                          format: float
      security:
      - Api-Key: []
        Bearer: []
  /user/upcomingOfferConditions:
    get:
      tags:
      - user
      summary: Retrieve a list of upcoming offer conditions for the authenticated
        user
      description: Retrieve a list of upcoming offer conditions for the authenticated
        user
      operationId: getUserUpcomingOfferConditions
      parameters:
      - name: days
        in: query
        description: Number of days to look ahead and back (default 8)
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Conditions retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyOfferConditionWithProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /user/upcomingOpenHomes:
    get:
      tags:
      - user
      summary: Retrieve a list of upcoming open homes for the authenticated user
      description: Retrieve a list of upcoming open homes for the authenticated user
      operationId: getUserUpcomingOpenHomes
      parameters:
      - name: days
        in: query
        description: Number of days to look ahead and back (default 7)
        schema:
          type: integer
          format: int64
      - name: includeRecent
        in: query
        description: Include recently completed open homes
        schema:
          type: boolean
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Open Homes retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/OpenHomeWithProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /user/tenancyInspections:
    get:
      tags:
      - user
      summary: Retrieve a list of upcoming and recent inspections for the authenticated
        user
      description: Retrieve a list of upcoming and recent inspections for the authenticated
        user
      operationId: getUserTenancyInspections
      parameters:
      - name: days
        in: query
        description: Number of days to look ahead and back (default 7). Only used
          if start and end are undefined.
        schema:
          type: integer
          format: int64
      - name: includeRecent
        in: query
        description: Include recently completed inspections. Used in conjuction with
          days argument.
        schema:
          type: boolean
      - name: start
        in: query
        description: Filter inspections starting on or after this datetime. Takes
          precendent over days argument.
        schema:
          type: string
          format: date-time
      - name: end
        in: query
        description: Filter inspections starting before this datetime. Takes precendent
          over days argument.
        schema:
          type: string
          format: date-time
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Inspections retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/InspectionWithProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /user/credentials:
    put:
      tags:
      - user
      summary: Update the credentials for the authenticated user
      description: Update the credentials for the authenticated user
      operationId: updateUserCredentials
      requestBody:
        description: Credential object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Credential'
        required: true
      responses:
        200:
          description: User credentials updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /user/signature:
    get:
      tags:
      - user
      summary: Retrieve the authenticated user's signature
      description: Retrieve the authenticated user's signature
      operationId: getUserSignature
      responses:
        200:
          description: Signature retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Signature'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - user
      summary: Update the signature for the authenticated user
      description: Update the signature for the authenticated user
      operationId: updateUserSignature
      requestBody:
        content:
          multipart/form-data:
            schema:
              required:
              - file
              properties:
                file:
                  type: string
                  description: PNG image of the signature
                  format: binary
        required: true
      responses:
        200:
          description: User signature updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Signature'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /user/photo:
    get:
      tags:
      - user
      summary: Retrieve the authenticated user's photograph
      description: Retrieve the authenticated user's photograph
      operationId: getUserPhoto
      responses:
        200:
          description: Photo retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPhoto'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - user
      summary: Update the photo for the authenticated user
      description: Update the photo for the authenticated user
      operationId: updateUserPhoto
      requestBody:
        content:
          multipart/form-data:
            schema:
              required:
              - file
              properties:
                file:
                  type: string
                  description: The photo file to be uploaded
                  format: binary
        required: true
      responses:
        200:
          description: User photo updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPhoto'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /account:
    get:
      tags:
      - user
      summary: Retrieve information about the authenticated account
      description: Retrieve information about the authenticated account
      operationId: getAccount
      responses:
        200:
          description: Account retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
      security:
      - Api-Key: []
        Bearer: []
  /account/users:
    get:
      tags:
      - user
      summary: Retrieve a list of users in the authenticated account
      description: Retrieve a list of users in the authenticated account
      operationId: getAccountUsers
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: team
        in: query
        description: Filter users belonging to the given team ID
        schema:
          type: integer
          format: int64
      - name: email
        in: query
        description: Filter users matching the given email address
        schema:
          type: string
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - firstname
          - lastname
          - inserted
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Account users retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - user
      summary: Add a new user in the authenticated account
      description: Add a new user
      operationId: addUser
      requestBody:
        description: User object
        content:
          application/json:
            schema:
              type: object
              required:
              - firstName
              - lastName
              - email
              - staffTypeId
              properties: 
                firstName:
                  type: string
                lastName:
                  type: string
                email:
                  type: string
                  format: email
                username:
                  type: string
                password:
                  type: string
                staffTypeId:
                  type: integer
                  format: int64
                  enum: [1, 2, 3, 4]
                  description: "1: Salesperson, 2: Administration, 3: Property Manager, 4: Principal"
                position:
                  type: string
                phoneNumbers:
                  type: array
                  items:
                    $ref: '#/components/schemas/PhoneNumber'
                profile:
                  type: string
                externalReference:
                  type: string
                ssoIdentifier:
                  type: string
                adminAccess:
                  type: boolean
                permissions:
                  type: object
                  properties:
                    canLogin:
                      type: boolean

      responses:
        201:
          description: User created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /account/users/{id}:
    get:
      tags:
      - user
      summary: Retrieve a single user from the account
      description: Retrieve a single user from the account
      operationId: getAccountUser
      parameters:
      - name: id
        in: path
        description: ID of the user
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: User retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - user
      summary: Update a user in the authenticated account
      description: Update a user
      operationId: updateUser
      parameters:
      - name: id
        in: path
        description: ID of user
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: User object
        content:
          application/json:
            schema:
              type: object
              properties: 
                firstName:
                  type: string
                lastName:
                  type: string
                email:
                  type: string
                  format: email
                position:
                  type: string
                username:
                  type: string
                password:
                  type: string
                phoneNumbers:
                  type: array
                  items:
                    $ref: '#/components/schemas/PhoneNumber'
                profile:
                  type: string
                externalReference:
                  type: string
                ssoIdentifier:
                  type: string
                adminAccess:
                  type: boolean
                permissions:
                  type: object
                  properties:
                    canLogin:
                      type: boolean
      responses:
        200:
          description: User updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body   
    delete:
      tags:
      - user
      summary: Delete a user in the authenticated account
      description: Delete a user in the authenticated account
      operationId: deleteUser
      parameters:
      - name: id
        in: path
        description: ID of user
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: User deleted
          content: {}
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body   

  /account/users/{id}/teams:
    get:
      tags:
      - user
      summary: Retrieve a list of teams to which this user belongs
      description: Retrieve a list of teams to which this user belongs
      operationId: getAccountUserTeams
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: id
        in: path
        description: ID of the user
        required: true
        schema:
          type: integer
          format: int64
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: User teams retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Team'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /account/teams:
    get:
      tags:
      - user
      summary: Retrieve a list of teams in the authenticated account
      description: Retrieve a list of teams in the authenticated account
      operationId: getAccountTeams
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Account teams retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Team'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /account/teams/{id}:
    get:
      tags:
      - user
      summary: Retrieve a single team from the account
      description: Retrieve a single team from the account
      operationId: getAccountTeam
      parameters:
      - name: id
        in: path
        description: ID of the team
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Team retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Team'
      security:
      - Api-Key: []
        Bearer: []
  /account/enquirySources:
    get:
      tags:
      - user
      summary: Retrieve a list of enquiry sources in the authenticated account
      description: Retrieve a list of enquiry sources in the authenticated account
      operationId: getAccountEnquirySources
      parameters:
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Enquiry Sources retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/EnquirySource'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - user
      summary: Add a new Enquiry Source type
      description: Add a new Enquiry Source type
      operationId: addEnquirySource
      requestBody:
        description: Enquiry Source object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateEnquirySource'
        required: true
      responses:
        201:
          description: Enquiry Source created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnquirySource'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /account/enquirySources/{id}:
    get:
      tags:
      - user
      summary: Retrieve a single enquiry source
      description: Retrieve a single enquiry source
      operationId: getAccountEnquirySource
      parameters:
      - name: id
        in: path
        description: ID of the enquiry source
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Enquiry Source retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnquirySource'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - user
      summary: Update an Enquiry Source type
      description: Update an Enquiry Source type
      operationId: updateEnquirySource
      parameters:
      - name: id
        in: path
        description: ID of the enquiry source
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Enquiry Source object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateEnquirySource'
        required: true
      responses:
        200:
          description: Enquiry Source updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnquirySource'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /account/pricing:
    get:
      tags:
      - user
      summary: Retrieve pricing information for the authenticated account
      description: Retrieve pricing information for the authenticated account
      operationId: getAccountPricing
      responses:
        200:
          description: Account pricing retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountPricing'
      security:
      - Api-Key: []
        Bearer: []
  /account/upcomingOpenHomes:
    get:
      tags:
      - user
      summary: Retrieve a list of upcoming open homes for the authenticated account
      description: Retrieve a list of upcoming open homes for the authenticated account
      operationId: getAccountUpcomingOpenHomes
      parameters:
      - name: days
        in: query
        description: Number of days to look ahead and back (default 7)
        schema:
          type: integer
          format: int64
      - name: includeRecent
        in: query
        description: Include recently completed open homes
        schema:
          type: boolean
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Open Homes retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/OpenHomeWithProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /account/folders/filingCabinet:
    get:
      tags:
      - user
      summary: Retrieve a list of folders available in the Filing Cabinet for this
        account
      description: Retrieve a list of folders available in the Filing Cabinet for
        this account
      operationId: getAccountFilingCabinetFolders
      parameters:
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Folders retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyFileFolder'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /account/branches:
    get:
      tags:
      - user
      summary: Retrieve a list of branches configured for this account
      description: Retrieve a list of branches configured for this account
      operationId: getAccountBranches
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Branches retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/AccountBranch'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /account/propertyPortals:
    get:
      tags:
      - user
      summary: Retrieve a list of property portals for this account
      description: Retrieve a list of property portals to which this account can publish
        properties
      operationId: getAccountPortals
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Portals retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PortalAccess'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /account/trustAccounts:
    get:
      tags:
      - user
      summary: Retrieve a list of trust accounts for this account
      description: Retrieve a list of trust accounts for this account
      operationId: getTrustAccounts
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Trust accounts retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/TrustAccount'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /verifyPassword:
    post:
      tags:
      - user
      summary: Verify the authenticated user's password
      description: Verify the authenticated user's password
      operationId: verifyUserPassword
      requestBody:
        description: User's password
        content:
          application/json:
            schema:
              type: object
              properties:
                password:
                  type: string
        required: true
      responses:
        200:
          description: API Call completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /sso:
    get:
      tags:
      - user
      summary: Generate a single-sign-on URL
      description: Generate a single-sign-on URL for the VaultRE web application
      operationId: getSSOUrl
      responses:
        200:
          description: URL retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  url:
                    type: string
      security:
      - Api-Key: []
        Bearer: []
  /properties:
    get:
      tags:
      - properties
      summary: Retrieve a list of properties
      description: Retrieve a list of properties
      operationId: getProperties
      parameters:
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Property'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}:
    get:
      tags:
      - properties
      summary: Retrieve a single property
      description: Retrieve a single property
      operationId: getProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
    delete:
      tags:
      - properties
      summary: Delete a property
      description: Delete a property
      operationId: deleteProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Property deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/sale:
    get:
      tags:
      - properties
      summary: Retrieve a list of sale properties
      description: Retrieve a list of sale properties
      operationId: getPropertiesLifeSale
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
          - publishedToWeb
      - $ref: '#/components/parameters/sortOrder'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/types'
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
            - management
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
            - management
      - name: propertyClass
        in: query
        description: Filter by a list of property classes
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - residential
            - commercial
            - business
            - rural
            - holidayRental
            - land
      - name: availableOnly
        in: query
        description: Only used to if propertyClass equals 'commercial'
        schema:
          type: boolean
      - name: tenantedInvestmentOnly
        in: query
        description: Only used to if propertyClass equals 'commercial'
        schema:
          type: boolean
      - name: minBed
        in: query
        description: Filter properties greater than or equal to min beds
        schema:
          type: integer
          format: int64
      - name: minBath
        in: query
        description: Filter properties greater than or equal to min baths
        schema:
          type: integer
          format: int64
      - name: minCar
        in: query
        description: Filter properties greater than or equal to min car spaces
        schema:
          type: integer
          format: int64
      - name: minPricePerSqm
        in: query
        description: Filter properties greater than or equal to min price per sqm
        schema:
          type: number
          format: float
      - name: maxPricePerSqm
        in: query
        description: Filter properties less than or equal to max price per sqm
        schema:
          type: number
          format: float
      - name: minPrice
        in: query
        description: Filter properties greater than or equal to min price
        schema:
          type: number
          format: float
      - name: maxPrice
        in: query
        description: Filter properties less than or equal to max price
        schema:
          type: number
          format: float
      - name: minLand
        in: query
        description: Filter properties greater than or equal to min land. Must supply
          an area type.
        schema:
          type: number
          format: float
      - name: maxLand
        in: query
        description: Filter properties less than or equal to max land. Must supply
          an area type.
        schema:
          type: number
          format: float
      - name: areaType
        in: query
        description: Specify the units for minLand, maxLand filters
        schema:
          type: string
          enum:
          - sqm
          - acre
          - hectare
      - name: minFloor
        in: query
        description: Filter properties greater than or equal to min floor.
        schema:
          type: number
          format: float
      - name: maxFloor
        in: query
        description: Filter properties less than or equal to max floor.
        schema:
          type: number
          format: float
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyLife'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []  
  /properties/sale/fallenSaleWithdrawn:
    get:
      tags:
      - properties
      summary: Retrieve a list of fallen or withdrawn property sales
      description: Retrieve a list of fallen or withdrawn property sales
      operationId: getFallenWithdrawnSales
      parameters:
      - $ref: '#/components/parameters/fallenBefore'
      - $ref: '#/components/parameters/fallenSince'
      - $ref: '#/components/parameters/withdrawnBefore'
      - $ref: '#/components/parameters/withdrawnSince'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyLife'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/lease:
    get:
      tags:
      - properties
      summary: Retrieve a list of lease properties
      description: Retrieve a list of lease properties
      operationId: getPropertiesLifeLease
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/types'
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
            - management
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
            - management
      - name: propertyClass
        in: query
        description: Filter by a list of property classes
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - residential
            - commercial
            - business
            - rural
            - holidayRental
            - land
      - name: availableOnly
        in: query
        description: Only used to if propertyClass equals 'commercial'
        schema:
          type: boolean
      - name: tenantedInvestmentOnly
        in: query
        description: Only used to if propertyClass equals 'commercial'
        schema:
          type: boolean
      - name: minBed
        in: query
        description: Filter properties greater than or equal to min beds
        schema:
          type: integer
          format: int64
      - name: minBath
        in: query
        description: Filter properties greater than or equal to min baths
        schema:
          type: integer
          format: int64
      - name: minCar
        in: query
        description: Filter properties greater than or equal to min car spaces
        schema:
          type: integer
          format: int64
      - name: minPricePerSqm
        in: query
        description: Filter properties greater than or equal to min price per sqm
        schema:
          type: number
          format: float
      - name: maxPricePerSqm
        in: query
        description: Filter properties less than or equal to max price per sqm
        schema:
          type: number
          format: float
      - name: minPrice
        in: query
        description: Filter properties greater than or equal to min price
        schema:
          type: number
          format: float
      - name: maxPrice
        in: query
        description: Filter properties less than or equal to max price
        schema:
          type: number
          format: float
      - name: minLand
        in: query
        description: Filter properties greater than or equal to min land. Must supply
          an area type.
        schema:
          type: number
          format: float
      - name: maxLand
        in: query
        description: Filter properties less than or equal to max land. Must supply
          an area type.
        schema:
          type: number
          format: float
      - name: areaType
        in: query
        description: Specify the units for minLand, maxLand filters
        schema:
          type: string
          enum:
          - sqm
          - acre
          - hectare
      - name: minFloor
        in: query
        description: Filter properties greater than or equal to min floor.
        schema:
          type: number
          format: float
      - name: maxFloor
        in: query
        description: Filter properties less than or equal to max floor.
        schema:
          type: number
          format: float
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyLife'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/notes:
    get:
      tags:
      - properties
      summary: Retrieve a list of notes attached to this property
      description: Retrieve a list of notes attached to this property
      operationId: getPropertyNotes
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: types
        in: query
        description: Filter notes with type IDs
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Property notes retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyNote'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - properties
      summary: Add a note to this property
      description: Add a note to this property
      operationId: addPropertyNote
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Property note object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddPropertyNote'
        required: true
      responses:
        201:
          description: Property note created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyNote'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{propertyid}/notes/{id}:
    get:
      tags:
      - properties
      summary: Retrieve a single property note
      description: Retrieve a single property note
      operationId: getPropertyNote
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the note
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property note retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyNote'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      summary: Update a property note
      description: Update a property note
      operationId: updatePropertyNote
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the note
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Property Note object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePropertyNote'
        required: true
      responses:
        200:
          description: Note updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactNote'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have permission to modify property notes or note
            is read-only
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - properties
      summary: Delete a property note
      description: Delete a property note
      operationId: deletePropertyNote
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the note
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Property Note deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have permission to delete property notes or note
            is read-only
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/photos:
    get:
      tags:
      - properties
      summary: Retrieve a list of photos for this property
      description: Retrieve a list of photos for this property
      operationId: getPropertyPhotos
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Property photos retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyPhoto'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - properties
      summary: Upload a new photo to this property
      description: Upload a new photo to this property. This endpoint is suitable
        for smaller files (<5MB). For larger files use POST /properties/{id}/photos/upload
      operationId: addPropertyPhoto
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        content:
          multipart/form-data:
            schema:
              required:
              - photo
              - published
              - type
              properties:
                photo:
                  type: string
                  description: The photo to be uploaded (GIF/PNG/JPG only)
                  format: binary
                caption:
                  type: string
                  description: The caption for the photo
                published:
                  type: boolean
                  description: Is the photo published or unpublished
                type:
                  type: string
                  description: The type of photo
                  enum:
                  - Photograph
                  - Floorplan
        required: true
      responses:
        201:
          description: Photo uploaded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyPhoto'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
    delete:
      tags:
      - properties
      summary: Delete multiple photos from this property
      description: Delete multiple photos from this property in a single operation. This
        endpoint allows bulk deletion of up to 50 photos at once.
      operationId: deletePropertyPhotos
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Bulk delete request containing list of photo IDs
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PropertyPhotoBulkDeleteRequest'
        required: true
      responses:
        200:
          description: Bulk delete completed (some photos may have failed)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyPhotoBulkDeleteResponse'
        400:
          description: Some or all photos could not be deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyPhotoBulkDeleteResponse'
        403:
          description: User does not have permission to delete photos from this property
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        404:
          description: Property not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        422:
          description: Invalid input data (e.g., empty items list, too many items)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/photos/upload:
    post:
      tags:
      - properties
      summary: Upload a new photo to this property
      description: Upload a new photo to this property. This endpoint returns an upload_url
        where the file data can be PUT. Can be used for large files.
      operationId: addPropertyPhotoUpload
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Photo upload object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PropertyPhotoUpload'
        required: true
      responses:
        201:
          description: Photo record created. Photo data can now be posted to the returned
            URL.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileToBeUploaded'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{id}/photos/order:
    put:
      tags:
      - properties
      summary: Reorder property photos
      description: Reorder the photos for a property by providing a new sequence of photo IDs. This endpoint is designed for mobile applications to allow drag-and-drop photo reordering. All photo IDs for the property must be included in the request.
      operationId: updatePropertyPhotoOrder
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Array of photo IDs in the desired order
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PropertyPhotoOrderRequest'
        required: true
      responses:
        200:
          description: Photo order updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyPhotoOrderResponse'
        400:
          description: Invalid request data
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  msg:
                    type: string
                    description: Error message describing the validation failure
                    example: "INVALID_PHOTO_IDS: [99999]"
                  code:
                    type: string
                    example: "INVALID_PHOTO_IDS: [99999]"
        403:
          description: User does not have permission to edit this property
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        404:
          description: Property not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        422:
          description: Validation error - empty photo array or malformed request
          content:
            application/json:
              schema:
                type: object
                properties:
                  messages:
                    type: object
                    properties:
                      photoIds:
                        type: array
                        items:
                          type: string
                        example: ["Shorter than minimum length 1."]
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/photos/{id}:
    get:
      tags:
      - properties
      summary: Retrieve a single photo for this property
      description: Retrieve a single photo for this property
      operationId: getPropertyPhoto
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the photo
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property photo retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyPhoto'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      summary: Update photo metadata
      description: Update a property photo's caption, published status, or photo type (Photograph/Floorplan)
      operationId: updatePropertyPhoto
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the photo
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Photo metadata to update
        content:
          application/json:
            schema:
              type: object
              properties:
                caption:
                  type: string
                  description: Updated caption for the photo
                published:
                  type: boolean
                  description: Whether the photo should be published to web
                type:
                  type: string
                  description: Photo type
                  enum:
                  - Photograph
                  - Floorplan
            examples:
              setAsFloorplan:
                summary: Mark photo as floorplan
                value:
                  type: Floorplan
                  caption: Ground floor plan
              setAsPhoto:
                summary: Mark as standard photo
                value:
                  type: Photograph
              updateCaption:
                summary: Update caption only
                value:
                  caption: Updated living room photo
      responses:
        200:
          description: Property photo updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyPhoto'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have permission to update this property
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        404:
          description: Property or photo not found
          content: {}
        422:
          description: Validation error - empty or malformed request body
          content:
            application/json:
              schema:
                type: object
                properties:
                  messages:
                    type: object
        500:
          description: Unexpected server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
    delete:
      tags:
      - properties
      summary: Delete a photo attached to this property
      description: Delete a photo attached to this property
      operationId: deletePropertyPhoto
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the photo
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Property photo deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/photos/{id}/tags:
    get:
      tags:
      - properties
      summary: Retrieve a list of tags for this property photo
      description: Retrieve a list of tags for this property photo, derived from Machine
        Learning analysis of property photos
      operationId: getPropertyPhotoTags
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the photo
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
          - confidence
      - $ref: '#/components/parameters/sortOrder'
      - name: minimumConfidence
        in: query
        description: Only return tags with a confidence greater than or equal to this
          number
        schema:
          type: number
          format: float
      - name: maximumConfidence
        in: query
        description: Only return tags with a confidence less than or equal to this
          number
        schema:
          type: number
          format: float
      responses:
        200:
          description: Photo tags retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PhotoTag'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/tags:
    get:
      tags:
      - properties
      summary: Retrieve a list of tags for this property
      description: Retrieve a list of tags for this property, derived from Machine
        Learning analysis of property photos
      operationId: getPropertyTags
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
          - confidence
      - $ref: '#/components/parameters/sortOrder'
      - name: minimumConfidence
        in: query
        description: Only return tags with a confidence greater than or equal to this
          number
        schema:
          type: number
          format: float
      - name: maximumConfidence
        in: query
        description: Only return tags with a confidence less than or equal to this
          number
        schema:
          type: number
          format: float
      responses:
        200:
          description: Property tags retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PhotoTag'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/categories:
    get:
      tags:
      - properties
      summary: Retrieve a list of categories to which this property belongs
      description: Retrieve a list of categories to which this property belongs
      operationId: getCategoriesForProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Property categories retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Category'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/activityLog:
    get:
      tags:
      - properties
      summary: Retrieve the activity log for a property
      description: Retrieve the activity log for a property
      operationId: getPropertyActivityLog
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Activity Log retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - properties
      summary: Add a property activity note
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      description: Add a property activity note
      operationId: addPropertyActivityNote
      requestBody:
        description: Activity Note Details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddPropertyActivityNote'
        required: true
      responses:
        201:
          description: Activity Note Added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{id}/files:
    get:
      tags:
      - properties
      summary: Retrieve a list of files attached to this property
      description: Retrieve a list of files attached to this property
      operationId: getPropertyFiles
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Property files retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyFile'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/{salelease}/{lifeid}/matchingContacts:
    get:
      tags:
      - properties
      summary: Retrieve a list of contacts with requirements matching this property
      description: Retrieve a list of contacts with requirements matching this property
      operationId: getPropertyMatchingContacts
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - firstName
          - lastName
          - touched
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Matching contacts retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/{salelease}/{lifeid}/files:
    get:
      tags:
      - properties
      summary: Retrieve a list of files attached to this property life
      description: Retrieve a list of files attached to this property life
      operationId: getPropertyFilesLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: public
        in: query
        description: Filter public files
        schema:
          type: boolean
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Property files retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyFile'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - properties
      summary: Attach a file to this property life
      description: Attach a file to this property life. This endpoint is suitable
        for smaller files (<5MB). For larger files use POST /properties/{id}/{salelease}/{lifeid}/files/upload
      operationId: addPropertyFileLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      requestBody:
        content:
          multipart/form-data:
            schema:
              required:
              - file
              properties:
                tenancyId:
                  description: For a lease life, to which tenancy does the file relate
                  type: integer
                  format: int64
                folders:
                  type: array
                  description: Assign file to these folders
                  items:
                    type: integer
                    format: int64
                file:
                  type: string
                  description: The file to be uploaded
                  format: binary
        required: true
      responses:
        201:
          description: File attached successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyFileWithFolders'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/{salelease}/{lifeid}/files/upload:
    post:
      tags:
      - properties
      summary: Attach a file to this property life
      description: Attach a file to this property life. This endpoint returns an upload_url
        where the file data can be PUT. Can be used for large files.
      operationId: addPropertyFileLifeUpload
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      requestBody:
        description: File upload object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PropertyFileWithFoldersUpload'
        required: true
      responses:
        201:
          description: File record created. File data can now be posted to the returned
            URL.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileToBeUploaded'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{propertyid}/{salelease}/{lifeid}/files/{id}:
    get:
      tags:
      - properties
      summary: Retrieve a single file attached to this property life
      description: Retrieve a single file attached to this property life
      operationId: getPropertyFileLife
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: id
        in: path
        description: ID of the file
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property file retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyFileWithFolders'
      security:
      - Api-Key: []
        Bearer: []
    delete:
      tags:
      - properties
      summary: Delete a single file attached to this property life
      description: Delete a single file attached to this property life
      operationId: deletePropertyFileLife
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: id
        in: path
        description: ID of the file
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Property file deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/{salelease}/{lifeid}/feedback:
    get:
      tags:
      - properties
      - feedback
      summary: Retrieve a list of property feedback attached to this life
      description: Retrieve a list of property feedback attached to this life
      operationId: getPropertyFeedbackLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: feedbackAfter
        in: query
        description: Filter feedback occurring on or after this date
        schema:
          type: string
          format: date
      - name: feedbackBefore
        in: query
        description: Filter feedback occurring before this date
        schema:
          type: string
          format: date
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - feedbackDate
      - $ref: '#/components/parameters/sortOrder'
      - name: contacts
        in: query
        description: Filter feedback from certain contacts
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      responses:
        200:
          description: Property feedback retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - properties
      - feedback
      summary: Attach feedback to this property life
      description: Attach feedback to this property life
      operationId: attachFeedbackToPropertyLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Property Feedback object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddPropertyFeedback'
        required: true
      responses:
        201:
          description: Feedback attached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactNoteAndContactExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{propertyid}/{salelease}/{lifeid}/feedback/{id}:
    get:
      tags:
      - properties
      - feedback
      summary: Retrieve a property feedback item attached to this life
      description: Retrieve a property feedback item attached to this life
      operationId: getSinglePropertyFeedbackLife
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the feedback
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property feedback retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactNoteAndContactExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      - feedback
      summary: Update a feedback item
      description: Update a feedback item
      operationId: updateFeedback
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the feedback
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Property Feedback object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePropertyFeedback'
        required: true
      responses:
        200:
          description: Feedback updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactNoteAndContactExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - properties
      - feedback
      summary: Delete a property feedback item
      description: Delete a property feedback item
      operationId: deletePropertyFeedback
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the feedback
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Feedback deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/{salelease}/{lifeid}/feedback/summary:
    get:
      tags:
      - properties
      - feedback
      summary: Retrieve a summary of property feedback feedback attached to this life
      description: Retrieve a summary showing how many times each contact has provided
        feedback/interacted with this property life
      operationId: getPropertyFeedbackLifeSummary
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: feedbackAfter
        in: query
        description: Filter feedback occurring on or after this date
        schema:
          type: string
          format: date
      - name: feedbackBefore
        in: query
        description: Filter feedback occurring before this date
        schema:
          type: string
          format: date
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - count
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Property feedback summary retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/{salelease}/{lifeid}/openHomes:
    get:
      tags:
      - properties
      summary: Retrieve a list of open homes attached to this life
      description: Retrieve a list of open homes attached to this life
      operationId: getPropertyOpenHomes
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: startingAfter
        in: query
        description: Filter open homes occurring on or after this date
        schema:
          type: string
          format: date
      - name: startingBefore
        in: query
        description: Filter open homes occurring before this date
        schema:
          type: string
          format: date
      - name: userid
        in: query
        description: Filter open homes attached to this user
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - start
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Open Homes retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/OpenHome'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
 
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - properties
      summary: Create a new open home for this property life
      description: Create a new open home for this property life
      operationId: addOpenHome
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Open Home object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateOpenHome'
        required: true
      responses:
        201:
          description: Open Home created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpenHome'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{propertyid}/{salelease}/{lifeid}/openHomes/{id}:
    get:
      tags:
      - properties
      summary: Retrieve a single open home attached to this life
      description: Retrieve a single open home attached to this life
      operationId: getPropertyOpenHome
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the open home
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Open Home retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpenHome'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      summary: Update an open home for this property life
      description: Update an open home for this property life
      operationId: updateOpenHome
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the open home
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Open Home object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateOpenHome'
        required: true
      responses:
        200:
          description: Open Home updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpenHome'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - properties
      summary: Delete an open home
      description: Delete an open home
      operationId: deleteOpenHome
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the open home
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Open Home deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/sale/{lifeid}/owners:
    get:
      tags:
      - properties
      - contacts
      summary: Retrieve a list of owners attached to this property life
      description: Retrieve a list of owners attached to this property life
      operationId: getPropertyLifeOwners
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Owners retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      - contacts
      summary: Update owners for this property life
      description: Update owners for this property life
      operationId: updateOwnersForProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Items object containing array of contact IDs
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Owners updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    post:
      tags:
      - properties
      - contacts
      summary: Attach an owner to this property life
      description: Attach an owner to this property life
      operationId: attachOwnerToProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Contact ID object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Owner attached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{propertyid}/lease/{lifeid}/landlords/{id}:
    delete:
      tags:
      - properties
      - contacts
      summary: Remove a landlord from this property life
      description: Remove a landlord from this property life
      operationId: deleteLandlordForProperty
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the landlord
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Landlord removed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/lease/{lifeid}/tenancy/{tenancyid}/tenants/{id}:
    delete:
      tags:
      - properties
      - contacts
      summary: Remove a tenant from this property life
      description: Remove a tenant from this property life
      operationId: deleteTenantForProperty
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: tenancyid
        in: path
        description: ID of the tenancy
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the tenant
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Tenant removed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/sale/{lifeid}/owners/{id}:
    delete:
      tags:
      - properties
      - contacts
      summary: Remove an owner from this property life
      description: Remove an owner from this property life
      operationId: deleteOwnerForProperty
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the owner
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Owner removed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/sale/{lifeid}/purchasers/{id}:
    delete:
      tags:
      - properties
      - contacts
      summary: Remove a purchaser from this property life
      description: Remove a purchaser from this property life
      operationId: deletePurchaserForProperty
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the purchaser
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Purchaser removed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/lease/{lifeid}/landlords:
    get:
      tags:
      - properties
      - contacts
      summary: Retrieve a list of landlords attached to this property life
      description: Retrieve a list of landlords attached to this property life
      operationId: getPropertyLifeLandlords
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Landlords retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      - contacts
      summary: Update landlords for this property life
      description: Update landlords for this property life
      operationId: updateLandlordsForProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Items object containing array of contact IDs
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Landlords updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    post:
      tags:
      - properties
      - contacts
      summary: Attach a landlord to this property life
      description: Attach a landlord to this property life
      operationId: attachLandlordToProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Contact ID object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Landlord attached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{id}/sale/{lifeid}/purchasers:
    get:
      tags:
      - properties
      - contacts
      summary: Retrieve a list of purchasers attached to this property life
      description: Retrieve a list of purchasers attached to this property life
      operationId: getPropertyLifePurchasers
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Purchasers retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      - contacts
      summary: Update purchasers for this property life
      description: Update purchasers for this property life
      operationId: updatePurchasersForProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Items object containing array of contact IDs
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Purchasers updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    post:
      tags:
      - properties
      - contacts
      summary: Attach a purchaser to this property life
      description: Attach a purchaser to this property life
      operationId: attachPurchaserToProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Contact ID object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Purchaser attached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{id}/lease/{lifeid}/tenancy/{tenancyid}/tenants:
    get:
      tags:
      - properties
      - contacts
      summary: Retrieve a list of tenants attached to this tenancy
      description: Retrieve a list of tenants attached to this tenancy
      operationId: getPropertyLifeTenancyTenants
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: tenancyid
        in: path
        description: ID of the tenancy
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Tenants retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      - contacts
      summary: Update tenants for this tenancy
      description: Update tenants for this tenancy
      operationId: updateTenantsForProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: tenancyid
        in: path
        description: ID of the tenancy
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Items object containing array of contact IDs
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Tenants updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    post:
      tags:
      - properties
      - contacts
      summary: Attach a tenant to this tenancy
      description: Attach a tenant to this tenancy
      operationId: attachTenantToTenancy
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: tenancyid
        in: path
        description: ID of the tenancy
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Contact ID object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Tenant attached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/residential/sale:
    get:
      tags:
      - residentialProperties
      summary: Retrieve a list of residential sale properties
      description: Retrieve a list of residential sale properties
      operationId: getResidentialSaleProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/listingAuthoritySince'
      - $ref: '#/components/parameters/listingAuthorityBefore'
      - $ref: '#/components/parameters/webLiveDateSince'
      - $ref: '#/components/parameters/webLiveDateBefore'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ResidentialSaleProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - residentialProperties
      summary: Add a residential sale property
      description: Add a residential sale property
      operationId: addResidentialSaleProperty
      requestBody:
        description: Residential sale property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateResidentialSaleProperty'
        required: true
      responses:
        201:
          description: Property created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResidentialSalePropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/residential/sale/available:
    get:
      tags:
      - residentialProperties
      summary: Retrieve a list of available residential sale properties
      description: Retrieve a list of available residential sale properties. This
        is the same as the /properties/residential/sale endpoint, with certain filters
        pre-applied.
      operationId: getAvailableResidentialSaleProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ResidentialSaleProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/residential/sale/{id}:
    get:
      tags:
      - residentialProperties
      summary: Retrieve a single residential sale property
      description: Retrieve a single residential sale property
      operationId: getResidentialSaleProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResidentialSalePropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - residentialProperties
      summary: Update a residential sale property
      description: Update a residential sale property
      operationId: updateResidentialSaleProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Residential sale property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateResidentialSaleProperty'
        required: true
      responses:
        200:
          description: Property updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResidentialSalePropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/residential/sale/sold:
    get:
      tags:
      - residentialProperties
      summary: Retrieve a list of sold residential sale properties
      description: Retrieve a list of sold residential sale properties
      operationId: getResidentialSoldProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/includeConditional'
      - $ref: '#/components/parameters/conditionalSince'
      - $ref: '#/components/parameters/conditionalBefore'
      - $ref: '#/components/parameters/includeFallen'
      - $ref: '#/components/parameters/fallenSince'
      - $ref: '#/components/parameters/fallenBefore'
      - $ref: '#/components/parameters/unconditionalSince'
      - $ref: '#/components/parameters/unconditionalBefore'
      - $ref: '#/components/parameters/settlementSince'
      - $ref: '#/components/parameters/settlementBefore'
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/minSalePrice'
      - $ref: '#/components/parameters/maxSalePrice'
      - $ref: '#/components/parameters/minBed'
      - $ref: '#/components/parameters/minBath'
      - $ref: '#/components/parameters/minCar'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/lifeIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - conditional
          - unconditional
          - settlement
          - suburb
          - searchPrice
          - salePrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ResidentialSoldProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/residential/lease:
    get:
      tags:
      - residentialProperties
      summary: Retrieve a list of residential lease properties
      description: Retrieve a list of residential lease properties
      operationId: getResidentialLeaseProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/leasedSince'
      - $ref: '#/components/parameters/leasedBefore'
      - $ref: '#/components/parameters/letAgreed'
      - $ref: '#/components/parameters/listingAuthoritySince'
      - $ref: '#/components/parameters/listingAuthorityBefore'
      - $ref: '#/components/parameters/webLiveDateSince'
      - $ref: '#/components/parameters/webLiveDateBefore'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - management
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - management
      - name: availableOnly
        in: query
        description: Filter available lease properties only
        schema:
          type: boolean
      - name: leasedOnly
        in: query
        description: Filter leased properties only
        schema:
          type: boolean
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ResidentialLeaseProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - residentialProperties
      summary: Add a residential lease property
      description: Add a residential lease property
      operationId: addResidentialLeaseProperty
      requestBody:
        description: Residential lease property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateResidentialLeaseProperty'
        required: true
      responses:
        201:
          description: Property created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResidentialLeasePropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/residential/lease/available:
    get:
      tags:
      - residentialProperties
      summary: Retrieve a list of available residential lease properties
      description: Retrieve a list of available residential lease properties. This
        is the same as the /properties/residential/lease endpoint, with certain filters
        pre-applied.
      operationId: getAvailableResidentialLeaseProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ResidentialLeaseProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/residential/lease/{id}:
    get:
      tags:
      - residentialProperties
      summary: Retrieve a single residential lease property
      description: Retrieve a single residential lease property
      operationId: getResidentialLeaseProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResidentialLeasePropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - residentialProperties
      summary: Update a residential lease property
      description: Update a residential lease property
      operationId: updateResidentialLeaseProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Residential lease property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateResidentialLeaseProperty'
        required: true
      responses:
        200:
          description: Property updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResidentialLeasePropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{id}/features:
    get:
      tags:
      - properties
      summary: Retrieve features for this property
      description: Retrieve features for this property
      operationId: getPropertyFeatures
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Features retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyFeatureGrouping'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      summary: Update features for this property
      description: Update features for this property
      operationId: updatePropertyFeatures
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Items object containing array of feature groups
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/UpdatePropertyFeatureGrouping'
        required: true
      responses:
        200:
          description: Features updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/land/sale:
    get:
      tags:
      - landProperties
      summary: Retrieve a list of land properties
      description: Retrieve a list of land properties
      operationId: getLandProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/listingAuthoritySince'
      - $ref: '#/components/parameters/listingAuthorityBefore'
      - $ref: '#/components/parameters/webLiveDateSince'
      - $ref: '#/components/parameters/webLiveDateBefore'
      - $ref: '#/components/parameters/minSalePrice'
      - $ref: '#/components/parameters/maxSalePrice'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/LandProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - landProperties
      summary: Add a land property
      description: Add a land property
      operationId: addLandProperty
      requestBody:
        description: Land property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateLandProperty'
        required: true
      responses:
        201:
          description: Property created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LandPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/land/sale/available:
    get:
      tags:
      - landProperties
      summary: Retrieve a list of available land properties
      description: Retrieve a list of available land properties. This is the same
        as the /properties/land/sale endpoint, with certain filters pre-applied.
      operationId: getAvailableLandProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/LandProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/land/sale/{id}:
    get:
      tags:
      - landProperties
      summary: Retrieve a single land property
      description: Retrieve a single land property
      operationId: getLandProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LandPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - landProperties
      summary: Update a land property
      description: Update a land property
      operationId: updateLandProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Land property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateLandProperty'
        required: true
      responses:
        200:
          description: Property updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LandPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/land/sale/sold:
    get:
      tags:
      - landProperties
      summary: Retrieve a list of sold land properties
      description: Retrieve a list of sold land properties
      operationId: getLandSoldProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/includeConditional'
      - $ref: '#/components/parameters/conditionalSince'
      - $ref: '#/components/parameters/conditionalBefore'
      - $ref: '#/components/parameters/includeFallen'
      - $ref: '#/components/parameters/fallenSince'
      - $ref: '#/components/parameters/fallenBefore'
      - $ref: '#/components/parameters/unconditionalSince'
      - $ref: '#/components/parameters/unconditionalBefore'
      - $ref: '#/components/parameters/settlementSince'
      - $ref: '#/components/parameters/settlementBefore'
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - conditional
          - unconditional
          - settlement
          - suburb
          - landArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/LandSoldProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/rural/sale:
    get:
      tags:
      - ruralProperties
      summary: Retrieve a list of rural properties
      description: Retrieve a list of rural properties
      operationId: getRuralProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/listingAuthoritySince'
      - $ref: '#/components/parameters/listingAuthorityBefore'
      - $ref: '#/components/parameters/webLiveDateSince'
      - $ref: '#/components/parameters/webLiveDateBefore'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/RuralProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - ruralProperties
      summary: Add a rural property
      description: Add a rural property
      operationId: addRuralProperty
      requestBody:
        description: Rural property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateRuralProperty'
        required: true
      responses:
        201:
          description: Property created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuralPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/rural/sale/available:
    get:
      tags:
      - ruralProperties
      summary: Retrieve a list of available rural properties
      description: Retrieve a list of available rural properties. This is the same
        as the /properties/rural/sale endpoint, with certain filters pre-applied.
      operationId: getAvailableRuralProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/RuralProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/rural/sale/{id}:
    get:
      tags:
      - ruralProperties
      summary: Retrieve a single rural property
      description: Retrieve a single rural property
      operationId: getRuralProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuralPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - ruralProperties
      summary: Update a rural property
      description: Update a rural property
      operationId: updateRuralProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Rural property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateRuralProperty'
        required: true
      responses:
        200:
          description: Property updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuralPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/rural/sale/sold:
    get:
      tags:
      - ruralProperties
      summary: Retrieve a list of sold rural properties
      description: Retrieve a list of sold rural properties
      operationId: getRuralSoldProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/includeConditional'
      - $ref: '#/components/parameters/conditionalSince'
      - $ref: '#/components/parameters/conditionalBefore'
      - $ref: '#/components/parameters/includeFallen'
      - $ref: '#/components/parameters/fallenSince'
      - $ref: '#/components/parameters/fallenBefore'
      - $ref: '#/components/parameters/unconditionalSince'
      - $ref: '#/components/parameters/unconditionalBefore'
      - $ref: '#/components/parameters/settlementSince'
      - $ref: '#/components/parameters/settlementBefore'
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/minSalePrice'
      - $ref: '#/components/parameters/maxSalePrice'
      - $ref: '#/components/parameters/minBed'
      - $ref: '#/components/parameters/minBath'
      - $ref: '#/components/parameters/minCar'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - conditional
          - unconditional
          - settlement
          - suburb
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/RuralSoldProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/commercial/sale:
    get:
      tags:
      - commercialProperties
      summary: Retrieve a list of commercial sale properties
      description: Retrieve a list of commercial sale properties
      operationId: getCommercialSaleProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/listingAuthoritySince'
      - $ref: '#/components/parameters/listingAuthorityBefore'
      - $ref: '#/components/parameters/webLiveDateSince'
      - $ref: '#/components/parameters/webLiveDateBefore'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CommercialSaleProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - commercialProperties
      summary: Add a commercial sale property
      description: Add a commercial sale property
      operationId: addCommercialSaleProperty
      requestBody:
        description: Commercial Sale property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateCommercialSaleProperty'
        required: true
      responses:
        201:
          description: Property created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialSalePropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/commercial/sale/available:
    get:
      tags:
      - commercialProperties
      summary: Retrieve a list of available commercial sale properties
      description: Retrieve a list of available commercial sale properties. This is
        the same as the /properties/commercial/sale endpoint, with certain filters
        pre-applied.
      operationId: getAvailableCommercialSaleProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CommercialSaleProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/commercial/sale/{id}:
    get:
      tags:
      - commercialProperties
      summary: Retrieve a single commercial sale property
      description: Retrieve a single commercial sale property
      operationId: getCommercialSaleProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialSalePropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - commercialProperties
      summary: Update a commercial sale property
      description: Update a commercial sale property
      operationId: updateCommercialSaleProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Commercial sale property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateCommercialSaleProperty'
        required: true
      responses:
        200:
          description: Property updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialSalePropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/commercial/sale/sold:
    get:
      tags:
      - commercialProperties
      summary: Retrieve a list of sold commercial properties
      description: Retrieve a list of sold commercial properties
      operationId: getCommercialSoldProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/includeConditional'
      - $ref: '#/components/parameters/conditionalSince'
      - $ref: '#/components/parameters/conditionalBefore'
      - $ref: '#/components/parameters/includeFallen'
      - $ref: '#/components/parameters/fallenSince'
      - $ref: '#/components/parameters/fallenBefore'
      - $ref: '#/components/parameters/unconditionalSince'
      - $ref: '#/components/parameters/unconditionalBefore'
      - $ref: '#/components/parameters/settlementSince'
      - $ref: '#/components/parameters/settlementBefore'
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/minSalePrice'
      - $ref: '#/components/parameters/maxSalePrice'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - conditional
          - unconditional
          - settlement
          - suburb
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CommercialSoldProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/commercial/lease/leased:
    get:
      tags:
      - commercialProperties
      summary: Retrieve a list of leased commercial properties
      description: Retrieve a list of leased commercial properties
      operationId: getCommercialLeasedProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/includeConditional'
      - $ref: '#/components/parameters/conditionalSince'
      - $ref: '#/components/parameters/conditionalBefore'
      - $ref: '#/components/parameters/includeFallen'
      - $ref: '#/components/parameters/fallenSince'
      - $ref: '#/components/parameters/fallenBefore'
      - $ref: '#/components/parameters/unconditionalSince'
      - $ref: '#/components/parameters/unconditionalBefore'
      - $ref: '#/components/parameters/settlementSince'
      - $ref: '#/components/parameters/settlementBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - conditional
          - unconditional
          - settlement
          - suburb
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CommercialSoldProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/commercial/lease:
    get:
      tags:
      - commercialProperties
      summary: Retrieve a list of commercial lease properties
      description: Retrieve a list of commercial lease properties
      operationId: getCommercialLeaseProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/listingAuthoritySince'
      - $ref: '#/components/parameters/listingAuthorityBefore'
      - $ref: '#/components/parameters/webLiveDateSince'
      - $ref: '#/components/parameters/webLiveDateBefore'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
            - management
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
            - management
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: availableOnly
        in: query
        description: Filter available lease properties only
        schema:
          type: boolean
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CommercialLeaseProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - commercialProperties
      summary: Add a commercial lease property
      description: Add a commercial lease property
      operationId: addCommercialLeaseProperty
      requestBody:
        description: Commercial Lease property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateCommercialLeaseProperty'
        required: true
      responses:
        201:
          description: Property created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialLeasePropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/commercial/lease/available:
    get:
      tags:
      - commercialProperties
      summary: Retrieve a list of available commercial lease properties
      description: Retrieve a list of available commercial lease properties. This
        is the same as the /properties/commercial/lease endpoint, with certain filters
        pre-applied.
      operationId: getAvailableCommercialLeaseProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: availableOnly
        in: query
        description: Filter available lease properties only
        schema:
          type: boolean
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CommercialLeaseProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/commercial/lease/{id}:
    get:
      tags:
      - commercialProperties
      summary: Retrieve a single commercial lease property
      description: Retrieve a single commercial lease property
      operationId: getCommercialLeaseProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialLeasePropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - commercialProperties
      summary: Update a commercial lease property
      description: Update a commercial lease property
      operationId: updateCommercialLeaseProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Commercial property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateCommercialLeaseProperty'
        required: true
      responses:
        200:
          description: Property updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialLeasePropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/business/sale:
    get:
      tags:
      - businessProperties
      summary: Retrieve a list of business properties
      description: Retrieve a list of business properties
      operationId: getBusinessProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/listingAuthoritySince'
      - $ref: '#/components/parameters/listingAuthorityBefore'
      - $ref: '#/components/parameters/webLiveDateSince'
      - $ref: '#/components/parameters/webLiveDateBefore'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/BusinessProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - businessProperties
      summary: Add a business property
      description: Add a business property
      operationId: addBusinessProperty
      requestBody:
        description: Business property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateBusinessProperty'
        required: true
      responses:
        201:
          description: Property created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BusinessPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/business/sale/available:
    get:
      tags:
      - businessProperties
      summary: Retrieve a list of available business properties
      description: Retrieve a list of available business properties. This is the same
        as the /properties/business/sale endpoint, with certain filters pre-applied.
      operationId: getAvailableBusinessProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/BusinessProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/business/sale/{id}:
    get:
      tags:
      - businessProperties
      summary: Retrieve a single business property
      description: Retrieve a single business property
      operationId: getBusinessProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BusinessPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - businessProperties
      summary: Update a business property
      description: Update a business property
      operationId: updateBusinessProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Business property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateBusinessProperty'
        required: true
      responses:
        200:
          description: Property updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BusinessPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/business/sale/sold:
    get:
      tags:
      - businessProperties
      summary: Retrieve a list of sold business properties
      description: Retrieve a list of sold business properties
      operationId: getBusinessSoldProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/includeConditional'
      - $ref: '#/components/parameters/conditionalSince'
      - $ref: '#/components/parameters/conditionalBefore'
      - $ref: '#/components/parameters/includeFallen'
      - $ref: '#/components/parameters/fallenSince'
      - $ref: '#/components/parameters/fallenBefore'
      - $ref: '#/components/parameters/unconditionalSince'
      - $ref: '#/components/parameters/unconditionalBefore'
      - $ref: '#/components/parameters/settlementSince'
      - $ref: '#/components/parameters/settlementBefore'
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/minSalePrice'
      - $ref: '#/components/parameters/maxSalePrice'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - conditional
          - unconditional
          - settlement
          - suburb
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/BusinessSoldProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/holidayRental/lease:
    get:
      tags:
      - holidayRentalProperties
      summary: Retrieve a list of holiday rental properties
      description: Retrieve a list of holiday rental properties
      operationId: getHolidayRentalProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/listingAuthoritySince'
      - $ref: '#/components/parameters/listingAuthorityBefore'
      - $ref: '#/components/parameters/webLiveDateSince'
      - $ref: '#/components/parameters/webLiveDateBefore'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - management
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - management
      - name: availableOnly
        in: query
        description: Filter available lease properties only
        schema:
          type: boolean
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/HolidayRentalProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - holidayRentalProperties
      summary: Add a holiday rental property
      description: Add a holiday rental property
      operationId: addHolidayRentalProperty
      requestBody:
        description: Holiday rental property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateHolidayRentalProperty'
        required: true
      responses:
        201:
          description: Property created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HolidayRentalPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/holidayRental/lease/available:
    get:
      tags:
      - holidayRentalProperties
      summary: Retrieve a list of available holiday rental properties
      description: Retrieve a list of available holiday rental properties. This is
        the same as the /properties/holidayRental/lease endpoint, with certain filters
        pre-applied.
      operationId: getAvailableHolidayRentalProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
          - landArea
          - floorArea
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/HolidayRentalProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/holidayRental/lease/{id}:
    get:
      tags:
      - holidayRentalProperties
      summary: Retrieve a single holiday rental property
      description: Retrieve a single holiday rental property
      operationId: getHolidayRentalProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HolidayRentalPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - holidayRentalProperties
      summary: Update a holiday rental property
      description: Update a holiday rental property
      operationId: updateHolidayRentalProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Holiday Rental property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateHolidayRentalProperty'
        required: true
      responses:
        200:
          description: Property updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HolidayRentalPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{class}/{salelease}/{id}/custom:
    get:
      tags:
      - properties
      summary: Retrieve a list of custom fields for a given property
      description: Retrieve a list of custom fields for a given property
      operationId: getPropertyCustomFields
      parameters:
      - name: class
        in: path
        description: Class of property
        required: true
        schema:
          type: string
      - name: salelease
        in: path
        description: Filter by sale or lease properties
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Custom fields retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CustomFieldGrouping'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      summary: Update the custom fields for this property
      description: Update the custom fields for this property
      operationId: updatePropertyCustomFields
      parameters:
      - name: class
        in: path
        description: Class of property
        required: true
        schema:
          type: string
      - name: salelease
        in: path
        description: Filter by sale or lease properties
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Items object containing array of custom fields
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/AddUpdateCustomField'
        required: true
      responses:
        200:
          description: Custom fields updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /suggest/suburb:
    get:
      tags:
      - suggest
      summary: Search for a suburb
      description: Search for a suburb
      operationId: suggestSuburb
      parameters:
      - name: term
        in: query
        description: The suburb name (partial match) or postcode (exact match) to
          search by
        required: true
        schema:
          type: string
      - name: groupSuburbs
        in: query
        description: If true, group suburbs by an associated district
        schema:
          type: boolean
      - name: exactMatch
        in: query
        description: Exactly match a suburb based on `term`
        schema:
          type: boolean
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Suggestions retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Suburb'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /suggest/district:
    get:
      tags:
      - suggest
      summary: Search for a district
      description: Search for a district, optionally by name of one of the suburbs within it
      operationId: suggestDistrict
      parameters:
      - name: term
        in: query
        description: The suburb name (partial match) or district name to
          search by
        required: true
        schema:
          type: string
      - name: matchSuburb
        in: query
        description: Search for a district based on `term` matching the name of a suburb
        schema:
          type: boolean
          default: true
      - name: exactMatch
        in: query
        description: Exactly match a district or suburb based on `term`
        schema:
          type: boolean
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Suggestions retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/NZDistrict'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /suggest/address/corelogic:
    get:
      tags:
      - suggest
      - corelogic
      summary: Search for an address in CoreLogic
      description: Search for an address in CoreLogic
      operationId: suggestAddressCoreLogic
      parameters:
      - name: term
        in: query
        description: The term to search by
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Suggestions retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CoreLogicAddressSuggest'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /corelogic/properties/{id}:
    get:
      tags:
      - corelogic
      summary: Retrieve a property from CoreLogic
      description: Retrieve a property from CoreLogic using the CoreLogic property
        ID
      operationId: getCoreLogicProperty
      parameters:
      - name: id
        in: path
        description: CoreLogic ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreLogicProperty'
      security:
      - Api-Key: []
        Bearer: []
  /corelogic/properties/{id}/avm:
    get:
      tags:
      - corelogic
      summary: Retrieve an AVM estimate for this CoreLogic property
      description: Retrieve an AVM estimate for this CoreLogic property
      operationId: getCoreLogicAvm
      parameters:
      - name: id
        in: path
        description: CoreLogic ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: AVM retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreLogicAvm'
        403:
          description: User does not have correct CoreLogic subscription level
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /corelogic/properties/{id}/rentalavm:
    get:
      tags:
      - corelogic
      summary: Retrieve a rental AVM estimate for this CoreLogic property
      description: Retrieve a rental AVM estimate for this CoreLogic property
      operationId: getCoreLogicRentalAvm
      parameters:
      - name: id
        in: path
        description: CoreLogic ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Rental AVM retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoreLogicRentalAvm'
        403:
          description: User does not have correct CoreLogic subscription level
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /corelogic/disclaimers:
    get:
      tags:
      - corelogic
      summary: Retrieve CoreLogic disclaimers
      description: Retrieve CoreLogic disclaimers
      operationId: getCoreLogicDisclaimers
      responses:
        200:
          description: Disclaimers retrieved
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
      security:
      - Api-Key: []
        Bearer: []
  /search/properties/address:
    get:
      tags:
      - search
      summary: Search for properties by address
      description: Search for properties by address
      operationId: searchProperties
      parameters:
      - name: term
        in: query
        description: The term to search by
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Search results retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertySearchResult'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /search/contacts:
    get:
      tags:
      - search
      summary: Search for contacts by a variety of criteria
      description: Search for contacts by a variety of criteria
      operationId: searchContacts
      parameters:
      - name: name
        in: query
        description: Min 4 chars - The persons name or their partner's name
        schema:
          type: string
      - name: phone
        in: query
        description: Min 4 chars - The persons phone number
        schema:
          type: string
      - name: email
        in: query
        description: Min 4 chars - The persons emails
        schema:
          type: string
      - name: categories
        in: query
        description: Categories the person is part of
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      - name: fuzzy
        in: query
        description: If true the person can match on any of the queried parameters
          and not necessarily all of them. If false, they must match all queried parameters.
        schema:
          type: boolean
          default: true
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: archived
        in: query
        description: Filter by archived status
        schema:
          type: boolean
      - name: marketingUser
        in: query
        description: Filter by marketing user
        schema:
          type: integer
          format: int64
      - name: marketingUserPosition
        in: query
        description: Used in conjuction with marketingUser, filter by marketing user
          position ID
        schema:
          type: integer
          format: int64
      - name: editableOnly
        in: query
        description: If true, only return contacts that are editable by the user
        schema:
          type: boolean
      responses:
        200:
          description: Search results retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactSearchResult'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /search/contacts/name:
    get:
      tags:
      - search
      summary: Search for contacts by name
      description: Search for contacts by name
      operationId: searchContactsName
      parameters:
      - name: term
        in: query
        description: The term to search by
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: archived
        in: query
        description: Filter by archived status
        schema:
          type: boolean
      - name: marketingUser
        in: query
        description: Filter by marketing user
        schema:
          type: integer
          format: int64
      - name: marketingUserPosition
        in: query
        description: Used in conjuction with marketingUser, filter by marketing user
          position ID
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Search results retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactSearchResult'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /search/contacts/phone:
    get:
      tags:
      - search
      summary: Search for contacts by phone number (exact match)
      description: Search for contacts by phone number (exact match)
      operationId: searchContactsPhone
      parameters:
      - name: term
        in: query
        description: The term to search by
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: archived
        in: query
        description: Filter by archived status
        schema:
          type: boolean
      - name: marketingUser
        in: query
        description: Filter by marketing user
        schema:
          type: integer
          format: int64
      - name: marketingUserPosition
        in: query
        description: Used in conjuction with marketingUser, filter by marketing user
          position ID
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Search results retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactSearchResult'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /search/contacts/email:
    get:
      tags:
      - search
      summary: Search for contacts by email address (exact match)
      description: Search for contacts by email address (exact match)
      operationId: searchContactsEmail
      parameters:
      - name: term
        in: query
        description: The term to search by
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: archived
        in: query
        description: Filter by archived status
        schema:
          type: boolean
      - name: marketingUser
        in: query
        description: Filter by marketing user
        schema:
          type: integer
          format: int64
      - name: marketingUserPosition
        in: query
        description: Used in conjuction with marketingUser, filter by marketing user
          position ID
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Search results retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactSearchResult'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /search/buildings/name:
    get:
      tags:
      - search
      summary: Search for buildings by name
      description: Search for buildings by name
      operationId: searchBuildingsName
      parameters:
      - name: term
        in: query
        description: The term to search by
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Search results retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/BuildingSearchResult'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /calendar/events:
    get:
      tags:
      - calendar
      summary: Get a list of calendar events for the user or account
      description: Get a list of calendar events for the user or account
      operationId: getCalendarEvents
      parameters:
      - name: startingAfter
        in: query
        description: Filter events starting on or after this datetime
        schema:
          type: string
          format: date-time
      - name: startingBefore
        in: query
        description: Filter events starting before this datetime
        schema:
          type: string
          format: date-time
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - start
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Calendar events retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CalendarEvent'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - calendar
      summary: Add a calendar event
      description: Add a calendar event
      operationId: addCalendarEvent
      requestBody:
        description: Calendar event object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateCalendarEvent'
        required: true
      responses:
        201:
          description: Calendar event created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalendarEvent'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /calendar/events/{id}:
    get:
      tags:
      - calendar
      summary: Get a single calendar event
      description: Get a single calendar event
      operationId: getCalendarEvent
      parameters:
      - name: id
        in: path
        description: The ID of the calendar event
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Calendar event retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalendarEvent'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - calendar
      summary: Update a calendar event
      description: Update a calendar event
      operationId: updateCalendarEvent
      parameters:
      - name: id
        in: path
        description: ID of the calendar event
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Calendar event object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateCalendarEvent'
        required: true
      responses:
        200:
          description: Calendar event updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalendarEvent'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - calendar
      summary: Delete a calendar event
      description: Delete a calendar event
      operationId: deleteCalendarEvent
      parameters:
      - name: id
        in: path
        description: ID of the calendar event
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Calendar event deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /tasks:
    get:
      tags:
      - tasks
      summary: Get a list of tasks for the account or user
      description: Get a list of tasks for the account or user
      operationId: getTasks
      parameters:
      - name: startingAfter
        in: query
        description: Filter tasks starting on or after this datetime
        schema:
          type: string
          format: date-time
      - name: startingBefore
        in: query
        description: Filter tasks starting before this datetime
        schema:
          type: string
          format: date-time
      - name: userid
        in: query
        description: Filter tasks assigned to this user ID
        schema:
          type: integer
          format: int64
      - name: completed
        in: query
        description: Filter tasks by completed status
        schema:
          type: boolean
      - $ref: '#/components/parameters/insertedSince'
      - $ref: '#/components/parameters/insertedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - start
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Tasks retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Task'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - tasks
      summary: Add a task
      description: Add a task
      operationId: addTask
      requestBody:
        description: Task object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddTask'
        required: true
      responses:
        201:
          description: Task created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /tasks/{id}:
    get:
      tags:
      - tasks
      summary: Get a single task
      description: Get a single task
      operationId: getTask
      parameters:
      - name: id
        in: path
        description: The ID of the task
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Task retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - tasks
      summary: Update a task
      description: Update a task
      operationId: updateTask
      parameters:
      - name: id
        in: path
        description: ID of the task
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Task object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateTask'
        required: true
      responses:
        200:
          description: Task updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - tasks
      summary: Delete a task
      description: Delete a task
      operationId: deleteTask
      parameters:
      - name: id
        in: path
        description: ID of the task
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Task deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /tasks/{id}/complete:
    put:
      tags:
      - tasks
      summary: Mark the task as completed
      description: Mark the task as uncompleted
      operationId: completeTask
      parameters:
      - name: id
        in: path
        description: ID of the task
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Task completed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /tasks/{id}/uncomplete:
    put:
      tags:
      - tasks
      summary: Mark the task as incomplete
      description: Mark the task as incomplete
      operationId: uncompleteTask
      parameters:
      - name: id
        in: path
        description: ID of the task
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Task marked as incomplete
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /enquiries/{id}:
    get:
      tags:
      - enquiries
      summary: Retrieve a single enquiry from the holding area
      description: Retrieve a single enquiry from the holding area
      operationId: getEnquiry
      parameters:
      - name: id
        in: path
        description: ID of the enquiry
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Enquiry retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Enquiry'
      security:
      - Api-Key: []
        Bearer: []
  /enquiries:
    get:
      tags:
      - enquiries
      summary: Get a list of enquiries from the holding area
      description: Get a list of enquiries from the holding area
      operationId: getEnquiries
      parameters:
      - name: enquiryDateSince
        in: query
        description: Filter enquiries occuring on or after this datetime
        schema:
          type: string
          format: date-time
      - name: enquiryDateBefore
        in: query
        description: Filter enquiries occuring before this datetime
        schema:
          type: string
          format: date-time
      - name: processed
        in: query
        description: Filter enquiries that have been processed or unprocessed
        schema:
          type: boolean
      - name: saleLifeId
        in: query
        description: Filter enquiries for this sale life ID
        schema:
          type: integer
          format: int64
      - name: leaseLifeId
        in: query
        description: Filter enquiries for this lease life ID
        schema:
          type: integer
          format: int64
      - name: userId
        in: query
        description: Filter enquiries for this user (enquiries not attached to a property)
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - enquiryDate
      - $ref: '#/components/parameters/sortOrder'
      - name: source
        in: query
        description: The source of the enquiries. Must be an Holding Area Type API code.
        schema:
          type: string
      responses:
        200:
          description: Enquiries retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Enquiry'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - enquiries
      summary: Submit a listing or agent enquiry
      description: Submit a listing enquiry (e.g. from a franchise/portal site). If
        you are submitting enquiries from your "office website", please use the value
        "OFFICEWEBSITE" for the "source" field. If you are submitting a user enquiry
        (i.e. an enquiry not attached to a property), leave out the property related fields
        and use the userId field.
      operationId: addEnquiry
      requestBody:
        description: Enquiry object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddEnquiry'
        required: true
      responses:
        201:
          description: Enquiry received successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Enquiry'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /property/portalStats/cumulative:
    put:
      tags:
      - propertyStats
      summary: Update cumulative portal stats for a property
      description: Update cumulative portal stats for a property (e.g. listing views).
        If you want to track views day by day, use this endpoint.
      operationId: updatePortalStatsCumulative
      requestBody:
        description: Property Portal Stats object. Please note that "statDate" is
          a Date field (YYYY-MM-DD) and "total" represents the total figures for that
          date
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePortalStatsCumulative'
        required: true
      responses:
        200:
          description: Stats updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /property/portalStats/total:
    put:
      tags:
      - propertyStats
      summary: Update total portal stats for a property
      description: Update total portal stats for a property (e.g. listing views).
        If you only track a total figure for stats, use this endpoint.
      operationId: updatePortalStatsTotal
      requestBody:
        description: Property Portal Stats object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePortalStatsTotal'
        required: true
      responses:
        200:
          description: Stats updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body

  /property/portalStats:
    get:
      tags:
      - propertyStats
      summary: Retrieve previously submitted portal stats for a given property and portal
      description: Retrieve previously submitted portal stats for a given property and portal
      operationId: getPortalStats

      parameters:
      - name: statDateSince
        in: query
        description: Filter metrics occuring on or after this date
        schema:
          type: string
          format: date-time
      - name: statDateBefore
        in: query
        description: Filter metrics occuring before this date
        schema:
          type: string
          format: date-time
      - name: saleLifeId
        in: query
        description: Filter metrics for this sale life ID
        schema:
          type: integer
          format: int64
      - name: leaseLifeId
        in: query
        description: Filter metrics for this lease life ID
        schema:
          type: integer
          format: int64
      - name: propertyReference
        in: query
        description: Filter metrics by property portal reference (unique ID)
        schema:
          type: string
      - name: source
        in: query
        description: The source (portal) of the stats.
        schema:
          type: string
        required: true
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - modified
          - statDate
      - $ref: '#/components/parameters/sortOrder'

      responses:
        200:
          description: Stats retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PortalStats'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /properties/{id}/sale/{lifeid}/offerConditions:
    get:
      tags:
      - properties
      - propertyOfferConditions
      summary: Retrieve a list of offer conditions for this property life
      description: Retrieve a list of offer conditions for this property life
      operationId: getPropertyLifeOfferConditions
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: userid
        in: query
        description: Items related to this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Sort items by field
        schema:
          type: string
          enum:
          - due
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Offer Conditions retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyOfferCondition'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/sale/{lifeid}/offerConditions/{id}:
    get:
      tags:
      - properties
      - propertyOfferConditions
      summary: Retrieve an offer condition for this property life
      description: Retrieve an offer condition for this property life
      operationId: getPropertyLifeOfferCondition
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the offer condition
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Offer Condition retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyOfferCondition'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      - propertyOfferConditions
      summary: Update a property's offer condition
      description: Update a property's offer condition
      operationId: updatePropertyOfferCondition
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the offer condition
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: PropertyOfferCondition object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePropertyOfferCondition'
        required: true
      responses:
        200:
          description: Offer Condition updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyOfferCondition'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{propertyid}/sale/{lifeid}/offerConditions/{id}/complete:
    put:
      tags:
      - properties
      - propertyOfferConditions
      summary: Complete a property's offer condition
      description: Complete a property's offer condition
      operationId: completePropertyOfferCondition
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the offer condition
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Offer Condition updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/sale/{lifeid}/offerConditions/{id}/uncomplete:
    put:
      tags:
      - properties
      - propertyOfferConditions
      summary: Uncomplete a property's offer condition
      description: Uncomplete a property's offer condition
      operationId: uncompletePropertyOfferCondition
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the offer condition
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Offer Condition updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{class}/{salelease}/upcomingOpenHomes:
    get:
      tags:
      - properties
      summary: Retrieve a list of upcoming open homes
      description: Retrieve a list of upcoming open homes
      operationId: getUpcomingOpenHomes
      parameters:
      - name: class
        in: path
        description: Class of property
        required: true
        schema:
          type: string
          enum:
          - residential
          - rural
          - holidayRental
      - name: salelease
        in: path
        description: Filter by sale or lease properties
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: days
        in: query
        description: Number of days to look ahead (default 7)
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Open Homes retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/OpenHomeWithProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/lookup/{propertyReference}:
    get:
      tags:
      - properties
      summary: Look up property information based on property reference
      description: Look up property information based on the property reference sent
        to portal sites (e.g. &lt;uniqueID&gt;)
      operationId: lookupPropertyByPortalReference
      parameters:
      - name: propertyReference
        in: path
        description: Property reference to look up
        required: true
        schema:
          type: string
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/sale/statusChange/listing:
    put:
      tags:
      - properties
      summary: Convert a prospect or appraisal sale property to listing status
      description: Convert a prospect or appraisal sale property to listing status
      operationId: convertToListing
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Status changed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Status could not be changed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/lease/statusChange/management:
    put:
      tags:
      - properties
      summary: Convert a prospect or appraisal lease property to management status
      description: Convert a prospect or appraisal lease property to management status
      operationId: convertToManagement
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Status changed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Status could not be changed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /templates/email:
    get:
      tags:
      - templates
      summary: Retrieve a list of email templates
      description: Retrieve a list of email templates
      operationId: getEmailTemplates
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Email templates retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/EmailTemplate'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - templates
      summary: Create an email template
      description: Create an email template
      operationId: addEmailTemplate
      requestBody:
        description: Email template object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddUpdateEmailTemplate'
        required: true
      responses:
        201:
          description: Email template created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailTemplate'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /templates/email/{id}:
    get:
      tags:
      - templates
      summary: Retrieve a single email template
      description: Retrieve a single email template
      operationId: getEmailTemplate
      parameters:
      - name: id
        in: path
        description: ID of the template
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Email Template retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailTemplate'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - templates
      summary: Update an email template
      description: Update an email template
      operationId: updateEmailTemplate
      parameters:
      - name: id
        in: path
        description: ID of the template
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Email template object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddUpdateEmailTemplate'
        required: true
      responses:
        200:
          description: Email template updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailTemplate'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /templates/sms:
    get:
      tags:
      - templates
      summary: Retrieve a list of SMS templates
      description: Retrieve a list of SMS templates
      operationId: getSMSTemplates
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: SMS templates retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/SMSTemplate'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - templates
      summary: Create an SMS template
      description: Create an SMS template
      operationId: addSMSTemplate
      requestBody:
        description: SMS template object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddUpdateSMSTemplate'
        required: true
      responses:
        201:
          description: SMS template created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SMSTemplate'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /templates/sms/{id}:
    get:
      tags:
      - templates
      summary: Retrieve a single SMS template
      description: Retrieve a single SMS template
      operationId: getSMSTemplate
      parameters:
      - name: id
        in: path
        description: ID of the template
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: SMS Template retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SMSTemplate'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - templates
      summary: Update an SMS template
      description: Update an SMS template
      operationId: updateSMSTemplate
      parameters:
      - name: id
        in: path
        description: ID of the template
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: SMS template object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddUpdateSMSTemplate'
        required: true
      responses:
        200:
          description: SMS template updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SMSTemplate'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /templates/ownerSummary:
    get:
      tags:
      - templates
      summary: Retrieve a list of owner summary templates
      description: Retrieve a list of owner summary templates
      operationId: getOwnerSummaryTemplates
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Owner Summary templates retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/OwnerSummaryTemplate'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - templates
      summary: Create an Owner Summary template
      description: Create an Owner Summary template
      operationId: addOwnerSummaryTemplate
      requestBody:
        description: Owner Summary template object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddUpdateOwnerSummaryTemplate'
        required: true
      responses:
        201:
          description: Owner Summary template created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OwnerSummaryTemplate'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /templates/ownerSummary/{id}:
    get:
      tags:
      - templates
      summary: Retrieve a single Owner Summary template
      description: Retrieve a single Owner Summary template
      operationId: getOwnerSummaryTemplate
      parameters:
      - name: id
        in: path
        description: ID of the template
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Owner Summary Template retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OwnerSummaryTemplate'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - templates
      summary: Update an Owner Summary template
      description: Update an Owner Summary template
      operationId: updateOwnerSummaryTemplate
      parameters:
      - name: id
        in: path
        description: ID of the template
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Owner Summary template object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddUpdateOwnerSummaryTemplate'
        required: true
      responses:
        200:
          description: Owner Summary template updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OwnerSummaryTemplate'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /merge-fields:
    get:
      tags:
      - mergeFields
      summary: Retrieve available merge fields
      description: |-
        Returns available merge fields for a given template type and delivery method.
        When `context` is omitted, returns a tiered response grouping fields by their availability requirements.
        When `context` is provided, returns a flat response containing only the fields usable in that context.
      operationId: getMergeFields
      parameters:
      - name: template_type
        in: query
        description: Template type ID (e.g. market_report, buyer_match, property_alert).
        required: true
        schema:
          type: string
      - name: delivery_method
        in: query
        description: Delivery method to filter fields by. Defaults to email.
        schema:
          type: string
          enum:
          - email
          - sms
          - cloud_letter
          default: email
      - name: context
        in: query
        description: |-
          Context ID (e.g. contact_only, contact_property_sale). When provided the response
          is a flat list of fields usable in that context. When omitted the response is tiered
          showing all availability levels.
        schema:
          type: string
      - name: include_custom
        in: query
        description: Include account-specific custom contact and property merge fields.
        schema:
          type: boolean
          default: false
      - name: search
        in: query
        description: Filter fields by matching against the field name, description, or token.
        schema:
          type: string
      responses:
        200:
          description: Merge fields retrieved
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/MergeFieldsTieredResponse'
                - $ref: '#/components/schemas/MergeFieldsFlatResponse'
        400:
          description: template_type is required, or an invalid parameter value was supplied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/{salelease}/{lifeid}/interest:
    get:
      tags:
      - properties
      summary: Retrieve a list of contacts and their interest related this property
        life
      description: Retrieve a list of contacts and their interest related this property
        life
      operationId: getPropertyLifeInterest
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Property life interest retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/{salelease}/{lifeid}/interest/{contactid}:
    get:
      tags:
      - properties
      summary: Retrieve a single contact's interest in this property life
      description: Retrieve a single contact's interest in this property life
      operationId: getPropertyLifeInterestItem
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property life interest retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyLifeInterest'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      summary: Update a contact's interest in this property life
      description: Update a contact's interest in this property life
      operationId: updatePropertyLifeInterest
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Interest object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/UpdatePropertyLifeInterest'
        required: true
      responses:
        200:
          description: Property life interest updated
          content: {}
        201:
          description: Property life interest added
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{id}/{salelease}/{lifeid}/enquirySources:
    get:
      tags:
      - properties
      summary: Retrieve a list of contacts and their source of enquiry related this
        property life
      description: Retrieve a list of contacts and their source of enquiry related
        this property life
      operationId: getPropertyLifeEnquirySources
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Property life enquiry sources retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/{salelease}/{lifeid}/enquirySources/{contactid}:
    get:
      tags:
      - properties
      summary: Retrieve a single contact's source of enquiry for this property life
      description: Retrieve a single contact's source of enquiry for this property
        life
      operationId: getPropertyLifeEnquirySourcesItem
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property life enquiry source retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyLifeEnquirySource'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      summary: Update a contact's source of enquiry for this property life
      description: Update a contact's source of enquiry for this property life
      operationId: updatePropertyLifeEnquirySource
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Enquiry Source object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/UpdatePropertyLifeEnquirySource'
        required: true
      responses:
        200:
          description: Property life enquiry source updated
          content: {}
        201:
          description: Property life enquiry source added
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/requirements:
    get:
      tags:
      - contacts
      summary: Retrieve a list of buying/renting requirements across all contacts
      description: Retrieve a list of buying/renting requirements across all contacts
      operationId: getContactRequirementsBulk
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
      - $ref: '#/components/parameters/sortOrder'
      - name: active
        in: query
        description: Filter active/inactive requirements
        schema:
          type: boolean
      responses:
        200:
          description: Requirements retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/RequirementAndContact'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/marketingUsers:
    get:
      tags:
      - contacts
      summary: Retrieve a list of contact marketing users across all contacts
      description: Retrieve a list of contact marketing users across all contacts
      operationId: getContactMarketingUsersBulk
      parameters:
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - modified
      - $ref: '#/components/parameters/sortOrder'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      responses:
        200:
          description: Marketing Users retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactAndMarketingUser'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/currentTenants:
    get:
      tags:
      - contacts
      - properties
      summary: Retrieve a list of current tenants across all properties
      description: Retrieve a list of current tenants across all properties
      operationId: getCurrentTenants
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      responses:
        200:
          description: Tenants retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        contact:
                          $ref: '#/components/schemas/ID'
                        tenancy:
                          $ref: '#/components/schemas/ID'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/currentLandlords:
    get:
      tags:
      - contacts
      - properties
      summary: Retrieve a list of current landlords across all properties
      description: Retrieve a list of current landlords across all properties
      operationId: getCurrentLandlords
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      responses:
        200:
          description: Landlords retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        contact:
                          $ref: '#/components/schemas/ID'
                        leaseLife:
                          $ref: '#/components/schemas/ID'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/currentOwners:
    get:
      tags:
      - contacts
      - properties
      summary: Retrieve a list of current owners/vendors across all sale properties
      description: Retrieve a list of current owners/vendors across all sale properties
      operationId: getCurrentOwners
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      responses:
        200:
          description: Owners retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        contact:
                          $ref: '#/components/schemas/ID'
                        saleLife:
                          $ref: '#/components/schemas/ID'
                        property:
                          $ref: '#/components/schemas/ID'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/currentPurchasers:
    get:
      tags:
      - contacts
      - properties
      summary: Retrieve a list of current purchasers across all sale properties
      description: Retrieve a list of current purchasers across all sale properties
      operationId: getCurrentPurchasers
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      responses:
        200:
          description: Purchasers retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        contact:
                          $ref: '#/components/schemas/ID'
                        saleLife:
                          $ref: '#/components/schemas/ID'
                        property:
                          $ref: '#/components/schemas/ID'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /contacts/sourceOfEnquiry:
    get:
      tags:
      - contacts
      summary: Retrieve a list of contact source of enquiry across all contacts
      description: Retrieve a list of contact source of enquiry across all contacts
      operationId: getContactSourceOfEnquiryBulk
      parameters:
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - modified
      - $ref: '#/components/parameters/sortOrder'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      responses:
        200:
          description: Records retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/BulkContactSourceOfEnquiry'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /contacts/dates:
    get:
      tags:
      - contacts
      summary: Retrieve a list of contact dates across all contacts
      description: Retrieve a list of contact dates across all contacts
      operationId: getContactDatesBulk
      parameters:
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - modified
      - $ref: '#/components/parameters/sortOrder'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      responses:
        200:
          description: Dates retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactAndDate'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /contacts/categories:
    get:
      tags:
      - contacts
      summary: Retrieve a list of contact category mappings across all contacts
      description: Retrieve a list of contact category mappings across all contacts
      operationId: getCategoriesContactBulk
      parameters:
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - modified
      - $ref: '#/components/parameters/sortOrder'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      responses:
        200:
          description: Categories retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        contact:
                          $ref: '#/components/schemas/ID'
                        category:
                          $ref: '#/components/schemas/ID'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []


  /maintenance:
    get:
      tags:
      - maintenance
      summary: Retrieve a list of all maintenance jobs for this account
      description: Retrieve a list of all maintenance jobs for this account
      operationId: getAllMaintenance
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: completed
        in: query
        description: Filter maintenance jobs by their completed status
        schema:
          type: boolean
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Maintenance jobs retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Maintenance'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/lease/{lifeid}/maintenance:
    get:
      tags:
      - properties
      - maintenance
      summary: Retrieve a list of maintenance jobs for this property life
      description: Retrieve a list of maintenance jobs for this property life
      operationId: getMaintenance
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: tenancy
        in: query
        description: Filter maintenance jobs for this tenancy id
        schema:
          type: integer
          format: int64
      - name: completed
        in: query
        description: Filter maintenance jobs by their completed status
        schema:
          type: boolean
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Maintenance jobs retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Maintenance'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - properties
      - maintenance
      summary: Create a maintenance job
      description: Create a maintenance job
      operationId: addMaintenance
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Maintenance job object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddMaintenance'
        required: true
      responses:
        201:
          description: Maintenance job created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Maintenance'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{propertyid}/lease/{lifeid}/maintenance/{jobid}:
    get:
      tags:
      - properties
      - maintenance
      summary: Retrieve a single maintenance job
      description: Retrieve a single maintenance job
      operationId: getMaintenanceJob
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: jobid
        in: path
        description: ID of the maintenance job
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Maintenance job retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Maintenance'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      - maintenance
      summary: Update a single maintenance job
      description: Update a single maintenance job
      operationId: updateMaintenance
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: jobid
        in: path
        description: ID of the maintenance job
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Maintenance job object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateMaintenance'
        required: true
      responses:
        200:
          description: Maintenance job updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Maintenance'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - properties
      - maintenance
      summary: Delete a maintenance job
      description: Delete a maintenance job
      operationId: deleteMaintenance
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: jobid
        in: path
        description: ID of the maintenance job
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Maintenance job deleted
          content: {}
        400:
          description: Invalid data
          content: {}
        403:
          description: User does not have permission to delete maintenance jobs
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/lease/{lifeid}/maintenance/{jobid}/photos:
    post:
      tags:
      - properties
      - maintenance
      summary: Add a maintenance job photo
      description: Add a maintenance job photo
      operationId: addMaintenancePhoto
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: jobid
        in: path
        description: ID of the maintenance job
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        content:
          multipart/form-data:
            schema:
              required:
              - photo
              properties:
                description:
                  type: string
                  description: The description of the maintenance photo
                photo:
                  type: string
                  description: The photo to be uploaded
                  format: binary
        required: true
      responses:
        201:
          description: Maintenance job photo created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenancePhoto'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/lease/{lifeid}/maintenance/{jobid}/photos/{id}:
    get:
      tags:
      - properties
      - maintenance
      summary: Retrieve a single maintenance job photo
      description: Retrieve a single maintenance job photo
      operationId: getMaintenanceJobPhoto
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: jobid
        in: path
        description: ID of the maintenance job
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the maintenance job photo
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Maintenance job photo retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenancePhoto'
      security:
      - Api-Key: []
        Bearer: []
    delete:
      tags:
      - properties
      - maintenance
      summary: Delete a maintenance job photo
      description: Delete a maintenance job photo
      operationId: deleteMaintenancePhoto
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: jobid
        in: path
        description: ID of the maintenance job
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the maintenance job photo
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Maintenance job photo deleted
          content: {}
        400:
          description: Invalid data
          content: {}
        403:
          description: User does not have permission to delete maintenance job photos
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/lease/{lifeid}/maintenance/{jobid}/requests:
    get:
      tags:
      - properties
      - maintenance
      summary: Retrieve a list of requests for a maintenance job
      description: Retrieve a list of requests for a maintenance job
      operationId: getMaintenanceRequests
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: jobid
        in: path
        description: ID of the maintenance job
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: workOrders
        in: query
        description: Filter maintenance job requests by work order status
        schema:
          type: boolean
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Maintenance requests retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/MaintenanceRequest'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - properties
      - maintenance
      summary: Create a maintenance job request
      description: Create a maintenance request
      operationId: addMaintenanceRequest
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: jobid
        in: path
        description: ID of the maintenance job
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Maintenance request object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddMaintenanceRequest'
        required: true
      responses:
        201:
          description: Maintenance request created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceRequest'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{propertyid}/lease/{lifeid}/maintenance/{jobid}/requests/{id}/initiateWorkOrder:
    put:
      tags:
      - properties
      - maintenance
      summary: Initiate a maintenance work order
      description: Initiate a maintenance work order
      operationId: initiateMaintenceWorkOrder
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: jobid
        in: path
        description: ID of the maintenance job
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the maintenance request
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Work order object
        content:
          application/json:
            schema:
              type: object
              properties:
                subject:
                  type: string
                bodyHTML:
                  type: string
                sender:
                  $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Work order initiated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{propertyid}/lease/{lifeid}/maintenance/{jobid}/requests/{id}/complete:
    put:
      tags:
      - properties
      - maintenance
      summary: Complete a maintenance work order
      description: Complete a maintenance work order
      operationId: completeMaintenceWorkOrder
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: jobid
        in: path
        description: ID of the maintenance job
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the maintenance request
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Work order completed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Maintenance'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/lease/{lifeid}/maintenance/{jobid}/notes:
    get:
      tags:
      - properties
      - maintenance
      summary: Retrieve a list of notes for a maintenance job
      description: Retrieve a list of notes for a maintenance job
      operationId: getMaintenanceNotes
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: jobid
        in: path
        description: ID of the maintenance job
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Maintenance notes retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/MaintenanceNote'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/lease/{lifeid}/tenancy/{id}/inspections:
    get:
      tags:
      - properties
      - inspections
      summary: Retrieve a list of inspections for a tenancy
      description: Retrieve a list of inspections for a tenancy
      operationId: getInspections
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the tenancy
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
      - $ref: '#/components/parameters/sortOrder'
      - name: completed
        in: query
        description: Filter inspections by their completed status
        schema:
          type: boolean
      responses:
        200:
          description: Inspections retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Inspection'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - properties
      - inspections
      summary: Create an inspection
      description: Create an inspection
      operationId: addInspection
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the tenancy
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Inspection object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddInspection'
        required: true
      responses:
        201:
          description: Inspection created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Inspection'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{propertyid}/lease/{lifeid}/tenancy/{tenancyid}/inspections/{id}:
    get:
      tags:
      - properties
      - inspections
      summary: Retrieve a single inspection for a tenancy
      description: Retrieve a single inspection for a tenancy
      operationId: getInspection
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: tenancyid
        in: path
        description: ID of the tenancy
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the inspection
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Inspection retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Inspection'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - properties
      - inspections
      summary: Update an inspection
      description: Update an inspection
      operationId: updateInspection
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: tenancyid
        in: path
        description: ID of the tenancy
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the inspection
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Inspection object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateInspection'
        required: true
      responses:
        200:
          description: Inspection Updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Inspection'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - properties
      - inspections
      summary: Delete an inspection
      description: Delete an inspection
      operationId: deleteInspection
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the lease life
        required: true
        schema:
          type: integer
          format: int64
      - name: tenancyid
        in: path
        description: ID of the tenancy
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the inspection
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Inspection deleted
          content: {}
        400:
          description: Invalid data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /suppliers:
    get:
      tags:
      - suppliers
      summary: Retrieve a list of suppliers
      description: Retrieve a list of suppliers
      operationId: getSuppliers
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Suppliers retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Supplier'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - suppliers
      summary: Create a supplier
      description: Create a supplier
      operationId: addSupplier
      requestBody:
        description: Supplier object
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/AddSupplier'
        required: true
      responses:
        201:
          description: Supplier created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupplierExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /suppliers/{id}:
    get:
      tags:
      - suppliers
      summary: Retrieve a single supplier
      description: Retrieve a single supplier
      operationId: getSupplier
      parameters:
      - name: id
        in: path
        description: ID of the supplier
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Supplier retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupplierExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - suppliers
      summary: Update a single supplier
      description: Update a single supplier
      operationId: updateSupplier
      parameters:
      - name: id
        in: path
        description: ID of the supplier
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Supplier object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateSupplier'
        required: true
      responses:
        200:
          description: Supplier updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupplierExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - suppliers
      summary: Delete a supplier
      description: Delete a supplier
      operationId: deleteSupplier
      parameters:
      - name: id
        in: path
        description: ID of the supplier
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Supplier deleted
          content: {}
        400:
          description: Invalid data
          content: {}
        403:
          description: User does not have permission to delete contacts
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /suppliers/{id}/insurance:
    get:
      tags:
      - suppliers
      summary: Retrieve a supplier's insurance
      description: Retrieve a supplier's insurance
      operationId: getSupplierInsurance
      parameters:
      - name: id
        in: path
        description: ID of the supplier
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Supplier insurance retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Insurance'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - suppliers
      summary: Update a single supplier's insurance
      description: Update a single supplier's insurance
      operationId: updateSupplierInsurance
      parameters:
      - name: id
        in: path
        description: ID of the supplier
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Insurance object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Insurance'
        required: true
      responses:
        200:
          description: Insurance updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Insurance'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /suppliers/{id}/categories:
    get:
      tags:
      - suppliers
      summary: Retrieve a list of categories to which this supplier belongs
      description: Retrieve a list of categories to which this supplier belongs
      operationId: getCategoriesSupplier
      parameters:
      - name: id
        in: path
        description: ID of the supplier
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Supplier categories retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Category'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/{id}/access:
    post:
      tags:
      - contacts
      summary: Allow a user to access this contact
      description: Allow a user to access this contact
      operationId: addContactAccess
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Array of user ID's
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    $ref: '#/components/schemas/ID'
        required: true
      responses:
        200:
          description: Contact access successfully updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/residential/lease/tenancies:
    get:
      tags:
      - tenancies
      summary: Retrieve a list of residential tenancies
      description: Retrieve a list of residential tenancies
      operationId: getResidentialLeaseTenancies
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Tenancies retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/TenancyAndProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /bulk/contactNotes/requests:
    get:
      tags:
      - bulk
      summary: Retrieve a list of previously requested exports of contact notes
      description: Retrieve a list of previously requested exports of contact notes.
      operationId: retrieveBulkContactNotesExports
      parameters:
      - $ref: '#/components/parameters/insertedSince'
      - $ref: '#/components/parameters/insertedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: status
        in: query
        description: Filter exports by status
        schema:
          type: string
          enum:
          - pending
          - processing
          - ready
      responses:
        200:
          description: Exports retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        requestid:
                          type: string
                        status:
                          type: string
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /bulk/contactNotes/request:
    get:
      tags:
      - bulk
      summary: Retrieve a previously requested export of contact notes
      description: Retrieve a previously requested export of contact notes. The response is a download link to a zip file containing the export.
      operationId: retrieveBulkContactNotesExport
      parameters:
      - name: requestid
        in: query
        description: Retrieve the export with this requestId
        schema:
          type: string
      responses:
        200:
          description: Export link retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  url:
                    type: string
                  status:
                    type: string
      security:
      - Api-Key: []
        Bearer: []

    post:
      tags:
      - bulk
      summary: Request an export of contact notes
      description: Request an export of contact notes. The export is processed offline; you can then poll the endpoint with the requestid to retrieve the export.
      operationId: requestBulkContactNotes
      requestBody:
        description: Filters to be applied to query
        content:
          application/json:
            schema:
              type: object
              properties:
                modifiedSince:
                  type: string
                  format: date-time
                modifiedBefore:
                  type: string
                  format: date-time
                insertedSince:
                  type: string
                  format: date-time
                insertedBefore:
                  type: string
                  format: date-time
                types:
                  type: array
                  items:
                    type: integer
                    format: int64
        required: true

      responses:
        202:
          description: Export request received
          content:
            application/json:
              schema:
                type: object
                properties:
                  requestid:
                    type: string
                  message:
                    type: string
        400:
          description: Bad request - there may be an existing export pending for this account. Check the response message for more information.
          content:
            application/json:
              schema:
                type: object
                properties:
                  requestid:
                    type: string
                  message:
                    type: string
      security:
      - Api-Key: []
        Bearer: []

    delete:
      tags:
      - bulk
      summary: Delete a previously requested export of contact notes
      description: Delete a previously requested export of contact notes, which is still in "ready" or "processing" status.
      operationId: deleteBulkContactNotesExport
      parameters:
      - name: requestid
        in: query
        description: Cancel the export with this requestId
        schema:
          type: string
      responses:
        204:
          description: Export cancelled
      security:
      - Api-Key: []
        Bearer: []
 

  /bulk/inspections:
    get:
      tags:
      - bulk
      summary: Retrieve a list of property inspections
      description: Retrieve a list of property inspections
      operationId: getBulkInspections
      parameters:
      - $ref: '#/components/parameters/after'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Inspections retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Inspection'
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /property/flush:
    put:
      tags:
      - properties
      summary: Trigger a property to be re-sent to certain portal sites
      description: Trigger a property to be re-sent to certain portal sites. Note
        that this endpoint only sends properties that are already selected to feed
        to the given sites. Please contact VaultRE for valid values of 'portals'
      operationId: flushProperty
      requestBody:
        description: Property Flush object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FlushProperty'
        required: true
      responses:
        200:
          description: Property flushed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /bulk/feedback:
    get:
      tags:
      - bulk
      summary: Retrieve a list of feedback items
      description: Retrieve a list of feedback items
      operationId: getBulkFeedback
      parameters:
      - name: feedbackAfter
        in: query
        description: Filter feedback occurring on or after this date
        schema:
          type: string
          format: date
      - name: feedbackBefore
        in: query
        description: Filter feedback occurring before this date
        schema:
          type: string
          format: date
      - $ref: '#/components/parameters/after'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      responses:
        200:
          description: Feedback retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactNoteAndContact'
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/deals/sale:
    get:
      tags:
      - deals
      summary: Retrieve a list of sale deals for this (commercial) property
      description: Retrieve a list of sale deals for this (commercial) property. This
        includes the agency's deals and external deals that have been tracked.
      operationId: getPropertySaleDeals
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: status
        in: query
        description: Filter commercial deals by status
        schema:
          type: string
          enum:
            - Sent for Approval
            - Pending
            - Rejected
            - Approved
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Sale deals retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CommercialDealSale'
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - deals
      summary: Add a commercial sale deal
      description: Add a commercial sale deal
      operationId: addCommercialDealSale
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Commercial Deal Details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommercialDealSale'
        required: true
      responses:
        201:
          description: Commercial Deal Added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialDealSale'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'

  /properties/{propertyid}/deals/lease:
    get:
      tags:
      - deals
      summary: Retrieve a list of lease deals for this (commercial) property
      description: Retrieve a list of lease deals for this (commercial) property.
        This includes the agency's deals and external deals that have been tracked.
      operationId: getPropertyLeaseDeals
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: status
        in: query
        description: Filter commercial deals by status
        schema:
          type: string
          enum:
            - Sent for Approval
            - Pending
            - Rejected
            - Approved
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Lease deals retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CommercialDealLease'
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - deals
      summary: Add a commercial lease deal
      description: Add a commercial lease deal
      operationId: addCommercialDealLease
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Commercial Deal Details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommercialDealLease'
        required: true
      responses:
        201:
          description: Commercial Deal Added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialDealLease'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'

  /properties/{propertyid}/deals/sale/{dealid}:
    get:
      tags:
      - deals
      summary: Retrieve a commercial sale deal
      description: Retrieve a commercial sale deal
      operationId: getCommercialDealSale
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: dealid
        in: path
        description: ID of the commercial deal
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Commercial deal retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialDealSale'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - deals
      summary: Update a commercial sale deal
      description: Update a commercial sale deal
      operationId: updateCommercialDealSale
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: dealid
        in: path
        description: ID of the commercial deal
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Commercial Deal Details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommercialDealSale'
        required: true
      responses:
        200:
          description: Commercial Deal updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialDealSale'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
    delete:
      tags:
      - deals
      summary: Delete a commercial sale deal
      description: Delete a commercial sale deal
      operationId: deleteCommercialDealSale
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: dealid
        in: path
        description: ID of the commercial deal
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Commercial Deal deleted
          content: {}
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'

  /properties/{propertyid}/deals/lease/{dealid}:
    get:
      tags:
      - deals
      summary: Retrieve a commercial lease deal
      description: Retrieve a commercial lease deal
      operationId: getCommercialDealLease
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: dealid
        in: path
        description: ID of the commercial deal
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Commercial deal retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialDealLease'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - deals
      summary: Update a commercial lease deal
      description: Update a commercial lease deal
      operationId: updateCommercialDealLease
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: dealid
        in: path
        description: ID of the commercial deal
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Commercial Deal Details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommercialDealLease'
        required: true
      responses:
        200:
          description: Commercial Deal updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialDealLease'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
    delete:
      tags:
      - deals
      summary: Delete a commercial lease deal
      description: Delete a commercial lease deal
      operationId: deleteCommercialDealLease
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: dealid
        in: path
        description: ID of the commercial deal
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Commercial Deal deleted
          content: {}
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'

  /properties/deals/sale:
    get:
      tags:
      - deals
      summary: Retrieve a list of commercial sale deals for this account.
      description: Retrieve a list of commercial sale deals for this account. This
        includes the agency's deals and external deals that have been tracked.
      operationId: getCommercialSaleDeals
      parameters:
      - name: settlementSince
        in: query
        description: Filter commercial deals occurring on or after this date
        schema:
          type: string
          format: date
      - name: settlementBefore
        in: query
        description: Filter commercial deals occurring before this date
        schema:
          type: string
          format: date
      - name: unconditionalSince
        in: query
        description: Filter commercial deals occurring on or after this date
        schema:
          type: string
          format: date
      - name: unconditionalBefore
        in: query
        description: Filter commercial deals occurring before this date
        schema:
          type: string
          format: date
      - name: status
        in: query
        description: Filter commercial deals by status
        schema:
          type: string
          enum:
            - Sent for Approval
            - Pending
            - Rejected
            - Approved
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Sale deals retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CommercialDealSale'
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/deals/lease:
    get:
      tags:
      - deals
      summary: Retrieve a list of commercial lease deals for this account.
      description: Retrieve a list of commercial lease deals for this account.
        This includes the agency's deals and external deals that have been tracked.
      operationId: getCommercialLeaseDeals
      parameters:
      - name: leaseStartSince
        in: query
        description: Filter commercial deals occurring on or after this date
        schema:
          type: string
          format: date
      - name: leaseStartBefore
        in: query
        description: Filter commercial deals occurring before this date
        schema:
          type: string
          format: date
      - name: leaseExpirySince
        in: query
        description: Filter commercial deals occurring on or after this date
        schema:
          type: string
          format: date
      - name: leaseExpiryBefore
        in: query
        description: Filter commercial deals occurring before this date
        schema:
          type: string
          format: date
      - name: status
        in: query
        description: Filter commercial deals by status
        schema:
          type: string
          enum:
            - Sent for Approval
            - Pending
            - Rejected
            - Approved
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Lease deals retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CommercialDealLease'
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/saleHistory:
    get:
      tags:
      - properties
      summary: Retrieve the full sale history for a property
      description: Retrieve the full sale history for a property including commission
        splits
      operationId: getPropertySaleHistory
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Sale History retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/FullSaleHistory'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /search/contactCategories/name:
    get:
      tags:
      - search
      summary: Search for contact categories by name
      description: Search for contact categories by name
      operationId: searchContactCategoriesName
      parameters:
      - name: term
        in: query
        description: The term to search by
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Search results retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CategoryGrouping'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /suburbs:
    get:
      tags:
      - suburbs
      summary: Retrieve a list of suburbs for the user's country
      description: Retrieve a list of suburbs for the user's country
      operationId: getSuburbs
      responses:
        200:
          description: Suburbs retrieved
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Suburb'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/{salelease}/{lifeid}/scheduledViewing:
    post:
      tags:
      - properties
      summary: Add a Scheduled Viewing
      description: Add a Scheduled Viewing
      operationId: addScheduledViewing
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease
        required: true
        schema:
          type: string
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Scheduled Viewing details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InsertScheduledViewing'
        required: true
      responses:
        201:
          description: Scheduled Viewing added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalendarEvent'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
    get:
      tags:
      - properties
      summary: Retrieve a list of scheduled viewings for this life
      description: Retrieve a list of scheduled viewings for this life
      operationId: getPropertyLifeScheduledViewings
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: feedbackAfter
        in: query
        description: Filter scheduled viewings occurring on or after this date
        schema:
          type: string
          format: date
      - name: feedbackBefore
        in: query
        description: Filter scheduled viewings occurring before this date
        schema:
          type: string
          format: date
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - feedbackDate
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Scheduled viewings retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactNoteAndContact'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/{id}/activityLog:
    get:
      tags:
      - contacts
      summary: Retrieve the activity log for a contact
      description: Retrieve the activity log for a contact
      operationId: getContactActivityLog
      parameters:
      - name: id
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Activity Log retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
  /properties/categories:
    get:
      tags:
      - properties
      summary: Retrieve a list of property category mappings across all properties
      description: Retrieve a list of property category mappings across all properties
      operationId: getCategoriesPropertyBulk
      parameters:
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - modified
      - $ref: '#/components/parameters/sortOrder'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      responses:
        200:
          description: Categories retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        property:
                          $ref: '#/components/schemas/ID'
                        category:
                          $ref: '#/components/schemas/ID'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /messages/received:
    get:
      tags:
      - messages
      summary: Retrieve all received messages
      description: Retrieve all received messages
      operationId: getMessagesReceived
      responses:
        200:
          description: Messages retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
  /messages/sent:
    get:
      tags:
      - messages
      summary: Retrieve all sent messages
      description: Retrieve all sent messages
      operationId: getMessagesSent
      responses:
        200:
          description: Messages retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
  /threads:
    get:
      tags:
      - messages
      summary: Retrieve all message threads
      description: Retrieve all message threads
      operationId: getMessagesThreads
      responses:
        200:
          description: Message threads retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
  /threads/franchise:
    post:
      tags:
      - messages
      summary: Add a franchise thread
      description: Add a franchise thread
      operationId: addThreadFranchise
      requestBody:
        description: Message thread details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateMessageThread'
        required: true
      responses:
        201:
          description: Message thread added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageThread'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /threads/user:
    post:
      tags:
      - messages
      summary: Add a user message thread
      description: Add a user message thread
      operationId: addThreadUser
      requestBody:
        description: Message thread details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateMessageThread'
        required: true
      responses:
        201:
          description: Message thread added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageThread'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /threads/{id}:
    put:
      tags:
      - messages
      summary: Update a message thread
      description: Update a message thread
      operationId: updateMessageThread
      parameters:
      - name: id
        in: path
        description: ID of the message thread
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Message thread details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateMessageThread'
        required: true
      responses:
        200:
          description: Message thread updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageThread'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /threads/{id}/messages:
    get:
      tags:
      - messages
      summary: Retrieve all messages in a thread
      description: Retrieve all messages in a thread
      operationId: getThreadMessages
      parameters:
      - name: id
        in: path
        description: ID of the message thread
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Thread messages retrieved
          content:
            application/json:
              schema:
                type: object
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - messages
      summary: Add a message to a thread
      description: Add a message to a thread
      operationId: addThreadMessage
      parameters:
      - name: id
        in: path
        description: ID of the message thread
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Message details
        content:
          application/json:
            schema:
              type: object
              properties:
                message:
                  type: string
        required: true
      responses:
        201:
          description: Message added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /threads/{id}/markRead:
    post:
      tags:
      - messages
      summary: Mark all messages in a thread as read by the current user
      description: Mark all messages in a thread as read by the current user
      operationId: putMessageThreadRead
      parameters:
      - name: id
        in: path
        description: ID of the message thread
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Thread marked as read
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /search/threads/recipients:
    get:
      tags:
      - messages
      - search
      summary: Get all threads with the supplied recipients
      description: Get all threads with the supplied recipients. The user will be
        added automatically if not supplied.
      operationId: getSearchThreadsRecipients
      parameters:
      - name: recipients
        in: query
        description: Recipient ID
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - modified
          - created
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Message threads retrieved
          content:
            application/json:
              schema:
                type: object
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /search/threads/staffTypes:
    get:
      tags:
      - messages
      - search
      summary: Get all threads with the supplied recipients
      description: Get all threads with the supplied recipients.
      operationId: getSearchThreadsStaffTypes
      parameters:
      - name: staffTypes
        in: query
        description: Staff Type ID
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - modified
          - created
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Message threads retrieved
          content:
            application/json:
              schema:
                type: object
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /search/threads/term:
    get:
      tags:
      - messages
      - search
      summary: Search for message threads containing term
      description: Search for message threads containing term
      operationId: getSearchThreadsTerm
      parameters:
      - name: term
        in: query
        description: The term to search for.
        schema:
          type: string
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - modified
          - created
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Message threads retrieved
          content:
            application/json:
              schema:
                type: object
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []

  /advertising/invoices:
    get:
      tags:
      - advertising
      summary: Retrieve a list of advertising invoices
      description: Retrieve a list of advertising invoices
      operationId: getAdvertisingInvoices
      parameters:
      - $ref: '#/components/parameters/insertedSince'
      - $ref: '#/components/parameters/insertedBefore'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
      - $ref: '#/components/parameters/sortOrder'
      - name: saleLifeId
        in: query
        description: Filter invoices by sale life ID (property invoices)
        schema:
          type: integer
          format: int64
      - name: userIdInvoiced
        in: query
        description: Filter invoices by user ID invoiced (agent invoices)
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Advertising invoices retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/AdvertisingInvoice'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []

  /advertising/invoices/{id}:
    get:
      tags:
      - advertising
      summary: Retrieve a single advertising invoice
      description: Retrieve a single advertising invoice
      operationId: getAdvertisingInvoice
      parameters:
      - name: id
        in: path
        description: ID of the advertising invoice
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Advertising invoice retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvertisingInvoice'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []

  /advertising/schedules:
    get:
      tags:
      - advertising
      summary: Retrieve a list of advertising schedules
      description: Retrieve a list of advertising schedules
      operationId: getAdvertisingSchedules
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Advertising schedules retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/AdvertisingSchedule'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /advertising/schedules/{id}:
    get:
      tags:
      - advertising
      summary: Retrieve a single advertising schedule
      description: Retrieve a single advertising schedule
      operationId: getAdvertisingSchedule
      parameters:
      - name: id
        in: path
        description: ID of the advertising schedule
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Advertising schedule retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvertisingScheduleWithItems'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []

  /advertising/suppliers:
    get:
      tags:
      - advertising
      summary: Retrieve a list of advertising suppliers
      description: Retrieve a list of advertising suppliers
      operationId: getAdvertisingSuppliers
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Advertising suppliers retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/AdvertisingSupplier'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - advertising
      summary: Add a new advertising supplier
      description: Add a new advertising supplier
      operationId: addAdvertisingSupplier
      requestBody:
        description: Advertising Supplier object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateAdvertisingSupplier'
        required: true
      responses:
        201:
          description: Advertising Supplier added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvertisingSupplier'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /advertising/suppliers/{id}:
    get:
      tags:
      - advertising
      summary: Retrieve a single advertising supplier
      description: Retrieve a single advertising supplier
      operationId: getAdvertisingSupplier
      parameters:
      - name: id
        in: path
        description: ID of the advertising supplier
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Advertising supplier retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvertisingSupplier'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - advertising
      summary: Update an advertising supplier
      description: Update an advertising supplier
      operationId: updateAdvertisingSupplier
      parameters:
      - name: id
        in: path
        description: ID of the advertising supplier
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Advertising Supplier object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateAdvertisingSupplier'
        required: true
      responses:
        200:
          description: Advertising Supplier updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvertisingSupplier'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - advertising
      summary: Delete an advertising supplier
      description: Delete an advertising supplier
      operationId: deleteAdvertisingSupplier
      parameters:
      - name: id
        in: path
        description: ID of the advertising supplier
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Advertising Supplier deleted
          content: {}
        403:
          description: User does not have access to property financials
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []

  /advertising/expenseTypes:
    get:
      tags:
      - advertising
      summary: Retrieve a list of advertising expense types
      description: Retrieve a list of advertising expense types
      operationId: getAdvertisingExpenseTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      - name: supplierId
        in: query
        description: Filter expense types by supplier
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Advertising expense types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/AdvertisingExpenseType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /advertising/expenseTypes/{id}:
    get:
      tags:
      - advertising
      summary: Retrieve a single advertising expense type
      description: Retrieve a single advertising expense type
      operationId: getAdvertisingExpenseType
      parameters:
      - name: id
        in: path
        description: ID of the advertising expense type
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Advertising expense type retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvertisingExpenseType'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body

  /properties/{propertyid}/sale/{lifeid}/advertising/schedule:
    get:
      tags:
      - advertising
      summary: Retrieve the attached advertising schedule for this property
      description: Retrieve the attached advertising schedule for this property
      operationId: getPropertyLifeAdvertisingSchedule
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Advertising schedule retrieved
          content:
            application/json:
              schema:
                type: object
                $ref: '#/components/schemas/AdvertisingAttachedScheduleWithItems'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body

  /properties/{propertyid}/sale/{lifeid}/advertising/transactions:
    get:
      tags:
      - advertising
      summary: Retrieve a list of property advertising transactions
      description: Retrieve a list of advertising transactions on a given property ledger
      operationId: getPropertyLifeAdvertisingTransactions
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Advertising transactions retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/AdvertisingTransaction'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body

  /properties/{propertyid}/sale/{lifeid}/trustledger/transactions:
    get:
      tags:
      - properties
      summary: Retrieve a list of trust ledger transactions for this property sale life
      description: Retrieve a list of trust ledger transactions on a given property sale life
      operationId: getPropertyLifeTrustLedgerTransactions
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property sale life
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Trust ledger transactions retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/TrustLedgerTransaction'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to property financials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []

  /types/priceQualifiers:
    get:
      tags:
      - types
      summary: Retrieve a list of price qualifier types
      description: Retrieve a list of price qualifier types. This field is only available
        for NZ and UK accounts.
      operationId: getPriceQualifierTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PriceQualifier'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /types/tenureOrTitleTypes:
    get:
      tags:
      - types
      summary: Retrieve a list of tenure or title types
      description: Retrieve a list of tenure or title types. This field is only available
        for NZ and UK accounts.
      operationId: getTenureOrTitleTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/TenureOrTitleType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /types/holdingArea:
    get:
      tags:
      - enquiries
      - types
      summary: Retrieve a list of holding area types
      description: Retrieve a list of holding area types
      operationId: getHoldingAreaTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - source
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/HoldingAreaType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /types/methodOfSale:
    get:
      tags:
      - types
      summary: Retrieve a list of method of sale types
      description: Retrieve a list of method of sale types
      operationId: getMethodOfSaleTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/MethodOfSaleType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /types/auctionSale:
    get:
      tags:
      - types
      summary: Retrieve a list of Auction types
      description: Retrieve a list of Auction types
      operationId: getAuctionTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/AuctionSaleType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{propertyid}/keys:
    get:
      tags:
      - keys
      - properties
      summary: Retrieve a list of keys for this property
      description: Retrieve a list of keys for this property
      operationId: getPropertyKeys
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - keyname
          - iskeyout
          - propertyid
      - $ref: '#/components/parameters/sortOrder'
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Keys retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyKey'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - keys
      - properties
      summary: Add a new key to this property
      description: Add a new key to this property
      operationId: addPropertyKey
      parameters:
      - name: propertyid
        in: path
        description: ID of the property to add this key to
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: AddUpdatePropertyKey object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdatePropertyKey'
        required: true
      responses:
        201:
          description: Add Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyKey'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/{propertyid}/keys/{id}:
    get:
      tags:
      - keys
      - properties
      summary: Retrieve a key from this property
      description: Retrieve a key from this property
      operationId: getPropertyKey
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the property key
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Key retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyKey'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - keys
      - properties
      summary: Update a property key
      description: Update a property key
      operationId: updatePropertyKey
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the property key
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: AddUpdatePropertyKey object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdatePropertyKey'
        required: true
      responses:
        200:
          description: Key update
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyKey'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /contacts/{contactid}/bankAccounts/default:
    get:
      tags:
      - contacts
      summary: Retrieve the default bank account for this contact
      description: Retrieve the default bank account for this contact
      operationId: getDefaultContactBankAccount
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Bank Account retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactBankAccount'
        403:
          description: User does not have access to contact bank accounts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        404:
          description: Contact does not have a default bank account set
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - contacts
      summary: Update the contact's default bank account
      description: Update the contact's default bank account
      operationId: updateDefaultContactBankAccount
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: ContactBankAccount object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateContactBankAccount'
        required: true
      responses:
        200:
          description: Contact bank account updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactBankAccount'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
        403:
          description: User does not have access to contact bank accounts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
    delete:
      tags:
      - contacts
      summary: Delete the default bank account for this contact
      description: Delete the default bank account for this contact
      operationId: deleteDefaultContactBankAccount
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: Contact bank account deleted
          content: {}
        403:
          description: User does not have access to contact bank accounts
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
  /contacts/{contactid}/dates:
    get:
      tags:
      - contacts
      summary: Retrieve a list of dates for this contact
      description: Retrieve a list of dates for this contact
      operationId: getContactDates
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Dates retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactDate'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /account/contactDateTypes:
    get:
      tags:
      - user
      summary: Retrieve a list of available contact date types for this account
      description: Retrieve a list of available contact date types for this account
      operationId: getContactDateTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Date types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactDateType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /distributionLists/contact:
    get:
      tags:
      - lists
      summary: Retrieve a list of contact distribution lists for this account
      description: Retrieve a list of contact distribution lists for this account
      operationId: getContactDistributionLists
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
          - inserted
          - modified
      - $ref: '#/components/parameters/sortOrder'
      - name: userid
        in: query
        description: |
          Filter distribution lists by specific user ID(s).
          Accepts comma-separated list of user IDs.
          Example: `?userid=446,442`
        schema:
          type: array
          items:
            type: integer
            format: int64
        style: form
        explode: false
      responses:
        200:
          description: Lists retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/DistributionList'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /distributionLists/contact/{id}:
    get:
      tags:
      - lists
      summary: Retrieve a single contact distribution list
      description: Retrieve a single contact distribution list
      operationId: getContactDistributionList
      parameters:
      - name: id
        in: path
        description: ID of the distribution list
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: List retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DistributionList'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/{salelease}/{lifeid}/portals:
    get:
      tags:
      - properties
      summary: Retrieve a list of portal sites to which this listing is published
      description: Retrieve a list of portal sites to which this listing is published
      operationId: getPropertyLifePortals
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Portals retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PortalAccess'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/{id}/{salelease}/{lifeid}/portalIds:
    get:
      tags:
      - properties
      summary: Retrieve a list of property portal IDs
      description: Retrieve a list of known IDs of properties on published portal sites
      operationId: getPropertyLifePortalIds
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Portals retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyPortalId'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /user/oAuthLoginUrl:
    get:
      tags:
      - user
      summary: Get the oAuth sign-in target URL for this username
      description: For the given username, find the correct oAuth sign-in URL.
      operationId: getOAuthLoginUrl
      parameters:
      - name: username
        in: query
        description: The user's username
        required: true
        schema:
          type: string
      responses:
        200:
          description: URL retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  url:
                    type: string
      security:
      - Api-Key: []

  /account/oAuthLoginUrl:
    get:
      tags:
      - user
      summary: Get the oAuth sign-in target URL for this username (office level oAuth exchange)
      description: For the given username, find the correct oAuth sign-in URL.
      operationId: getOAuthLoginUrlAccount
      parameters:
      - name: username
        in: query
        description: The user's username
        required: true
        schema:
          type: string
      responses:
        200:
          description: URL retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  url:
                    type: string
      security:
      - Api-Key: []

  /contacts/{contactid}/merged:
    get:
      tags:
      - contacts
      summary: Retrieve a list of contact ID's merged to this contact
      description: Retrieve a list of contact ID's that have been merged in to this contact (as duplicate records)
      operationId: getContactMergedDuplicates
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Merged duplicates retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ID'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /contacts/{contactid}/gdpr:
    get:
      tags:
      - contacts
      summary: Retrieve GDPR consent records for a contact
      description: Retrieve GDPR consent opt-in records for a contact
      operationId: getContactGdprOptins
      parameters:
      - name: contactid
        in: path
        description: ID of the contact
        required: true
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results
        schema:
          type: string
          enum:
          - inserted
          - modified
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: GDPR consent records retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/GdprOptin'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
        404:
          description: Contact not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []

  /openHomes:
    get:
      tags:
      - openhomes
      summary: Retrieve a list of property open homes
      description: Retrieve a list of property open homes
      operationId: getAccountOpenHomes
      parameters:
      - name: startingAfter
        in: query
        description: Filter open homes occurring on or after this date
        schema:
          type: string
          format: date
      - name: startingBefore
        in: query
        description: Filter open homes occurring before this date
        schema:
          type: string
          format: date
      - name: userid
        in: query
        description: Filter open homes attached to this user
        schema:
          type: integer
          format: int64
      - name: properties
        in: query
        description: Filter open homes by property ID
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Open Homes retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/OpenHomeWithProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /properties/{propertyid}/alarmDetails:
    get:
      tags: 
        - properties
      summary: Retrieve a list of alarm details for a property
      description: Retrieve a list of alarm details for a property
      operationId: getPropertyAlarmDetails
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/pagesize'
      responses:
        '200':
          description: Alarm details retrieved
          content:
            application/json:
              schema:
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyAlarmDetails'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
        - Api-Key: []
          Bearer: []

  /properties/{propertyid}/{salelease}/alarmDetails:
    get:
      tags: 
        - properties
      summary: Retrieve a list of alarm details for a property life
      description: Retrieve a list of alarm details for a property life
      operationId: getPropertyLifeAlarmDetails
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/pagesize'
      responses:
        '200':
          description: Alarm details retrieved
          content:
            application/json:
              schema:
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyAlarmDetails'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
        - Api-Key: []
          Bearer: []

  /properties/{id}/{salelease}/{lifeid}/rooms:
    get:
      tags:
        - properties
      summary: Retrieve a list of rooms defined for this property life
      description: Retrieve a list of rooms defined for this property life
      operationId: getPropertyLifeRooms
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease life record
        required: true
        schema:
          type: string
          enum:
          - sale
          - lease
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Property rooms retrieved
          content: 
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyRoom'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
        - Api-Key: []
          Bearer: []

  /properties/{id}/sale/{lifeid}/solicitors:
    get:
      tags:
        - properties
      summary: Retrieve purchaser and vendor solicitors defined for this property life
      description: Retrieve purchaser and vendor solicitors defined for this property life
      operationId: getPropertySolicitors
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property solicitors retrieved
          content: 
            application/json:
              schema:
                type: object
                properties:
                  purchaser:
                    type: object
                    $ref: '#/components/schemas/ContactExtended'
                  vendor:
                    type: object
                    $ref: '#/components/schemas/ContactExtended'
      security:
        - Api-Key: []
          Bearer: []

  /properties/externalRefs/lookup:
    get:
      tags:
        - properties
      summary: Retrieve properties from an external reference
      description: Retrieve properties from an external reference
      operationId: getPropertiesFromExternalReference
      parameters:
      - name: externalReference
        in: query
        description: External ID to use for lookup
        required: true
        schema:
          type: string
      responses:
        200:
          description: Property external reference retrieved
          content: 
            application/json:
              schema:
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Property'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
        - Api-Key: []
          Bearer: []

  /precincts:
    get:
      tags: 
        - precincts
      summary: Retrieve a list of precincts for this account
      description: Retrieve a list of precincts for this account
      operationId: getAccountPrecincts
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/pagesize'
        - name: sort
          in: query
          description: Field by which to sort the results.
          schema:
            type: string
            enum:
            - name
        - $ref: '#/components/parameters/sortOrder'
      responses:
        '200':
          description: Precincts retrieved
          content:
            application/json:
              schema:
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Precinct'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
        - Api-Key: []
          Bearer: []

  /precincts/{id}:
    get:
      tags:
      - precincts
      summary: Retrieve a single precinct
      description: Retrieve a single precinct
      operationId: getPrecinct
      parameters:
      - name: id
        in: path
        description: ID of the precinct
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Precinct retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Precinct'
      security:
      - Api-Key: []
        Bearer: []

  /properties/livestock/sale/sold:
    get:
      tags:
      - livestockProperties
      summary: Retrieve a list of sold livestock properties
      description: Retrieve a list of sold livestock properties
      operationId: getLivestockSoldProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/includeConditional'
      - $ref: '#/components/parameters/conditionalSince'
      - $ref: '#/components/parameters/conditionalBefore'
      - $ref: '#/components/parameters/includeFallen'
      - $ref: '#/components/parameters/fallenSince'
      - $ref: '#/components/parameters/fallenBefore'
      - $ref: '#/components/parameters/unconditionalSince'
      - $ref: '#/components/parameters/unconditionalBefore'
      - $ref: '#/components/parameters/settlementSince'
      - $ref: '#/components/parameters/settlementBefore'
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - conditional
          - unconditional
          - settlement
          - suburb
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/LivestockSoldProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/livestock/sale:
    get:
      tags:
      - livestockProperties
      summary: Retrieve a list of livestock properties
      description: Retrieve a list of livestock properties
      operationId: getLivestockProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/listingAuthoritySince'
      - $ref: '#/components/parameters/listingAuthorityBefore'
      - $ref: '#/components/parameters/webLiveDateSince'
      - $ref: '#/components/parameters/webLiveDateBefore'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/LivestockProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - livestockProperties
      summary: Add a livestock property
      description: Add a livestock property
      operationId: addLivestockProperty
      requestBody:
        description: Livestock property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateLivestockProperty'
        required: true
      responses:
        201:
          description: Property created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LivestockPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/livestock/sale/{id}:
    get:
      tags:
      - livestockProperties
      summary: Retrieve a single livestock property
      description: Retrieve a single livestock property
      operationId: getLivestockProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LivestockPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - livestockProperties
      summary: Update a livestock property
      description: Update a livestock property
      operationId: updateLivestockProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Livestock property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateLivestockProperty'
        required: true
      responses:
        200:
          description: Property updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LivestockPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body

  /properties/clearingSales/sale/sold:
    get:
      tags:
      - clearingSalesProperties
      summary: Retrieve a list of sold clearing sales properties
      description: Retrieve a list of sold clearing sales properties
      operationId: getClearingSalesSoldProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/includeConditional'
      - $ref: '#/components/parameters/conditionalSince'
      - $ref: '#/components/parameters/conditionalBefore'
      - $ref: '#/components/parameters/includeFallen'
      - $ref: '#/components/parameters/fallenSince'
      - $ref: '#/components/parameters/fallenBefore'
      - $ref: '#/components/parameters/unconditionalSince'
      - $ref: '#/components/parameters/unconditionalBefore'
      - $ref: '#/components/parameters/settlementSince'
      - $ref: '#/components/parameters/settlementBefore'
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - conditional
            - unconditional
            - settled
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - conditional
          - unconditional
          - settlement
          - suburb
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ClearingSalesSoldProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
  /properties/clearingSales/sale:
    get:
      tags:
      - clearingSalesProperties
      summary: Retrieve a list of clearing sales properties
      description: Retrieve a list of clearing sales properties
      operationId: getClearingSalesProperties
      parameters:
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/priceReducedSince'
      - $ref: '#/components/parameters/priceReducedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/published'
      - $ref: '#/components/parameters/publishedOnPortals'
      - $ref: '#/components/parameters/listingAuthoritySince'
      - $ref: '#/components/parameters/listingAuthorityBefore'
      - $ref: '#/components/parameters/webLiveDateSince'
      - $ref: '#/components/parameters/webLiveDateBefore'
      - name: status
        in: query
        description: Filter by a list of statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: portalStatus
        in: query
        description: Filter by a list of portal statuses
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - listingOrConditional
            - unconditional
      - name: contactStaff
        in: query
        description: Filter properties with contactStaff containing this user ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/suburbs'
      - $ref: '#/components/parameters/accessBy'
      - $ref: '#/components/parameters/precincts'
      - $ref: '#/components/parameters/customRegions'
      - $ref: '#/components/parameters/branches'
      - $ref: '#/components/parameters/propertyIds'
      - $ref: '#/components/parameters/types'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
          - modified
          - suburb
          - searchPrice
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ClearingSalesProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - clearingSalesProperties
      summary: Add a clearing sales property
      description: Add a clearing sales property
      operationId: addClearingSalesProperty
      requestBody:
        description: Clearing Sales property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateClearingSalesProperty'
        required: true
      responses:
        201:
          description: Property created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClearingSalesPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body
  /properties/clearingSales/sale/{id}:
    get:
      tags:
      - clearingSalesProperties
      summary: Retrieve a single clearing sales property
      description: Retrieve a single clearing sales property
      operationId: getClearingSalesProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClearingSalesPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - clearingSalesProperties
      summary: Update a clearing sales property
      description: Update a clearing sales property
      operationId: updateClearingSalesProperty
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Clearing Sales property object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddUpdateClearingSalesProperty'
        required: true
      responses:
        200:
          description: Property updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClearingSalesPropertyExtended'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body

  /fms/leads:
    get:
      tags:
      - fmsleads
      summary: Get a list of FMS leads
      description: Get a list of FMS leads
      operationId: getFMSLeads
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Leads retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/FMSLead'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - fmsleads
      summary: Submit a new FMS lead
      description: Submit a new FMS lead.
      operationId: addFMSLead
      requestBody:
        description: FMS Lead object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddFMSLead'
        required: true
      responses:
        201:
          description: Lead received successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FMSLead'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []
      x-codegen-request-body-name: body

  /propertyOffers:
    get:
      tags:
      - propertyOffer
      summary: Retrieve a list of property offers for this account
      description: Retrieve a list of property offers for this account
      operationId: getPropertyOffers
      parameters:
      - name: type
        in: query
        description: Filter by offer type. Currently only "sale" is supported
        required: true
        schema:
          enum:
          - sale
      - name: saleLifeId
        in: query
        description: Filter by offers for this sale life
        required: false
        schema:
          type: integer
          format: int64
      - name: leaseLifeId
        in: query
        description: Filter by offers for this lease life
        required: false
        schema:
          type: integer
          format: int64
      - name: contactId
        in: query
        description: Filter by offers for this contact
        required: false
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Sort items by field
        schema:
          type: string
          enum:
          - offerDate
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Offers retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyOffer'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - propertyOffer
      summary: Add a property offer
      description: Add a property offer. Sale or lease life must be provided, but not both.
      operationId: addPropertyOffer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddPropertyOffer'
        required: true
      responses:
        201:
          description: Property offer added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyOffer'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []

  /propertyOffers/{id}:
    get:
      tags:
      - propertyOffer
      summary: Retrieve a single property offer
      description: Retrieve a single property offer
      operationId: getPropertyOffer
      parameters:
      - name: id
        in: path
        description: ID of the property offer
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Offer retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PropertyOffer'
      security:
      - Api-Key: []
        Bearer: []
    put:
      tags:
      - propertyOffer
      summary: Update a property offer
      description: Update a property offer
      operationId: updatePropertyOffer
      parameters:
      - name: id
        in: path
        description: ID of the property offer
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePropertyOffer'
        required: true
      responses:
        200:
          description: Property offer updated
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PropertyOffer'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []

  /campaigns:
    get:
      tags:
      - campaigns
      summary: Retrieve a list of marketing campaigns for this account
      description: Retrieve a list of marketing campaigns for this account
      operationId: getCampaigns
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Campaigns retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Campaign'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /campaigns/{id}:
    get:
      tags:
      - campaigns
      summary: Retrieve a single marketing campaign
      description: Retrieve a single marketing campaign
      operationId: getCampaign
      parameters:
      - name: id
        in: path
        description: ID of the marketing campaign
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Campaign retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
      security:
      - Api-Key: []
        Bearer: []

  /campaigns/{id}/tracking:
    get:
      tags:
      - campaigns
      summary: Retrieve a campaign tracking data
      description: Retrieve a campaign tracking data
      operationId: getCampaignTracking
      parameters:
      - name: id
        in: path
        description: ID of the marketing campaign
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Campaign Tracking retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CampaignTracking'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /campaigns/{id}/tracking/summary:
    get:
      tags:
      - campaigns
      summary: Retrieve campaign stats (totals)
      description: Retrieve campaign stats (totals)
      operationId: getCampaignTrackingSummary
      parameters:
      - name: id
        in: path
        description: ID of the marketing campaign
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Campaign Tracking Summary retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignTrackingSummary'
      security:
      - Api-Key: []
        Bearer: []

  /conjunctionals:
    get:
      tags:
      - conjunctionals
      summary: Retrieve a list of conjunctional property deals for this account
      description: Retrieve a list of conjunctional property deals for this account
      operationId: getConjunctionals
      parameters:
      - name: sourceAccountId
        in: query
        description: Filter by deals with this account as the source
        required: false
        schema:
          type: integer
          format: int64
      - name: destinationAccountId
        in: query
        description: Filter by deals with this account as the destination
        required: false
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/insertedSince'
      - $ref: '#/components/parameters/insertedBefore'
      - $ref: '#/components/parameters/modifiedSince'
      - $ref: '#/components/parameters/modifiedBefore'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Conjunctional deals retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ConjunctionalSale'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /properties/{propertyid}/listingConfigurations:
    get:
      tags:
      - properties
      summary: Retrieve a list of listing configurations for the given property
      description: Retrieve a list of listing configurations for the given property
      operationId: getPropertyListingConfigurations
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Listing Configurations retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyListingConfiguration'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /properties/{propertyid}/strataProperties:
    get:
      tags:
      - properties
      summary: Retrieve a list of strata properties for the given property
      description: Retrieve a list of strata properties for the given strata building
      operationId: getPropertyStrataProperties
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Strata Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyStrataProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /properties/{propertyid}/projectProperties:
    get:
      tags:
      - properties
      summary: Retrieve a list of project properties for the given property
      description: Retrieve a list of project properties for the given project 
      operationId: getPropertyProjectProperties
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Project Properties retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PropertyProjectProperty'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []


  /contacts/matchingRequirement/count:
    post:
      tags:
      - contacts
      summary: Get a count of contacts matching the provided buy/lease requirement
      description: Get a count of contacts matching the provided buy/lease requirement
      operationId: getMatchingContactsCount
      requestBody:
        description: Request object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MatchingContactsRequest'
        required: true
      responses:
        200:
          description: Count of matching contacts retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  matchingContacts:
                    type: integer
                    format: int64

      security:
      - Api-Key: []
        Bearer: []

  /contacts/merge:
    post:
      tags:
      - contacts
      summary: Submit a request for two contacts to be merged
      description: Submit a request for two contacts to be merged. The merge will be processed asynchronously and may take some time to complete. Integrators should subscribe to the "contact.merge" webhook event to be notified when the merge has completed. The returned "requestid" can be used by the MRI Vault team for any technical investigations.
      operationId: mergeContacts
      requestBody:
        description: Request object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MergeContactRequest'
        required: true
      responses:
        202:
          description: Merge request accepted
          content:
            application/json:
              schema:
                type: object
                properties:
                  requestid:
                    type: string
                  message:
                    type: string
      security:
      - Api-Key: []
        Bearer: []

  /properties/{propertyid}/{salelease}/{lifeid}/qrcode:
    get:
      tags:
      - properties
      summary: Retrieve a check-in QR code for the given property life
      description: Retrieve a check-in QR code for the given property life
      operationId: getPropertyLifeQrCode
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: QR code retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  qrCode: 
                    type: string
      security:
      - Api-Key: []
        Bearer: []
  /properties/residential/sale/{id}/{lifeid}:
    get:
      tags:
      - residentialProperties
      summary: Retrieve a single residential sale property
      description: Retrieve a single residential sale property
      operationId: getResidentialSalePropertyAndLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: The ID of the life to join with this property.
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResidentialSalePropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
  /properties/residential/lease/{id}/{lifeid}:
    get:
      tags:
      - residentialProperties
      summary: Retrieve a single residential lease property
      description: Retrieve a single residential lease property
      operationId: getResidentialLeasePropertyAndLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: The ID of the life to join with this property.
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResidentialLeasePropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
  /properties/commercial/sale/{id}/{lifeid}:
    get:
      tags:
      - commercialProperties
      summary: Retrieve a single commercial property
      description: Retrieve a single commercial property
      operationId: getCommericalPropertyAndLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: The ID of the life to join with this property.
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommercialSalePropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
  /properties/land/sale/{id}/{lifeid}:
    get:
      tags:
      - landProperties
      summary: Retrieve a single land property
      description: Retrieve a single land property
      operationId: getLandPropertyAndLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: The ID of the life to join with this property.
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LandPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
  /properties/rural/sale/{id}/{lifeid}:
    get:
      tags:
      - ruralProperties
      summary: Retrieve a single rural property
      description: Retrieve a single rural property
      operationId: getRuralPropertyAndLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: The ID of the life to join with this property.
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuralPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
  /properties/business/sale/{id}/{lifeid}:
    get:
      tags:
      - ruralProperties
      summary: Retrieve a single rural property
      description: Retrieve a single rural property
      operationId: getBusinessPropertyAndLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: The ID of the life to join with this property.
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BusinessPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
  /properties/livestock/sale/{id}/{lifeid}:
    get:
      tags:
      - ruralProperties
      summary: Retrieve a single rural property
      description: Retrieve a single rural property
      operationId: getLivestockPropertyAndLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: The ID of the life to join with this property.
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LivestockPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
  /properties/clearingSales/sale/{id}/{lifeid}:
    get:
      tags:
      - ruralProperties
      summary: Retrieve a single rural property
      description: Retrieve a single rural property
      operationId: getClearingSalesPropertyAndLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: The ID of the life to join with this property.
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClearingSalesPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []
  /properties/holidayRental/lease/{id}/{lifeid}:
    get:
      tags:
      - ruralProperties
      summary: Retrieve a single rural property
      description: Retrieve a single rural property
      operationId: getHolidayRentalPropertyAndLife
      parameters:
      - name: id
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: The ID of the life to join with this property.
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Property retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HolidayRentalPropertyExtended'
      security:
      - Api-Key: []
        Bearer: []

  /properties/{propertyid}/{salelease}/{lifeid}/hazards:
    get:
      tags:
      - properties
      summary: Retrieve a list of hazards for a given property life
      description: Retrieve a list of hazards for a given property life
      operationId: getPropertyLifeHazards
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: Hazards retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/HazardsAndRisks'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /properties/{propertyid}/{salelease}/{lifeid}/externalFeedback/{id}:
    get:
      tags:
      - properties
      summary: Retrieve a signle external feedback for a given property life
      description: Retrieve a signle external feedback for a given property life
      operationId: getPropertyLifeExternalFeedbackById
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: ID of the external note
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: External Feedback retrieved
          content:
            application/json:
              schema:
                type: object
                $ref: '#/components/schemas/ExternalFeedback'
      security:
      - Api-Key: []
        Bearer: []

  /properties/{propertyid}/{salelease}/{lifeid}/externalFeedback:
    get:
      tags:
      - properties
      summary: Retrieve a list of external feedback for a given property life
      description: Retrieve a list of external feedback for a given property life
      operationId: getPropertyLifeExternalFeedback
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease
        required: true
        schema:
          type: integer
          format: int64
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      responses:
        200:
          description: External Feedback retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ExternalFeedback'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []
    post:
      tags:
      - properties
      summary: Add an External Feedback
      description: Add an External Feedback
      operationId: addPropertyLifeExternalFeedback
      parameters:
      - name: propertyid
        in: path
        description: ID of the property
        required: true
        schema:
          type: integer
          format: int64
      - name: salelease
        in: path
        description: Sale or lease
        required: true
        schema:
          type: string
      - name: lifeid
        in: path
        description: ID of the property life
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: External Feedback details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InsertExternalFeedback'
        required: true
      responses:
        201:
          description: External Feedback added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalFeedback'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'

  /integrator/usage:
    get:
      tags:
      - integrator
      summary: Retrieve daily quota for this API key
      operationId: getUsage
      responses:
        200:
          description: Usage retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  remaining:
                    type: integer
                    format: int64
                  used:
                    type: integer
                    format: int64
      security:
      - Api-Key: []
        Bearer: []

  /invoices/saleSummary:
    get:
      tags:
      - invoices
      summary: Retrieve sale summary
      operationId: getSaleSummary
      parameters:
      - name: includeMultiOffice
        in: query
        description: Include multi office sales
        required: false
        schema:
          type: boolean
      - name: createdSince
        in: query
        description: Filter results since this datetime
        required: false
        schema:
          type: string
          format: date-time
      - name: createdBefore
        in: query
        description: Filter results before this datetime
        required: false
        schema:
          type: string
          format: date-time
      responses:
        200:
          description: Sale Summary retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/SaleSummary'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /reinz/sales:
    get:
      tags:
      - reinz
      summary: Retrieve a list of sales sent to REINZ
      description: Retrieve a list of sales sent to REINZ for this account.
      operationId: getReinzSales
      parameters:
      - $ref: '#/components/parameters/insertedSince'
      - $ref: '#/components/parameters/insertedBefore'
      - name: processedSince
        in: query
        description: Filter sales processed since this datetime
        schema:
          type: string
          format: date-time
      - name: processedBefore
        in: query
        description: Filter sales processed before this datetime
        schema:
          type: string
          format: date-time
      - name: success
        in: query
        description: Filter sales that have been processed successfully or not
        schema:
          type: boolean
      - name: processed
        in: query
        description: Filter sales that have been processed or unprocessed
        schema:
          type: boolean
      - name: saleLifeId
        in: query
        description: Filter sales for this sale life ID
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      responses:
        200:
          description: Sales retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ReinzSale'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /account/customRegions:
    get:
      tags:
      - suburbs
      - user
      summary: Retrieve a list of custom regions for this account
      description: Retrieve a list of custom regions for this account
      operationId: getCustomRegions
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Sort items by field
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Custom regions retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/CustomRegion'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /types/advertising/transactions:
    get:
      tags:
      - types
      - advertising
      summary: Retrieve a list of advertising transaction types
      description: Retrieve a list of advertising transaction (ledger) types
      operationId: getAdvertisingTransactionTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Advertising transaction types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/AdvertisingLedgerType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

  /types/advertising/payments:
    get:
      tags:
      - types
      - advertising
      summary: Retrieve a list of advertising payment types
      description: Retrieve a list of advertising payment types
      operationId: getAdvertisingPaymentTypes
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - name
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: Advertising payment types retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/AdvertisingPaymentType'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []


  /advertising/payments:
    post:
      tags:
      - advertising
      summary: Add an Advertising Payment
      description: Add an Advertising Payment to either a property ledger or agent ledger
      operationId: addAdvertisingPayment
      requestBody:
        description: Advertising Payment details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddAdvertisingPayment'
        required: true
      responses:
        201:
          description: Advertising Payment added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvertisingTransaction'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'

  /aml:
    get:
      tags:
      - aml
      summary: Retrieve a list of AML checks
      description: Retrieve a list of AML checks. Currently only allows retrieving AML checks by contactId
      operationId: getAMLChecks
      parameters:
      - name: contactId
        in: query
        description: Filter AML checks by contact ID
        required: true 
        schema:
          type: integer
          format: int64
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - name: sort
        in: query
        description: Field by which to sort the results.
        schema:
          type: string
          enum:
          - inserted
      - $ref: '#/components/parameters/sortOrder'
      responses:
        200:
          description: AML Checks retrieved
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/AMLCheck'
                  totalItems:
                    type: integer
                    format: int64
                  totalPages:
                    type: integer
                    format: int64
                  urls:
                    $ref: '#/components/schemas/Urls'
      security:
      - Api-Key: []
        Bearer: []

    post:
      tags:
      - aml
      summary: Create a new AML check for a contact
      description: Create a new AML check for a contact, and attach one or more properties. For each property provided, either a saleLifeId or leaseLifeId must be provided, and it must be the current sale/lease life for the property.
      operationId: addAMLCheck
      requestBody:
        description: AML Check details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddAMLCheck'
        required: true
      responses:
        201:
          description: AML Check added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLCheck'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'

  /aml/{id}:
    get:
      tags:
      - aml
      summary: Retrieve a single AML check
      description: Retrieve a single AML check by its ID
      operationId: getAMLCheck
      parameters:
      - name: id
        in: path
        description: ID of the AML check
        required: true
        schema:
          type: integer
          format: int64

      responses:
        200:
          description: AML check retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLCheck'
      security:
      - Api-Key: []
        Bearer: []

    put:
      tags:
      - aml
      summary: Update an existing AML check
      description: Update an existing AML check. Currently, only updating the status is permitted. Other endpoints are available for managing files and notes.
      operationId: updateAMLCheck
      parameters:
      - name: id
        in: path
        description: ID of the AML check
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: AML Check details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAMLCheck'
        required: true
      responses:
        200:
          description: AML Check updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLCheck'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'

  /aml/{id}/notes:
    post:
      tags:
      - aml
      summary: Add a new note to the AML check
      description: Add a new note to the AML check. The note will be associated with the AML check and can be used to provide additional information or context.
      operationId: addAMLNote
      parameters:
      - name: id
        in: path
        description: ID of the AML check
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: AML Note details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddAMLNote'
        required: true
      responses:
        201:
          description: AML Note added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLNote'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'

  /aml/{amlid}/files/{id}:
    delete:
      tags:
      - aml
      summary: Remove an attached file from an AML check
      description: Remove an attached file from an AML check. This will delete the file from the system.
      operationId: removeAMLNote
      parameters:
      - name: amlid
        in: path
        description: ID of the AML check
        required: true
        schema:
          type: integer
          format: int64
      - name: id 
        in: path
        description: ID of the AML file
        required: true
        schema:
          type: integer
          format: int64
      responses:
        204:
          description: AML file removed successfully

  /aml/{id}/files/upload:
    post:
      tags:
      - aml
      summary: Attach a file to this AML check
      description: Attach a file to this AML check. This endpoint returns an upload_url
        where the file data can be PUT.
      operationId: addAMLFile
      parameters:
      - name: id
        in: path
        description: ID of the AML check
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: File upload object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddAMLFileUpload'
        required: true
      responses:
        201:
          description: File record created. File data can now be posted to the returned
            URL.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileToBeUploaded'
        400:
          description: Invalid data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessOrError'
      security:
      - Api-Key: []
        Bearer: []

components:
  parameters:
    sortOrder:
      name: sortOrder
      in: query
      description: Order by which to sort the results. Used in conjunction with sort
        parameter.
      schema:
        type: string
        enum:
        - asc
        - desc
    leasedSince:
      name: leasedSince
      in: query
      description: Filter results leased since this datetime
      schema:
        type: string
        format: date-time
    leasedBefore:
      name: leasedBefore
      in: query
      description: Filter results leased before this datetime
      schema:
        type: string
        format: date-time
    listingAuthoritySince:
      name: listingAuthoritySince
      in: query
      description: Filter results with listing authority date since this datetime
      schema:
        type: string
        format: date-time
    listingAuthorityBefore:
      name: listingAuthorityBefore
      in: query
      description: Filter results with listing authority date before this datetime
      schema:
        type: string
        format: date-time
    webLiveDateSince:
      name: webLiveDateSince
      in: query
      description: Filter results with web live date since this datetime
      schema:
        type: string
        format: date-time
    webLiveDateBefore:
      name: webLiveDateBefore
      in: query
      description: Filter results with web live date before this datetime
      schema:
        type: string
        format: date-time
    insertedSince:
      name: insertedSince
      in: query
      description: Filter results inserted since this datetime
      schema:
        type: string
        format: date-time
    insertedBefore:
      name: insertedBefore
      in: query
      description: Filter results inserted before this datetime
      schema:
        type: string
        format: date-time
    modifiedSince:
      name: modifiedSince
      in: query
      description: Filter results modified since this datetime
      schema:
        type: string
        format: date-time
    modifiedBefore:
      name: modifiedBefore
      in: query
      description: Filter results modified before this datetime
      schema:
        type: string
        format: date-time
    conditionalSince:
      name: conditionalSince
      in: query
      description: Filter results with conditional date since this date
      schema:
        type: string
        format: date
    conditionalBefore:
      name: conditionalBefore
      in: query
      description: Filter results with conditional date before this date
      schema:
        type: string
        format: date
    unconditionalSince:
      name: unconditionalSince
      in: query
      description: Filter results with unconditional date since this date
      schema:
        type: string
        format: date
    unconditionalBefore:
      name: unconditionalBefore
      in: query
      description: Filter results with unconditional date before this date
      schema:
        type: string
        format: date
    settlementSince:
      name: settlementSince
      in: query
      description: Filter results with settlement date since this date
      schema:
        type: string
        format: date
    settlementBefore:
      name: settlementBefore
      in: query
      description: Filter results with settlement date before this date
      schema:
        type: string
        format: date
    fallenSince:
      name: fallenSince
      in: query
      description: Filter results with fallen date since this date
      schema:
        type: string
        format: date
    fallenBefore:
      name: fallenBefore
      in: query
      description: Filter results with fallen date before this date
      schema:
        type: string
        format: date
    withdrawnSince:
      name: withdrawnSince
      in: query
      description: Filter results with withdrawn date since this date
      schema:
        type: string
        format: date
    withdrawnBefore:
      name: withdrawnBefore
      in: query
      description: Filter results with withdrawn date before this date
      schema:
        type: string
        format: date
    priceReducedSince:
      name: priceReducedSince
      in: query
      description: Filter results by price reductions since this datetime
      schema:
        type: string
        format: date-time
    priceReducedBefore:
      name: priceReducedBefore
      in: query
      description: Filter results by price reductions before this datetime
      schema:
        type: string
        format: date-time
    page:
      name: page
      in: query
      description: Page number of results
      schema:
        type: integer
        format: int64
    pagesize:
      name: pagesize
      in: query
      description: Number of records to be returned in each page.
      schema:
        type: integer
        format: int64
        default: 50
    published:
      name: published
      in: query
      description: Filter properties published to at least one web portal
      schema:
        type: boolean
    publishedOnPortals:
      name: publishedOnPortals
      in: query
      description: Filter properties published to at least one of these office portal
        IDs
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
          format: int64
    suburbs:
      name: suburbs
      in: query
      description: Filter properties in these suburb IDs
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
          format: int64
    propertyIds:
      name: propertyIds
      in: query
      description: Filter properties with these IDs
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
          format: int64
    lifeIds:
      name: lifeIds
      in: query
      description: Filter life records with these IDs
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
          format: int64
    types:
      name: types
      in: query
      description: Filter properties with these property type IDs
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
          format: int64
    branches:
      name: branches
      in: query
      description: Filter properties in these account branch IDs
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
          format: int64
    after:
      name: after
      in: query
      description: Filter records after this ID
      schema:
        type: integer
        format: int64
    customRegions:
      name: customRegions
      in: query
      description: Filter properties belonging to at least one of these custom regions
        IDs
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
          format: int64
    precincts:
      name: precincts
      in: query
      description: Filter properties belonging to at least one of these precincts
        IDs
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
          format: int64
    includeConditional:
      name: includeConditional
      in: query
      description: Include conditional (written) sales
      schema:
        type: boolean
    includeFallen:
      name: includeFallen
      in: query
      description: Include fallen/crashed conditional sales
      schema:
        type: boolean
    minBed:
      name: minBed
      in: query
      description: Filter properties greater than or equal to min beds
      schema:
        type: integer
        format: int64
    minBath:
      name: minBath
      in: query
      description: Filter properties greater than or equal to min bathrooms
      schema:
        type: integer
        format: int64
    minCar:
      name: minCar
      in: query
      description: Filter properties greater than or equal to min car spaces
      schema:
        type: integer
        format: int64
    minSalePrice:
      name: minSalePrice
      in: query
      description: Filter sold properties with sale price greater than or equal to min sale price
      schema:
        type: number
        format: float
    maxSalePrice:
      name: maxSalePrice
      in: query
      description: Filter sold properties with sale price less than or equal to max sale price
      schema:
        type: number
        format: float
    letAgreed:
      name: letAgreed
      in: query
      description: Filter properties by let agreed
      schema:
        type: boolean
    accessBy:
      name: accessBy
      in: query
      description: Filter properties by these user IDs. NOTE - Use the ID "-1" to filter properties which are accessible by Everyone.
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
          format: int64
  securitySchemes:
    Api-Key:
      type: apiKey
      name: X-Api-Key
      in: header
    Bearer:
      type: http
      scheme: bearer

  schemas:
    AuthToken:
      type: object
      properties:
        token:
          type: string
    TemporaryToken:
      type: object
      properties:
        temporaryToken:
          type: string
    AccountBranch:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        shortName:
          type: string
        websiteUrl:
          type: string
        address:
          $ref: '#/components/schemas/Address'
    MarketingUser:
      type: object
      properties:
        id:
          type: integer
          format: int64
        user:
          $ref: '#/components/schemas/Access'
    AddUpdateMarketingUser:
      type: object
      properties:
        id:
          type: integer
          format: int64
        user:
          $ref: '#/components/schemas/ID'
    Contact:
      type: object
      properties:
        id:
          type: integer
          format: int64
        title:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        greeting:
          type: string
        displayName:
          type: string
        partnerTitle:
          type: string
        partnerFirstName:
          type: string
        partnerLastName:
          type: string
        company:
          type: string
        position:
          type: string
        address:
          $ref: '#/components/schemas/Address'
        postalAddress:
          $ref: '#/components/schemas/Address'
        onDoNotCallList:
          type: boolean
        archived:
          type: boolean
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        touched:
          type: string
          format: date-time
        remoteId:
          type: string
        unsubscribe:
          $ref: '#/components/schemas/Unsubscribe'
        entityType:
          $ref: '#/components/schemas/EntityType'
        emails:
          type: array
          items:
            type: string
            format: email
        phoneNumbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
        legalDescription:
          type: string
        abn:
          type: string
          description: 'Australian Business Number (ABN). For New Zealand customers, this field represents the GST registration number.'
        acn:
          type: string
          description: 'Australian Company Number (ACN).'
        marketingUsers:
          type: array
          items:
            $ref: '#/components/schemas/MarketingUser'
        smsUnsubscribeUrl:
          type: string
        customUnsubscribe:
          type: array
          items:
            $ref: '#/components/schemas/UnsubscribeType'
    ContactExtended:
      allOf:
      - $ref: '#/components/schemas/Contact'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          sourceOfEnquiry:
            $ref: '#/components/schemas/EnquirySource'
    PhoneNumber:
      type: object
      properties:
        number:
          type: string
        typeCode:
          type: string
          enum:
          - H
          - W
          - M
          - F
          - D
        type:
          type: string
          enum:
          - Home
          - Work
          - Mobile
          - Facsimile
          - Direct
        comment:
          type: string
    Country:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        isocode:
          type: string
        gstRate:
          type: number
          format: float
    Region:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    District:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        region:
          $ref: '#/components/schemas/Region'
    State:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        abbreviation:
          type: string
    Suburb:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        postcode:
          type: string
        state:
          $ref: '#/components/schemas/State'
        nzDistrict:
          $ref: '#/components/schemas/District'
        isPoBox:
          type: boolean
    RoyalMail:
      type: object
      properties:
        buildingName:
          type: string
        buildingNumber:
          type: string
        department:
          type: string
        locality:
           type: string
        locality2:
           type: string
        organisation:
           type: string
        postTown:
           type: string
        postcode:
           type: string
        subbuildingName:
           type: string
        subbuildingNumber:
           type: string
        thoroughfare:
           type: string
        thoroughfare2:
           type: string
        udprn:
          type: integer
          format: int64
    CustomAddress:
      type: object
      properties:
        address1:
          type: string
        address2:
          type: string
        postTown:
          type: string
        postcode:
           type: string
    Address:
      type: object
      properties:
        level:
          type: string
        unitNumber:
          type: string
        streetNumber:
          type: string
        street:
          type: string
        suburb:
          $ref: '#/components/schemas/Suburb'
        state:
          $ref: '#/components/schemas/State'
        country:
          $ref: '#/components/schemas/Country'
        royalMail:
          $ref: '#/components/schemas/RoyalMail'
        customAddress:
          $ref: '#/components/schemas/CustomAddress'
    UpdateAddress:
      type: object
      properties:
        level:
          type: string
        unitNumber:
          type: string
        streetNumber:
          type: string
        street:
          type: string
        suburb:
          $ref: '#/components/schemas/ID'
    Unsubscribe:
      type: object
      properties:
        email:
          type: boolean
        sms:
          type: boolean
        letters:
          type: boolean
    Credential:
      type: object
      properties:
        password:
          type: string
        username:
          type: string
    TwoFactorCredential:
      type: object
      properties:
        code:
          type: string
        temporaryToken:
          type: string
    ID:
      type: object
      properties:
        id:
          type: integer
          format: int64
    LocationHeader:
      type: string
      description: The location of the newly created resource
    SuccessOrError:
      type: object
      properties:
        success:
          type: boolean
        msg:
          type: string
        code:
          type: string
    ResponseCode:
      type: object
      properties:
        msg:
          type: string
        code:
          type: string
    Urls:
      type: object
      properties:
        previous:
          type: string
        next:
          type: string
        self:
          type: string
    ContactNoteTypePurpose:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    ContactNoteType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        colour:
          type: string
        defaultReadOnly:
          type: boolean
        pinned:
          type: boolean
        purpose:
          $ref: '#/components/schemas/ContactNoteTypePurpose'
    PropertyNoteTypePurpose:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    PropertyNoteType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        colour:
          type: string
        purpose:
          $ref: '#/components/schemas/PropertyNoteTypePurpose'
    Account:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        businessName:
          type: string
        eMarketingName:
          type: string
        timezone:
          type: string
        openDatabase:
          type: boolean
        email:
          type: string
          format: email
        phoneNumbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
        address:
          $ref: '#/components/schemas/Address'
        postalAddress:
          $ref: '#/components/schemas/Address'
        franchise:
          $ref: '#/components/schemas/AccountFranchise'
        speciality:
          type: string
          enum:
          - commercial
        marketingUserOrders:
          type: array
          items:
            $ref: '#/components/schemas/MarketingUserOrder'
        websiteUrl:
          type: string
        clientLoginUrl:
          type: string
        openingHours:
          type: object
          properties:
            sunday:
              type: string
            monday:
              type: string
            tuesday:
              type: string
            wednesday:
              type: string
            thursday:
              type: string
            friday:
              type: string
            saturday:
              type: string
    MarketingUserOrder:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    ContactPhoto:
      type: object
      properties:
        original:
          type: string
    UserPhoto:
      type: object
      properties:
        original:
          type: string
        thumb_360:
          type: string
    User:
      type: object
      properties:
        id:
          type: integer
          format: int64
        firstName:
          type: string
        lastName:
          type: string
        username:
          type: string
        email:
          type: string
          format: email
        adminAccess:
          type: boolean
        position:
          type: string
        role:
          type: string
          enum:
          - commercialSalesAndLeasing
          - residentialSales
          - propertyManagement
        photo:
          $ref: '#/components/schemas/UserPhoto'
        lastLogin:
          type: string
          format: date-time
        phoneNumbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
        profile:
          type: string
        permissions:
          type: object
          properties:
            settings:
              type: boolean
            accessPropertyManagement:
              type: boolean
            accessSales:
              type: boolean
            canLogin:
              type: boolean
            deleteContacts:
              type: boolean
            deleteProperties:
              type: boolean
            globalActionListsReadWrite:
              type: boolean
            globalContactsReadWrite:
              type: boolean
            globalNotesRead:
              type: boolean
            globalNotesReadWrite:
              type: boolean
            globalPropertiesRead:
              type: boolean
            globalPropertiesReadWrite:
              type: boolean
            globalTasksReadWrite:
              type: boolean
            sendSMS:
              type: boolean
            accessPropertyFinancials:
              type: boolean
            accessAlarmDetails:
              type: boolean
            modifyWebsiteContent:
              type: boolean
            editMarketingContact:
              type: boolean
        websiteUrl:
          type: string
        showOnWeb:
          type: boolean
        externalReference:
          type: string
        ssoIdentifier:
          type: string
        signature:
          type: string
        account:
          type: object
          properties:
            id:
              type: integer
              format: int64
            name:
              type: string
        hideMobileFromPortal:
          type: boolean
        
    UserAndTeams:
      allOf:
        - $ref: '#/components/schemas/User'
        - type: object
          properties:
            teams:
              type: array
              items:
                $ref: '#/components/schemas/Team'
    ContactNote:
      type: object
      properties:
        id:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        body:
          type: string
        readOnly:
          type: boolean
        contact:
          $ref: '#/components/schemas/ID'
        insertedBy:
          $ref: '#/components/schemas/User'
        type:
          $ref: '#/components/schemas/ContactNoteType'
        reminder:
          $ref: '#/components/schemas/ContactNoteReminder'
        propertyFeedback:
          $ref: '#/components/schemas/PropertyFeedback'
    ContactNoteExtended:
      allOf:
      - $ref: '#/components/schemas/ContactNote'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
    ContactNoteAndContact:
      type: object
      properties:
        note:
          $ref: '#/components/schemas/ContactNote'
        contact:
          $ref: '#/components/schemas/Contact'
    ContactNoteAndContactExtended:
      type: object
      properties:
        note:
          $ref: '#/components/schemas/ContactNoteExtended'
        contact:
          $ref: '#/components/schemas/ContactExtended'
    ContactNoteReminder:
      type: object
      properties:
        date:
          type: string
          format: date-time
        user:
          $ref: '#/components/schemas/User'
    AddContactNoteReminder:
      type: object
      properties:
        date:
          type: string
          format: date-time
        user:
          $ref: '#/components/schemas/ID'
    UpdateContactNote:
      type: object
      properties:
        body:
          type: string
        readOnly:
          type: boolean
        type:
          $ref: '#/components/schemas/ID'
        reminder:
          $ref: '#/components/schemas/AddContactNoteReminder'
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/ID'
    GdprOptin:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: GDPR opt-in record ID
        sms:
          type: boolean
          description: SMS consent flag
        email:
          type: boolean
          description: Email consent flag
        phone:
          type: boolean
          description: Phone consent flag
        inserted:
          type: string
          format: date-time
          description: When the consent was recorded
        modified:
          type: string
          format: date-time
          description: When the consent was last modified
        insertedBy:
          $ref: '#/components/schemas/User'
        modifiedBy:
          $ref: '#/components/schemas/User'
        property:
          type: object
          properties:
            id:
              type: integer
              format: int64
              description: Associated property ID (if applicable)
    AddUpdatePropertyFeedback:
      type: object
      properties:
        priceOpinion:
          type: number
          format: float
        feedbackDate:
          type: string
          format: date-time
        contractRequested:
          type: boolean
        contractSent:
          type: string
          format: date-time
    UpdateContactNoteWithFeedback:
      allOf:
      - $ref: '#/components/schemas/UpdateContactNote'
      - type: object
        properties:
          propertyFeedback:
            $ref: '#/components/schemas/AddUpdatePropertyFeedback'
    AddContactNote:
      type: object
      properties:
        body:
          type: string
        readOnly:
          type: boolean
        type:
          $ref: '#/components/schemas/ID'
        reminder:
          $ref: '#/components/schemas/AddContactNoteReminder'
        inserted:
          type: string
          format: date-time
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/ID'
        insertedBy:
          $ref: '#/components/schemas/ID'
    AddContactNoteWithFeedback:
      allOf:
      - $ref: '#/components/schemas/AddContactNote'
      - type: object
        properties:
          propertyFeedback:
            $ref: '#/components/schemas/AddUpdatePropertyFeedback'
    AddPropertyFeedback:
      type: object
      properties:
        contact:
          $ref: '#/components/schemas/ID'
        note:
          $ref: '#/components/schemas/AddContactNoteWithFeedback'
    UpdatePropertyFeedback:
      type: object
      properties:
        note:
          $ref: '#/components/schemas/UpdateContactNoteWithFeedback'
    PropertyNote:
      type: object
      properties:
        id:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        body:
          type: string
        readOnly:
          type: boolean
        insertedBy:
          $ref: '#/components/schemas/User'
        type:
          $ref: '#/components/schemas/PropertyNoteType'
    UpdatePropertyNote:
      type: object
      properties:
        body:
          type: string
        readOnly:
          type: boolean
        type:
          $ref: '#/components/schemas/ID'
    AddPropertyNote:
      type: object
      properties:
        body:
          type: string
        readOnly:
          type: boolean
        type:
          $ref: '#/components/schemas/ID'
        inserted:
          type: string
          format: date-time
    CategoryGroupingSimple:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    CategoryGrouping:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        categories:
          type: array
          items:
            $ref: '#/components/schemas/Category'
    Category:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    AddUpdateCategoryGrouping:
      type: object
      properties:
        name:
          type: string
    AddUpdateCategory:
      type: object
      properties:
        name:
          type: string
    Building:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    AddUpdateBuilding:
      type: object
      properties:
        name:
          type: string
    PropertyPhotoThumbnails:
      type: object
      properties:
        thumb_180:
          type: string
        thumb_1024:
          type: string
    PropertyPhoto:
      type: object
      properties:
        id:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        filesize:
          type: integer
          format: int64
        width:
          type: integer
          format: int64
        height:
          type: integer
          format: int64
        caption:
          type: string
        type:
          type: string
          enum:
          - Photograph
          - Floorplan
        url:
          type: string
        filename:
          type: string
        userFilename:
          type: string
        thumbnails:
          $ref: '#/components/schemas/PropertyPhotoThumbnails'
        published:
          type: boolean
    Property:
      type: object
      properties:
        id:
          type: integer
          format: int64
        building:
          $ref: '#/components/schemas/Building'
        class:
          $ref: '#/components/schemas/PropertyClass'
        type:
          $ref: '#/components/schemas/PropertyType'
        address:
          $ref: '#/components/schemas/Address'
        displayAddress:
          type: string
        addressVisibility:
          type: string
          enum:
          - streetAndSuburb
          - suburb
          - fullAddress
        referenceID:
          type: string
        photos:
          type: array
          items:
            $ref: '#/components/schemas/PropertyPhoto'
        searchPrice:
          type: number
          format: float
        displayPrice:
          type: string
        heading:
          type: string
        description:
          type: string
        brochureDescription:
          type: string
        windowCardDescription:
          type: string
        landArea:
          $ref: '#/components/schemas/Area'
        frontage:
          type: number
          format: float
        volumeNumber:
          type: string
        folioNumber:
          type: string
        corelogicId:
          type: integer
          format: int64
        yearBuilt:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        saleLifeId:
          type: integer
          format: int64
        leaseLifeId:
          type: integer
          format: int64
        geolocation:
          $ref: '#/components/schemas/Geolocation'
        lotNumber:
          type: string
        certificateOfTitle:
          type: string
        legalDescription:
          type: string
        rpdp:
          type: string
        commercialListingType:
          type: string
          enum:
          - sale
          - lease
          - both
        councilTaxBand:
          type: string
        isStrataBuilding:
          type: boolean
        isProjectBuilding:
          type: boolean
        epcRating:
          type: string
        zoning:
          type: string
        account:
          type: object
          properties:
            id:
              type: integer
              format: int64
            name:
              type: string
      discriminator:
        propertyName: class
    PropertyLife:
      allOf:
      - $ref: '#/components/schemas/ResidentialProperty'
      - $ref: '#/components/schemas/CommercialProperty'
    PropertyExtended:
      allOf:
      - $ref: '#/components/schemas/Property'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          editableBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          keys:
            type: array
            items:
              $ref: '#/components/schemas/PropertyKey'
          leaseHistory:
            type: array
            items:
              $ref: '#/components/schemas/LeaseHistory'
          saleHistory:
            type: array
            items:
              $ref: '#/components/schemas/SaleHistory'
          saleLife:
            type: object
            properties:
              id:
                type: integer
                format: int64
              status:
                type: string
          leaseLife:
            type: object
            properties:
              id:
                type: integer
                format: int64
              status:
                type: string
    AddUpdateProperty:
      type: object
      properties:
        branch:
          $ref: '#/components/schemas/ID'
        building:
          $ref: '#/components/schemas/ID'
        type:
          $ref: '#/components/schemas/ID'
        address:
          $ref: '#/components/schemas/UpdateAddress'
        referenceID:
          type: string
        searchPrice:
          type: number
          format: float
        displayPrice:
          type: string
        heading:
          type: string
        description:
          type: string
        brochureDescription:
          type: string
        windowCardDescription:
          type: string
        landArea:
          $ref: '#/components/schemas/Area'
        volumeNumber:
          type: string
        folioNumber:
          type: string
        corelogicId:
          type: integer
          format: int64
        yearBuilt:
          type: integer
          format: int64
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/ID'
        editableBy:
          type: array
          items:
            $ref: '#/components/schemas/ID'     
        appraisal:
          type: string
          format: date-time
        appraisalPriceLower:
          type: number
          format: float
        appraisalPriceUpper:
          type: number
          format: float
        contactStaff:
          type: array
          items:
            $ref: '#/components/schemas/ID'
        externalLinks:
          type: array
          items:
            $ref: '#/components/schemas/AddUpdateExternalLink'
        mobileMarketingDescription:
          type: string
        internalRemarks:
          type: string
        certificateOfTitle:
          type: string
        legalDescription:
          type: string
        rpdp:
          type: string
        lotNumber:
          type: string
      discriminator:
        propertyName: class
    ResidentialProperty:
      allOf:
      - $ref: '#/components/schemas/Property'
      - type: object
        properties:
          bed:
            type: integer
            format: int64
          bath:
            type: integer
            format: int64
          garages:
            type: integer
            format: int64
          carports:
            type: integer
            format: int64
          openSpaces:
            type: integer
            format: int64
          ensuites:
            type: integer
            format: int64
          toilets:
            type: integer
            format: int64
          receptionRooms:
            type: integer
            format: int64
          floorArea:
            $ref: '#/components/schemas/Area'
          status:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - unconditional
            - settled
            - management
            - withdrawn
            - withdrawnAppraisal
          portalStatus:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - unconditional
            - settled
            - management
            - withdrawn
            - withdrawnAppraisal
          contactStaff:
            type: array
            items:
              $ref: '#/components/schemas/User'
          eTableUrl:
            type: string
          externalLinks:
            type: array
            items:
              $ref: '#/components/schemas/ExternalLink'
          energyRating:
            type: number
            format: float
          isNewHome:
            type: boolean
          isHouseLandPackage:
            type: boolean
    ResidentialPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/ResidentialProperty'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          editableBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          keys:
            type: array
            items:
              $ref: '#/components/schemas/PropertyKey'
          saleHistory:
            type: array
            items:
              $ref: '#/components/schemas/SaleHistory'
          leaseHistory:
            type: array
            items:
              $ref: '#/components/schemas/LeaseHistory'
          highlights:
            type: array
            items:
              type: string
          portals:
            type: array
            items:
              $ref: '#/components/schemas/PortalAccess'
    AddUpdateResidentialProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateProperty'
      - type: object
        properties:
          bed:
            type: integer
            format: int64
          bath:
            type: integer
            format: int64
          garages:
            type: integer
            format: int64
          carports:
            type: integer
            format: int64
          openSpaces:
            type: integer
            format: int64
          ensuites:
            type: integer
            format: int64
          toilets:
            type: integer
            format: int64
          receptionRooms:
            type: integer
            format: int64
          floorArea:
            $ref: '#/components/schemas/Area'
          status:
            type: string
            enum:
            - prospect
            - appraisal
    SaleProperty:
      type: object
      properties:
        priceQualifier:
          $ref: '#/components/schemas/PriceQualifier'
        tenureOrTitleType:
          $ref: '#/components/schemas/TenureOrTitleType'
        branch:
          $ref: '#/components/schemas/AccountBranch'
        tenanted:
          type: boolean
        tenancyDetails:
          type: string
        tenancyStart:
          type: string
          format: date-time
        tenancyStop:
          type: string
          format: date-time
        tenantName:
          type: string
        tenantPhone:
          type: string
        tenantEmail:
          type: string
        rates:
          type: object
          properties:
            water:
              $ref: '#/components/schemas/Rate'
            council:
              $ref: '#/components/schemas/Rate'
            strata:
              $ref: '#/components/schemas/Rate'
        mobileMarketingDescription:
          type: string
        internalRemarks:
          type: string
        externalLinks:
          type: array
          items:
            $ref: '#/components/schemas/ExternalLink'
        priceOnApplication:
          type: boolean
        appraisal:
          type: string
          format: date-time
        authorityStart:
          type: string
          format: date-time
        authorityEnd:
          type: string
          format: date-time
        listingAuthorityFile:
          $ref: '#/components/schemas/PropertyFile'
        salePricePercentSplit:
          type: number
          format: float
        publishedToWeb:
          type: string
          format: date-time
        sellingFeePercent:
          type: number
          format: float
        sellingFeeFixed:
          type: number
          format: float
        vpa:
          type: number
          format: float
        agentPriceOpinion:
          type: number
          format: float
        agentPriceOpinionUpper:
          type: number
          format: float
        rateableValue:
          type: integer
          format: int64
        landValue:
          type: integer
          format: int64
        improvementValue:
          type: integer
          format: int64
        methodOfsale:
          $ref: '#/components/schemas/MethodOfSale'
        auctionSaleType:
          $ref: '#/components/schemas/AuctionType'
        authorityType:
          $ref: '#/components/schemas/AuthorityType'
        webId:
          type: string
        sharedOwnership:
          $ref: '#/components/schemas/SharedOwnership'
        isNewHome:
          type: boolean
        soiUrl:
          type: string
        isOurListing:
          type: boolean
        internalMarketingLiveDate:
          type: string
          format: date-time
        mortgageeSale:
          type: boolean
        asIsSale:
          type: boolean
        isUnitTitle:
          type: boolean
        contractNumber:
          type: string
    AddUpdateSaleProperty:
      type: object
      properties:
        rates:
          type: object
          properties:
            water:
              $ref: '#/components/schemas/Rate'
            council:
              $ref: '#/components/schemas/Rate'
            strata:
              $ref: '#/components/schemas/Rate'
        externalLinks:
          type: array
          items:
            $ref: '#/components/schemas/ExternalLink'
        priceOnApplication:
          type: boolean
        authorityStart:
          type: string
          format: date-time
        authorityEnd:
          type: string
          format: date-time
        sellingFeePercent:
          type: number
          format: float
        sellingFeeFixed:
          type: number
          format: float
        vpa:
          type: number
          format: float
        agentPriceOpinion:
          type: number
          format: float
        agentPriceOpinionUpper:
          type: number
          format: float
        rateableValue:
          type: integer
          format: int64
        landValue:
          type: integer
          format: int64
        improvementValue:
          type: integer
          format: int64
        methodOfsale:
          $ref: '#/components/schemas/ID'
        authorityType:
          $ref: '#/components/schemas/ID'
        tenureOrTitleType:
          $ref: '#/components/schemas/ID'
        auctionDetails:
          $ref: '#/components/schemas/AuctionDetails'
        tenderDetails:
          $ref: '#/components/schemas/TenderDetails'
        setSaleDateDetails:
          $ref: '#/components/schemas/SetSaleDateDetails'
    MethodOfSale:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    AuctionSaleType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    SoldType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    AuthorityType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    ResidentialSaleProperty:
      allOf:
      - $ref: '#/components/schemas/ResidentialProperty'
      - $ref: '#/components/schemas/SaleProperty'
      - type: object
        properties:
          auctionDetails:
            $ref: '#/components/schemas/AuctionDetails'
          tenderDetails:
            $ref: '#/components/schemas/TenderDetails'
          setSaleDateDetails:
            $ref: '#/components/schemas/SetSaleDateDetails'
          soiUrl:
            type: string
          isOurListing:
            type: boolean
    ResidentialSoldProperty:
      allOf:
      - $ref: '#/components/schemas/ResidentialSaleProperty'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    ResidentialSalePropertyExtended:
      allOf:
      - $ref: '#/components/schemas/ResidentialSaleProperty'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          editableBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          keys:
            type: array
            items:
              $ref: '#/components/schemas/PropertyKey'
          saleHistory:
            type: array
            items:
              $ref: '#/components/schemas/SaleHistory'
          highlights:
            type: array
            items:
              type: string
          leasehold:
            $ref: '#/components/schemas/Leasehold'
          portals:
            type: array
            items:
              $ref: '#/components/schemas/PortalAccess'
    ResidentialSoldPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/ResidentialSalePropertyExtended'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    LeaseProperty:
      type: object
      properties:
        branch:
          $ref: '#/components/schemas/AccountBranch'
        mobileMarketingDescription:
          type: string
        internalRemarks:
          type: string
        externalLinks:
          type: array
          items:
            $ref: '#/components/schemas/ExternalLink'
        priceOnApplication:
          type: boolean
        authorityStart:
          type: string
          format: date-time
        authorityEnd:
          type: string
          format: date-time
        bondPrice:
          type: number
          format: float
        expenditureLimit:
          type: number
          format: float
        webId:
          type: string
        rates:
          type: object
          properties:
            council:
              $ref: '#/components/schemas/Rate'
        isNewHome:
          type: boolean
        soiUrl:
          type: string
        publishedToWeb:
          type: string
          format: date-time
        furnished:
          $ref: '#/components/schemas/Furnished'
        internalMarketingLiveDate:
          type: string
          format: date-time
    AddUpdateLeaseProperty:
      type: object
      properties:
        externalLinks:
          type: array
          items:
            $ref: '#/components/schemas/ExternalLink'
        priceOnApplication:
          type: boolean
        authorityStart:
          type: string
          format: date-time
        authorityEnd:
          type: string
          format: date-time
        bondPrice:
          type: number
          format: float
        expenditureLimit:
          type: number
          format: float
        rates:
          type: object
          properties:
            council:
              $ref: '#/components/schemas/Rate'
    ResidentialLeaseProperty:
      allOf:
      - $ref: '#/components/schemas/ResidentialProperty'
      - $ref: '#/components/schemas/LeaseProperty'
      - type: object
        properties:
          currentTenancy:
            $ref: '#/components/schemas/Tenancy'
          propertyManager:
            $ref: '#/components/schemas/User'
          available:
            type: boolean
    ResidentialLeasePropertyExtended:
      allOf:
      - $ref: '#/components/schemas/ResidentialLeaseProperty'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          editableBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          keys:
            type: array
            items:
              $ref: '#/components/schemas/PropertyKey'
          leaseHistory:
            type: array
            items:
              $ref: '#/components/schemas/LeaseHistory'
          highlights:
            type: array
            items:
              type: string
          portals:
            type: array
            items:
              $ref: '#/components/schemas/PortalAccess'
    AddUpdateResidentialSaleProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateResidentialProperty'
      - $ref: '#/components/schemas/AddUpdateSaleProperty'
      - type: object
    AddUpdateResidentialLeaseProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateResidentialProperty'
      - $ref: '#/components/schemas/AddUpdateLeaseProperty'
      - type: object
        properties:
          propertyManager:
            $ref: '#/components/schemas/ID'
    LandProperty:
      allOf:
      - $ref: '#/components/schemas/Property'
      - type: object
        properties:
          status:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - unconditional
            - settled
            - management
            - withdrawn
            - withdrawnAppraisal
          portalStatus:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - unconditional
            - settled
            - management
            - withdrawn
            - withdrawnAppraisal
          auctionDetails:
            $ref: '#/components/schemas/AuctionDetails'
          tenderDetails:
            $ref: '#/components/schemas/TenderDetails'
          setSaleDateDetails:
            $ref: '#/components/schemas/SetSaleDateDetails'
          contactStaff:
            type: array
            items:
              $ref: '#/components/schemas/ID'
          eTableUrl:
            type: string
          soiUrl:
            type: string
          isNewHome:
            type: boolean
          isHouseLandPackage:
            type: boolean
          externalLinks:
            type: array
            items:
              $ref: '#/components/schemas/ExternalLink'
    LandSoldProperty:
      allOf:
      - $ref: '#/components/schemas/LandProperty'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    LandPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/LandProperty'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          editableBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          keys:
            type: array
            items:
              $ref: '#/components/schemas/PropertyKey'
          saleHistory:
            type: array
            items:
              $ref: '#/components/schemas/SaleHistory'
          highlights:
            type: array
            items:
              type: string
          portals:
            type: array
            items:
              $ref: '#/components/schemas/PortalAccess'
    LandSoldPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/LandPropertyExtended'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    AddUpdateLandProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateProperty'
      - $ref: '#/components/schemas/AddUpdateSaleProperty'
      - type: object
        properties:
          status:
            type: string
            enum:
            - prospect
            - appraisal
    RuralProperty:
      allOf:
      - $ref: '#/components/schemas/ResidentialProperty'
      - type: object
        properties:
          auctionDetails:
            $ref: '#/components/schemas/AuctionDetails'
          tenderDetails:
            $ref: '#/components/schemas/TenderDetails'
          setSaleDateDetails:
            $ref: '#/components/schemas/SetSaleDateDetails'
          soiUrl:
            type: string
          externalLinks:
            type: array
            items:
              $ref: '#/components/schemas/ExternalLink'
          isOurListing:
            type: boolean
    RuralSoldProperty:
      allOf:
      - $ref: '#/components/schemas/RuralProperty'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    AddUpdateRuralProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateResidentialProperty'
      - $ref: '#/components/schemas/AddUpdateSaleProperty'
      - type: object
    RuralPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/RuralProperty'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          editableBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          keys:
            type: array
            items:
              $ref: '#/components/schemas/PropertyKey'
          saleHistory:
            type: array
            items:
              $ref: '#/components/schemas/SaleHistory'
          highlights:
            type: array
            items:
              type: string
          portals:
            type: array
            items:
              $ref: '#/components/schemas/PortalAccess'
    RuralSoldPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/RuralPropertyExtended'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    CommercialProperty:
      allOf:
      - $ref: '#/components/schemas/Property'
      - type: object
        properties:
          zoning:
            type: string
          carSpaces:
            type: integer
            format: int64
          floorArea:
            $ref: '#/components/schemas/Area'
          mezzanineArea:
            $ref: '#/components/schemas/Area'
          warehouseArea:
            $ref: '#/components/schemas/Area'
          retailArea:
            $ref: '#/components/schemas/Area'
          officeArea:
            $ref: '#/components/schemas/Area'
          otherArea:
            $ref: '#/components/schemas/Area'
          status:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - unconditional
            - settled
            - management
            - withdrawn
            - withdrawnAppraisal
          portalStatus:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - unconditional
            - settled
            - management
            - withdrawn
            - withdrawnAppraisal
          contactStaff:
            type: array
            items:
              $ref: '#/components/schemas/ID'
          eTableUrl:
            type: string
          commercialListingType:
            type: string
            enum:
            - sale
            - lease
            - both
          externalLinks:
            type: array
            items:
              $ref: '#/components/schemas/ExternalLink'
          energyRating:
            type: number
            format: float
          commercialLeasePrice:
            type: number
            format: float
          outgoingsPerAnnum:
            type: number
            format: float
          outgoingsText:
            type: string
          includesOutgoings:
            type: boolean
          commercialLeasePriceIncludesGst:
            type: boolean
          isNewHome:
            type: boolean
    CommercialPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/CommercialProperty'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          editableBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          keys:
            type: array
            items:
              $ref: '#/components/schemas/PropertyKey'
          highlights:
            type: array
            items:
              type: string
          portals:
            type: array
            items:
              $ref: '#/components/schemas/PortalAccess'
    CommercialSaleProperty:
      allOf:
      - $ref: '#/components/schemas/CommercialProperty'
      - $ref: '#/components/schemas/SaleProperty'
      - type: object
        properties:
          auctionDetails:
            $ref: '#/components/schemas/AuctionDetails'
          tenderDetails:
            $ref: '#/components/schemas/TenderDetails'
          setSaleDateDetails:
            $ref: '#/components/schemas/SetSaleDateDetails'
          annualReturnPercent:
            type: number
            format: float
    CommercialSoldProperty:
      allOf:
      - $ref: '#/components/schemas/CommercialSaleProperty'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    CommercialSalePropertyExtended:
      allOf:
      - $ref: '#/components/schemas/CommercialPropertyExtended'
      - type: object
        properties:
          auctionDetails:
            $ref: '#/components/schemas/AuctionDetails'
          tenderDetails:
            $ref: '#/components/schemas/TenderDetails'
          setSaleDateDetails:
            $ref: '#/components/schemas/SetSaleDateDetails'
          saleHistory:
            type: array
            items:
              $ref: '#/components/schemas/SaleHistory'
    CommercialSoldPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/CommercialSalePropertyExtended'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    CommercialLeaseProperty:
      allOf:
      - $ref: '#/components/schemas/CommercialProperty'
      - $ref: '#/components/schemas/LeaseProperty'
    CommercialLeasePropertyExtended:
      allOf:
      - $ref: '#/components/schemas/CommercialPropertyExtended'
      - type: object
        properties:
          leaseHistory:
            type: array
            items:
              $ref: '#/components/schemas/LeaseHistory'
    AddUpdateCommercialProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateProperty'
      - type: object
        properties:
          carSpaces:
            type: integer
            format: int64
          floorArea:
            $ref: '#/components/schemas/Area'
          status:
            type: string
            enum:
            - prospect
            - appraisal
          commercialLeasePrice:
            type: number
            format: float
          outgoingsPerAnnum:
            type: number
            format: float
          outgoingsText:
            type: string
          includesOutgoings:
            type: boolean
          commercialLeasePriceIncludesGst:
            type: boolean
    AddUpdateCommercialLeaseProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateCommercialProperty'
      - $ref: '#/components/schemas/AddUpdateLeaseProperty'
    AddUpdateCommercialSaleProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateCommercialProperty'
      - $ref: '#/components/schemas/AddUpdateSaleProperty'
    BusinessProperty:
      allOf:
      - $ref: '#/components/schemas/Property'
      - type: object
        properties:
          floorArea:
            $ref: '#/components/schemas/Area'
          status:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - unconditional
            - settled
            - withdrawn
            - withdrawnAppraisal
          portalStatus:
            type: string
            enum:
            - prospect
            - appraisal
            - listing
            - conditional
            - unconditional
            - settled
            - management
            - withdrawn
            - withdrawnAppraisal
          auctionDetails:
            $ref: '#/components/schemas/AuctionDetails'
          tenderDetails:
            $ref: '#/components/schemas/TenderDetails'
          setSaleDateDetails:
            $ref: '#/components/schemas/SetSaleDateDetails'
          contactStaff:
            type: array
            items:
              $ref: '#/components/schemas/ID'
          eTableUrl:
            type: string
          externalLinks:
            type: array
            items:
              $ref: '#/components/schemas/ExternalLink'
          energyRating:
            type: number
            format: float
    BusinessSoldProperty:
      allOf:
      - $ref: '#/components/schemas/BusinessProperty'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    BusinessPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/BusinessProperty'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          editableBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          keys:
            type: array
            items:
              $ref: '#/components/schemas/PropertyKey'
          saleHistory:
            type: array
            items:
              $ref: '#/components/schemas/SaleHistory'
          highlights:
            type: array
            items:
              type: string
          portals:
            type: array
            items:
              $ref: '#/components/schemas/PortalAccess'
    BusinessSoldPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/BusinessPropertyExtended'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    AddUpdateBusinessProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateProperty'
      - $ref: '#/components/schemas/AddUpdateSaleProperty'
      - type: object
        properties:
          floorArea:
            $ref: '#/components/schemas/Area'
          status:
            type: string
            enum:
            - prospect
            - appraisal
    HolidayRentalProperty:
      allOf:
      - $ref: '#/components/schemas/ResidentialProperty'
      - $ref: '#/components/schemas/LeaseProperty'
      - type: object
    HolidayRentalPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/HolidayRentalProperty'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          editableBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          keys:
            type: array
            items:
              $ref: '#/components/schemas/PropertyKey'
          leaseHistory:
            type: array
            items:
              $ref: '#/components/schemas/LeaseHistory'
          highlights:
            type: array
            items:
              type: string
          portals:
            type: array
            items:
              $ref: '#/components/schemas/PortalAccess'
    AddUpdateHolidayRentalProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateResidentialProperty'
      - $ref: '#/components/schemas/AddUpdateLeaseProperty'
      - type: object
    BuildingSearchResult:
      allOf:
      - $ref: '#/components/schemas/Building'
      - type: object
    PropertySearchResult:
      type: object
      properties:
        id:
          type: integer
          format: int64
        saleLifeId:
          type: integer
          format: int64
        leaseLifeId:
          type: integer
          format: int64
        address:
          $ref: '#/components/schemas/Address'
        displayAddress:
          type: string
        commercialListingType:
          type: string
          enum:
          - sale
          - lease
          - both
        salePrice:
          type: number
          format: float
          nullable: true
        showSalePrice:
          type: boolean
        unconditional:
          type: string
          format: date-time
          nullable: true
        class:
          $ref: '#/components/schemas/PropertyClass'
        saleLife:
          type: object
          properties:
            id:
              type: integer
              format: int64
            status:
              type: string
            portalStatus:
              type: string
        leaseLife:
          type: object
          properties:
            id:
              type: integer
              format: int64
            status:
              type: string
            portalStatus:
              type: string
        account:
          type: object
          properties:
            id:
              type: integer
              format: int64
            name:
              type: string
    ContactSearchResult:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        greeting:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        emails:
          type: array
          items:
            type: string
            format: email
        phoneNumbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
        marketingUsers:
          type: array
          items:
            $ref: '#/components/schemas/MarketingUser'
        editableBy:
          type: array
          items:
            $ref: '#/components/schemas/Access'
    Rate:
      type: object
      properties:
        value:
          type: number
          format: float
        period:
          type: string
          enum:
          - pa
          - pq
    Area:
      type: object
      properties:
        value:
          type: integer
          format: int64
        units:
          type: string
          enum:
          - sqm
          - acre
          - hectare
    AreaRange:
      type: object
      properties:
        minimum:
          type: integer
          format: int64
        maximum:
          type: integer
          format: int64
        units:
          type: string
          enum:
          - sqm
          - acre
          - hectare
    UpdateUser:
      type: object
      properties:
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        phoneNumbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
        position:
          type: string
        profile:
          type: string
    CustomFieldGrouping:
      type: object
      properties:
        fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
        group:
          type: string
    CustomField:
      type: object
      properties:
        dataType:
          type: string
          enum:
          - selectBox
          - text
          - string
          - float
          - boolean
          - date
          - dayAndMonth
        id:
          type: integer
          format: int64
        name:
          type: string
        data:
          type: string
    AddUpdateCustomField:
      type: object
      properties:
        id:
          type: integer
          format: int64
        data:
          type: string
    ActivityLog:
      type: object
      properties:
        id:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        note:
          type: string
        insertedBy:
          $ref: '#/components/schemas/User'
    ContactFile:
      type: object
      properties:
        id:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        description:
          type: string
        filename:
          type: string
        filesize:
          type: integer
          format: int64
        insertedBy:
          $ref: '#/components/schemas/User'
        url:
          type: string
        contentType:
          type: string
    CalendarEvent:
      type: object
      properties:
        id:
          type: integer
          format: int64
        modified:
          type: string
          format: date-time
        recurring:
          type: boolean
        allDay:
          type: boolean
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
        summary:
          type: string
        description:
          type: string
        reminderMinutes:
          type: integer
          format: int64
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/CalendarContact'
        user:
          $ref: '#/components/schemas/Access'
        isConfirmed:
          type: boolean
        isCancelled:
          type: boolean
    CalendarContact:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    AddUpdateCalendarEvent:
      type: object
      properties:
        recurring:
          type: boolean
        allDay:
          type: boolean
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
        summary:
          type: string
        description:
          type: string
        reminderMinutes:
          type: integer
          format: int64
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/ID'
        user:
          $ref: '#/components/schemas/ID'
        isConfirmed:
          type: boolean
    PropertyFile:
      type: object
      properties:
        id:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        filename:
          type: string
        filesize:
          type: integer
          format: int64
        contentType:
          type: string
        url:
          type: string
        electronicTable:
          type: boolean
        isPublic:
          type: boolean
    PropertyFileWithFolders:
      allOf:
      - $ref: '#/components/schemas/PropertyFile'
      - type: object
        properties:
          tenancyId:
            type: integer
            format: int64
          folders:
            type: array
            items:
              $ref: '#/components/schemas/PropertyFileFolder'
    PropertyFileFolder:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        display:
          type: string
          enum:
          - sale
          - lease
          - saleAndLease
    CoreLogicAddressSuggest:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    CoreLogicProperty:
      type: object
      properties:
        id:
          type: integer
          format: int64
        address:
          $ref: '#/components/schemas/Address'
        bed:
          type: integer
          format: int64
        bath:
          type: integer
          format: int64
        carSpaces:
          type: integer
          format: int64
        floorArea:
          $ref: '#/components/schemas/Area'
        landArea:
          $ref: '#/components/schemas/Area'
        volumeNumber:
          type: string
        folioNumber:
          type: string
        frontage:
          type: number
          format: float
    UpdateContact:
      type: object
      properties:
        title:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        greeting:
          type: string
        partnerTitle:
          type: string
        partnerFirstName:
          type: string
        partnerLastName:
          type: string
        company:
          type: string
        position:
          type: string
        address:
          $ref: '#/components/schemas/UpdateAddress'
        postalAddress:
          $ref: '#/components/schemas/UpdateAddress'
        onDoNotCallList:
          type: boolean
        archived:
          type: boolean
        unsubscribe:
          $ref: '#/components/schemas/Unsubscribe'
        emails:
          type: array
          items:
            type: string
            format: email
        phoneNumbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
        legalDescription:
          type: string
        abn:
          type: string
          description: 'Australian Business Number (ABN). For New Zealand customers, this field represents the GST registration number.'
        acn:
          type: string
          description: 'Australian Company Number (ACN).'
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/ID'
        editableBy:
          type: array
          items:
            $ref: '#/components/schemas/ID'
        sourceOfEnquiry:
          $ref: '#/components/schemas/ID'
        marketingUsers:
          type: array
          items:
            $ref: '#/components/schemas/AddUpdateMarketingUser'
        customUnsubscribe:
          type: array
          items:
            $ref: '#/components/schemas/ID'
    AddContact:
      allOf:
      - $ref: '#/components/schemas/UpdateContact'
      - type: object
        properties:
          inserted:
            type: string
            format: date-time
          entityType:
            $ref: '#/components/schemas/ID'
    Supplier:
      allOf:
      - $ref: '#/components/schemas/Contact'
      - type: object
        properties:
          labels:
            type: array
            items:
              type: string
    SupplierExtended:
      allOf:
      - $ref: '#/components/schemas/ContactExtended'
      - type: object
        properties:
          labels:
            type: array
            items:
              type: string
    UpdateSupplier:
      type: object
      properties:
        title:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        greeting:
          type: string
        partnerTitle:
          type: string
        partnerFirstName:
          type: string
        partnerLastName:
          type: string
        company:
          type: string
        position:
          type: string
        address:
          $ref: '#/components/schemas/UpdateAddress'
        postalAddress:
          $ref: '#/components/schemas/UpdateAddress'
        onDoNotCallList:
          type: boolean
        unsubscribe:
          $ref: '#/components/schemas/Unsubscribe'
        emails:
          type: array
          items:
            type: string
            format: email
        phoneNumbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
        legalDescription:
          type: string
        abn:
          type: string
          description: 'Australian Business Number (ABN). For New Zealand customers, this field represents the GST registration number.'
        acn:
          type: string
          description: 'Australian Company Number (ACN).'
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/ID'
        sourceOfEnquiry:
          $ref: '#/components/schemas/ID'
        marketingUsers:
          type: array
          items:
            $ref: '#/components/schemas/AddUpdateMarketingUser'
        labels:
          type: array
          items:
            type: string
    AddSupplier:
      allOf:
      - $ref: '#/components/schemas/UpdateSupplier'
      - type: object
        properties:
          inserted:
            type: string
            format: date-time
    ContactRequirement:
      type: object
      properties:
        id:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        active:
          type: boolean
        propertyClass:
          $ref: '#/components/schemas/PropertyClass'
        minimumPrice:
          type: number
          format: float
        maximumPrice:
          type: number
          format: float
        minimumBed:
          type: integer
          format: int64
        minimumBath:
          type: integer
          format: int64
        minimumCar:
          type: integer
          format: int64
        minimumPricePerSQM:
          type: number
          format: float
        maximumPricePerSQM:
          type: number
          format: float
        landArea:
          $ref: '#/components/schemas/AreaRange'
        buildingArea:
          $ref: '#/components/schemas/AreaRange'
        propertyTypes:
          type: array
          items:
            $ref: '#/components/schemas/PropertyType'
        propertyTags:
          type: array
          items:
            type: string
        suburbs:
          type: array
          items:
            $ref: '#/components/schemas/Suburb'
        type:
          type: string
          enum:
          - sale
          - lease
          - saleOrLease
        tenantedInvestment:
          type: boolean
    AddUpdateContactRequirement:
      type: object
      properties:
        active:
          type: boolean
        propertyClass:
          $ref: '#/components/schemas/ID'
        minimumPrice:
          type: number
          format: float
        maximumPrice:
          type: number
          format: float
        minimumBed:
          type: integer
          format: int64
        minimumBath:
          type: integer
          format: int64
        minimumCar:
          type: integer
          format: int64
        minimumPricePerSQM:
          type: number
          format: float
        maximumPricePerSQM:
          type: number
          format: float
        landArea:
          $ref: '#/components/schemas/AreaRange'
        buildingArea:
          $ref: '#/components/schemas/AreaRange'
        propertyTypes:
          type: array
          items:
            $ref: '#/components/schemas/ID'
        propertyTags:
          type: array
          items:
            type: string
        suburbs:
          type: array
          items:
            $ref: '#/components/schemas/Suburb'
        type:
          type: string
          enum:
          - sale
          - lease
          - saleOrLease
        tenantedInvestment:
          type: boolean
    PropertyType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        propertyClass:
          $ref: '#/components/schemas/PropertyClass'
    PropertyClass:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        internalName:
          type: string
    Access:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        photo:
          $ref: '#/components/schemas/UserPhoto'
        account:
          type: object
          properties:
            id:
              type: integer
              format: int64
            name:
              type: string
    Team:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    CoreLogicAvm:
      type: object
      properties:
        estimatedPriceHigh:
          type: number
          format: float
        estimatedPriceLow:
          type: number
          format: float
        estimatedValue:
          type: number
          format: float
        confidence:
          type: string
    CoreLogicRentalAvm:
      type: object
      properties:
        estimatedPricePerWeekHigh:
          type: number
          format: float
        estimatedPricePerWeekLow:
          type: number
          format: float
        estimatedValuePerWeek:
          type: number
          format: float
        forecastStandardDeviation:
          type: number
          format: float
        yieldForecastStandardDeviation:
          type: number
          format: float
        yield:
          type: number
          format: float
    ContactContext:
      type: object
      properties:
        phoneNumbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
        displayName:
          type: string
        partnerDisplayName:
          type: string
        companyInfo:
          type: string
        emails:
          type: array
          items:
            type: string
            format: email
        linkedProperties:
          type: array
          items:
            $ref: '#/components/schemas/LinkedProperty'
        categories:
          type: array
          items:
            $ref: '#/components/schemas/Category'
    LinkedProperty:
      type: object
      properties:
        id:
          type: integer
          format: int64
        address:
          $ref: '#/components/schemas/Address'
        displayAddress:
          type: string
        saleLifeId:
          type: integer
          format: int64
        leaseLifeId:
          type: integer
          format: int64
        relationship:
          type: string
          enum:
          - pastOwner
          - owner
          - landlord
          - tenant
          - purchaser
        status:
          type: string
          enum:
          - prospect
          - appraisal
          - listing
          - conditional
          - unconditional
          - settled
          - management
          - withdrawn
          - withdrawnAppraisal
        portalStatus:
          type: string
          enum:
          - prospect
          - appraisal
          - listing
          - conditional
          - unconditional
          - settled
          - management
          - withdrawn
          - withdrawnAppraisal
        class:
          $ref: '#/components/schemas/PropertyClass'
        photo:
          $ref: '#/components/schemas/PropertyPhoto'
    UserSubscriptions:
      type: object
      properties:
        corelogic:
          type: boolean
        pricefinder:
          type: boolean
    RentFrequency:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    Tenancy:
      type: object
      properties:
        id:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        rent:
          type: number
          format: float
        rentFrequency:
          $ref: '#/components/schemas/RentFrequency'
        archived:
          type: boolean
        letAgreed:
          type: boolean
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
        rentPaidUntil:
          type: string
          format: date-time
        arrearsAmount:
          type: number
          format: float
        vacateDate:
          type: string
          format: date-time
    PropertyFeedback:
      type: object
      properties:
        id:
          type: integer
          format: int64
        property:
          type: object
          properties:
            id:
              type: number
              format: int64
            displayAddress:
              type: string
            saleLifeId:
              type: number
              format: int64
            leaseLifeId:
              type: number
              format: int64
            class:
              $ref: '#/components/schemas/PropertyClass'
        feedbackDate:
          type: string
          format: date-time
        priceOpinion:
          type: number
          format: float
        saleLifeId:
          type: number
          format: int64
        leaseLifeId:
          type: number
          format: int64
        contractRequested:
          type: boolean
        contractSent:
          type: string
          format: date-time
    Geolocation:
      type: object
      properties:
        latitude:
          type: number
          format: float
        longitude:
          type: number
          format: float
        accuracy:
          type: string
          enum:
          - USERDEFINED
          - ROOFTOP
          - RANGE_INTERPOLATED
          - GEOMETRIC_CENTER
          - APPROXIMATE
    ExternalLinkType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    ExternalLink:
      type: object
      properties:
        id:
          type: number
          format: int64
        url:
          type: string
        modified:
          type: string
          format: date-time
        type:
          $ref: '#/components/schemas/ExternalLinkType'
    AddUpdateExternalLink:
      type: object
      properties:
        url:
          type: string
        type:
          $ref: '#/components/schemas/ID'
    OfferCondition:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
    PropertyOfferCondition:
      type: object
      properties:
        id:
          type: number
          format: int64
        condition:
          $ref: '#/components/schemas/OfferCondition'
        user:
          $ref: '#/components/schemas/User'
        due:
          type: string
          format: date-time
        completed:
          type: boolean
    UpdatePropertyOfferCondition:
      type: object
      properties:
        condition:
          $ref: '#/components/schemas/ID'
        user:
          $ref: '#/components/schemas/ID'
        due:
          type: string
          format: date-time
        completed:
          type: boolean
    PropertyOfferConditionWithProperty:
      allOf:
      - $ref: '#/components/schemas/PropertyOfferCondition'
      - type: object
        properties:
          property:
            type: object
            properties:
              id:
                type: number
                format: int64
              displayAddress:
                type: string
              saleLifeId:
                type: number
                format: int64
              class:
                $ref: '#/components/schemas/PropertyClass'
    Signature:
      type: object
      properties:
        url:
          type: string
    AuctionDetails:
      type: object
      properties:
        dateTime:
          type: string
          format: date-time
        venue:
          type: string
        auctioneer:
          type: string
    TenderDetails:
      type: object
      properties:
        dateTime:
          type: string
          format: date-time
    SetSaleDateDetails:
      type: object
      properties:
        dateTime:
          type: string
          format: date-time
    OpenHome:
      type: object
      properties:
        id:
          type: number
          format: int64
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
        user:
          $ref: '#/components/schemas/User'
        isRental:
          type: boolean
        extraAgents:
          type: array
          items:
            $ref: '#/components/schemas/Access'
    AddUpdateOpenHome:
      type: object
      properties:
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
        user:
          $ref: '#/components/schemas/ID'
        extraAgents:
          type: array
          items:
            $ref: '#/components/schemas/ID'
    OpenHomeWithProperty:
      allOf:
      - $ref: '#/components/schemas/OpenHome'
      - type: object
        properties:
          property:
            type: object
            properties:
              id:
                type: number
                format: int64
              displayAddress:
                type: string
              saleLifeId:
                type: number
                format: int64
              leaseLifeId:
                type: number
                format: int64
              class:
                $ref: '#/components/schemas/PropertyClass'
    EnquirySource:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
    AddUpdateEnquirySource:
      type: object
      properties:
        name:
          type: string
    BulkContactNote:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ID'
        readOnly:
          type: boolean
        inserted:
          type: string
          format: date-time
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/Access'
        notes:
          type: array
          items:
            type: object
            properties:
              contact:
                $ref: '#/components/schemas/ID'
              body:
                type: string
    Task:
      type: object
      properties:
        id:
          type: number
          format: int64
        subject:
          type: string
        description:
          type: string
        inserted:
          type: string
          format: date-time
        completed:
          type: boolean
        start:
          type: string
          format: date-time
        contact:
          $ref: '#/components/schemas/TaskContact'
        contactNote:
          $ref: '#/components/schemas/ContactNote'
        property:
          type: object
          properties:
            id:
              type: number
              format: int64
            displayAddress:
              type: string
            saleLifeId:
              type: number
              format: int64
            leaseLifeId:
              type: number
              format: int64
            class:
              $ref: '#/components/schemas/PropertyClass'
        user:
          $ref: '#/components/schemas/Access'
    TaskContact:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    AddTask:
      type: object
      properties:
        subject:
          type: string
        description:
          type: string
        start:
          type: string
          format: date-time
        user:
          $ref: '#/components/schemas/ID'
    UpdateTask:
      type: object
      properties:
        subject:
          type: string
        description:
          type: string
        start:
          type: string
          format: date-time
    PropertyFeatureGrouping:
      type: object
      properties:
        groupName:
          type: string
        groupDisplayName:
          type: string
        features:
          type: array
          items:
            $ref: '#/components/schemas/PropertyFeature'
    UpdatePropertyFeatureGrouping:
      type: object
      properties:
        groupName:
          type: string
        features:
          type: array
          items:
            $ref: '#/components/schemas/UpdatePropertyFeature'
    PropertyFeature:
      type: object
      properties:
        name:
          type: string
        displayName:
          type: string
        dataType:
          type: string
          enum:
          - selectBox
          - text
          - string
          - float
          - integer
          - boolean
          - date
          - dayAndMonth
        data:
          type: string
    UpdatePropertyFeature:
      type: object
      properties:
        name:
          type: string
        data:
          type: string
    Enquiry:
      type: object
      properties:
        id:
          type: number
          format: int64
        subject:
          type: string
        originalId:
          type: string
        inserted:
          type: string
          format: date-time
        source:
          type: string
        sourceName:
          type: string
        saleLifeId:
          type: number
          format: int64
        leaseLifeId:
          type: number
          format: int64
        processed:
          type: boolean
        enquiryDate:
          type: string
          format: date-time
        body:
          type: string
        contactId:
          type: number
          format: int64
        personEmails:
          type: array
          items:
            type: string
            format: email
        personName:
          type: string
        unsubscribe:
          type: object
          properties:
            email:
              type: boolean
        personPhoneNumbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
        categories:
          type: array
          items:
            $ref: '#/components/schemas/Category'
        user:
          $ref: '#/components/schemas/Access'
    AddEnquiry:
      type: object
      properties:
        enquiryDate:
          type: string
          format: date-time
        subject:
          type: string
        body:
          type: string
        originalId:
          type: string
        propertyReference:
          type: string
        source:
          type: string
        saleLifeId:
          type: number
          format: int64
        leaseLifeId:
          type: number
          format: int64
        userId:
          type: number
          format: int64
        fullName:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        telephone:
          type: string
        mobile:
          type: string
        categories:
          type: array
          items:
            $ref: '#/components/schemas/ID'
        metaData:
          type: array
          items:
            type: object
            properties:
              key:
                type: string
              value:
                type: string
    SMS:
      type: object
      properties:
        user:
          $ref: '#/components/schemas/ID'
        message:
          type: string
        number:
          type: string
    BulkSMS:
      type: object
      properties:
        contact:
          $ref: '#/components/schemas/ID'
        message:
          type: string
        number:
          type: string
    Email:
      type: object
      properties:
        user:
          $ref: '#/components/schemas/ID'
        subject:
          type: string
        bodyText:
          type: string
        bodyHTML:
          type: string
        to:
          type: string
    BulkEmail:
      type: object
      properties:
        contact:
          $ref: '#/components/schemas/ID'
        email:
          type: string
        subject:
          type: string
        bodyText:
          type: string
        bodyHTML:
          type: string
    AccountPricingUnit:
      type: object
      properties:
        currency:
          type: string
        unitPrice:
          type: number
          format: float
    AccountPricing:
      type: object
      properties:
        sms:
          $ref: '#/components/schemas/AccountPricingUnit'
    Token:
      type: object
      properties:
        account:
          $ref: '#/components/schemas/ID'
        token:
          type: string
        scopes:
          type: array
          items:
            type: string
    Metric:
      type: object
      properties:
        statType:
          type: string
          enum:
          - propertyView
          - emailAgent
          - callAgent
          - brochureView
        total:
          type: number
          format: int64
    UpdatePortalStatsTotal:
      type: object
      properties:
        source:
          type: string
        saleLifeId:
          type: number
          format: int64
        leaseLifeId:
          type: number
          format: int64
        propertyReference:
          type: string
        metrics:
          type: array
          items:
            $ref: '#/components/schemas/Metric'
    UpdatePortalStatsCumulative:
      allOf:
      - $ref: '#/components/schemas/UpdatePortalStatsTotal'
      - type: object
        properties:
          statDate:
            type: string
            format: date-time

    PortalStats:
      type: object
      properties:
        id:
          type: integer
          format: int64
        source:
          $ref: '#/components/schemas/Portal'
        saleLifeId:
          type: integer
          format: int64
        leaseLifeId:
          type: integer
          format: int64
        statDate:
          type: string
          format: date-time
        statType:
          type: string
        modified:
          type: string
          format: date-time
        isTotalFigure:
          type: boolean
        total:
          type: integer
          format: int64

    EmailTemplate:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        subject:
          type: string
        content:
          type: string
        propertyTemplate:
          type: boolean
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/Access'
        inserted:
          type: string
          format: date-time
    AddUpdateEmailTemplate:
      type: object
      properties:
        name:
          type: string
        subject:
          type: string
        content:
          type: string
        propertyTemplate:
          type: boolean
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/ID'
    SMSTemplate:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        content:
          type: string
        propertyTemplate:
          type: boolean
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/Access'
        inserted:
          type: string
          format: date-time
    AddUpdateSMSTemplate:
      type: object
      properties:
        name:
          type: string
        content:
          type: string
        propertyTemplate:
          type: boolean
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/ID'
    OwnerSummaryTemplate:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        subject:
          type: string
        content:
          type: string
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/Access'
        inserted:
          type: string
          format: date-time
    AddUpdateOwnerSummaryTemplate:
      type: object
      properties:
        name:
          type: string
        subject:
          type: string
        content:
          type: string
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/ID'
    LeaseHistory:
      type: object
      properties:
        lifeId:
          type: number
          format: int64
        appraisal:
          type: string
          format: date-time
        appraisalPriceLower:
          type: number
          format: float
        appraisalPriceUpper:
          type: number
          format: float
        status:
          type: string
          enum:
          - prospect
          - appraisal
          - listing
          - conditional
          - unconditional
          - settled
          - management
          - withdrawn
          - withdrawnAppraisal
        portalStatus:
          type: string
          enum:
          - prospect
          - appraisal
          - listing
          - conditional
          - unconditional
          - settled
          - management
          - withdrawn
          - withdrawnAppraisal
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        contactStaff:
          type: array
          items:
            $ref: '#/components/schemas/Access'
        tenancyHistory:
          type: array
          items:
            $ref: '#/components/schemas/Tenancy'
        isNewHome:
          type: boolean
        webId:
          type: string
        furnished:
          $ref: '#/components/schemas/Furnished'
        internalMarketingLiveDate:
          type: string
          format: date-time
    SaleHistory:
      type: object
      properties:
        lifeId:
          type: number
          format: int64
        isReleasedSale:
          type: boolean
        isAdminComplete:
          type: boolean
        isUnitTitle:
          type: boolean
        contractNumber:
          type: string
        appraisal:
          type: string
          format: date-time
        appraisalPriceLower:
          type: number
          format: float
        appraisalPriceUpper:
          type: number
          format: float
        listingAuthority:
          type: string
          format: date-time
        publishedToWeb:
          type: string
          format: date-time
        conditional:
          type: string
          format: date-time
        unconditional:
          type: string
          format: date-time
        settlement:
          type: string
          format: date-time
        releaseDate:
          type: string
          format: date-time
        adminCompletionDate:
          type: string
          format: date-time
        status:
          type: string
          enum:
          - prospect
          - appraisal
          - listing
          - conditional
          - unconditional
          - settled
          - withdrawn
          - withdrawnAppraisal
        portalStatus:
          type: string
          enum:
          - prospect
          - appraisal
          - listing
          - conditional
          - unconditional
          - settled
          - management
          - withdrawn
          - withdrawnAppraisal
        salePrice:
          type: number
          format: float
        showSalePrice:
          type: boolean
        grossCommissionExcGST:
          type: number
          format: float
        grossCommissionLessDeductionsExcGST:
          type: number
          format: float
        netIncomeIntoOfficeExcGST:
          type: number
          format: float
        netIncomeLessOfficeDeductionsExcGST:
          type: number
          format: float
        webId:
          type: string
        isNewHome:
          type: boolean
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        contactStaff:
          type: array
          items:
            $ref: '#/components/schemas/Access'
        commissionSplits:
          type: array
          items:
            $ref: '#/components/schemas/CommissionSplit'
        deductions:
          type: array
          items:
            $ref: '#/components/schemas/PreDistributionDeduction'
        officeReferrals:
          type: array
          items:
            $ref: '#/components/schemas/OfficeReferral'
        officeDeductions:
          type: array
          items:
            $ref: '#/components/schemas/OfficeDeduction'
        soldType:
          $ref: '#/components/schemas/SoldType'
        sharedOwnership:
          $ref: '#/components/schemas/SharedOwnership'
        isOurListing:
          type: boolean
        internalMarketingLiveDate:
          type: string
          format: date-time
        mortgageeSale:
          type: boolean
        asIsSale:
          type: boolean
        sellingFeePercent:
          type: number
          format: float
        sellingFeeFixed:
          type: number
          format: float
        vpa:
          type: number
          format: float
        annualReturnPercent:
          type: number
          format: float
        listingAuthorityFile:
          $ref: '#/components/schemas/PropertyFile'
        salePricePercentSplit:
          type: number
          format: float
    PhotoTag:
      type: object
      properties:
        confidence:
          type: number
          format: float
        name:
          type: string
    AccountFranchise:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    ContactInterest:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    ContactMinimal:
      type: object
      properties:
        id:
          type: integer
          format: int64
        displayName:
          type: string
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        emails:
          type: array
          items:
            type: string
            format: email
        phoneNumbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
    PropertyLifeInterest:
      type: object
      properties:
        contact:
          $ref: '#/components/schemas/ContactMinimal'
        interest:
          $ref: '#/components/schemas/ContactInterest'
    PropertyLifeEnquirySource:
      type: object
      properties:
        contact:
          $ref: '#/components/schemas/ContactMinimal'
        source:
          $ref: '#/components/schemas/EnquirySource'
    UpdatePropertyLifeEnquirySource:
      type: object
      properties:
        source:
          type: object
          properties:
            id:
              type: integer
              format: int64
    UpdatePropertyLifeInterest:
      type: object
      properties:
        interest:
          type: object
          properties:
            id:
              type: integer
              format: int64
    RequirementAndContact:
      type: object
      properties:
        requirement:
          $ref: '#/components/schemas/ContactRequirement'
        contact:
          $ref: '#/components/schemas/ID'
    ContactAndMarketingUser:
      type: object
      properties:
        marketingUser:
          $ref: '#/components/schemas/MarketingUser'
        contact:
          $ref: '#/components/schemas/ID'
    ContactAndCount:
      type: object
      properties:
        count:
          type: integer
          format: int64
        contact:
          $ref: '#/components/schemas/ID'
    PropertyFileWithFoldersUpload:
      type: object
      properties:
        filename:
          type: string
        filesize:
          type: integer
          format: int64
        contentType:
          type: string
        folders:
          type: array
          items:
            $ref: '#/components/schemas/ID'
    FileToBeUploaded:
      type: object
      properties:
        id:
          type: integer
          format: int64
        upload_url:
          type: string
    Portal:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    PortalAccess:
      type: object
      properties:
        id:
          type: integer
          format: int64
        code:
          type: string
        description:
          type: string
        portal:
          $ref: '#/components/schemas/Portal'
    PropertyPhotoUpload:
      type: object
      properties:
        filesize:
          type: integer
          format: int64
        width:
          type: integer
          format: int64
        height:
          type: integer
          format: int64
        caption:
          type: string
        type:
          type: string
          enum:
          - Photograph
          - Floorplan
        contentType:
          type: string
          enum:
          - image/jpeg
          - image/jpg
          - image/png
          - image/gif
        userFilename:
          type: string
        published:
          type: boolean
    ContactFileUpload:
      type: object
      properties:
        filename:
          type: string
        filesize:
          type: integer
          format: int64
        contentType:
          type: string
    MaintenancePhoto:
      type: object
      properties:
        id:
          type: integer
          format: int64
        url:
          type: string
        description:
          type: string
        userFileName:
          type: string
    AddMaintenancePhoto:
      type: object
      properties:
        description:
          type: string
    Maintenance:
      type: object
      properties:
        id:
          type: integer
          format: int64
        summary:
          type: string
        description:
          type: string
        status:
          type: string
          enum:
          - open
          - requested
          - sent
          - completed
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        insertedBy:
          $ref: '#/components/schemas/Access'
        requestedBy:
          $ref: '#/components/schemas/ContactMinimal'
        tenancy:
          $ref: '#/components/schemas/Tenancy'
        leaseLifeId:
          type: integer
          format: int64
        photos:
          type: array
          items:
            $ref: '#/components/schemas/MaintenancePhoto'
        notifications:
          type: array
          items:
            $ref: '#/components/schemas/Access'
    AddMaintenance:
      type: object
      properties:
        summary:
          type: string
        description:
          type: string
        inserted:
          type: string
          format: date-time
        requestedBy:
          $ref: '#/components/schemas/ID'
        notifications:
          type: array
          items:
            $ref: '#/components/schemas/ID'
        tenancy:
          $ref: '#/components/schemas/ID'
    UpdateMaintenance:
      type: object
      properties:
        summary:
          type: string
        description:
          type: string
        requestedBy:
          $ref: '#/components/schemas/ID'
        notifications:
          type: array
          items:
            $ref: '#/components/schemas/ID'
    MaintenanceRequest:
      type: object
      properties:
        id:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        supplier:
          $ref: '#/components/schemas/ContactMinimal'
        status:
          type: string
          enum:
          - requested
          - viewed
          - notInterested
          - received
        jobId:
          type: integer
          format: int64
        quote:
          $ref: '#/components/schemas/PropertyFile'
        invoice:
          $ref: '#/components/schemas/PropertyFile'
        isWorkOrder:
          type: boolean
    AddMaintenanceRequest:
      type: object
      properties:
        supplier:
          $ref: '#/components/schemas/ID'
        subject:
          type: string
        bodyHTML:
          type: string
        isWorkOrder:
          type: boolean
        sender:
          $ref: '#/components/schemas/ID'
    MaintenanceNote:
      type: object
      properties:
        id:
          type: integer
          format: int64
        note:
          type: string
        inserted:
          type: string
          format: date-time
        insertedBy:
          $ref: '#/components/schemas/Access'
    Inspection:
      type: object
      properties:
        id:
          type: integer
          format: int64
        insertedBy:
          $ref: '#/components/schemas/Access'
        inserted:
          type: string
          format: date-time
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
        status:
          type: string
          enum:
          - proposed
          - scheduled
          - confirmed
        type:
          type: string
          enum:
          - routine
          - ingoing
          - outgoing
        timeOfDay:
          type: string
          enum:
          - morning
          - afternoon
        tenancy:
          $ref: '#/components/schemas/ID'
    AddInspection:
      type: object
      properties:
        inserted:
          type: string
          format: date-time
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
        status:
          type: string
          enum:
          - proposed
          - scheduled
          - confirmed
        type:
          type: string
          enum:
          - routine
          - ingoing
          - outgoing
        insertedBy:
          $ref: '#/components/schemas/ID'
    UpdateInspection:
      type: object
      properties:
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
        status:
          type: string
          enum:
          - proposed
          - scheduled
          - confirmed
        type:
          type: string
          enum:
          - routine
          - ingoing
          - outgoing
    Insurance:
      type: object
      properties:
        publicLiability:
          type: string
          format: date-time
    TrustAccount:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        accountNumber:
          type: string
        bsbNumber:
          type: string
        type:
          type: string
          enum:
          - sales
          - propertyManagement
          - combinedSalesAndPropertyManagement
    TrustLedgerTransactionType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    TrustLedgerCategory:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    TrustLedgerTransaction:
      type: object
      properties:
        id:
          type: integer
          format: int64
        saleLifeId:
          type: integer
          format: int64
        transactionType:
          $ref: '#/components/schemas/TrustLedgerTransactionType'
        trustAccount:
          $ref: '#/components/schemas/ID'
        receiptNumber:
          type: string
          nullable: true
        category:
          $ref: '#/components/schemas/TrustLedgerCategory'
        transactionDate:
          type: string
          format: date
        depositReleaseDate:
          type: string
          format: date
        inserted:
          type: string
          format: date-time
        amount:
          type: number
          format: float
        internalNote:
          type: string
        internalRefId:
          type: string
        contact:
          $ref: '#/components/schemas/ID'
        receivedFromText:
          type: string
          nullable: true
    TenancyExtended:
      allOf:
      - $ref: '#/components/schemas/Tenancy'
      - type: object
        properties:
          bondReceipted:
            type: number
            format: float
          paymentType:
            type: string
          paymentReference:
            type: string
    TenancyAndProperty:
      type: object
      properties:
        property:
          type: object
          properties:
            id:
              type: number
              format: int64
            displayAddress:
              type: string
        tenancy:
          $ref: '#/components/schemas/TenancyExtended'
    PropertyRoom:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        description:
          type: string
        length:
          type: number
          format: float
        width:
          type: number
          format: float
        units:
          type: string
          enum:
          - feet
          - metres
        dimensionClarification:
          type: string
    ContactNoteWithContact:
      allOf:
      - $ref: '#/components/schemas/ContactNote'
      - type: object
        properties:
          contact:
            $ref: '#/components/schemas/ID'
    FlushProperty:
      type: object
      properties:
        saleLifeId:
          type: number
          format: int64
        leaseLifeId:
          type: number
          format: int64
        propertyReference:
          type: string
        portals:
          type: array
          items:
            type: string
    CommercialDeal:
      type: object
      properties:
        id:
          type: number
          format: int64
        owners:
          type: array
          items:
            $ref: '#/components/schemas/ContactMinimal'
        tenants:
          type: array
          items:
            $ref: '#/components/schemas/ContactMinimal'
        unconditional:
          type: string
          format: date-time
        settlement:
          type: string
          format: date-time
        grossCommissionExcGST:
          type: number
          format: float
        outgoingsPerAnnum:
          type: number
          format: float
        outgoingsText:
          type: string
        parkingBays:
          type: number
          format: int64
        parkingInfo:
          type: string
        externalAgency:
          $ref: '#/components/schemas/ContactMinimal'
        ourDeal:
          type: boolean
        status:
          type: string
          enum:
            - Sent for Approval
            - Pending
            - Rejected
            - Approved
    CommercialDealSale:
      allOf:
      - $ref: '#/components/schemas/CommercialDeal'
      - type: object
        properties:
          purchasers:
            type: array
            items:
              $ref: '#/components/schemas/ContactMinimal'
          salePrice:
            type: number
            format: float
          vacantPossession:
            type: boolean
    CommercialDealLease:
      allOf:
      - $ref: '#/components/schemas/CommercialDeal'
      - type: object
        properties:
          leaseStart:
            type: string
            format: date-time
          leaseExpiry:
            type: string
            format: date-time
          leaseExpiryReminder:
            type: string
            format: date-time
          leaseExpiryReminderUser:
            $ref: '#/components/schemas/Access'
          annualRent:
            type: number
            format: float
          initialTermYears:
            type: integer
            format: int64
          renewal1Years:
            type: integer
            format: int64
          renewal2Years:
            type: integer
            format: int64
          renewal3Years:
            type: integer
            format: int64
          fitoutEstimate:
            type: number
            format: float
          otherIncentives:
            type: string
    CommissionSplitType:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
    PreDistributionDeduction:
      type: object
      properties:
        amount:
          type: number
          format: float
        type:
          $ref: '#/components/schemas/FeesCharges'
    OfficeDeduction:
      type: object
      properties:
        amount:
          type: number
          format: float
        type:
          $ref: '#/components/schemas/FeesCharges'
    OfficeReferral:
      allOf:
      - $ref: '#/components/schemas/OfficeDeduction'
      type: object
      properties:
        paidBy:
          type: string
          enum:
          - listers
          - sellers
          - totalShare

    CommissionSplitDeduction:
      type: object
      properties:
        amount:
          type: number
          format: float
        type:
          $ref: '#/components/schemas/FeesCharges'
    CommissionSplit:
      type: object
      properties:
        id:
          type: number
          format: int64
        user:
          $ref: '#/components/schemas/Access'
        type:
          $ref: '#/components/schemas/CommissionSplitType'
        conjunctingAgent:
          $ref: '#/components/schemas/ContactMinimal'
        grossPercent:
          type: number
          format: float
        grossAmount:
          type: number
          format: float
        grossAmountLessDeductions:
          type: number
          format: float
        netPercent:
          type: number
          format: float
        netAmount:
          type: number
          format: float
        details:
          type: string
        branch:
          $ref: '#/components/schemas/AccountBranch'
        deductions:
          type: array
          items:
            $ref: '#/components/schemas/CommissionSplitDeduction'
    FullSaleHistory:
      allOf:
      - $ref: '#/components/schemas/SaleHistory'
    EntityType:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
    IntegratorPropertyStat:
      type: object
      properties:
        name:
          type: string
        displayName:
          type: string
        value:
          type: number
          format: int64
    UpdateIntegratorPropertyStats:
      type: object
      properties:
        stats:
          type: array
          items:
            $ref: '#/components/schemas/IntegratorPropertyStat'
    InsertScheduledViewing:
      type: object
      properties:
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/ID'
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/Access'
        insertedBy:
          $ref: '#/components/schemas/Access'
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
    MessageReceipt:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
        seen:
          type: boolean
    Message:
      type: object
      properties:
        id:
          type: number
          format: int64
        threadId:
          type: number
          format: int64
        message:
          type: string
        receipts:
          type: array
          items:
            $ref: '#/components/schemas/MessageReceipt'
        insertedBy:
          $ref: '#/components/schemas/Access'
        inserted:
          type: string
          format: date-time
        isFranchise:
          type: boolean
    MessageRecipient:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
        photo:
          type: string
    MessageThread:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        accountId:
          type: number
          format: int64
        franchiseId:
          type: number
          format: int64
        insertedBy:
          $ref: '#/components/schemas/Access'
        recipients:
          type: array
          items:
            $ref: '#/components/schemas/MessageRecipient'
        latestMessage:
          $ref: '#/components/schemas/Message'
    AddUpdateMessageThread:
      type: object
      properties:
        name:
          type: string
        recipients:
          type: array
          items:
            $ref: '#/components/schemas/MessageRecipient'
    InspectionWithProperty:
      type: object
      properties:
        id:
          type: integer
          format: int64
        insertedBy:
          $ref: '#/components/schemas/Access'
        inserted:
          type: string
          format: date-time
        start:
          type: string
          format: date-time
        end:
          type: string
          format: date-time
        status:
          type: string
          enum:
          - proposed
          - scheduled
          - confirmed
        type:
          type: string
          enum:
          - routine
          - ingoing
          - outgoing
        timeOfDay:
          type: string
          enum:
          - morning
          - afternoon
        property:
          type: object
          properties:
            id:
              type: integer
              format: int64
            displayAddress:
              type: string
            class:
              $ref: '#/components/schemas/PropertyClass'
            leaseLife:
              type: object
              properties:
                id:
                  type: integer
                  format: int64
                status:
                  type: string
                portalStatus:
                  type: string
                tenancy:
                  $ref: '#/components/schemas/ID'

    AdvertisingScheduleItem:
      type: object
      properties:
        id:
          type: number
          format: int64
        week:
          type: number
          format: int64
        dayOfWeek:
          type: string
        expenseType:
          $ref: '#/components/schemas/AdvertisingExpenseType'

    AdvertisingSchedule:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string

    AdvertisingScheduleWithItems:
      allOf:
      - $ref: '#/components/schemas/AdvertisingSchedule'
      - type: object
        properties:
          schedule:
            type: array
            items:
              $ref: '#/components/schemas/AdvertisingScheduleItem'

    AdvertisingAttachedScheduleItem:
      type: object
      properties:
        id:
          type: number
          format: int64
        expenseType:
          $ref: '#/components/schemas/AdvertisingExpenseType'
        amount:
          type: number
          format: float
        companyContribution:
          type: number
          format: float
        actualDate:
          type: string
          format: date-time
        allocated:
          type: boolean

    AdvertisingAttachedSchedule:
      type: object
      properties:
        id:
          type: number
          format: int64
        baseSchedule:
          $ref: '#/components/schemas/AdvertisingSchedule'
        startDate:
          type: string
          format: date-time

    AdvertisingAttachedScheduleWithItems:
      allOf:
      - $ref: '#/components/schemas/AdvertisingAttachedSchedule'
      - type: object
        properties:
          schedule:
            type: array
            items:
              $ref: '#/components/schemas/AdvertisingAttachedScheduleItem'

    AdvertisingLedgerType:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
    AdvertisingPaymentType:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
    AdvertisingSupplier:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
    AddUpdateAdvertisingSupplier:
      type: object
      properties:
        name:
          type: string
    AdvertisingExpenseType:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
        supplier:
          $ref: '#/components/schemas/AdvertisingSupplier'
        gstInclusive:
          type: boolean
        amount:
          type: number
          format: float
        companyContribution:
          type: number
          format: float
    AdvertisingInvoice:
      type: object
      properties:
        id:
          type: number
          format: int64
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        invoiceNumber:
          type: string
        insertedBy:
          $ref: '#/components/schemas/Access'
        totalAmount:
          type: number
          format: float
        amountOutstanding:
          type: number
          format: float
        addressedTo:
          $ref: '#/components/schemas/ContactMinimal'
        gstRateUsed:
          type: number
          format: float
        userInvoiced:
          $ref: '#/components/schemas/Access'
        saleLifeId:
          type: number
          format: int64
        tenancyId:
          type: number
          format: int64
    AdvertisingTransaction:
      type: object
      properties:
        id:
          type: number
          format: int64
        inserted:
          type: string
          format: date-time
        insertedBy:
          $ref: '#/components/schemas/Access'
        amount:
          type: number
          format: float
        companyContribution:
          type: number
          format: float
        saleLifeId:
          type: number
          format: int64
        description:
          type: string
        expenseType:
          $ref: '#/components/schemas/AdvertisingExpenseType'
        invoiceId:
          type: number
          format: int64
        linkedTransactionId:
          type: number
          format: int64
        paymentType:
          $ref: '#/components/schemas/AdvertisingPaymentType'
        referenceID:
          type: string
        transactionDate:
          type: string
          format: date-time
        transactionType:
          $ref: '#/components/schemas/AdvertisingLedgerType'
        userCharged:
          $ref: '#/components/schemas/Access'
        paymentIsTaxApplicable:
          type: boolean
          description: Applies to agent payments on property ledger only. Indicates if the amount includes tax.

    AddAdvertisingPayment:
      type: object
      properties:
        amount:
          type: number
          format: float
        saleLifeId:
          type: number
          format: int64
        description:
          type: string
        invoiceId:
          type: number
          format: int64
        paymentType:
          $ref: '#/components/schemas/ID'
        referenceID:
          type: string
        transactionDate:
          type: string
          format: date-time
        transactionType:
          $ref: '#/components/schemas/ID'
        user:
          $ref: '#/components/schemas/ID'
        paymentIsTaxApplicable:
          type: boolean
          description: Applies to agent payments on property ledger only. Indicates if the amount includes tax.

    PriceQualifier:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    TenureOrTitleType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    HoldingAreaType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        source:
          type: string
        apiCode:
          type: string
    MethodOfSaleType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    AuctionType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    PropertyKey:
      type: object
      properties:
        id:
          type: number
          format: int64
        propertyId:
          type: number
          format: int64
        name:
          type: string
        isKeyOut:
          type: boolean
        details:
          type: string
        hexColour:
          type: string
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        keyOutUser:
          $ref: '#/components/schemas/Access'
        keyOutContact:
          $ref: '#/components/schemas/ContactSearchResult'
    AddUpdatePropertyKey:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
        isKeyOut:
          type: boolean
        details:
          type: string
        hexColour:
          type: string
        keyOutUser:
          $ref: '#/components/schemas/ID'
        keyOutContact:
          $ref: '#/components/schemas/ID'
    ContactBankAccount:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        accountNumber:
          type: string
        bsbNumber:
          type: string
    AddUpdateContactBankAccount:
      type: object
      properties:
        name:
          type: string
        accountNumber:
          type: string
        bsbNumber:
          type: string
    ContactDateType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        format:
          type: string
          enum:
          - MM-DD
          - YYYY-MM-DD
    ContactDate:
      type: object
      properties:
        id:
          type: integer
          format: int64
        type:
          $ref: '#/components/schemas/ContactDateType'
        date:
          type: string
        property:
          type: object
          properties:
            id:
              type: integer
              format: int64
            displayAddress:
              type: string
            class:
              $ref: '#/components/schemas/PropertyClass'
            leaseLifeId:
              type: integer
              format: int64
            saleLifeId:
              type: integer
              format: int64

    ContactAndDate:
      allOf:
      - $ref: '#/components/schemas/ContactDate'
      - type: object
        properties:
          contactid:
            type: integer
            format: int64

    DistributionList:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
    PropertyPortalId:
      type: object
      properties:
        portalId:
          type: string
        officePortal:
          $ref: '#/components/schemas/PortalAccess'
    PropertyAlarmDetails:
      type: object
      properties:
        alarmCode:
          type: string
        details:
          type: string
        modified:
          type: string
          format: date-time
    UnsubscribeType:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string

    Vertex:
      type: object
      properties:
        latitude:
          type: number
          format: float
        longitude:
          type: number
          format: float

    Precinct:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        accessBy:
          type: array
          items:
            $ref: '#/components/schemas/Access'
        vertices:
          type: array
          items:
            $ref: '#/components/schemas/Vertex'
    FeesCharges:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string

    ClearingSalesProperty:
      allOf:
      - $ref: '#/components/schemas/ResidentialProperty'
      - type: object
        properties:
          auctionDetails:
            $ref: '#/components/schemas/AuctionDetails'
          tenderDetails:
            $ref: '#/components/schemas/TenderDetails'
          setSaleDateDetails:
            $ref: '#/components/schemas/SetSaleDateDetails'
          soiUrl:
            type: string
          externalLinks:
            type: array
            items:
              $ref: '#/components/schemas/ExternalLink'
          isOurListing:
            type: boolean
    ClearingSalesSoldProperty:
      allOf:
      - $ref: '#/components/schemas/ClearingSalesProperty'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    AddUpdateClearingSalesProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateResidentialProperty'
      - $ref: '#/components/schemas/AddUpdateSaleProperty'
      - type: object
    ClearingSalesPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/ClearingSalesProperty'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          editableBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          keys:
            type: array
            items:
              $ref: '#/components/schemas/PropertyKey'
          saleHistory:
            type: array
            items:
              $ref: '#/components/schemas/SaleHistory'
          highlights:
            type: array
            items:
              type: string
          portals:
            type: array
            items:
              $ref: '#/components/schemas/PortalAccess'
    ClearingSalesSoldPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/ClearingSalesPropertyExtended'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'

    LivestockProperty:
      allOf:
      - $ref: '#/components/schemas/ResidentialProperty'
      - type: object
        properties:
          auctionDetails:
            $ref: '#/components/schemas/AuctionDetails'
          tenderDetails:
            $ref: '#/components/schemas/TenderDetails'
          setSaleDateDetails:
            $ref: '#/components/schemas/SetSaleDateDetails'
          soiUrl:
            type: string
          externalLinks:
            type: array
            items:
              $ref: '#/components/schemas/ExternalLink'
          isOurListing:
            type: boolean
    LivestockSoldProperty:
      allOf:
      - $ref: '#/components/schemas/LivestockProperty'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'
    AddUpdateLivestockProperty:
      allOf:
      - $ref: '#/components/schemas/AddUpdateResidentialProperty'
      - $ref: '#/components/schemas/AddUpdateSaleProperty'
      - type: object
    LivestockPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/LivestockProperty'
      - type: object
        properties:
          accessBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          editableBy:
            type: array
            items:
              $ref: '#/components/schemas/Access'
          keys:
            type: array
            items:
              $ref: '#/components/schemas/PropertyKey'
          saleHistory:
            type: array
            items:
              $ref: '#/components/schemas/SaleHistory'
          highlights:
            type: array
            items:
              type: string
          portals:
            type: array
            items:
              $ref: '#/components/schemas/PortalAccess'
    LivestockSoldPropertyExtended:
      allOf:
      - $ref: '#/components/schemas/LivestockPropertyExtended'
      - type: object
        properties:
          saleDetails:
            $ref: '#/components/schemas/SaleHistory'

    FMSLeadContact:
      type: object
      properties:
        name:
          type: string
        phone:
          type: string
        email:
          type: string
        doNotMail:
          type: boolean
        description:
          type: string

    FMSLeadProperty:
      type: object
      properties:
        streetAddress:
          type: string
        suburb:
          type: string
        state:
          type: string
        bedrooms:
          type: integer
          format: int64
        bathrooms:
          type: integer
          format: int64
        carParkingSpaces:
          type: integer
          format: int64
        contactIsOwner:
          type: boolean

    FMSLead:
      type: object
      properties:
        id:
          type: number
          format: int64
        contact:
          type: string
          $ref: '#/components/schemas/FMSLeadContact'
        property:
          type: string
          $ref: '#/components/schemas/FMSLeadProperty'
        appraisalRequired:
          type: boolean
        appraisalType:
          type: string
        source:
          type: string

    AddFMSLead:
      type: object
      properties:
        contact:
          type: string
          $ref: '#/components/schemas/FMSLeadContact'
        property:
          type: string
          $ref: '#/components/schemas/FMSLeadProperty'
        appraisalRequired:
          type: boolean
        appraisalType:
          type: string
        source:
          type: string

    PropertyOfferStatus:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string
 
    PropertyOffer:
      type: object
      properties:
        id:
          type: number
          format: int64
        contact:
          $ref: '#/components/schemas/ContactMinimal'
        details:
          type: string
        leaseLifeId:
          type: integer
          format: int64
        saleLifeId:
          type: integer
          format: int64
        offerDate:
          type: string
          format: date-time
        offerPrice:
          type: number
          format: float
        status:
          $ref: '#/components/schemas/PropertyOfferStatus'

    AddPropertyOffer:
      type: object
      properties:
        contact:
          $ref: '#/components/schemas/ID'
        details:
          type: string
        leaseLifeId:
          type: integer
          format: int64
        saleLifeId:
          type: integer
          format: int64
        offerDate:
          type: string
          format: date-time
        offerPrice:
          type: number
          format: float
        status:
          $ref: '#/components/schemas/ID'

    UpdatePropertyOffer:
      type: object
      properties:
        id:
          type: number
          format: int64
        contact:
          $ref: '#/components/schemas/ID'
        details:
          type: string
        offerDate:
          type: string
          format: date-time
        offerPrice:
          type: number
          format: float
        status:
          $ref: '#/components/schemas/ID'

    BulkContactSourceOfEnquiry:
      type: object
      properties:
        contact:
          $ref: '#/components/schemas/ID'
        leaseLifeId:
          type: integer
          format: int64
        saleLifeId:
          type: integer
          format: int64
        source:
          $ref: '#/components/schemas/EnquirySource'

    ConjunctionalSale:
      type: object
      properties:
        id:
          type: integer
          format: int64
        parties:
          type: array
          items:
            type: object
            properties:
              accountId:
                type: integer
                format: int64
              accountName:
                type: string
              saleLifeId:
                type: integer
                format: int64
        sourceAccount:
            type: object
            properties:
              id:
                type: integer
                format: int64
              name:
                type: string
        sourceSaleLifeId:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time

    ServiceChargeFrequency:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string

    SharedOwnership:
      type: object
      properties:
        percentage:
          type: number
          format: float
        rent:
          type: number
          format: float
        rentFrequency:
          $ref: '#/components/schemas/ServiceChargeFrequency'
    
    Leasehold:
      type: object
      properties:
        fixedForTerm:
          type: boolean
        groundRent:
          type: number
          format: float
        groundRentPercentageIncrease:
          type: number
          format: float
        leaseEnd:
          type: string
          format: date-time
        managingAgent:
          $ref: '#/components/schemas/ContactMinimal'
        notes:
          type: string
        serviceCharge:
          $ref: '#/components/schemas/ServiceCharge'
        solicitorInformed:
          type: boolean
        tenureVerified:
          type: boolean

    ServiceCharge:
      type: object
      properties:
        details:
          type: string
        period:
          $ref: '#/components/schemas/ServiceChargeFrequency'
        value:
          type: number
          format: float

    PropertyListingConfiguration:
      type: object
      properties:
        id:
          type: integer
          format: int64
        description:
          type: string
        heading:
          type: string
        displayAddress:
          type: string
        floorArea:
          $ref: '#/components/schemas/Area'
        ratePerSQM:
          type: number
          format: float
        tenanted:
          type: boolean
        type:
          $ref: '#/components/schemas/PropertyType'
        status:
          type: string
        address:
          $ref: '#/components/schemas/Address'

    PropertyStrataProperty:
      allOf:
      - $ref: '#/components/schemas/PropertyListingConfiguration'

    PropertyProjectProperty:
      allOf:
      - $ref: '#/components/schemas/PropertyListingConfiguration'

    MatchingContactsRequest:
      type: object
      properties:
        bed:
          type: integer
          format: int64
        bath:
          type: integer
          format: int64
        car:
          type: integer
          format: int64
        type:
          type: string
          enum:
          - sale
          - lease
          - saleAndLease
        propertyClass:
          type: string
          enum:
          - residential
          - commercial
          - business
          - rural
          - holidayRental
          - land
        minPrice:
          type: number
          format: float
        maxPrice:
          type: number
          format: float
        suburbs:
          type: array
          items:
            $ref: '#/components/schemas/Suburb'

    EventStreamItem:
      type: object
      properties:
        timestamp:
          type: string
          format: date-time
        type:
          type: string
        action:
          type: string
        data:
          type: object
        id:
          type: integer
          format: int64
    Furnished:
        type: object
        properties:
          id:
            type: integer
            format: int64
          type:
            type: string
            enum:
            - Unfurnished
            - Furnished
            - Part Furnished
            - Optional

    AddPropertyActivityNote:
      type: object
      properties:
        note:
          type: string
        leaseLifeId:
          type: integer
          format: int64
        saleLifeId:
          type: integer
          format: int64

    CampaignComments:
      type: object
      properties:
        categories:
          type: string
        from:
          type: string
        lists:
          type: string
        precincts:
          type: string
        subject:
          type: string

    Campaign:
      type: object
      properties:
        id:
          type: number
          format: int64
        title:
          type: string
        bulkEmail:
          type: boolean
        inserted:
          type: string
          format: date-time
        comments:
          $ref: '#/components/schemas/CampaignComments'
        user:
          $ref: '#/components/schemas/User'

    CampaignTracking:
      type: object
      properties:
        id:
          type: number
          format: int64
        remoteAddress:
          type: string
        url:
          type: string
        inserted:
          type: string
          format: date-time
        contact:
          type: object
          $ref: '#/components/schemas/ContactMinimal'

    CampaignTrackingSummary:
      type: object
      properties:
        readPenetration:
          type: string
        totalClicks:
          type: integer
          format: int64
        totalRecipients:
          type: integer
          format: int64
        totalRecipientsRead:
          type: integer
          format: int64
        totalUnsubscribers:
          type: integer
          format: int64
        totalViews:
          type: integer
          format: int64

    HazardsAndRisks:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string

    ExternalFeedback:
      type: object
      properties:
        id:
          type: integer
          format: int64
        comments:
          type: string
        contactiId:
          type: integer
          format: int64
        feedbackDate:
          type: string
          format: date
        insertAccountId:
          type: integer
          format: int64
        insertUserId:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        isDeleted:
          type: boolean
        leaseLifeId:
          type: integer
          format: int64
        modified:
          type: string
          format: date-time
        priceOpinion:
          type: number
          format: float
        propertyId:
          type: integer
          format: int64
        saleLifeId:
          type: integer
          format: int64
        userId:
          type: integer
          format: int64

    InsertExternalFeedback:
      type: object
      properties:
        contactId:
          type: integer
          format: int64
          description: ID of an existing contact (mutually exclusive with contact object)
        contact:
          $ref: '#/components/schemas/AddContact'
        comments:
          type: string
        feedbackDate:
          type: string
          format: date
        priceOpinion:
          type: number
          format: float
        userId:
          type: integer
          format: int64
      oneOf:
        - required: [contactId]
        - required: [contact]

    SaleSummary:
      type: object
      properties:
        account:
          type: object
          properties:
            id:
              type: integer
              format: int64
            name:
              type: string
        balance:
          type: number
          format: float
        contractNumber:
          type: string
        created:
          type: string
          format: date-time
        invoiceNumber:
          type: string
        invoiceToText:
          type: string
        saleLifeId:
          type: integer
          format: int64
        totalFees:
          type: number
          format: float

    ReinzSale:
      type: object
      properties:
        saleLifeId:
          type: integer
          format: int64
        inserted:
          type: string
          format: date-time
        processed:
          type: string
          format: date-time
        success:
          type: boolean
        saleType:
          type: string
        suppressSale:
          type: boolean

    CustomRegion:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string

    ExternalReference:
      type: object
      properties:
        type:
          type: string
        value:
          type: string

    NZDistrict:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        suburbs:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
                format: int64
              name:
                type: string
              postcode:
                type: string
              isPoBox:
                type: boolean

    AMLStatus:
      type: object
      properties:
        id:
          type: number
          format: int64
        name:
          type: string

    AMLNote:
      type: object
      properties:
        id:
          type: number
          format: int64
        note:
          type: string
        inserted:
          type: string
          format: date-time
        insertedBy:
          type: object
          $ref: '#/components/schemas/Access'

    AddAMLNote:
      type: object
      properties:
        note:
          type: string

    AMLFile:
      type: object
      properties:
        id:
          type: number
          format: int64
        filename:
          type: string
        contentType:
          type: string
        url:
          type: string
        inserted:
          type: string
          format: date-time

    AddAMLFileUpload:
      type: object
      properties:
        filename:
          type: string
        contentType:
          type: string

    AMLProperty:
      type: object
      properties:
        id:
          type: number
          format: int64
        saleLifeId:
          type: number
          format: int64
        leaseLifeId:
          type: number
          format: int64
        address:
          type: object
          $ref: '#/components/schemas/Address'
        displayAddress:
          type: string
        class:
          type: object
          $ref: '#/components/schemas/PropertyClass'
        type:
          type: object
          $ref: '#/components/schemas/PropertyType'

    AddAMLProperty:
      type: object
      properties:
        id:
          type: number
          format: int64
        saleLifeId:
          type: number
          format: int64
        leaseLifeId:
          type: number
          format: int64

    AMLCheck:
      type: object
      properties:
        id:
          type: integer
          format: int64
        contact:
          type: object
          $ref: '#/components/schemas/ID'
        inserted:
          type: string
          format: date-time
        insertedBy:
          type: object
          $ref: '#/components/schemas/Access'
        status:
          type: object
          $ref: '#/components/schemas/AMLStatus'
        approved:
          type: string
          format: date-time
        approvedBy:
          type: object
          $ref: '#/components/schemas/Access'
        rejected:
          type: string
          format: date-time
        rejectedBy:
          type: object
          $ref: '#/components/schemas/Access'
        properties:
          type: array
          items:
            $ref: '#/components/schemas/AMLProperty'
        files:
          type: array
          items:
            $ref: '#/components/schemas/AMLFile'
        notes:
          type: array
          items:
            $ref: '#/components/schemas/AMLNote'

    AddAMLCheck:
      type: object
      properties:
        contact:
          type: object
          $ref: '#/components/schemas/ID'
        properties:
          type: array
          items:
            $ref: '#/components/schemas/AddAMLProperty'

    UpdateAMLCheck:
      type: object
      properties:
        status:
          type: object
          $ref: '#/components/schemas/ID'

    PropertyPhotoOrderRequest:
      type: object
      required:
        - photoIds
      properties:
        photoIds:
          type: array
          items:
            type: integer
            format: int64
          minItems: 1
          description: Array of photo IDs in the desired order
          example: [151522513, 151522512, 151522514]

    PropertyPhotoOrderResponse:
      type: object
      properties:
        message:
          type: string
          example: "PHOTO_ORDER_UPDATED"
          description: Success message indicating the photo order was updated
        totalPhotos:
          type: integer
          format: int64
          example: 3
          description: Total number of photos for the property
        photos:
          type: array
          items:
            $ref: '#/components/schemas/PropertyPhoto'
          description: Array of photos in their new order

    PropertyPhotoBulkDeleteRequest:
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            type: integer
            format: int64
          minItems: 1
          maxItems: 50
          description: Array of photo IDs to delete (1-50 photos)
          example: [151522513, 151522512]

    PropertyPhotoBulkDeleteResult:
      type: object
      required:
        - id
        - success
        - message
      properties:
        id:
          type: integer
          format: int64
          description: Photo ID
        success:
          type: boolean
          description: Whether this photo was successfully deleted
        message:
          type: string
          description: Result message for this photo
        filename:
          type: string
          nullable: true
          description: Filename of the photo (if available)

    PropertyPhotoBulkDeleteResponse:
      type: object
      required:
        - message
        - deleted_count
        - failed_count
        - results
      properties:
        message:
          type: string
          description: Overall operation message
          example: "BULK_DELETE_SUCCESS"
        deleted_count:
          type: integer
          format: int64
          description: Number of photos successfully deleted
          example: 2
        failed_count:
          type: integer
          format: int64
          description: Number of photos that failed to delete
          example: 0
        results:
          type: array
          items:
            $ref: '#/components/schemas/PropertyPhotoBulkDeleteResult'
          description: Detailed results for each photo deletion attempt

    MergeContactRequest:
      type: object
      properties:
        contactIds:
          type: array
          items:
            type: integer
            format: int64
          minItems: 2
          maxItems: 2
        updateFields:
          type: object
          properties:
            firstName:
              type: integer
              format: int64
              description: "ID of the contact to take the first name from"
              nullable: true
            lastName:
              type: integer
              format: int64
              description: "ID of the contact to take the last name from"
              nullable: true
            company:
              type: integer
              format: int64
              description: "ID of the contact to take the company name from"
              nullable: true
            position:
              type: integer
              format: int64
              description: "ID of the contact to take the position from"
              nullable: true
            greeting:
              type: integer
              format: int64
              description: "ID of the contact to take the greeting from"
              nullable: true
            partner:
              type: integer
              format: int64
              description: "ID of the contact to take the partner name fields from"
              nullable: true
            legalDescription:
              type: integer
              format: int64
              description: "ID of the contact to take the legal description from"
              nullable: true
            envelopeGreeting:
              type: integer
              format: int64
              description: "ID of the contact to take the envelope greeting from"
              nullable: true
            address:
              type: integer
              format: int64
              description: "ID of the contact to take the residential address from"
              nullable: true
            postalAddress:
              type: integer
              format: int64
              description: "ID of the contact to take the postal address from"
              nullable: true
            marketingUsers:
              type: array
              description: "IDs and orders of the users to be assigned as marketing users"
              items:
                type: object
                properties:
                  id:
                    type: integer
                    format: int64
                  user:
                    type: integer
                    format: int64
            accessBy:
              type: array
              description: "IDs of the users to have access to the merged contact"
              items:
                type: integer
                format: int64
    MergeField:
      type: object
      required:
        - token
        - name
      properties:
        token:
          type: string
          description: The merge field token (e.g. $$ContactFirstName$$)
        name:
          type: string
          description: Human-readable name of the field
        description:
          type: string
          description: Description of the field
        category:
          type: string
          description: Category ID this field belongs to
        engines:
          type: array
          description: Delivery engines that support this field
          items:
            type: string
            enum:
            - email
            - sms
            - cloud_letter
        in_editor:
          type: boolean
          description: Whether the field is available in the template editor
        deprecated:
          type: boolean
          description: Whether the field is deprecated
        custom_field:
          type: boolean
          description: Whether the field is a custom account-specific field
    MergeFieldCategory:
      type: object
      required:
        - id
        - name
        - fields
      properties:
        id:
          type: string
          description: Category identifier
        name:
          type: string
          description: Human-readable category name
        description:
          type: string
          description: Description of the category
        fields:
          type: array
          items:
            $ref: '#/components/schemas/MergeField'
    MergeFieldTier:
      type: object
      required:
        - id
        - name
        - categories
      properties:
        id:
          type: string
          description: Tier identifier (e.g. always_available, requires_property)
        name:
          type: string
          description: Human-readable tier name
        description:
          type: string
          description: Description of the tier
        categories:
          type: array
          items:
            $ref: '#/components/schemas/MergeFieldCategory'
    MergeFieldsTieredResponse:
      type: object
      description: Returned when no context is provided. Shows all availability tiers.
      required:
        - meta
        - tiers
      properties:
        meta:
          type: object
          required:
            - response_type
          properties:
            template_type:
              type: string
              description: The template type used to filter the fields
            delivery_method:
              type: string
              description: The delivery method used to filter the fields
            response_type:
              type: string
              enum:
              - tiered
            total_fields:
              type: integer
              format: int32
              description: Total number of fields returned across all tiers
            registry_version:
              type: string
              description: Version of the merge field registry
        tiers:
          type: array
          items:
            $ref: '#/components/schemas/MergeFieldTier'
    MergeFieldsFlatResponse:
      type: object
      description: Returned when a context is provided. Shows only fields usable in that context.
      required:
        - meta
        - categories
      properties:
        meta:
          type: object
          required:
            - response_type
          properties:
            context:
              type: string
              description: The context used to filter the fields
            template_type:
              type: string
              description: The template type used to filter the fields
            delivery_method:
              type: string
              description: The delivery method used to filter the fields
            response_type:
              type: string
              enum:
              - flat
            total_fields:
              type: integer
              format: int32
              description: Total number of fields returned
            registry_version:
              type: string
              description: Version of the merge field registry
        categories:
          type: array
          items:
            $ref: '#/components/schemas/MergeFieldCategory'
