PEXA Projects API
PEXA Projects API from PEXA — 10 path(s) described in OpenAPI.
PEXA Projects API from PEXA — 10 path(s) described in OpenAPI.
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