Planomy Tax Data · OpenAPI Overlay 1.0.0

API Evangelist enhancements for Planomy Tax Data JSON

7 actions 7 updates update extends openapi/planomy-tax-data-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Planomy Tax Data's API. It is a proposal applied on top of the contract, not a document Planomy Tax Data publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-agent-guidancex-apievangelist-profilex-apievangelist-repox-authenticationx-artifactsx-corsx-freshnessx-caching

Targets 5

$.info
$.paths['/tax-data/{year}.json'].get
$.paths['/tax-data/index.json'].get
$.components.schemas.StateTaxPreset
$.components.schemas.SourceReference

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for Planomy Tax Data JSON
  version: 1.0.0
extends: openapi/planomy-tax-data-openapi.yml
x-provenance:
  generated: '2026-08-09'
  method: generated
  source: >-
    Live probes of https://planomy.net/tax-data/ plus the published documentation at
    https://planomy.net/data/ and https://planomy.net/embed/
  note: >-
    Planomy publishes no OpenAPI, so the document this overlay extends is itself API
    Evangelist-authored from observed responses. This overlay carries the enrichment layer — rating
    metadata, the observed-vs-documented CORS divergence, caching guidance and the cross-links to the
    rest of the repo — separately from the description of the wire behaviour.
actions:
  - target: $.info
    update:
      x-apievangelist-profile: https://apis.io/provider/planomy-tax-data/
      x-apievangelist-repo: https://github.com/api-evangelist/planomy-tax-data
      x-authentication: none
      x-artifacts:
        conventions: conventions/planomy-tax-data-conventions.yml
        errors: errors/planomy-tax-data-problem-types.yml
        lifecycle: lifecycle/planomy-tax-data-lifecycle.yml
        data-model: data-model/planomy-tax-data-data-model.yml
        conformance: conformance/planomy-tax-data-conformance.yml
        json-schema: json-schema/planomy-tax-data-tax-year-dataset.json
        components: components/planomy-tax-data-components.yml
        agentic-access: agentic-access/planomy-tax-data-agentic-access.yml
  - target: $.info
    update:
      x-cors:
        documented: false
        observed: true
        observed_header: 'access-control-allow-origin: *'
        preflight: OPTIONS returns 405, so only CORS simple requests succeed.
        verified: '2026-08-09'
        note: >-
          The published documentation states no CORS header is sent. The deployed edge sends a
          wildcard. Stated policy and deployed behaviour disagree; the header is undocumented and
          could be withdrawn without notice.
  - target: $.info
    update:
      x-freshness:
        cadence: >-
          Upstream-driven. Retirement-plan limits late October / early November, HSA figures in
          spring, Medicare premiums in November.
        signals: [publishedAt, lastUpdated, 'sources.*.retrieved']
        recommended_poll: >-
          Conditional GET with If-None-Match, no more than daily. The origin answered 304 on
          2026-08-09.
  - target: $.paths['/tax-data/{year}.json'].get
    update:
      x-caching:
        strategy: conditional-get
        etag: strong
        example_request_header: 'If-None-Match: "8642a3ae66c6d4201323c66ae6e07c15"'
        verified_304: true
      x-agent-guidance: >-
        Resolve `year` from getTaxDataIndex. A year that is valid but unpublished and a malformed
        year both return the same HTML 404, so the manifest is the only reliable way to tell them
        apart.
  - target: $.paths['/tax-data/index.json'].get
    update:
      x-agent-guidance: >-
        Call this first. `latest` is the year to use unless the caller named one; `years[]` is the
        complete set; `yearUrlTemplate` is how to build the URL.
  - target: $.components.schemas.StateTaxPreset
    update:
      x-coverage-warning: >-
        Ten keys only (NONE, PA, IL, MA, VA, CA, NY, NJ, OR, MN) — a preset list for the Planomy
        planner, not 50-state coverage. Only the explicit `NONE` key means "no state income tax"; a
        state that is simply absent is unmodelled, and treating absence as zero will understate tax.
  - target: $.components.schemas.SourceReference
    update:
      x-why-this-matters: >-
        This is the provider's strongest design decision. Every section carries a `source` key into
        this map, so any single figure can be traced to a named IRS, SSA, CMS or Federal Register
        document with the date Planomy last checked it. Agents citing a figure should cite through
        this map, not through planomy.net.