PEXA · AsyncAPI Specification

Pexa Notification Webhooks

Version

View Spec View on GitHub Real-EstateAustraliaConveyancingProperty SettlementLand RegistryTitlePropTechMortgageDigital SigningWebhookAsyncAPIEvents

AsyncAPI Specification

Raw ↑
generated: '2026-07-26'
method: searched
source: https://developer.pexa.com.au/Webhooks/docs/definitions/webhooks/
spec_type: Webhooks
asyncapi: null
asyncapi_note: PEXA publishes no AsyncAPI document. The event surface is contractually declared instead as a top-level
  OpenAPI 3.1 webhooks block (SubscriberNotification, NonSubscriberNotification) in openapi/pexa-notification-service-openapi.yaml,
  plus the prose Event Catalogue captured below. No AsyncAPI was fabricated.
openapi: openapi/pexa-notification-service-openapi.yaml
service:
  name: PEXA Push Notifications Service (PEXA Webhooks)
  billing: premium, billed API - contact apisupport@pexa.com.au
  registration_base: https://{API_SERVER_URL}/notification/v1/notification-registrations
  hosts:
    production: https://api.pexa.com.au
    test: https://api-tst.pexalabs.com.au
  model: self-serve registration; the customer selects the eventTypes it wishes to receive
  pii: PEXA states the webhook feature does not surface any Personally Identifiable Information (PII)
delivery:
  transport: HTTPS POST to a customer-defined webhookURI (HTTPS only)
  domain_allowlist: the webhookURI domain must be whitelisted by PEXA during onboarding; a mismatch fails registration
    (GA.NOTIF.400014)
  acknowledgement_window: acknowledge within 5 seconds
  success: any 2xx - no further action
  hard_failure: 3xx and 4xx are hard failures; no retry. PEXA can manually re-trigger on request
  retriable: 500, 502, 503, 504 - exponential backoff
  retry_schedule:
  - delay: 5 seconds
    since_initial: 00:00:05
  - delay: 5 minutes
    since_initial: 00:05:05
  - delay: 30 minutes
    since_initial: 00:35:05
  - delay: 2 hours
    since_initial: 02:35:05
  - delay: 5 hours
    since_initial: 07:35:05
  - delay: 10 hours
    since_initial: '17:35:05'
headers:
- name: webhook-id
  description: UUID of the webhook event. Stable across retries. PEXA documents it as the idempotency key consumers
    use to avoid processing the same event twice.
- name: webhook-timestamp
  description: Unix UTC milliseconds for the delivery attempt; updated on each retry as a replay-attack countermeasure.
- name: webhook-signature
  description: Space-delimited list of 'v1,<hex HMAC-SHA256>' signatures. During secret rotation both the new and
    the old signature are sent for 24 hours.
- name: Authorization
  description: Bearer {access_token} - present only for HMAC_OAUTH registrations; the token is issued by the CUSTOMER
    auth server to PEXA.
security:
  signature:
    algorithm: HMAC-SHA256
    signed_string: webhook-id.webhook-timestamp.payload (full-stop delimited)
    encoding: hex, prefixed with the version identifier v1
    standard: https://github.com/standard-webhooks/standard-webhooks/blob/main/spec/standard-webhooks.md
  authentication_modes:
  - mode: HMAC
    description: Shared-secret HMAC-SHA256 signature only. Default; the mode legacy V1 registrations fall back to.
  - mode: HMAC_OAUTH
    description: Dual layer - PEXA obtains an OAuth 2.0 client-credentials token from the CUSTOMER token endpoint
      before each delivery and sends it alongside the HMAC signature. Client auth is private_key_jwt (AWS KMS RSA,
      PS256) or client_secret. Introduced with the V3 registration endpoints.
  mtls: Optional additional transport layer, available only for HMAC_OAUTH registrations; applies to both the token
    request and the webhook delivery. Onboarded via apisupport@pexa.com.au.
  shared_secret:
    lifetime_days: 30
    rotation_endpoint: POST /v1/notification-registrations/{registrationId}/secret-rotation
    rotation_scope: create:notification_registrations_secret_rotation
    warning_event: SECRET_EXPIRY is emitted 7 days before expiry and daily thereafter until rotated
    overlap: the previous secret remains valid for 24 hours after rotation
    consequence: all registrations are deleted on secret expiry
  token_caching: PEXA caches customer-issued access tokens until expiry minus a 60-second buffer; if the customer
    token endpoint omits expires_in the token is not cached.
