Pricefinder · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Pricefinder API

9 actions 9 updates documentation extends openapi/pricefinder-api-swagger.json
Derived by API Evangelist Built from the contracts Pricefinder publishes. Pricefinder did not publish this file.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-notex-apievangelist-slugx-apievangelist-enrichedx-apievangelist-artifactshostschemessecurityDefinitionssecurity

Targets 5

$.info
$
$.paths[*][*].responses
$.paths['/features'].get
$.paths['/stubs/{language}'].get

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Pricefinder API
  version: 1.0.0
extends: openapi/pricefinder-api-swagger.json

# generated: '2026-07-26'
# method: generated
# source: openapi/pricefinder-api-swagger.json + the API Evangelist enrichment round
#   for all/pricefinder (authentication/, conventions/, errors/, lifecycle/,
#   conformance/, data-model/).
#
# This overlay carries API Evangelist's enhancements to Pricefinder's published
# Swagger 2.0 contract WITHOUT mutating the harvested original. The single most
# valuable action below is the securityDefinitions block: Pricefinder's contract
# declares NO security metadata at all even though every one of its 116 operations
# requires an OAuth 2.0 bearer token. The scheme added here is transcribed verbatim
# from Pricefinder's own prose in the POST /oauth2/token description and from the live
# authorize page — nothing is invented.
#
# NOTE ON SPEC VERSION: the target is Swagger 2.0, so the securityDefinitions action
# uses Swagger 2.0 shape (type: oauth2 with flow/authorizationUrl/tokenUrl), not
# OpenAPI 3 shape.

actions:

# ---- Provenance -----------------------------------------------------------------
- target: $.info
  update:
    x-apievangelist-slug: pricefinder
    x-apievangelist-enriched: '2026-07-26'
    x-apievangelist-artifacts:
      authentication: authentication/pricefinder-authentication.yml
      conventions: conventions/pricefinder-conventions.yml
      errors: errors/pricefinder-problem-types.yml
      lifecycle: lifecycle/pricefinder-lifecycle.yml
      conformance: conformance/pricefinder-conformance.yml
      data_model: data-model/pricefinder-data-model.yml
      mcp: mcp/pricefinder-mcp.yml
      packages: packages/pricefinder-packages.yml
      skills: skills/_index.yml

# ---- Make the contract self-locating ---------------------------------------------
# The published document declares neither `host` nor `schemes`, so a generated client
# has no base URL. Both values below are the ones Pricefinder itself uses in the curl
# example inside the /oauth2/token description, confirmed by live probe.
- target: $
  update:
    host: api.pricefinder.com.au
    schemes:
    - https
    x-apievangelist-note: |
      host and schemes are absent from the published contract. Added here so the
      document is self-locating; basePath /v1 is already declared upstream.

# ---- Add the missing security model ----------------------------------------------
- target: $
  update:
    securityDefinitions:
      pricefinder_oauth2_application:
        type: oauth2
        flow: application
        tokenUrl: https://api.pricefinder.com.au/v1/oauth2/token
        scopes: {}
        description: |
          client_credentials grant. client_id is the API user's Pricefinder username
          and client_secret is that user's password; HTTP Basic is an accepted
          alternative to the form parameters. The API defines no scopes — entitlement
          is enforced per commercial subscription and is readable at GET /features.
      pricefinder_oauth2_access_code:
        type: oauth2
        flow: accessCode
        authorizationUrl: https://api.pricefinder.com.au/v1/auth/authorize.html
        tokenUrl: https://api.pricefinder.com.au/v1/oauth2/token
        scopes: {}
        description: |
          authorization_code grant for acting on another Pricefinder user's behalf.
          Direct the user to the authorize page with client_id, state and redirect_uri
          over HTTPS; on approval the callback carries state and code, on refusal
          error=access_denied. Refresh tokens rotate on use.
    security:
    - pricefinder_oauth2_application: []
    x-apievangelist-security-note: |
      TRANSCRIBED, NOT INVENTED. Pricefinder documents this entire model in HTML prose
      inside the POST /oauth2/token operation description and serves the authorize
      page live (HTTP 200, 2026-07-26). The published contract simply never expresses
      it as security metadata, so no code generator or agent can discover it. Every
      operation except getToken requires a bearer token; anonymous calls return 401.

