PEXA Projects API

The PEXA Projects API (v4) supports multi-lot development settlements — creating and managing projects, project lots, project statuses and related participants for property developers settling many lots through PEXA. Published as an OpenAPI 3.0.3 contract with OAuth 2.0 authorizationCode and clientCredentials flows and named scopes such as au:projects:project:write.

OpenAPI Specification

pexa-projects-api-v4-openapi.yaml Raw ↑
openapi: "3.0.3"

info:
  title: "Projects API"
  description: |
    PEXA Projects External Client API for Projects <br> <br> This API uses the OAuth 2.0 protocol for authentication and authorization. It supports the following OAuth 2.0 flows: <br> - Client Credentials <br> - Authorization Code <br> <br> Scopes are used to grant an application different levels of access to data. Each API endpoint will require specific scopes. <br> The scopes are listed against each API endpoint. <br> <br> For more information, see the following guides: <br> - [Authentication](../../../Exchange/docs/documentation/)
  version: v4
  x-api-version: "4.0.0"
  contact:
    name: "PEXA Projects"
    email: pexaprojects-prdsupport@pexa.com.au
  x-pexa-products:
    - pexa-projects

tags:
  - name: Project

x-idp-config:
  consumer-claim: azp
  scopes-claim: scope

x-disable-subscription: "off"

x-protected-view: "off"

x-rate-limits:
  limit: 200
  window_size: 60
  window_type: sliding

x-service-limits:
  limit: 200
  window_size: 60
  window_type: sliding

# Defing dynamic hosts for APIM
#
# {% if apim_hosts is defined %}
x-apim-hosts: #  {%- for host in apim_hosts %}
  - '{{ host }}' #  {% endfor %}
#{% else %}
#    apim_hosts is not defined
#{% endif %}
#

servers:
  - url: '{{ service.url }}'