payload:
  schema: 'openapi/pexa-notification-service-openapi.yaml#/components/schemas/SubscriberNotificationPayload and
    #/components/schemas/NonSubscriberNotificationPayload'
  type_format: <EventCategory>.<EventName> - e.g. Lodgement.LODGEMENT_REGISTERED, Workspace.CHECKLIST_CHECKED
  categories_observed_in_published_examples:
  - Lodgement
  - Settlement
  - Workspace
  - Notification
  fields:
  - timestamp
  - type
  - data.workspaceId
  - data.subscriberId
  - data.subscriberReferences[]
  - data.additionalReferences[]
  - data.links[] (HATEOAS callbacks back into the Exchange API)
registration_operations:
- operationId: createNotificationRegistration
  method: POST
  path: /v1/notification-registrations
  scope: create:notification_registrations
- operationId: createNotificationRegistrationV3
  method: POST
  path: /v3/notification-registrations
  scope: create:notification_registrations
  note: adds authenticationMode + authConfig (HMAC_OAUTH)
- operationId: getNotificationRegistrationsV2
  method: GET
  path: /v2/notification-registrations
  scope: view:notification_registrations
  note: 'paged: page (min 1, default 1), limit (1-20, default 10), optional registrationId'
- operationId: updateNotificationRegistration
  method: PUT
  path: /v1/notification-registrations/{registrationId}
  scope: edit:notification_registrations
- operationId: updateNotificationRegistrationV3
  method: PUT
  path: /v3/notification-registrations/{registrationId}
  scope: edit:notification_registrations
- operationId: deleteNotificationRegistration
  method: DELETE
  path: /v1/notification-registrations/{registrationId}
  scope: delete:notification_registrations
- operationId: createNotificationSecretRotation
  method: POST
  path: /v1/notification-registrations/{registrationId}/secret-rotation
  scope: create:notification_registrations_secret_rotation
webhooks:
- name: SubscriberNotification
  operationId: SubscriberNotification
  payload: SubscriberNotificationPayload
  audience: PEXA subscribers
  source: openapi/pexa-notification-service-openapi.yaml#/webhooks
- name: NonSubscriberNotification
  operationId: NonSubscriberNotification
  payload: NonSubscriberNotificationPayload
  audience: non-subscriber integrators (e.g. brokers)
  source: openapi/pexa-notification-service-openapi.yaml#/webhooks
mandatory_event_types:
- SECRET_EXPIRY
event_count: 110
events:
- event: LODGEMENT_REGISTERED
  trigger: Lodgement request succeeds and Document is now registered by the Land Registry
- event: SETTLEMENT_COMPLETED_BETWEEN_ESA
  trigger: A workspace has successfully completed the settlement of funds between ESAs
- event: SECRET_EXPIRY
  trigger: Sent 7 days prior to expiry and subsequently every day until the sharedSecret key is rotated by the customer
- event: PPN_LODGEMENT_RESPONSE_RECEIVED
  trigger: Receive Purchaser Payment Notification Lodgement Response with no errors
- event: PPN_LODGEMENT_RESPONSE_BUSINESS_ERRORS
  trigger: Receive Purchaser Payment Notification Lodgement Response with errors (business errors)
- event: PPN_LODGEMENT_RESPONSE_TECH_ERRORS
  trigger: Receive Purchaser Payment Notification Lodgement Response with errors (technical errors not including
    timeout)
- event: PPN_VERIFICATION_RESPONSE_RECEIVED
  trigger: Receive Purchaser Payment Notification Verification Response with no errors.
