Florida Property API
Endpoints

Get Parcel by ID

Full detail for a single Florida parcel by its internal numeric id, including the GeoJSON parcel polygon.

GET /api/v1/parcels/{id}

Returns full detail for a single parcel by its internal numeric id (the platform's surrogate key, returned in search results indirectly via the parcel record). The detail read hydrates the geometry field with the parcel's GeoJSON polygon. To look a parcel up by its county-assigned parcel id instead, use Get Parcel by County + Parcel ID.

Authentication

All endpoints share the base URL https://api.floridapropertyapi.com/v1.

curl -H "X-API-Key: fpapi_test_..." \
  "https://api.floridapropertyapi.com/v1/parcels/482915"
// JavaScript (fetch)
const res = await fetch(
  "https://api.floridapropertyapi.com/v1/parcels/482915",
  { headers: { "X-API-Key": "fpapi_test_..." } },
);
const body = await res.json();
console.log(body.data);
# Python (requests)
import requests

res = requests.get(
    "https://api.floridapropertyapi.com/v1/parcels/482915",
    headers={"X-API-Key": "fpapi_test_..."},
)
res.raise_for_status()
print(res.json()["data"])

Path Parameters

NameTypeRequiredDescription
idintegeryesInternal numeric parcel id.
  • GET /api/v1/parcels/{id}/sales — the recorded sale/deed history for this parcel (same SaleHit shape as Search Sales).

Response (200)

Object envelope { data: ParcelHit, meta }. geometry is a GeoJSON Polygon string on the detail read.

{
  "data": {
    "parcel_id": "192829-5040-001000-0010",
    "county_slug": "hillsborough",
    "county_name": "Hillsborough",
    "owner_name": "SMITH JOHN A & MARY B",
    "site_address_full": "123 BAYSHORE BLVD",
    "site_city": "TAMPA",
    "site_state": "FL",
    "site_zip": "33606",
    "dor_use_code": "0100",
    "property_use_code": "01",
    "land_use_description": "SINGLE FAMILY",
    "just_value": 485000,
    "assessed_value": 412300,
    "taxable_value": 387300,
    "year_built": 1998,
    "last_sale_date": "2021-04-15",
    "last_sale_price": 460000,
    "centroid_lat": 27.9221,
    "centroid_lng": -82.4839,
    "geometry": "{\"type\":\"Polygon\",\"coordinates\":[[[-82.4842,27.9219],[-82.4836,27.9219],[-82.4836,27.9223],[-82.4842,27.9223],[-82.4842,27.9219]]]}"
  },
  "meta": { "request_id": "req_1234567890abcdef12345", "dataset_status": "live" }
}

Error Responses

StatusCodeCause
401unauthorizedMissing or invalid API key.
404not_foundNo parcel with that id.
429rate_limitedRate limit exceeded.
500internal_errorServer error — retry with backoff.

Data Coverage

Parcel-roll coverage is live statewide across all 67 Florida counties. Sales history is importing and tax-delinquency coverage is rolling out county by county.

Rate Limits

Every /api/v1/* response (including 429) carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers, plus the IETF RateLimit structured field. See Rate Limits for per-tier quotas and backoff guidance.

On this page