{
  "openapi": "3.1.0",
  "info": {
    "title": "Florida Property API",
    "version": "1.0.0",
    "description": "Commercial REST API for Florida statewide parcel (property appraiser / FDOR assessment-roll) and tax-delinquency / tax-certificate-sale records across all 67 counties. Independent commercial service. Not affiliated with the Florida Department of Revenue, any county property appraiser or tax collector, LienHub, RealAuction, TaxCertSale, or any government agency."
  },
  "servers": [
    {
      "url": "https://api.floridapropertyapi.com/v1",
      "description": "Production API"
    },
    {
      "url": "https://floridapropertyapi.com/api/v1",
      "description": "Same-origin API proxy"
    }
  ],
  "components": {
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      }
    },
    "schemas": {
      "AccountUsageBody": {
        "type": "object",
        "properties": {
          "events_count": {
            "type": "integer"
          },
          "monthly_quota": {
            "type": "integer"
          },
          "percent_used": {
            "type": "number"
          },
          "reset_date": {
            "type": "string",
            "description": "ISO-8601 UTC timestamp of next month start"
          },
          "plan": {
            "type": "string"
          }
        },
        "required": [
          "events_count",
          "monthly_quota",
          "percent_used",
          "reset_date",
          "plan"
        ]
      },
      "AccountUsageResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/AccountUsageBody"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "County": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/CountyRecord"
          },
          "meta": {
            "$ref": "#/components/schemas/responseMetaSchema"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "description": "Object envelope for a single county (GET /api/v1/counties/{county}).",
        "examples": [
          {
            "data": {
              "id": "clr9county0001polk",
              "countyName": "Polk",
              "countySlug": "polk",
              "countyFips": "12105",
              "dorCountyNumber": "53",
              "propertyAppraiserUrl": "https://www.polkpa.org",
              "taxCollectorUrl": "https://www.polktaxes.com",
              "taxCertificateSaleUrl": "https://polk.realtaxdeed.com",
              "taxCertificateVendor": "RealAuction",
              "parcelCount": 412877,
              "lastImportAt": "2026-06-01T07:14:22.000Z",
              "createdAt": "2026-01-12T18:03:11.000Z",
              "updatedAt": "2026-06-01T07:14:22.000Z"
            },
            "meta": {
              "request_id": "req_9f2c1a7b6d4e"
            }
          }
        ]
      },
      "CountyList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CountyRecord"
            }
          },
          "meta": {
            "$ref": "#/components/schemas/responseMetaSchema"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "description": "Object envelope whose `data` is the array of county rows (GET /api/v1/counties).",
        "examples": [
          {
            "data": [
              {
                "id": "clr9county0001alac",
                "countyName": "Alachua",
                "countySlug": "alachua",
                "countyFips": "12001",
                "dorCountyNumber": "11",
                "propertyAppraiserUrl": "https://www.acpafl.org",
                "taxCollectorUrl": "https://www.alachuacollector.com",
                "taxCertificateSaleUrl": "https://alachua.realtaxlien.com",
                "taxCertificateVendor": "RealAuction",
                "parcelCount": 104233,
                "lastImportAt": "2026-05-28T06:02:10.000Z",
                "createdAt": "2026-01-12T18:03:11.000Z",
                "updatedAt": "2026-05-28T06:02:10.000Z"
              },
              {
                "id": "clr9county0001polk",
                "countyName": "Polk",
                "countySlug": "polk",
                "countyFips": "12105",
                "dorCountyNumber": "53",
                "propertyAppraiserUrl": "https://www.polkpa.org",
                "taxCollectorUrl": "https://www.polktaxes.com",
                "taxCertificateSaleUrl": "https://polk.realtaxdeed.com",
                "taxCertificateVendor": "RealAuction",
                "parcelCount": 412877,
                "lastImportAt": "2026-06-01T07:14:22.000Z",
                "createdAt": "2026-01-12T18:03:11.000Z",
                "updatedAt": "2026-06-01T07:14:22.000Z"
              }
            ],
            "meta": {
              "request_id": "req_9f2c1a7b6d4e"
            }
          }
        ]
      },
      "CountyRecord": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Opaque county id (cuid)."
          },
          "countyName": {
            "type": "string",
            "description": "Display name, e.g. \"Polk\"."
          },
          "countySlug": {
            "type": "string",
            "description": "URL slug, lowercase, e.g. \"polk\"."
          },
          "countyFips": {
            "type": [
              "string",
              "null"
            ],
            "description": "5-digit county FIPS code."
          },
          "dorCountyNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "FL Dept. of Revenue county number (01-67)."
          },
          "propertyAppraiserUrl": {
            "type": [
              "string",
              "null"
            ],
            "description": "County property-appraiser site."
          },
          "taxCollectorUrl": {
            "type": [
              "string",
              "null"
            ],
            "description": "County tax-collector site."
          },
          "taxCertificateSaleUrl": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tax-certificate-sale portal."
          },
          "taxCertificateVendor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Certificate-sale vendor, e.g. \"LienHub\", \"RealAuction\", \"TaxCertSale\"."
          },
          "parcelCount": {
            "type": "integer",
            "description": "Parcels loaded for this county."
          },
          "lastImportAt": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISO-8601 UTC timestamp of last successful import."
          },
          "createdAt": {
            "type": "string",
            "description": "ISO-8601 UTC row creation timestamp."
          },
          "updatedAt": {
            "type": "string",
            "description": "ISO-8601 UTC row update timestamp."
          }
        },
        "required": [
          "id",
          "countyName",
          "countySlug",
          "countyFips",
          "dorCountyNumber",
          "propertyAppraiserUrl",
          "taxCollectorUrl",
          "taxCertificateSaleUrl",
          "taxCertificateVendor",
          "parcelCount",
          "lastImportAt",
          "createdAt",
          "updatedAt"
        ],
        "examples": [
          {
            "id": "clr9county0001polk",
            "countyName": "Polk",
            "countySlug": "polk",
            "countyFips": "12105",
            "dorCountyNumber": "53",
            "propertyAppraiserUrl": "https://www.polkpa.org",
            "taxCollectorUrl": "https://www.polktaxes.com",
            "taxCertificateSaleUrl": "https://polk.realtaxdeed.com",
            "taxCertificateVendor": "RealAuction",
            "parcelCount": 412877,
            "lastImportAt": "2026-06-01T07:14:22.000Z",
            "createdAt": "2026-01-12T18:03:11.000Z",
            "updatedAt": "2026-06-01T07:14:22.000Z"
          }
        ]
      },
      "dateString": {
        "type": "string",
        "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
      },
      "DelinquencyByParcelInput": {
        "type": "object",
        "properties": {
          "parcel_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "County-assigned parcel id (punctuation-insensitive). Required."
          },
          "county": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40,
            "description": "County slug to scope the lookup."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500,
            "description": "Page size (default 25)."
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Row offset for pagination (default 0)."
          }
        },
        "required": [
          "parcel_id"
        ],
        "description": "Query parameters for GET /api/v1/tax-delinquencies/by-parcel"
      },
      "DelinquencyCounts": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "county": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Applied county slug scope, or null for statewide."
              },
              "tax_year": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Applied tax-year scope, or null for all years."
              },
              "counts": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/DelinquencyStatusCount"
                }
              }
            },
            "required": [
              "county",
              "tax_year",
              "counts"
            ]
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        },
        "required": [
          "data",
          "meta"
        ],
        "description": "Grouped delinquency record counts by status (GET /api/v1/tax-delinquencies/counts).",
        "examples": [
          {
            "data": {
              "county": "polk",
              "tax_year": 2024,
              "counts": [
                {
                  "status": "open",
                  "count": 18342
                },
                {
                  "status": "redeemed",
                  "count": 9120
                },
                {
                  "status": "struck",
                  "count": 412
                }
              ]
            },
            "meta": {
              "request_id": "req_9f2c1a7b6d4e"
            }
          }
        ]
      },
      "DelinquencyCountsInput": {
        "type": "object",
        "properties": {
          "county": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40,
            "description": "County slug to scope the counts."
          },
          "tax_year": {
            "type": "integer",
            "description": "Tax year to scope the counts."
          }
        },
        "description": "Query parameters for GET /api/v1/tax-delinquencies/counts"
      },
      "DelinquencyFreshness": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number"
          },
          "latest_tax_year": {
            "type": [
              "number",
              "null"
            ]
          },
          "last_ingested_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "last_source_success_at": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "total",
          "latest_tax_year",
          "last_ingested_at",
          "last_source_success_at"
        ]
      },
      "DelinquencyHit": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "county_slug": {
            "type": "string"
          },
          "county_parcel_id": {
            "type": "string"
          },
          "tax_year": {
            "type": [
              "integer",
              "null"
            ]
          },
          "status": {
            "type": [
              "string",
              "null"
            ]
          },
          "delinquent_amount": {
            "type": [
              "number",
              "null"
            ]
          },
          "total_due": {
            "type": [
              "number",
              "null"
            ]
          },
          "certificate_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "certificate_sale_date": {
            "type": [
              "string",
              "null"
            ]
          },
          "owner_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "site_address_full": {
            "type": [
              "string",
              "null"
            ]
          },
          "source_vendor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "county_slug",
          "county_parcel_id",
          "tax_year",
          "status",
          "delinquent_amount",
          "total_due",
          "certificate_number",
          "certificate_sale_date",
          "owner_name",
          "site_address_full",
          "source_vendor"
        ]
      },
      "DelinquencySearchInput": {
        "type": "object",
        "properties": {
          "county": {
            "oneOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                }
              }
            ]
          },
          "tax_year": {
            "type": "integer"
          },
          "status": {
            "type": "string",
            "maxLength": 40
          },
          "min_due": {
            "type": "number"
          },
          "max_due": {
            "type": "number"
          },
          "parcel_id": {
            "type": "string",
            "maxLength": 100
          },
          "owner": {
            "type": "string",
            "maxLength": 200
          },
          "vendor": {
            "type": "string",
            "maxLength": 80
          },
          "certificate_number": {
            "type": "string",
            "maxLength": 80
          },
          "sort": {
            "type": "string",
            "enum": [
              "due_desc",
              "due_asc",
              "year_newest"
            ]
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500,
            "default": 25
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [
          "limit",
          "offset"
        ],
        "description": "Query parameters for GET /api/v1/delinquencies/search"
      },
      "DelinquencySearchResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DelinquencyHit"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ]
      },
      "DelinquencySource": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "countyId": {
            "type": [
              "string",
              "null"
            ]
          },
          "countySlug": {
            "type": "string"
          },
          "taxYear": {
            "type": [
              "integer",
              "null"
            ]
          },
          "vendor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Certificate-sale vendor, e.g. \"LienHub\", \"RealAuction\"."
          },
          "saleUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "downloadUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "sourceKind": {
            "type": [
              "string",
              "null"
            ],
            "description": "Feed kind, e.g. \"csv\", \"portal\", \"api\"."
          },
          "requiresLogin": {
            "type": "boolean"
          },
          "lastCheckedAt": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISO-8601 UTC timestamp of last check."
          },
          "lastSuccessAt": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISO-8601 UTC timestamp of last successful pull."
          },
          "lastError": {
            "type": [
              "string",
              "null"
            ]
          },
          "active": {
            "type": "boolean"
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "raw": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {},
            "propertyNames": {
              "type": "string"
            },
            "description": "Raw source metadata."
          },
          "createdAt": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "countyId",
          "countySlug",
          "taxYear",
          "vendor",
          "saleUrl",
          "downloadUrl",
          "sourceKind",
          "requiresLogin",
          "lastCheckedAt",
          "lastSuccessAt",
          "lastError",
          "active",
          "notes",
          "raw",
          "createdAt",
          "updatedAt"
        ]
      },
      "DelinquencySourceList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DelinquencySource"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ],
        "description": "List envelope of tax-delinquency feed sources (GET /api/v1/tax-delinquencies/sources).",
        "examples": [
          {
            "data": [
              {
                "id": "clr9src0001polk24",
                "countyId": "clr9county0001polk",
                "countySlug": "polk",
                "taxYear": 2024,
                "vendor": "RealAuction",
                "saleUrl": "https://polk.realtaxdeed.com",
                "downloadUrl": null,
                "sourceKind": "portal",
                "requiresLogin": true,
                "lastCheckedAt": "2026-06-20T05:00:00.000Z",
                "lastSuccessAt": "2026-06-20T05:00:00.000Z",
                "lastError": null,
                "active": true,
                "notes": null,
                "raw": null,
                "createdAt": "2026-01-12T18:03:11.000Z",
                "updatedAt": "2026-06-20T05:00:00.000Z"
              }
            ],
            "pagination": {
              "limit": 1,
              "offset": 0,
              "total": 1,
              "has_more": false
            },
            "meta": {
              "request_id": "req_9f2c1a7b6d4e"
            }
          }
        ]
      },
      "DelinquencySourceListInput": {
        "type": "object",
        "properties": {
          "county": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40,
            "description": "County slug filter."
          },
          "vendor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Vendor substring filter (case-insensitive)."
          },
          "source_kind": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40,
            "description": "Source kind filter, e.g. \"csv\", \"portal\"."
          },
          "active": {
            "type": "boolean",
            "description": "Filter by active flag."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500,
            "description": "Page size (default 100)."
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Row offset for pagination (default 0)."
          }
        },
        "description": "Query parameters for GET /api/v1/tax-delinquencies/sources"
      },
      "DelinquencyStatusCount": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Delinquency status bucket, e.g. \"open\", \"redeemed\", \"struck\"."
          },
          "count": {
            "type": "integer",
            "description": "Number of records in this status."
          }
        },
        "required": [
          "status",
          "count"
        ]
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string",
                "description": "Human-readable error message."
              },
              "request_id": {
                "type": "string",
                "description": "Correlation id; surface this when filing support tickets."
              },
              "details": {
                "type": "object",
                "additionalProperties": {},
                "propertyNames": {
                  "type": "string"
                },
                "description": "Optional structured details, e.g. Zod issues on a 400."
              }
            },
            "required": [
              "code",
              "message",
              "request_id"
            ]
          }
        },
        "required": [
          "error"
        ]
      },
      "multiSelect": {
        "oneOf": [
          {
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          },
          {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40
            }
          }
        ]
      },
      "PaginationMeta": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer"
          },
          "offset": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "has_more": {
            "type": "boolean"
          }
        },
        "required": [
          "limit",
          "offset",
          "total",
          "has_more"
        ]
      },
      "ParcelByParcelIdInput": {
        "type": "object",
        "properties": {
          "county": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40,
            "description": "County slug, e.g. \"polk\". Required."
          },
          "parcel_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "County-assigned parcel id; punctuation-insensitive. Required."
          }
        },
        "required": [
          "county",
          "parcel_id"
        ],
        "description": "Query parameters for GET /api/v1/parcels/by-parcel-id"
      },
      "ParcelFieldDescriptor": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Canonical FL DOR NAL field code."
          },
          "label": {
            "type": "string",
            "description": "Human-readable label."
          },
          "category": {
            "type": "string",
            "enum": [
              "identification",
              "owner",
              "location",
              "valuation",
              "land",
              "building",
              "sales",
              "legal",
              "exemptions",
              "other"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "string",
              "number",
              "integer",
              "date",
              "boolean"
            ]
          }
        },
        "required": [
          "code",
          "label",
          "category",
          "type"
        ]
      },
      "ParcelFieldDictionary": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/ParcelFieldDescriptor"
        }
      },
      "ParcelHit": {
        "type": "object",
        "properties": {
          "parcel_id": {
            "type": "string"
          },
          "county_slug": {
            "type": "string"
          },
          "county_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "owner_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "site_address_full": {
            "type": [
              "string",
              "null"
            ]
          },
          "site_street": {
            "type": [
              "string",
              "null"
            ]
          },
          "site_city": {
            "type": [
              "string",
              "null"
            ]
          },
          "site_state": {
            "type": [
              "string",
              "null"
            ]
          },
          "site_zip": {
            "type": [
              "string",
              "null"
            ]
          },
          "dor_use_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "property_use_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "land_use_description": {
            "type": [
              "string",
              "null"
            ]
          },
          "just_value": {
            "type": [
              "number",
              "null"
            ]
          },
          "assessed_value": {
            "type": [
              "number",
              "null"
            ]
          },
          "taxable_value": {
            "type": [
              "number",
              "null"
            ]
          },
          "year_built": {
            "type": [
              "integer",
              "null"
            ]
          },
          "last_sale_date": {
            "type": [
              "string",
              "null"
            ]
          },
          "last_sale_price": {
            "type": [
              "number",
              "null"
            ]
          },
          "centroid_lat": {
            "type": [
              "number",
              "null"
            ]
          },
          "centroid_lng": {
            "type": [
              "number",
              "null"
            ]
          },
          "fl_uid": {
            "type": [
              "string",
              "null"
            ]
          },
          "alternate_parcel_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "dor_parcel_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "strap": {
            "type": [
              "string",
              "null"
            ]
          },
          "folio": {
            "type": [
              "string",
              "null"
            ]
          },
          "account_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "owner_mailing_address_full": {
            "type": [
              "string",
              "null"
            ]
          },
          "owner_mailing_city": {
            "type": [
              "string",
              "null"
            ]
          },
          "owner_mailing_state": {
            "type": [
              "string",
              "null"
            ]
          },
          "owner_mailing_zip": {
            "type": [
              "string",
              "null"
            ]
          },
          "legal_description": {
            "type": [
              "string",
              "null"
            ]
          },
          "land_value": {
            "type": [
              "number",
              "null"
            ]
          },
          "building_value": {
            "type": [
              "number",
              "null"
            ]
          },
          "extra_feature_value": {
            "type": [
              "number",
              "null"
            ]
          },
          "market_value": {
            "type": [
              "number",
              "null"
            ]
          },
          "effective_year_built": {
            "type": [
              "integer",
              "null"
            ]
          },
          "living_area_sqft": {
            "type": [
              "integer",
              "null"
            ]
          },
          "building_area_sqft": {
            "type": [
              "integer",
              "null"
            ]
          },
          "land_sqft": {
            "type": [
              "number",
              "null"
            ]
          },
          "acreage": {
            "type": [
              "number",
              "null"
            ]
          },
          "last_sale_book": {
            "type": [
              "string",
              "null"
            ]
          },
          "last_sale_page": {
            "type": [
              "string",
              "null"
            ]
          },
          "source_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "source_year": {
            "type": [
              "integer",
              "null"
            ]
          },
          "redaction_status": {
            "type": [
              "string",
              "null"
            ]
          },
          "attributes": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {},
            "propertyNames": {
              "type": "string"
            },
            "description": "Complete FL DOR NAL raw record (all 120 fields)."
          },
          "geometry": {
            "type": [
              "string",
              "null"
            ],
            "description": "GeoJSON parcel polygon; detail reads only."
          }
        },
        "required": [
          "parcel_id",
          "county_slug",
          "county_name",
          "owner_name",
          "site_address_full",
          "site_street",
          "site_city",
          "site_state",
          "site_zip",
          "dor_use_code",
          "property_use_code",
          "land_use_description",
          "just_value",
          "assessed_value",
          "taxable_value",
          "year_built",
          "last_sale_date",
          "last_sale_price",
          "centroid_lat",
          "centroid_lng",
          "fl_uid",
          "alternate_parcel_id",
          "dor_parcel_id",
          "strap",
          "folio",
          "account_number",
          "owner_mailing_address_full",
          "owner_mailing_city",
          "owner_mailing_state",
          "owner_mailing_zip",
          "legal_description",
          "land_value",
          "building_value",
          "extra_feature_value",
          "market_value",
          "effective_year_built",
          "living_area_sqft",
          "building_area_sqft",
          "land_sqft",
          "acreage",
          "last_sale_book",
          "last_sale_page",
          "source_name",
          "source_year",
          "redaction_status",
          "attributes",
          "geometry"
        ]
      },
      "ParcelSearchInput": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "county": {
            "allOf": [
              {
                "$ref": "#/components/schemas/multiSelect"
              }
            ]
          },
          "use_code": {
            "allOf": [
              {
                "$ref": "#/components/schemas/multiSelect"
              }
            ]
          },
          "dor_use_code": {
            "allOf": [
              {
                "$ref": "#/components/schemas/multiSelect"
              }
            ]
          },
          "city": {
            "type": "string",
            "maxLength": 80
          },
          "zip": {
            "type": "string",
            "maxLength": 10
          },
          "just_value_min": {
            "type": "number"
          },
          "just_value_max": {
            "type": "number"
          },
          "assessed_min": {
            "type": "number"
          },
          "assessed_max": {
            "type": "number"
          },
          "sale_after": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dateString"
              }
            ]
          },
          "sale_before": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dateString"
              }
            ]
          },
          "sale_price_min": {
            "type": "number"
          },
          "sale_price_max": {
            "type": "number"
          },
          "sort": {
            "type": "string",
            "enum": [
              "relevance",
              "value_desc",
              "value_asc",
              "sale_newest"
            ]
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500,
            "default": 25
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          },
          "facets": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40
            }
          },
          "near": {
            "type": "string",
            "maxLength": 64
          },
          "radius_m": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "bbox": {
            "type": "string",
            "maxLength": 128
          },
          "point": {
            "type": "string",
            "maxLength": 64
          }
        },
        "required": [
          "limit",
          "offset"
        ],
        "description": "Query parameters for GET /api/v1/parcels/search"
      },
      "ParcelSearchResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParcelHit"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ]
      },
      "ResponseMeta": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "request_id"
        ]
      },
      "SaleHit": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "county_slug": {
            "type": "string"
          },
          "county_parcel_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "sale_date": {
            "type": [
              "string",
              "null"
            ]
          },
          "sale_price": {
            "type": [
              "number",
              "null"
            ]
          },
          "book": {
            "type": [
              "string",
              "null"
            ]
          },
          "page": {
            "type": [
              "string",
              "null"
            ]
          },
          "instrument_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "deed_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "qualification_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "grantor": {
            "type": [
              "string",
              "null"
            ]
          },
          "grantee": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "county_slug",
          "county_parcel_id",
          "sale_date",
          "sale_price",
          "book",
          "page",
          "instrument_number",
          "deed_code",
          "qualification_code",
          "grantor",
          "grantee"
        ]
      },
      "SaleSearchInput": {
        "type": "object",
        "properties": {
          "county": {
            "oneOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                }
              }
            ]
          },
          "from": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dateString"
              }
            ]
          },
          "to": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dateString"
              }
            ]
          },
          "min_price": {
            "type": "number"
          },
          "max_price": {
            "type": "number"
          },
          "use_code": {
            "oneOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                }
              }
            ]
          },
          "sort": {
            "type": "string",
            "enum": [
              "date_newest",
              "date_oldest",
              "price_desc",
              "price_asc"
            ]
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500,
            "default": 25
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          }
        },
        "required": [
          "limit",
          "offset"
        ],
        "description": "Query parameters for GET /api/v1/sales/search"
      },
      "SaleSearchResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SaleHit"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        },
        "required": [
          "data",
          "pagination",
          "meta"
        ]
      }
    },
    "responses": {}
  },
  "paths": {
    "/account/usage": {
      "get": {
        "operationId": "get-account-usage",
        "summary": "Current monthly usage",
        "description": "Current API key's monthly usage — events_count, monthly_quota,",
        "tags": [
          "Account"
        ],
        "parameters": [],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Current month usage envelope with monthly quota, percent used, plan tier, and the UTC reset date.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountUsageResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/counties": {
      "get": {
        "operationId": "get-counties",
        "summary": "List counties",
        "description": "All counties covered by the dataset, alphabetical by name. Each row carries the county slug and display name plus any modeled coverage metadata.",
        "tags": [
          "Counties"
        ],
        "parameters": [],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Object envelope whose `data` is the array of county rows.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CountyList"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/counties/{county}": {
      "get": {
        "operationId": "get-counties-{county}",
        "summary": "Get county by slug",
        "description": "Full record for a single county by its slug (e.g. \"polk\").",
        "tags": [
          "Counties"
        ],
        "parameters": [
          {
            "name": "county",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "example",
            "description": "Path parameter: county"
          }
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Single county record.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/County"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "County not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/parcels/{id}": {
      "get": {
        "operationId": "get-parcels-{id}",
        "summary": "Get parcel by id",
        "description": "Full detail for a single parcel by its internal id. Includes the parcel polygon as GeoJSON, owner, site address, value, and last-sale fields.",
        "tags": [
          "Parcels"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 123,
            "description": "Path parameter: id"
          }
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Full parcel record including GeoJSON geometry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParcelHit"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Parcel not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/parcels/by-parcel-id": {
      "get": {
        "operationId": "get-parcels-by-parcel-id",
        "summary": "Get parcel by county + parcel id",
        "description": "Look up a single parcel by its natural key — county slug plus the county-assigned parcel_id. Punctuation-insensitive: \"12-34-56\" matches \"123456\".",
        "tags": [
          "Parcels"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "county",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40,
              "description": "County slug, e.g. \"polk\". Required."
            },
            "description": "County slug, e.g. \"polk\". Required."
          },
          {
            "in": "query",
            "name": "parcel_id",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100,
              "description": "County-assigned parcel id; punctuation-insensitive. Required."
            },
            "description": "County-assigned parcel id; punctuation-insensitive. Required."
          }
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Full parcel record including GeoJSON geometry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParcelHit"
                }
              }
            }
          },
          "400": {
            "description": "Missing county or parcel_id query parameter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Parcel not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/parcels/fields": {
      "get": {
        "operationId": "get-parcels-fields",
        "summary": "List parcel field dictionary",
        "description": "Returns the complete FL DOR NAL (Name-Address-Legal) field dictionary — every field that may appear in a parcel's `attributes` (raw assessment-roll record), with a canonical code, human-readable label, category, and value type. Use it to discover everything available and choose the fields you want to consume.",
        "tags": [
          "Parcels"
        ],
        "parameters": [],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Array of field descriptors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParcelFieldDictionary"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/parcels/search": {
      "get": {
        "operationId": "get-parcels-search",
        "summary": "Search parcels",
        "description": "Search Florida property parcels by owner name or site address (fuzzy), county, DOR use code, city/zip, just/assessed-value ranges, last-sale date/price ranges, and PostGIS spatial predicates (near+radius_m, bbox, point-in-polygon). Multi-select supported on county + use_code. Returns optional facet counts.",
        "tags": [
          "Parcels"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "in": "query",
            "name": "county",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/multiSelect"
                }
              ]
            }
          },
          {
            "in": "query",
            "name": "use_code",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/multiSelect"
                }
              ]
            }
          },
          {
            "in": "query",
            "name": "dor_use_code",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/multiSelect"
                }
              ]
            }
          },
          {
            "in": "query",
            "name": "city",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80
            }
          },
          {
            "in": "query",
            "name": "zip",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 10
            }
          },
          {
            "in": "query",
            "name": "just_value_min",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "just_value_max",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "assessed_min",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "assessed_max",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "sale_after",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/dateString"
                }
              ]
            }
          },
          {
            "in": "query",
            "name": "sale_before",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/dateString"
                }
              ]
            }
          },
          {
            "in": "query",
            "name": "sale_price_min",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "sale_price_max",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "relevance",
                "value_desc",
                "value_asc",
                "sale_newest"
              ]
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 25
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "in": "query",
            "name": "facets",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              }
            }
          },
          {
            "in": "query",
            "name": "near",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64
            }
          },
          {
            "in": "query",
            "name": "radius_m",
            "required": false,
            "schema": {
              "type": "number",
              "exclusiveMinimum": 0
            }
          },
          {
            "in": "query",
            "name": "bbox",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 128
            }
          },
          {
            "in": "query",
            "name": "point",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64
            }
          }
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "List envelope of ParcelHit rows with pagination.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParcelSearchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/parcels/{id}/sales": {
      "get": {
        "operationId": "get-parcels-{id}-sales",
        "summary": "List sales for a parcel",
        "description": "All recorded deed/sale events for a single parcel (by internal id), newest first. Returns an empty list when the parcel has no sale history.",
        "tags": [
          "Parcels"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 123,
            "description": "Path parameter: id"
          }
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "List envelope of SaleHit rows.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaleSearchResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/sales/search": {
      "get": {
        "operationId": "get-sales-search",
        "summary": "Search sales",
        "description": "Search recorded property sales by county, sale-date range (from/to), price range, and DOR use code (joined back to the parcel). Multi-select supported on county + use_code.",
        "tags": [
          "Sales"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "county",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  }
                }
              ]
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/dateString"
                }
              ]
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/dateString"
                }
              ]
            }
          },
          {
            "in": "query",
            "name": "min_price",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "max_price",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "use_code",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  }
                }
              ]
            }
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "date_newest",
                "date_oldest",
                "price_desc",
                "price_asc"
              ]
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 25
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "List envelope of SaleHit rows with pagination.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaleSearchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/sample/counties": {
      "get": {
        "operationId": "get-sample-counties",
        "summary": "List counties (sample, no auth)",
        "description": "Open, no-key preview of the counties endpoint. Returns the distinct counties present in the sample dataset. Demo data only.",
        "tags": [
          "Sample"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Object envelope whose `data` is the array of sample county rows.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CountyList"
                }
              }
            }
          }
        }
      }
    },
    "/sample/parcels/{id}": {
      "get": {
        "operationId": "get-sample-parcels-{id}",
        "summary": "Get parcel by id (sample, no auth)",
        "description": "Open, no-key preview of the parcel-detail endpoint. Returns a single sample parcel including a GeoJSON polygon. Demo data only.",
        "tags": [
          "Sample"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number"
            },
            "example": 123,
            "description": "Path parameter: id"
          }
        ],
        "responses": {
          "200": {
            "description": "Full sample parcel including GeoJSON geometry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParcelHit"
                }
              }
            }
          },
          "404": {
            "description": "Sample parcel id not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/sample/parcels/search": {
      "get": {
        "operationId": "get-sample-parcels-search",
        "summary": "Search parcels (sample, no auth)",
        "description": "Open, no-key preview of the parcel-search endpoint. Returns hand-curated Florida sample parcels in the same envelope as the paid /parcels/search. Any query (including unknown terms) returns 200 — never an empty error. Demo data only; `meta.dataset_status` is \"sample\".",
        "tags": [
          "Sample"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "List envelope of sample ParcelHit rows.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParcelSearchResponse"
                }
              }
            }
          }
        }
      }
    },
    "/sample/tax-delinquencies/search": {
      "get": {
        "operationId": "get-sample-tax-delinquencies-search",
        "summary": "Search tax delinquencies (sample, no auth)",
        "description": "Open, no-key preview of the delinquency-search endpoint. Returns hand-curated delinquent-tax / certificate sample rows in the same envelope as the paid endpoint. Demo data only.",
        "tags": [
          "Sample"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "List envelope of sample delinquency rows.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DelinquencySearchResponse"
                }
              }
            }
          }
        }
      }
    },
    "/tax-delinquencies/by-parcel": {
      "get": {
        "operationId": "get-tax-delinquencies-by-parcel",
        "summary": "List tax delinquencies for a parcel",
        "description": "All delinquent-tax / certificate records for a single county parcel id. Returns an empty list (not 404/500) when the county has no delinquency feed or the parcel is current on taxes.",
        "tags": [
          "Tax-delinquencies",
          "Tax Delinquencies"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "parcel_id",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100,
              "description": "County-assigned parcel id (punctuation-insensitive). Required."
            },
            "description": "County-assigned parcel id (punctuation-insensitive). Required."
          },
          {
            "in": "query",
            "name": "county",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40,
              "description": "County slug to scope the lookup."
            },
            "description": "County slug to scope the lookup."
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "description": "Page size (default 25)."
            },
            "description": "Page size (default 25)."
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "description": "Row offset for pagination (default 0)."
            },
            "description": "Row offset for pagination (default 0)."
          }
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "List envelope of DelinquencyHit rows.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DelinquencySearchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Missing parcel_id query parameter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/tax-delinquencies/counts": {
      "get": {
        "operationId": "get-tax-delinquencies-counts",
        "summary": "Tax-delinquency counts by status",
        "description": "Grouped record counts by delinquency status, optionally scoped to a county slug and/or tax year.",
        "tags": [
          "Tax-delinquencies",
          "Tax Delinquencies"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "county",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40,
              "description": "County slug to scope the counts."
            },
            "description": "County slug to scope the counts."
          },
          {
            "in": "query",
            "name": "tax_year",
            "required": false,
            "schema": {
              "type": "integer",
              "description": "Tax year to scope the counts."
            },
            "description": "Tax year to scope the counts."
          }
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Object with the applied scope and an array of { status, count } buckets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DelinquencyCounts"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/tax-delinquencies/freshness": {
      "get": {
        "operationId": "get-tax-delinquencies-freshness",
        "summary": "Tax-delinquency dataset freshness",
        "description": "Snapshot of delinquency-dataset freshness — total record count, latest tax year, last ingest timestamp, and last successful source pull.",
        "tags": [
          "Tax-delinquencies",
          "Tax Delinquencies"
        ],
        "parameters": [],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Object with total, latest_tax_year, last_ingested_at, last_source_success_at.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DelinquencyFreshness"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/tax-delinquencies/search": {
      "get": {
        "operationId": "get-tax-delinquencies-search",
        "summary": "Search tax delinquencies",
        "description": "Search delinquent-tax / tax-certificate records by county, tax year, status, amount-due range, parcel id, owner name (fuzzy), source vendor, or certificate number. Multi-select supported on county.",
        "tags": [
          "Tax-delinquencies",
          "Tax Delinquencies"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "county",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  }
                }
              ]
            }
          },
          {
            "in": "query",
            "name": "tax_year",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 40
            }
          },
          {
            "in": "query",
            "name": "min_due",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "max_due",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "parcel_id",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "in": "query",
            "name": "owner",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "in": "query",
            "name": "vendor",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80
            }
          },
          {
            "in": "query",
            "name": "certificate_number",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80
            }
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "due_desc",
                "due_asc",
                "year_newest"
              ]
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 25
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "List envelope of DelinquencyHit rows with pagination.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DelinquencySearchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/tax-delinquencies/sources": {
      "get": {
        "operationId": "get-tax-delinquencies-sources",
        "summary": "List tax-delinquency sources",
        "description": "List the delinquent-tax feed sources (per county / tax year), optionally filtered by county, vendor, source kind, or active flag.",
        "tags": [
          "Tax-delinquencies",
          "Tax Delinquencies"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "county",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40,
              "description": "County slug filter."
            },
            "description": "County slug filter."
          },
          {
            "in": "query",
            "name": "vendor",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "description": "Vendor substring filter (case-insensitive)."
            },
            "description": "Vendor substring filter (case-insensitive)."
          },
          {
            "in": "query",
            "name": "source_kind",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40,
              "description": "Source kind filter, e.g. \"csv\", \"portal\"."
            },
            "description": "Source kind filter, e.g. \"csv\", \"portal\"."
          },
          {
            "in": "query",
            "name": "active",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Filter by active flag."
            },
            "description": "Filter by active flag."
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "description": "Page size (default 100)."
            },
            "description": "Page size (default 100)."
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "description": "Row offset for pagination (default 0)."
            },
            "description": "Row offset for pagination (default 0)."
          }
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "List envelope of tax-delinquency source rows.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DelinquencySourceList"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/tax-delinquencies/sources/{county}": {
      "get": {
        "operationId": "get-tax-delinquencies-sources-{county}",
        "summary": "List tax-delinquency sources for a county",
        "description": "All delinquent-tax feed sources configured for a single county slug, newest tax year first. Returns an empty list when none are configured.",
        "tags": [
          "Tax-delinquencies",
          "Tax Delinquencies"
        ],
        "parameters": [
          {
            "name": "county",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "example",
            "description": "Path parameter: county"
          }
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "List envelope of tax-delinquency source rows.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DelinquencySourceList"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or monthly quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "Account"
    },
    {
      "name": "Counties"
    },
    {
      "name": "Parcels"
    },
    {
      "name": "Sales"
    },
    {
      "name": "Sample"
    },
    {
      "name": "Tax-delinquencies"
    }
  ]
}