- event: PPN_VERIFICATION_RESPONSE_TECH_ERRORS
  trigger: Receive Purchaser Payment Notification Verification Response with errors (technical errors not including
    timeout)
- event: PEXA_KEY_TRUST_ACCOUNT_SENT
  trigger: PEXA Key Trust Account details request sent.
- event: PEXA_KEY_TRUST_ACCOUNT_SENT_FAILED
  trigger: PEXA Key Trust Account details request failed.
- event: PEXA_KEY_PEXA_SOURCE_ACCOUNT_SENT
  trigger: PEXA Key Source Account details request sent.
- event: GST_FORM1_LODGEMENT_RESPONSE_SUCCESSFUL
  trigger: GST Form 1 receives successful lodgement response.
- event: GST_FORM2_LODGEMENT_RESPONSE_SUCCESSFUL
  trigger: GST Form 2 receives successful lodgement response.
- event: GST_FORM1_REMOVAL
  trigger: GST Form 1 removal.
- event: MESSAGE_RECEIVED
  trigger: Message Received
- event: DOCUMENT_STATUS_UPDATED
  trigger: Document Status Updated
- event: DOCUMENT_UNSIGNED
  trigger: Document Unsigned
- event: DOCUMENT_DELETED
  trigger: Document Deleted
- event: DOCUMENT_SIGNED
  trigger: Document Signed
- event: DOCUMENT_CREATED
  trigger: Document Created
- event: DOCUMENT_EDITED
  trigger: A document in a workspace is edited and saved
- event: DOCHUB_FILE_UPLOADED
  trigger: New file uploaded to DocHub
- event: DOCHUB_FILE_DELETED
  trigger: DocHub file deleted
- event: DISCHARGE_AUTHORITY_UPLOADED
  trigger: Discharge Authority has been uploaded
- event: LODGEMENT_REQUEST_FAILED
  trigger: Lodgement Request Failed
- event: LODGEMENT_VERIFICATION_WITH_ERRORS
  trigger: Lodgement Verification With Errors
- event: LODGEMENT_VERIFICATION_WITH_WARNINGS
  trigger: Lodgement Verification With Warnings
- event: LODGEMENT_LODGED
  trigger: Lodgement lodged
- event: NUMBER_RECEIVED_AFTER_LODGEMENT
  trigger: Dealing Number received for Document - After Lodgement
- event: PARTY_ADDED_TO_WORKSPACE
  trigger: Party Added To The Workspace
- event: PARTY_DELETED
  trigger: Party Deleted
- event: PARTY_DETAILS_UPDATED
  trigger: Party Details Updated
- event: PARTY_REMOVED_FROM_WORKSPACE
  trigger: Party Deleted From The Workspace
- event: PARTY_CREATED
  trigger: Party Created
- event: PARTY_UPDATED
  trigger: Party Updated
- event: AUTO_BALANCING_AMOUNT_BREACH
  trigger: The auto-balancing source line item cannot auto-balance as the maximum amount has been reached
- event: FINANCIAL_LINE_ITEM_TOTAL_UPDATED
  trigger: Financial Line Item Destination changed
- event: LOAN_PAYOUT_LINE_ITEM_CREATED
  trigger: Destination Source Line Item is created with category of Loan Payout
- event: LOAN_PAYOUT_LINE_ITEM_REMOVED
  trigger: Existing Destination Line item with category of Loan Payout has been removed from financial settlement
    schedule
- event: LOAN_PAYOUT_LINE_ITEM_UPDATED
  trigger: Existing Destination Line item with category of Loan Payout has been edited
- event: READY_FOR_SHORTFALL_UPDATE
  trigger: Financial line item entries marked as 'Ready for shortfall' by user.
- event: READY_FOR_SURPLUS
  trigger: Financial line item entries marked as 'Ready for surplus' by user.
- event: READY_TO_BOOK_NO_LONGER_APPLICABLE
  trigger: Workspace is no longer following the Ready to Book process
