REA Group · OpenAPI Overlay 1.0.0

API Evangelist enhancements for PropTrack (REA Group)

4 actions 4 updates security
Generated by API Evangelist Written by API Evangelist tooling for REA Group's API. It is a proposal applied on top of the contract, not a document REA Group publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

OAuth2ClientCredentialssecurityx-apievangelist-notecontactx-rate-limitsx-error-catalogx-conventionsx-mock-servers

Targets 3

$.components.securitySchemes
$
$.info

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for PropTrack (REA Group)
  version: 1.0.0
x-apievangelist:
  generated: '2026-07-27'
  method: generated
  extends_all:
  - openapi/rea-group-address-openapi.yml
  - openapi/rea-group-listings-openapi.yml
  - openapi/rea-group-market-openapi.yml
  - openapi/rea-group-properties-openapi.yml
  - openapi/rea-group-reports-openapi.yml
  - openapi/rea-group-transactions-openapi.yml
  - openapi/rea-group-disclaimers-openapi.yml
  - openapi/rea-group-coming-soon-openapi.yml
  rationale: >-
    PropTrack publishes nine genuine OpenAPI 3.1.0 documents with operationIds,
    summaries, tags, full 4xx/5xx coverage and 189 named response examples - a
    strong contract by catalogue standards. Four things are missing that are
    mechanical to state and that block machine consumption. This overlay records
    them as our enhancement without mutating the harvested originals. Each action
    below corresponds to a finding in review.yml.
actions:
- target: $.components.securitySchemes
  description: >-
    FINDING 1 - No securityScheme is declared in any of the nine documents, even
    though every data operation requires an OAuth 2.0 client-credentials bearer
    token and the provider documents that model in prose at
    /docs/apis/how-to-authenticate. A generated client reads these specs as
    unauthenticated.
  update:
    OAuth2ClientCredentials:
      type: oauth2
      description: >-
        PropTrack partner credentials (api_key / api_secret) exchanged for a JWT
        bearer token with a 3600 second TTL. Client authentication is
        client_secret_basic - credentials must be sent in the Authorization
        header; form parameters are not supported.
      flows:
        clientCredentials:
          tokenUrl: https://data.proptrack.com/oauth2/token
          scopes: {}
- target: $
  description: >-
    Apply the declared scheme globally so every operation inherits it. The OAuth
    token operation itself is the one exception and uses HTTP Basic.
  update:
    security:
    - OAuth2ClientCredentials: []
- target: $.info
  description: >-
    FINDING 2 - info.version is an empty string in all nine documents, so no
    consumer can pin or diff a version. The URI path carries v1/v2 but the
    document does not.
  update:
    x-apievangelist-note: >-
      info.version is empty upstream. Path-level versioning (/api/v1, /api/v2) is
      the only version signal PropTrack publishes.
    contact:
      name: PropTrack Support
      email: support@proptrack.com
      url: https://www.proptrack.com.au/support/contact-support/
- target: $.info
  description: >-
    FINDING 3 - Rate limits, quota behaviour and the cursor pagination contract
    are documented only in prose articles, not in the specs. Surface them as
    extensions so an agent reading the contract alone sees them.
  update:
    x-rate-limits: rate-limits/rea-group-rate-limits.yml
    x-error-catalog: errors/rea-group-error-codes.yml
    x-conventions: conventions/rea-group-conventions.yml
    x-mock-servers: sandbox/rea-group-sandbox.yml
x-findings-not-fixable-by-overlay:
- id: invalid-path-templates
  severity: high
  description: >-
    FINDING 4 - Six path keys in the Properties document are not valid OpenAPI
    path templates. They embed query strings and prose rather than expressing
    requestType as a parameter, e.g.
    "/api/v1/properties/{propertyId}/valuations/sale?requestType=enquiry or
    requestType=origination", "/api/v1/properties/valuations/sale ~ requestType=plus"
    and "/api/v1/properties/valuations/sale ~ Pro". A strict parser will reject or
    mis-route these; codegen produces broken clients. The correct modelling is one
    path with requestType as an enum query parameter. This cannot be repaired by
    an overlay because it changes the path keys themselves - it needs a fix
    upstream.
  affected:
  - openapi/rea-group-properties-openapi.yml
- id: duplicate-operation-ids
  severity: medium
  description: >-
    operationId "listings" is used by both
    GET /api/v2/listings/{listingId} (Listings document) and
    GET /api/v2/properties/{propertyId}/listings (Properties document), and
    "transactions" collides similarly across documents. operationIds are unique
    per document so each file is individually valid, but any tool that merges the
    nine services into one client - which is how the surface is actually consumed
    - gets a collision.
  affected:
  - openapi/rea-group-listings-openapi.yml
  - openapi/rea-group-properties-openapi.yml
- id: non-idiomatic-operation-ids
  severity: low
  description: >-
    Several operationIds are autogenerated slugs
    ("get-api-v2-properties-summaries-search") and one is a raw path
    ("/api/v2/market/demographics"), which is not a usable identifier in generated
    code. Others are clean ("address.match", "market.sale-history"), so the
    convention is inconsistent across the estate.
- id: no-components-reuse
  severity: medium
  description: >-
    components.schemas is empty in all nine documents; every schema is inlined per
    operation. The Properties document is 591KB as a result, and the same logical
    entity (address, attributes) is redefined per operation with no guarantee the
    definitions match. See data-model/rea-group-data-model.yml, which had to
    reconstruct the entity graph from repeated inline shapes.