{
  "ok": true,
  "endpoint": "changelog",
  "api": "PropData v1",
  "latest_version": "2026.07.03-coordinate-parcel-validation",
  "count": 10,
  "updates": [
    {
      "version": "2026.07.03-coordinate-parcel-validation",
      "title": "Coordinate-based parcel lookup validated with Miami-Dade point-in-polygon matching",
      "type": "endpoint_fix",
      "status": "live",
      "date": "2026-07-03",
      "summary": "Validated /v1/property/by-location using Miami-Dade's verified parcel GIS layer, confirming PropData can resolve latitude/longitude directly to parcel records without address-string matching.",
      "details": [
        "Replaced stale Miami-Dade parcel GIS source with the current MD_LandInformation Parcels @ PaParcel layer.",
        "Updated Miami-Dade source URL to https://gisweb.miamidade.gov/arcgis/rest/services/MD_LandInformation/MapServer/26.",
        "Verified the coordinate workflow resolves county FIPS 12086 and queries the county parcel geometry source directly.",
        "Confirmed successful point-in-polygon match against a real Miami-Dade parcel.",
        "Successful test returned parcel_id 0821220320820, situs address 2296 NW 136 ST, Opa-locka FL 33054, and owner PRAXIS INVESTMENTS LLC.",
        "Response now labels successful spatial matches as match_level=point_in_polygon and coverage_status=matched.",
        "The endpoint message confirms no address string matching is involved when a point-in-polygon parcel match succeeds.",
        "If a coordinate falls in a road, right-of-way, water, or unparceled area, the endpoint returns no_parcel_at_point/no_matching_parcel instead of forcing a bad match.",
        "Nearest-parcel fallback is identified as the next enhancement for map pins that land slightly outside parcel boundaries."
      ],
      "affected_endpoints": [
        "/v1/property/by-location",
        "/v1/parcel-geometry",
        "/v1/property",
        "/mcp"
      ]
    },
    {
      "version": "2026.07.03-ai-mcp-connectors",
      "title": "PropData MCP connectors for ChatGPT and Claude",
      "type": "platform_integration",
      "status": "beta",
      "date": "2026-07-03",
      "summary": "Added an OAuth-protected PropData MCP gateway so ChatGPT and Claude can call live PropData tools using each subscriber's own PropData API key.",
      "details": [
        "Deployed propdata-mcp Cloudflare Worker at https://propdata-mcp.sales-fd3.workers.dev/mcp.",
        "Added OAuth discovery endpoints for authorization, token exchange, dynamic client registration, and protected resource metadata.",
        "Added a clean /health route for the MCP gateway.",
        "Added universal Connect PropData login page for AI assistants.",
        "Subscribers can authenticate with email plus their own PropData API key; the MCP session uses that subscriber key instead of a shared backend key.",
        "Exposes property, parcel, market, rent, comps, neighborhood, parcel geometry, and coordinate-based lookup workflows to AI assistants.",
        "Coordinate lookup can use /v1/property/by-location to avoid address-string mismatches where verified county GIS coverage is configured.",
        "MCP endpoint is OAuth-protected and correctly rejects unauthenticated /mcp calls with invalid_token."
      ],
      "affected_endpoints": [
        "/mcp",
        "/authorize",
        "/token",
        "/register",
        "/health",
        "/v1/property",
        "/v1/property/by-location",
        "/v1/market",
        "/v1/rent",
        "/v1/comps",
        "/v1/neighborhood",
        "/v1/parcel-geometry",
        "/v1/changelog"
      ]
    },
    {
      "version": "2026.06.22-parcel-geometry-beta",
      "title": "Parcel geometry beta endpoint",
      "type": "endpoint_add",
      "status": "beta",
      "date": "2026-06-22",
      "summary": "Added nationwide /v1/parcel-geometry endpoint with county-sourced ArcGIS coverage when configured.",
      "details": [
        "New GET /v1/parcel-geometry?county_fips=&parcel= returns GeoJSON parcel boundaries.",
        "Supports parcel, parcel_id, apn, county_fips, and fips aliases.",
        "Returns HTTP 200 with geometry_available:false when county source is not configured.",
        "Caches successful lookups in parcel_geometry_cache via Supabase.",
        "Optional /v1/property?include_geometry=1 attaches geometry to parcel lookup responses only."
      ],
      "affected_endpoints": [
        "/v1/parcel-geometry",
        "/v1/property"
      ]
    },
    {
      "version": "2026.06.21-rent-miami",
      "title": "Rent endpoint national ZIP hardening",
      "type": "endpoint_fix",
      "status": "live",
      "date": "2026-06-21",
      "summary": "Fixed /v1/rent national ZIP handling for Miami 33139 so it returns clean HTTP 200 JSON instead of Cloudflare Worker 1101/500 errors.",
      "details": [
        "Added buildRentProfile response builder for /v1/rent.",
        "Added safe /v1/rent route guard so rent endpoint exceptions return JSON instead of Cloudflare Worker errors.",
        "Verified /v1/rent?state=Florida&zip=33139 returns HTTP 200 with live Census ACS-backed rent data.",
        "Response now includes endpoint, location, estimated rent, rent source, confidence, coverage_status, and generated timestamp.",
        "Added Miami 33139 rent coverage to the post-deploy regression suite."
      ],
      "affected_endpoints": [
        "/v1/rent"
      ]
    },
    {
      "version": "2026.06.20-market-austin",
      "title": "Market endpoint national ZIP hardening",
      "type": "endpoint_fix",
      "status": "live",
      "date": "2026-06-20",
      "summary": "Fixed /v1/market national ZIP handling for Austin 78701 so it returns clean HTTP 200 JSON instead of Cloudflare Worker 1101/500 errors.",
      "details": [
        "Added safe /v1/market route guard so missing helper errors return JSON instead of Cloudflare HTML.",
        "Restored the missing market helper chain used by handleMarket: fetchFMR, fetchZORI, fetchRealtor, fetchRedfin, fetchCensus, fetchFHFA, and fetchFREDMacro.",
        "Added buildMarketProfile response builder so /v1/market can return a structured market payload.",
        "Added a no-op scheduled() handler so configured cron triggers no longer create Worker exceptions.",
        "Verified /v1/market?zip=78701 returns HTTP 200 with rent, demographics, macro, market, and source transparency fields.",
        "Added Austin 78701 market coverage to the post-deploy regression suite."
      ],
      "affected_endpoints": [
        "/v1/market",
        "/v1/rent",
        "/v1/listing"
      ]
    },
    {
      "version": "2026.06.20-neighborhood",
      "title": "Neighborhood endpoint city/state fix",
      "type": "endpoint_fix",
      "status": "live",
      "date": "2026-06-20",
      "summary": "Fixed /v1/neighborhood city/state requests so they return live JSON instead of Cloudflare Worker 1101/500 errors.",
      "details": [
        "Added missing production handleNeighborhood handler.",
        "Patched city/state lookup for Albany NY and Birmingham AL ZIP group support.",
        "Added ZIP-column fallback so Census ACS lookups check both zip_code and zip schema variants.",
        "Verified /v1/neighborhood?limit=20&state=NY&city=Albany returns HTTP 200 with 7 live Census ACS ZIP neighborhood records."
      ],
      "affected_endpoints": [
        "/v1/neighborhood"
      ]
    },
    {
      "version": "2026.06.19",
      "title": "Alabama property/comps stabilization",
      "type": "infrastructure",
      "status": "live",
      "date": "2026-06-19",
      "summary": "Stabilized Alabama property and comps responses so endpoints return HTTP 200 JSON instead of runtime errors.",
      "details": [
        "Resolved /v1/comps tier gate behavior for Pro customers.",
        "Restored /v1/property response stability for Alabama/Birmingham test set.",
        "Added regression coverage across health, usage, property, comps, preforeclosure, listing, market, and rent endpoints."
      ],
      "affected_endpoints": [
        "/v1/property",
        "/v1/comps",
        "/v1/preforeclosure",
        "/v1/listing",
        "/v1/market",
        "/v1/rent"
      ]
    },
    {
      "version": "2026.06.19-al-crosswalk",
      "title": "ZIP to county FIPS crosswalk support",
      "type": "data_pipeline",
      "status": "live",
      "date": "2026-06-19",
      "summary": "Added SQL-backed ZIP/county crosswalk support for Alabama fallback matching.",
      "details": [
        "Birmingham ZIPs 35203, 35205, and 35233 mapped to Jefferson County FIPS 01073.",
        "Crosswalk allows safer county-level fallback when exact situs ZIP fields are missing in source assessor slices.",
        "Fallback responses are labeled transparently with match_level and fallback_reason."
      ],
      "affected_endpoints": [
        "/v1/property",
        "/v1/comps"
      ]
    },
    {
      "version": "2026.06.19-jefferson-al-enrichment",
      "title": "Jefferson County AL owner/address enrichment lane",
      "type": "data_enrichment",
      "status": "in_progress",
      "date": "2026-06-19",
      "summary": "Opened official Jefferson County AL enrichment pipeline for owner name, situs address, mailing address, ZIP, and parcel identifiers.",
      "details": [
        "Official county ArcGIS source identified and tested.",
        "property_contact_enrichment table receiving source-backed owner/address/mailing records.",
        "Phone enrichment is available separately when source-backed or via paid phone intelligence/skip-trace enrichment."
      ],
      "affected_endpoints": [
        "/v1/property",
        "/v1/comps"
      ]
    },
    {
      "version": "2026.06.19-regression",
      "title": "Post-deploy regression test suite",
      "type": "quality",
      "status": "live",
      "date": "2026-06-19",
      "summary": "Added repeatable regression tests to reduce risk when shipping endpoint fixes.",
      "details": [
        "Regression set currently checks 19 critical PropData paths.",
        "Designed to catch HTTP 500, Cloudflare 1101, HTML error bodies, and missing JSON behavior before customer handoff.",
        "Golden backup files created after successful deploy/test cycle."
      ],
      "affected_endpoints": [
        "/v1/health",
        "/v1/usage",
        "/v1/property",
        "/v1/comps",
        "/v1/preforeclosure",
        "/v1/listing",
        "/v1/market",
        "/v1/rent"
      ]
    }
  ],
  "generated_at": "2026-08-11T21:16:00.042Z",
  "powered_by": "PropData / PropTechUSA.ai"
}