- event: READY_TO_BOOK_SETTLEMENT_BOOKED
  trigger: PEXA has booked a settlement date and time for the Workspace
- event: SETTLEMENT_ACCEPTED_BY_PARTICIPANT
  trigger: Settlement date and time has been accepted by the participant
- event: SETTLEMENT_DATETIME_UPDATED
  trigger: Settlement Date/Time Updated
- event: SETTLEMENT_FAILED_NOT_READY_FI
  trigger: Settlement Failed Due To Not Ready
- event: SETTLEMENT_REMOVED
  trigger: Financial Settlement has been removed
- event: SETTLEMENT_STATEMENT_SIGNED
  trigger: Settlement Statement Signed
- event: SETTLEMENT_STATEMENT_UNSIGNED
  trigger: Settlement Statement Unsigned
- event: SETTLEMENT_SUCCEEDED
  trigger: Settlement Succeeded
- event: SETTLEMENT_STATUS_CHANGED
  trigger: Settlement Status Changed
- event: FINANCIAL_LINE_ITEM_UPDATED
  trigger: Financial Line Item Updated
- event: FINANCIAL_LINE_ITEM_DELETED
  trigger: Financial Line Item Deleted
- event: FINANCIAL_LINE_ITEM_UNVERIFIED
  trigger: Generated when manual or auto verification of a line item is undone. Applies to both PEXA Source Account
    and Trust Account Source Line Items.
- event: FINANCIAL_LINE_ITEM_VERIFIED
  trigger: Generated when manual verification of line items happens at PEXA. Applies only to Trust Account Source
    Line Items.
- event: FINANCIAL_LINE_ITEM_VERIFIED_BY_PEXA
  trigger: Generated when PEXA Ops team verifies the funds via dashboard or auto by system. Applies only to PEXA
    Source Account Line Items.
- event: SETTLEMENT_FAILED
  trigger: Settlement Failed
- event: TAC_WORKSPACE_NOT_READY
  trigger: Workspace is not in 'Ready' status even though settlement is due to occur within an hour
- event: LINKED_LODGEMENT_REMOVE
  trigger: Linked lodgement has been removed from the workspace
- event: SETTLEMENT_FRS_AMOUNT_CHANGED
  trigger: Total Funds Required to Settle Changed
- event: SETTLEMENT_HAS_COMMENCED
  trigger: A workspace has initiated and workspace status is updated to Settling
- event: READY_FOR_SHORTFALL
  trigger: Financial line item entries marked as 'Ready for shortfall' by user.
- event: STAMPDUTY_VERIFIED
  trigger: Stamp Duty Verification result is received with no errors or warnings.
- event: STAMPDUTY_VERIFICATION_ERROR
  trigger: Stamp Duty Verification result is received with errors.
- event: STAMPDUTY_VERIFICATION_WARNING
  trigger: Stamp Duty Verification result is received with warnings.
- event: TAC_HOURPRIOR_FAILED
  trigger: TAC batch not been able to be completed for a workspace prior to settlement due to a technical error
- event: TAC_HOURPRIOR_FAILED_FOR_LINKED
  trigger: TAC batch not been able to be completed for a workspace prior to settlement due to a technical error.
    The workspace participants of the linked workspace are notified that a technical error has occurred for TAC.
- event: LODGEMENT_VERIFICATION_FAILED
  trigger: Lodgement Verification Failed For Positive TAC
- event: CHECKLIST_CHECKED
  trigger: Checklist checked
- event: CHECKLIST_UNCHECKED
  trigger: Checklist unchecked
- event: LANDTITLE_ADDED
  trigger: Land Title Reference Added To Workspace
- event: LANDTITLE_REMOVED
  trigger: Land Title Reference Removed from Workspace
- event: SUBSCRIBER_WITHDRAWN
  trigger: Subscriber Withdrawn From Workspace By Self
- event: INVITATION_ACCEPTED
  trigger: Workspace Invitation Accepted