paths:
  /v4/projects:
    post:
      operationId: "createProject"
      security:
        - oauth2:
            - au:projects:project:write
      summary: Create Project
      description: Create a new project <br> Scopes:<br><i>au:projects:project:write</i>
      tags:
        - Project
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Project"
            examples:
              "NSW":
                $ref: "#/components/examples/NswProjectRequest"
              "VIC":
                $ref: "#/components/examples/VicProjectRequest"
              "QLD":
                $ref: "#/components/examples/QldProjectRequest"
              "SA":
                $ref: "#/components/examples/SaProjectRequest"
      responses:
        "201":
          description: Successfully created a project
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Project"
              examples:
                "NSW":
                  $ref: "#/components/examples/NswProjectResponse"
                "VIC":
                  $ref: "#/components/examples/VicProjectResponse"
                "QLD":
                  $ref: "#/components/examples/QldProjectResponse"
                "SA":
                  $ref: "#/components/examples/SaProjectResponse"
        "400":
          $ref: "#/components/responses/ErrorResponse"
        "401":
          $ref: "#/components/responses/ErrorResponse"
        "403":
          $ref: "#/components/responses/ErrorResponse"
        "500":
          $ref: "#/components/responses/ErrorResponse"

  /v4/projects/{projectId}:
    put:
      operationId: "updateProject"
      security:
        - oauth2:
            - au:projects:project:write
      summary: Update Project
      description: Update an existing project <br> Scopes:<br><i>au:projects:project:write</i>
      tags:
        - Project
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: Id of the project to update
          example: 1234
          schema:
            type: integer
            format: int64
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Project"
            examples:
              "NSW":
                $ref: "#/components/examples/NswProjectRequest"
              "VIC":
                $ref: "#/components/examples/VicProjectRequest"
              "QLD":
                $ref: "#/components/examples/QldProjectRequest"
              "SA":
                $ref: "#/components/examples/SaProjectRequest"
      responses:
        "200":
          description: Successfully updated a project
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Project"
              examples:
                "NSW":
                  $ref: "#/components/examples/NswProjectResponse"
                "VIC":
                  $ref: "#/components/examples/VicProjectResponse"
                "QLD":
                  $ref: "#/components/examples/QldProjectResponse"
                "SA":
                  $ref: "#/components/examples/SaProjectResponse"
        "400":
          $ref: "#/components/responses/ErrorResponse"
        "401":
          $ref: "#/components/responses/ErrorResponse"
        "403":
          $ref: "#/components/responses/ErrorResponse"
        "500":
          $ref: "#/components/responses/ErrorResponse"

  /v4/projects/{projectId}/statuses:
    get:
      operationId: "statuses"
      security:
        - oauth2:
            - au:projects:status:read
      tags:
        - Project
      description: Fetch the status details for a project <br> Scopes:<br><i>au:projects:status:read</i>
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: Id of the project to find status details for
          example: 1234
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Status details for a project
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectStatus'
              examples:
                "Status":
                  $ref: '#/components/examples/ProjectStatusResponse'
        "400":
          $ref: "#/components/responses/ErrorResponse"
        "401":
          $ref: "#/components/responses/ErrorResponse"
        "403":
          $ref: "#/components/responses/ErrorResponse"
        "500":
          $ref: "#/components/responses/ErrorResponse"

  /v4/projects/{projectId}/workspaces:
    get:
      operationId: "workspaces"
      security:
        - oauth2:
            - au:projects:workspaces:read
      tags:
        - Project
      description: Fetch the list of workspaces of a project <br> Scopes:<br><i>au:projects:workspaces:read</i>
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: Id of the project to list workspaces for
          example: 1234
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: The list of workspaces of a project
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProjectsWorkspace'
              examples:
                "ListOfOne":
                  $ref: '#/components/examples/WorkspacesResponse'
        "400":
          $ref: "#/components/responses/ErrorResponse"
        "401":
          $ref: "#/components/responses/ErrorResponse"
        "403":
          $ref: "#/components/responses/ErrorResponse"
        "500":
          $ref: "#/components/responses/ErrorResponse"
    post:
      operationId: 'createWorkspace'
      security:
        - oauth2:
            - au:projects:workspaces:write
      tags:
        - Workspaces
      description: Create a new workspace for an existing Project <br> Scopes:<br><i>au:projects:workspaces:write</i>
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: 'Id of the project to create a workspace for'
          example: 1234
          schema:
            type: integer
            format: int64
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Workspace'
      responses:
        '201':
          description: 'Workspace created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workspace'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                type: object
                properties:
                  exceptionList:
                    type: array
                    items:
                      type: object
                      properties:
                        code:
                          type: string
                        message:
                          type: string
              example:
                {
                  exceptionList: [
                    {
                      code: 'OB0001.000',
                      message: 'The request is invalid'
                    }
                  ]
                }
  /v4/projects/{projectId}/workspaces/{pexaWorkspaceId}:
    put:
      operationId: "updateWorkspace"
      security:
        - oauth2:
            - au:projects:workspaces:write
      summary: Update a workspace
      description: Updates a workspace of a given project with parameters 'projectId', 'pexaWorkspaceId' and 'payload' <br> Scopes:<br><i>au:projects:workspaces:write</i>
      tags:
        - Workspaces
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: 'Id of the project to update workspaces for'
          example: 1234
          schema:
            type: integer
            format: int64
        - name: pexaWorkspaceId
          in: path
          required: true
          description: 'The workspace update'
          example: 'PEXA12345'
          schema:
            type: string
      requestBody:
        description: workspaceUpdate Response
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateWorkspaceRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateWorkspaceResponse'
        '401':
          $ref: "#/components/responses/ErrorResponse"
        '403':
          $ref: "#/components/responses/ErrorResponse"
        '404':
          $ref: "#/components/responses/ErrorResponse"
        '500':
          $ref: "#/components/responses/ErrorResponse"
      deprecated: false

  /v4/projects/{projectId}/workspaces/{workspaceId}/financials:
    post:
      operationId: "createFinancials"
      security:
        - oauth2:
            - au:projects:workspaces:write
      summary: Create Financial Settlement Line Items
      description: Add financial settlement line items to an existing workspace <br> Scopes:<br><i>au:projects:workspaces:write</i>
      tags:
        - Workspaces
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: 'Id of the project to upload financials for'
          example: 1234
          schema:
            type: integer
            format: int64
        - name: workspaceId
          in: path
          required: true
          description: 'The workspace to upload financials for'
          example: 'PEXA12345'
          schema:
            type: string
      requestBody:
        description: settlementUploadRequest
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SettlementUploadRequest'
        required: true
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SettlementUploadResponse'
        '401':
          $ref: "#/components/responses/ErrorResponse"
        '403':
          $ref: "#/components/responses/ErrorResponse"
        '404':
          $ref: "#/components/responses/ErrorResponse"
        '500':
          $ref: "#/components/responses/ErrorResponse"
      deprecated: false
      x-codegen-request-body-name: settlementUploadRequest
  /v4/projects/{projectId}/workspaces/{workspaceId}/parties:
    post:
      operationId: "addParties"
      security:
        - oauth2:
            - au:projects:workspaces:write
      summary: Add Parties
      description: Add parties to an existing workspace <br> Scopes:<br><i>au:projects:workspaces:write</i>
      tags:
        - Workspaces
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: 'Id of the project to add parties for'
          example: 1234
          schema:
            type: integer
            format: int64
        - name: workspaceId
          in: path
          required: true
          description: 'Id of the workspace to add parties for'
          example: 'PEXA12345'
          schema:
            type: string
      requestBody:
        description: Create parties request body
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddPartiesRequest'
        required: true
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddPartiesResponse'
        '401':
          $ref: "#/components/responses/ErrorResponse"
        '403':
          $ref: "#/components/responses/ErrorResponse"
        '404':
          $ref: "#/components/responses/ErrorResponse"
        '500':
          $ref: "#/components/responses/ErrorResponse"
      deprecated: false
      x-codegen-request-body-name: createPartiesRequest
    put:
      operationId: "updateParties"
      security:
        - oauth2:
            - au:projects:workspaces:write
      summary: Update Parties
      description: Update parties on an existing workspace <br> Scopes:<br><i>au:projects:workspaces:write</i>
      tags:
        - Workspaces
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: 'Id of the project to update parties for'
          example: 1234
          schema:
            type: integer
            format: int64
        - name: workspaceId
          in: path
          required: true
          description: 'Id of the workspace to update parties for'
          example: 'PEXA12345'
          schema:
            type: string
      requestBody:
        description: Update parties request body
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePartiesRequest'
        required: true
      responses:
        '204':
          description: NO CONTENT
        '401':
          $ref: "#/components/responses/ErrorResponse"
        '403':
          $ref: "#/components/responses/ErrorResponse"
        '404':
          $ref: "#/components/responses/ErrorResponse"
        '500':
          $ref: "#/components/responses/ErrorResponse"
      deprecated: false
      x-codegen-request-body-name: updatePartiesRequest
    delete:
      operationId: "deleteParties"
      security:
        - oauth2:
            - au:projects:workspaces:write
      summary: Delete Parties
      description: Delete parties on an existing workspace <br> Scopes:<br><i>au:projects:workspaces:write</i>
      tags:
        - Workspaces
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: 'Id of the project to remove parties for'
          example: 1234
          schema:
            type: integer
            format: int64
        - name: workspaceId
          in: path
          required: true
          description: 'Id of the workspace to remove parties for'
          example: 'PEXA12345'
          schema:
            type: string
      requestBody:
        description: Delete parties request body
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeletePartiesRequest'
        required: true
      responses:
        '204':
          description: NO CONTENT
        '401':
          $ref: "#/components/responses/ErrorResponse"
        '403':
          $ref: "#/components/responses/ErrorResponse"
        '404':
          $ref: "#/components/responses/ErrorResponse"
        '500':
          $ref: "#/components/responses/ErrorResponse"
      deprecated: false
      x-codegen-request-body-name: deletePartiesRequest
  /v4/projects/{projectId}/workspaces/{workspaceId}/participants:
    post:
      operationId: "addParticipants"
      security:
        - oauth2:
            - au:projects:workspaces:write
      summary: Add Participants
      description: Add participants to an existing workspace <br> Scopes:<br><i>au:projects:workspaces:write</i>
      tags:
        - Workspaces
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: 'Id of the project that the workspace resides in'
          example: 1234
          schema:
            type: integer
            format: int64
        - name: workspaceId
          in: path
          required: true
          description: 'The workspace to add participants to'
          example: 'PEXA12345'
          schema:
            type: string
      requestBody:
        description: Add participants request body
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddParticipantsRequest'
        required: true
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddParticipantsResponse'
        '401':
          $ref: "#/components/responses/ErrorResponse"
        '403':
          $ref: "#/components/responses/ErrorResponse"
        '404':
          $ref: "#/components/responses/ErrorResponse"
        '500':
          $ref: "#/components/responses/ErrorResponse"
      deprecated: false
      x-codegen-request-body-name: addParticipantsRequest
    delete:
      operationId: "deleteParticipants"
      security:
        - oauth2:
            - au:projects:workspaces:write
      summary: Delete Participants
      description: Delete participants in an existing workspace <br> Scopes:<br><i>au:projects:workspaces:write</i>
      tags:
        - Workspaces
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: 'Id of the project that the workspace resides in'
          example: 1234
          schema:
            type: integer
            format: int64
        - name: workspaceId
          in: path
          required: true
          description: 'The workspace to delete participants from'
          example: 'PEXA12345'
          schema:
            type: string
      requestBody:
        description: Delete participants request body
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeleteParticipantsRequest'
        required: true
      responses:
        '204':
          description: No Content
        '401':
          $ref: "#/components/responses/ErrorResponse"
        '403':
          $ref: "#/components/responses/ErrorResponse"
        '404':
          $ref: "#/components/responses/ErrorResponse"
        '500':
          $ref: "#/components/responses/ErrorResponse"
      deprecated: false


  /v4/projects/{projectId}/workspaces/{pexaWorkspaceId}/settlementDates:
    post:
      operationId: "proposeSettlement"
      security:
        - oauth2:
            - au:projects:workspaces:write
      summary: Propose Settlement Date
      description: Propose a settlement date to an existing workspace <br> Scopes:<br><i>au:projects:workspaces:write</i>
      tags:
        - Workspaces
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: projectId
          in: path
          required: true
          description: 'Id of the project that the workspace resides in'
          example: 1234
          schema:
            type: integer
            format: int64
        - name: pexaWorkspaceId
          in: path
          required: true
          description: 'The workspace to propose settlement date for'
          example: 'PEXA12345'
          schema:
            type: string
      requestBody:
        description: Propose Settlement request body
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProposeSettlementRequest'
        required: true
      responses:
        '204':
          description: No Content
        '401':
          $ref: "#/components/responses/ErrorResponse"
        '403':
          $ref: "#/components/responses/ErrorResponse"
        '404':
          $ref: "#/components/responses/ErrorResponse"
        '500':
          $ref: "#/components/responses/ErrorResponse"
      deprecated: false
  /v4/projects/notifications:
    get:
      operationId: "notification"
      security:
        - oauth2:
            - au:projects:notification:read
      tags:
        - Notification
      description: Fetch notifications <br> Scopes:<br><i>au:projects:notification:read</i>
      parameters:
        - $ref: '#/components/parameters/RequestCorrelationIdHeader'
        - name: categoryList
          in: query
          required: false
          description: The notification category the results will return. Each value must be separated with a comma (,) with no spaces. If not provided, PEXA will return all notification category types.
          example: 'Document'
          schema:
            type: string
        - name: lastEventId
          in: query
          required: true
          description: 'The PEXA internal reference for the event. This value must match the last Event Id which was provided in the previous notification response from PEXA. Note: If a Last Event Id has yet to be obtained, the value must be 0. If the Last Event ID value does not correspond to the Last Event Timestamp recorded in PEXA, an exception will be returned. Maximum 19 characters.'
          example: '1213'
          schema:
            type: string
        - name: lastEventTimestamp
          in: query
          required: true
          description: 'The timestamp of the last event previously retrieved which the results will be filtered from (in UTC). Note: The Last Event Timestamp is used in conjunction with the Last Event ID for retrieving notifications. The Last Event Timestamp value in the request should match the Last Event Timestamp value which was provided in the previous notification response from PEXA. If the Last Event Timestamp value does not correspond to the Last Event Id recorded in PEXA, an exception will be returned.'
          example: '2018-11-18T02:30:20.283Z'
          schema:
            type: string
        - name: maxRecords
          in: query
          required: false
          description: 'Used to specify the maximum number of notification records to be returned in a single service call. PEXA will set an internal threshold for a maximum number of records to be returned. If the PEXA threshold is less than the max number of records provided, PEXA will return its threshold number of records (with the More Data flag set to indicate there are more notification records where applicable). If no value is provided, the PEXA threshold will be used as the default number for notification records to be received. If a value is provided, it must be greater than 0.'
          example: '2'
          schema:
            type: string
            pattern: '[0-9]+'
        - name: severity
          in: query
          required: false
          description: 'The notification severity the results will return. If not provided, PEXA will return all notification severity types.'
          example: 'Error'
          schema:
            type: string
      responses:
        '200':
          description: Status details for a project
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetrieveNotificationsResponse'
        "400":
          $ref: "#/components/responses/ErrorResponse"
        "401":
          $ref: "#/components/responses/ErrorResponse"
        "403":
          $ref: "#/components/responses/ErrorResponse"
        "500":
          $ref: "#/components/responses/ErrorResponse"
