TradeDataHub Public API · OpenAPI Overlay 1.0.0

TradeDataHub Public API — API Evangelist enhancement overlay

14 actions 14 updates documentation extends openapi/tradedatahub-openapi.json
Generated by API Evangelist Written by API Evangelist tooling for TradeDataHub Public API's API. It is a proposal applied on top of the contract, not a document TradeDataHub Public API publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

operationIdx-observed-divergencex-runtime-version-fieldx-observed-runtime-versionx-agent-entry-pointsx-contact-emailx-auth-gapx-entry-point

Targets 13

$.info
$.paths['/api/v1/'].get
$.paths['/api/v1/texas-trades-teaser.json'].get
$.paths['/api/v1/coverage'].get
$.paths['/api/v1/states'].get
$.paths['/api/v1/trades'].get
$.paths['/api/v1/cities'].get
$.paths['/api/v1/datasets'].get
$.paths['/api/v1/datasets/{product_id}'].get
$.paths['/api/v1/datasets/{product_id}/price'].get
$.paths['/api/v1/datasets/{product_id}/preview'].get
$.paths['/api/v1/datasets/{product_id}/download'].get
$.components

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: TradeDataHub Public API — API Evangelist enhancement overlay
  version: 1.0.0
extends: openapi/tradedatahub-openapi.json
x-provenance:
  generated: '2026-08-29'
  method: generated
  source: openapi/tradedatahub-openapi.json
  note: >-
    Captures API Evangelist enhancements to the provider's OpenAPI without mutating it. Every value
    below is either a mechanical addition (operationIds synthesised from method+path) or a fact
    verified by live probe on 2026-08-29 — no behaviour is invented. The provider's spec declares no
    operationIds at all, which is the largest single generation-blocker in the contract.
actions:
  - target: $.info
    description: Record the observed runtime contract version and the agent-facing discovery entry points.
    update:
      x-runtime-version-field: api_version
      x-observed-runtime-version: '1.0.0'
      x-agent-entry-points:
        - https://www.tradedatahub.net/llms.txt
        - https://www.tradedatahub.net/llms-full.txt
        - https://www.tradedatahub.net/api/v1/coverage
      x-contact-email: tradedatahub@gmail.com
  - target: $.info
    description: Note the absence of a machine-readable security scheme for the paid rail.
    update:
      x-auth-gap: >-
        The paid retrieval endpoint requires a PAYMENT-SIGNATURE request header (x402 v2), but the
        contract declares no securitySchemes, so a generated client cannot discover it.
  - target: $.paths['/api/v1/'].get
    description: Add a stable operationId.
    update:
      operationId: getApiIndex
  - target: $.paths['/api/v1/texas-trades-teaser.json'].get
    description: Add a stable operationId.
    update:
      operationId: getTexasTradesTeaser
  - target: $.paths['/api/v1/coverage'].get
    description: Add a stable operationId and mark the documented starting point.
    update:
      operationId: getCoverage
      x-entry-point: true
  - target: $.paths['/api/v1/states'].get
    description: Add a stable operationId.
    update:
      operationId: listStates
  - target: $.paths['/api/v1/trades'].get
    description: Add a stable operationId.
    update:
      operationId: listTrades
  - target: $.paths['/api/v1/cities'].get
    description: Add a stable operationId.
    update:
      operationId: listCities
  - target: $.paths['/api/v1/datasets'].get
    description: Add a stable operationId and record the observed limit-clamping behaviour.
    update:
      operationId: listDatasets
      x-pagination:
        style: limit-offset
        total_field: pagination.total
      x-observed-divergence: >-
        limit=9999 returned HTTP 200 with limit silently clamped to 100, not the declared 400.
        Probed 2026-08-29.
  - target: $.paths['/api/v1/datasets/{product_id}'].get
    description: Add a stable operationId and document the product_id grammar.
    update:
      operationId: getDataset
      x-id-formats:
        - 'state:{state_slug}'
        - 'state-trade:{state_slug}:{trade_slug}'
        - 'city-trade:{state_slug}:{city_slug}:{trade_slug}'
        - 'mega-pack:seven-live-states'
  - target: $.paths['/api/v1/datasets/{product_id}/price'].get
    description: Add a stable operationId.
    update:
      operationId: getDatasetPrice
  - target: $.paths['/api/v1/datasets/{product_id}/preview'].get
    description: Add a stable operationId and record that an error body can arrive under HTTP 200.
    update:
      operationId: getDatasetPreview
      x-availability: city_trade and state_trade products only
      x-observed-divergence: >-
        Requesting a preview for a state or mega_pack product returns the error envelope
        {error.code preview_unavailable} under HTTP 200, not a 4xx. Probed 2026-08-29.
  - target: $.paths['/api/v1/datasets/{product_id}/download'].get
    description: Add a stable operationId and make the x402 contract and its irreversibility explicit.
    update:
      operationId: downloadDataset
      x-payment:
        protocol: x402
        version: 2
        header: PAYMENT-SIGNATURE
        network: 'eip155:84532'
        network_name: Base Sepolia
        asset: USDC (testnet)
        mainnet_settlement_enabled: false
        challenge_inspectable_without_payment: true
      x-reversibility:
        api_reversal_operation: null
        out_of_band_reversal: Email tradedatahub@gmail.com with the Stripe session id (cs_ prefix).
        window: 7 days from purchase
        window_source: https://www.tradedatahub.net/refunds/
        grade: documented
      x-delivery:
        format: text/csv
        link_validity_hours: 24
        max_downloads: 5
  - target: $.components
    description: Declare the payment header as a discoverable security scheme.
    update:
      securitySchemes:
        x402PaymentSignature:
          type: apiKey
          in: header
          name: PAYMENT-SIGNATURE
          description: >-
            x402 v2 payment signature. Obtain the challenge from the HTTP 402 response, settle on Base
            Sepolia (eip155:84532) with testnet USDC, then retry with this header. TESTNET ONLY.