# ---- Record the undocumented 401 that every operation actually returns -------------
- target: $.paths[*][*].responses
  update:
    '401':
      description: |
        Unauthorized — no valid OAuth 2.0 bearer token was presented. NOT DECLARED IN
        THE PUBLISHED CONTRACT but returned by every data path; confirmed by live
        anonymous probes of /v1/features, /v1/suggest/properties and /v1/stubs/java on
        2026-07-26. Added by API Evangelist so generated clients handle it.
      x-apievangelist-added: true

# ---- Runtime semantics the contract omits ----------------------------------------
- target: $.info
  update:
    x-apievangelist-conventions:
      pagination:
        supported: false
        note: '`limit` caps results on 49 operations but there is no cursor, page or
          offset parameter — narrow the query instead of paging.'
      idempotency:
        supported: false
        note: No Idempotency-Key on any of the 5 POST operations. Read state back
          rather than blind-retrying a write.
      rate_limiting:
        documented: false
        note: No 429 is declared and no quota is published; limits are per commercial
          subscription and are not machine-readable.
      request_tracing:
        supported: false
        note: No request-id or correlation header is issued.
      partial_success:
        channel: messages[]
        schema: '#/definitions/Message'
        note: Data-quality and jurisdictional-suppression notices ride inside 200
          responses as a messages array of code+text. A 200 does not mean a complete
          answer.
      error_format:
        rfc9457: false
        note: >-
          Only 3 non-2xx responses are documented across 116 operations; the one
          error schema is a bare {"error": string}.

# ---- Flag the non-standard vendor extension --------------------------------------
- target: $.info
  update:
    x-apievangelist-vendor-extension-warning: |
      The contract attaches a `pds` object ({hidden, extra, enumerate, deprecated}) to
      parameters as a RAW SIBLING KEY. Swagger 2.0 permits vendor extensions only
      under an `x-` prefix, so `pds` is invalid there and strict validators will reject
      the document. It is also the only channel signalling parameter deprecation — the
      _gt/_lt filter generation (beds_gt, price_lt, area_gt, …) is flagged deprecated
      on 47 operations with no Swagger `deprecated` flag and no sunset date. Use the
      min_*/max_* generation.

# ---- Flag the operationId collisions ----------------------------------------------
- target: $.info
  update:
    x-apievangelist-operationid-warning: |
      operationId IS NOT UNIQUE, which violates Swagger 2.0 and breaks every code
      generator and MCP tool-forge keyed on it. 47 of 116 operations collide:
      `properties` repeats across 14 paths, `planProperties` across 8, plus
      volumeFolioProperties, listings, sales, rentals, salesCma, rentalCma, soi, image,
      property, radialSales and streets. Bind to METHOD + PATH, not operationId.
      mcp/pricefinder-mcp.yml carries the disambiguated tool names.

# ---- Surface the entitlement operation --------------------------------------------
- target: $.paths['/features'].get
  update:
    summary: Read the calling user's commercial entitlement set
    x-apievangelist-note: |
      Because the API defines no OAuth scopes, this is the ONLY machine-readable
      authorization surface. Agents should call it first and gate their plan on
      UserFeatures rather than discovering entitlement through 401/403 responses.

# ---- Surface the client-library generator ------------------------------------------
- target: $.paths['/stubs/{language}'].get
  update:
    x-apievangelist-note: |
      First-party but explicitly unsupported client-library generation across 38
      swagger-codegen targets, and auth-gated (anonymous GET → 401, probed
      2026-07-26). Catalogued in packages/pricefinder-packages.yml. Pricefinder ships
      no published, supported SDK to any package registry.

Work with this as data

Every overlay 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 openapi overlays

4 MCP tools reach this
  • find_overlaysBrowse and filter every overlay 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 overlay
curl "https://apis.io/api/v1/overlays/pricefinder-api-swagger-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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