PEXA · Authentication Profile

Pexa Authentication

Authentication

PEXA secures its APIs with oauth2 and mutualTLS across 3 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the clientCredentials and authorizationCode flow(s).

Real EstateAustraliaConveyancingProperty SettlementLand RegistryTitlePropTechMortgageDigital SigningWebhooks
Methods: oauth2, mutualTLS Schemes: 3 OAuth flows: clientCredentials, authorizationCode API key in:

Security Schemes

oauth2 oauth2
· flows: clientCredentials
oauth2 oauth2
· flows: authorizationCode, clientCredentials
oauth2 oauth2
· flows: authorizationCode, clientCredentials

Source

Authentication Profile

Raw ↑
generated: '2026-07-26'
method: searched
source:
- https://developer.pexa.com.au/Exchange/docs/documentation/ (Authentication, Authentication Compliance)
- https://developer.pexa.com.au/Projects/docs/documentation/
- https://developer.pexa.com.au/Webhooks/docs/definitions/webhooks/
- https://www.pexa.com.au/pexa-apis/
- https://auth.pexa.com.au/.well-known/openid-configuration
- openapi/pexa-notification-service-openapi.yaml
- openapi/pexa-projects-api-v4-openapi.yaml
- openapi/pexa-standalone-discharge-experience-api-openapi.yaml
docs: https://developer.pexa.com.au/Exchange/docs/documentation/
summary:
  types:
  - oauth2
  - mutualTLS
  oauth2_flows:
  - clientCredentials
  - authorizationCode
  api_key_in: []
  statement: >-
    "We authenticate our APIs using industry best practices, either through OAuth2.0 or Mutual TLS."
    - https://www.pexa.com.au/pexa-apis/
  token_lifetime: 12 hours
  transport: PEXA only accepts TLS v1.2 protocol (or above)
  header: 'Authorization: Bearer <access_token>'
access_gate:
  self_serve: false
  requirement: signed PEXA API Agreement
  process:
  - Register at https://www.pexa.com.au/pexa-apis/ - PEXA validates the details
  - Once validated and approved, PEXA emails the test access details
  - Plan and design, build and test, production readiness, go live
  - Credential requests and re-issues via apisupport@pexa.com.au
  authorization_code_extra: PEXA also requires your redirect_uri before issuing authorization-code credentials
  portal_signup: disabled in the developer portal build (hideSignUp true; AWS Cognito identity)
authorization_servers:
- environment: production
  issuer: https://auth.pexa.com.au/
  authorization_endpoint: https://auth.pexa.com.au/authorize
  token_endpoint: https://auth.pexa.com.au/oauth/token
  revocation_endpoint: https://auth.pexa.com.au/oauth/revoke
  jwks_uri: https://auth.pexa.com.au/.well-known/jwks.json
  discovery: https://auth.pexa.com.au/.well-known/openid-configuration
  discovery_status: 200
  shape: Auth0
  token_endpoint_auth_methods_supported: [client_secret_basic, client_secret_post, private_key_jwt, none]
  code_challenge_methods_supported: [S256, plain]
  document: well-known/pexa-openid-configuration.json
- environment: test
  issuer: https://auth-tst.pexalabs.com.au/
  authorization_endpoint: https://auth-tst.pexalabs.com.au/authorize
  token_endpoint: https://auth-tst.pexalabs.com.au/oauth/token
  discovery: https://auth-tst.pexalabs.com.au/.well-known/openid-configuration
  discovery_status: 200
  document: well-known/pexa-openid-configuration-test.json
flows:
- flow: clientCredentials
  audience: machine-to-machine integrations
  parameters: [grant_type=client_credentials, client_id, client_secret, scope]
  note: >-
    Scope is required on the token request and is declared per endpoint in the developer portal.
    The documented example scope is au_pub_tst_pexa_conversation_api_v2_read.
- flow: authorizationCode
  audience: business-to-consumer - an individual user authenticating with their own PEXA credentials
  parameters: [client_id, response_type=code, redirect_uri, scope, 'then grant_type=authorization_code + code + client_secret']
  note: >-
    Prompts the user to log into PEXA with their individual login, password and multi-factor
    authentication at the start of every session.
- flow: mutualTLS
  audience: alternative to OAuth 2.0 for API authentication
  note: >-
    Offered as an alternative on the API integration page, with certificate error guidance in the
    Exchange documentation. Not declared as a securityScheme in any shipped contract.
- flow: private_key_jwt (outbound)
  audience: webhook delivery in HMAC_OAUTH mode
  note: >-
    In HMAC_OAUTH mode PEXA authenticates ITSELF to the customer's token endpoint, signing the client
    assertion with an AWS KMS RSA key using PS256. Claims: iss/sub = clientId, aud = authUrl,
    exp = now + 10 minutes, iat, jti (random UUID). client_secret is the alternative. Optional mTLS
    applies to both the token request and the delivery.
schemes:
- name: oauth2
  type: oauth2
  flows:
  - flow: clientCredentials
    tokenUrl: https://auth.pexa.com.au/oauth/token
    scopes: 5
  sources:
  - openapi/pexa-notification-service-openapi.yaml
- name: oauth2
  type: oauth2
  flows:
  - flow: 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: 3
  - flow: clientCredentials
    tokenUrl: https://host.kubernetes.internal/auth/realms/pexa/protocol/openid-connect/token
    scopes: 3
  sources:
  - openapi/pexa-projects-api-v4-openapi.yaml
  spec_defect: >-
    The Projects v4 document ships an internal Keycloak URL (host.kubernetes.internal) as its
    authorization and token endpoint. The real endpoints are https://auth.pexa.com.au/oauth/token
    (production) and https://auth-tst.pexalabs.com.au/oauth/token (test).
- name: oauth2
  type: oauth2
  flows:
  - flow: authorizationCode
    authorizationUrl: "https://'{{auth2_env}}'/authorize"
    tokenUrl: "https://'{{auth2_env}}'/oauth/token"
  - flow: clientCredentials
    tokenUrl: "https://'{{auth2_env}}'/oauth/token"
  sources:
  - openapi/pexa-standalone-discharge-experience-api-openapi.yaml
  spec_defect: >-
    The Standalone Discharge document ships unresolved templates ({{auth2_env}}, {{api_scope}})
    rather than real endpoint URLs and scope names.
compliance_requirements:
- PEXA only accepts TLS v1.2 protocol
- The OAuth 2.0 flow implementation must be secure
- Client id and client secret must be securely stored and encrypted, and must not be accessible to
  software users or other parties
- The token request process must be executed securely and must not be interceptable
- The access token must be stored securely and encrypted
notes:
- No API-key authentication exists anywhere in the estate.
- No anonymous or public endpoint exists - even /health requires a token.
- >-
  The production OIDC discovery document advertises many Auth0 grant types (password, implicit,
  device_code, token-exchange, jwt-bearer). Only client_credentials and authorization_code are
  documented for PEXA API integrators; the rest are tenant defaults, not offered contracts.