- event: INVITATION_DECLINED
  trigger: Workspace Invitation Declined
- event: PARTICIPANT_INVITED
  trigger: Workspace Participant Invited
- event: INVITATION_CREATED
  trigger: Workspace Invitation Sent
- event: WORKSPACE_MOVED_TO_READY
  trigger: Workspace Moved to Ready Status
- event: WORKSPACE_REVERTED_FROM_READY
  trigger: Workspace Reverted from Ready Status
- event: INVITE_ACCEPTED_NON_PANEL_MEMBER
  trigger: Workspace Invitation Accepted by Non Panel Member
- event: INVITE_ACCEPTED_PANEL_MEMBER
  trigger: Workspace Invitation Accepted by Panel Member
- event: RESPONSIBLE_SUBSCRIBER_CHANGED
  trigger: Responsible subscriber changed
- event: JOINED_EXISTING_WORKSPACE
  trigger: Successfully joined Workspace via the Existing Workspace screen
- event: TAC_SUCCEEDED
  trigger: Positive Title Activity Check Response Received
- event: WORKSPACE_STATUS_CHANGED
  trigger: Worspace Status Change
- event: WORKSPACE_UPDATED
  trigger: Workspace Updated due to the Re-supply of RIS
- event: LODGEMENT_CASE_CREATED
  trigger: Lodgement Case Created
- event: LODGEMENT_CASE_STATUS_UPDATED
  trigger: Lodgement Case Status Updated
- event: LODGEMENT_VERIFICATION_REQUESTED
  trigger: Lodgement Verification Requested
- event: LODGEMENT_VERIFIED
  trigger: Lodgement Verification Without Error and Warning
- event: LODGEMENT_REQUESTED
  trigger: Lodgement Requested
- event: LODGEMENT_RECEIVED_BY_LR
  trigger: Lodgement Documents have been received by Land Registry
- event: SETTLEMENT_DATETIME_UPDATED_BY_USER
  trigger: Settlement date and time is added to the workspace by the user on the Accept or Propose New Settlement
    Date and Time screen.
- event: WORKSPACE_ROLE_ADDED
  trigger: Role Added to Workspace
- event: WORKSPACE_ROLE_REMOVED
  trigger: Role Removed from Workspace
- event: DOCUMENT_SIGNED_VIA_COGITO
  trigger: '#N/A'
- event: SETTLEMENT_SIGNED_VIA_COGITO
  trigger: '#N/A'
- event: INVITATION_FORWARDED
  trigger: Subscriber has forwarded an invitation to another Subscriber
- event: INVITATION_WITHDRAWN
  trigger: Workspace Invitation Withdrawn
- event: AUTO_CALCULATE_AMOUNT_BREACH
  trigger: Vendor’s surplus auto-calculation amount has exceeded 99,999,999.99
- event: SOURCE_FUNDS_DEPOSIT_RECEIVED
  trigger: Source funds deposit received for the workspace
- event: LINKED_SIM_LODGEMENT_CREATE
  trigger: Linked simultaneous lodgement created
- event: LINKED_SETTLEMENT_CREATE
  trigger: Subscriber creates a linked financial line item between two workspaces
- event: LINKED_SETTLEMENT_CREATE_FOR_RECEIVING_SUBSCRIBER
  trigger: Linked financial line item created, from the receiving workspace’s perspective
- event: LINKED_SETTLEMENT_ACCEPT
  trigger: Receiving subscriber accepts the link request
- event: LINKED_SETTLEMENT_ACCEPT_FOR_RECEIVING_SUBSCRIBER
  trigger: Link request accepted, from the accepting subscriber’s perspective
- event: LINKED_SETTLEMENT_UPDATE
  trigger: Linked financial line item updated by either workspace
- event: LINKED_SETTLEMENT_DECLINE
  trigger: Receiving subscriber declines the link request
- event: LINKED_SETTLEMENT_DELETE
  trigger: Either workspace removes the linked financial line item

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/pexa-notification-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.