components:
  parameters:
    RequestCorrelationIdHeader:
      description: A unique request id provided by api caller to support end-to-end troubleshooting and tracing
      in: header
      name: X-Request-Correlation-Id
      schema:
        type: string
        format: UUID
        example: 123e4567-e89b-12d3-a456-426614174000

  responses:
    ErrorResponse:
      description: Error Response
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Errors"

  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: 'https://host.kubernetes.internal/auth/realms/pexa/protocol/openid-connect/auth'
          tokenUrl: 'https://host.kubernetes.internal/auth/realms/pexa/protocol/openid-connect/token'
          scopes:
            au:projects:project:write: Grant project write access
            au:projects:status:read: Grant project status read access
            au:projects:workspaces:read: Grant project workspaces read access
        clientCredentials:
          tokenUrl: 'https://host.kubernetes.internal/auth/realms/pexa/protocol/openid-connect/token'
          scopes:
            au:projects:project:write: Grant project write access
            au:projects:status:read: Grant project status read access
            au:projects:workspaces:read: Grant project workspaces read access

  schemas:
    Errors:
      description: List of errors related to the API
      type: object
      properties:
        exceptionList:
          type: array
          items:
            allOf:
              - $ref: "#/components/schemas/Error"
    Error:
      description: Error related to the API
      type: object
      properties:
        code:
          description: Error code
          type: string
          example: "OB0001.000"
        message:
          description: Error message
          type: string
          example: "The request is invalid"
        details:
          description: Optional list of error details
          type: array
          items:
            type: string
            description: Error details

    Project:
      description: "Object with all required details for a Project"
      type: object
      required:
        - projectName
        - jurisdiction
        - workgroupId
        - parentTitle
        - supplierApplicable
        - withMortgageeOnTitles
        - intentionToLock
        - projectStages
        - settlementRestriction
      properties:
        projectName:
          type: string
          description: "The Name of the project"
          pattern: ^[\w\s\-!@#$%^&*()+={}\[\]|:;',.?/~`]+$
          maxLength: 150
        jurisdiction:
          $ref: "#/components/schemas/Jurisdiction"
        workgroupId:
          description: "The Workgroup id that the project will belongs to"
          type: integer
          format: int64
        estimatedSettlementDate:
          type: string
          description: "The Estimated Settlement Date of the project"
          format: string
        parentTitle:
          type: string
          description: "The Parent Land Title"
          format: string
          minLength: 1
        proprietorOnTitle:
          description: "List of Proprietor(s) on Title"
          type: array
          items:
            description: "A proprietor on title"
            type: string
        supplierApplicable:
          type: boolean
          description: "Is the Supplier Details section mandatory?"
        supplierDetails:
          $ref: "#/components/schemas/SupplierDetails"
        withMortgageeOnTitles:
          type: boolean
          description: "Is there a mortgage registered on the title?"
        mortgageeOnTitles:
          type: array
          items:
            $ref: "#/components/schemas/MotParticipants"
        intentionToLock:
          type: boolean
          description: "Do you intend to restrict account(s) this project can disburse to?"
          example: true
        projectStages:
          type: boolean
          description: "Do you intend to have more than one stage to this project?"
          example: false
        settlementRestriction:
          type: boolean
          description: "Do you intend to restrict Incoming Proprietor Representative(s) from proposing the settlement date?"
          example: true
        nswPropertyDetails:
          $ref: "#/components/schemas/NswPropertyDetails"
        qldPropertyDetails:
          $ref: "#/components/schemas/QldPropertyDetails"
        vicPropertyDetails:
          $ref: "#/components/schemas/VicPropertyDetails"
        id:
          readOnly: true
          type: integer
          format: int64
          description: "The id of the project"
        projectStatus:
          readOnly: true
          type: string
          description: "The project status"
        historicalParentTitles:
          readOnly: true
          type: array
          description: "All historical parent titles of project"
          items:
            description: "A historical parent title"
            type: string
        workspacesCreated:
          readOnly: true
          type: boolean
          description: "If workspaces have been created for this project"

    # Property details for each jurisdiction
    QldPropertyDetails:
      type: object
      description: "Property details for the QLD jurisdiction"
      properties:
        currentLandUse:
          $ref: "#/components/schemas/CurrentLandUse"
        marginScheme:
          type: boolean
          description: "Is the transaction under the margin scheme?"
        safetySwitch:
          $ref: "#/components/schemas/SafetySwitch"
        smokeAlarm:
          $ref: "#/components/schemas/SmokeAlarm"

    NswPropertyDetails:
      type: object
      description: "Property details for the NSW jurisdiction"
      properties:
        locality:
          description: "The name assigned to a government administrative district, such as a Parish, County or Local Government Area."
          type: string
        natureOfProperty:
          type: string
          description: "Specify the use of the property being dealt with"
          pattern: "Carspace|Commercial|Factory|Marine berth|Office|Residence|Shop|Vacant land|Warehouse"

    VicPropertyDetails:
      type: object
      description: "Property details for the VIC jurisdiction"
      required:
        - restrictiveCovenant
      properties:
        restrictiveCovenant:
          description: "A restrictive covenant is a private treaty or written agreement between landowners that limits the way land can be used and developed"
          type: boolean
        covenantMcpRef:
          type: string
          description: "The covenant MCP reference"
          maxLength: 150
        covenantMcpExpiryDate:
          type: string
          description: "Some restrictive covenant have a lapse date or a date when they end. Most don't! That means the restriction apply to the land even if it's sold multiple times, the convenant will remain on title until it is removed."
          pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
        municipalityName:
          type: string
          description: "Council name. For example - Bendigo council, Ballarat council etc"
          pattern: "Alpine Shire Council|Ararat Rural City Council|Ballarat City Council|Banyule C

# --- truncated at 32 KB (105 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/pexa/refs/heads/main/openapi/pexa-projects-api-v4-openapi.yaml