---
title: "Widget Property Lookup"
method: GET
path: "/api/v1/widget/property"
tags: ["widget"]
---

# Widget Property Lookup

`GET /api/v1/widget/property`

## Request

- Base URL: `https://api.casaintelligence.com.au` (the document declares no server; this is the origin it was published from)
- URL: `https://api.casaintelligence.com.au/api/v1/widget/property`
- Auth: API key in header `X-API-Key`

Property intelligence for Chrome Extension and widgets.

Accepts address (required) plus optional lat/lng for reliable spatial lookup.
`?v=3` additionally attaches the `intelligence_v3` block (scenario ladder,
measured yield, planner's take — SPEC-EXTENSION-V3.md §4); without it the
response keeps the pre-v3 shape so the published extension keeps working.

Resolution strategy:
1. Try DB cache (fast path, <50ms)
2. Try DB live queries (address match → prefix → street → spatial)
3. Geocode address → fetch from public QLD APIs (never 404 for valid SEQ address)

When the database is unavailable, skips straight to public API fallback.

## Query parameters

- `address` string, required: Property street address
- `lat` number, nullable: Latitude (for spatial lookup)
- `lng` number, nullable: Longitude (for spatial lookup)
- `v` integer, nullable: Response version — 3 adds intelligence_v3
- `land_area` number, nullable: Listing's stated land size in m² (from the REA/Domain page). Used ONLY to disclose a multi-lot holding when it materially exceeds the resolved title area; never affects the resolved parcel.

## Response `200`

Successful Response

- WidgetPropertyResponse: Slim response optimized for the Developer Window widget. Contains only the data needed to render the widget panel. Sub-200ms target response time via pre-computed materialized view.
  - `property_id` string, required
  - `address` string, nullable
  - `suburb` string, nullable
  - `lga` string, required
  - `development_score` integer
  - `score_label` string
  - `score_tier` string, nullable
  - `tier_color` string, nullable
  - `score_breakdown` object, nullable
  - `zone_code` string, nullable
  - `zone_name` string, nullable
  - `allows_subdivision` boolean, nullable
  - `area_m2` number, nullable
  - `min_lot_area_m2` number, nullable
  - `overlay_count` integer
  - `overlay_severity` string
  - `overlays` WidgetOverlay[]
    - `category` string, required
    - `severity` string
  - `nearby_da_count` integer
  - `nearby_decided` integer
  - `nearby_approved` integer
  - `nearby_approval_rate` number, nullable
  - `avg_days_to_decision` integer, nullable
  - `top_comparables` WidgetComparableDA[]
    - `da_id` string, nullable
    - `address` string, nullable
    - `decision` string, nullable
    - `lots_proposed` integer, nullable
    - `days_to_decision` integer, nullable
    - `distance_m` integer, nullable
    - `application_type` string, nullable
    - `description` string, nullable
  - `report_url` string, nullable
  - `holding` HoldingBlock: Partial-holding disclosure — the listing spans more than the one title we resolved. Never fabricated: only present when a trustworthy listing land size is materially larger than the resolved parcel.
    - `is_partial_holding` boolean
    - `resolved_area_m2` number, required
    - `listing_area_m2` number, required
    - `ratio` number, required
    - `note` string, required
  - `data_freshness` string, date-time, nullable

## Other responses

- `404`: Not Found
- `422`: Validation Error

---

[API](https://skmtc.dev/casaintelligence/apis/casa-intelligence-engine.md) · [All operations](https://skmtc.dev/casaintelligence/apis/casa-intelligence-engine/llms.txt) · [OpenAPI document](https://skmtc.dev/casaintelligence/apis/casa-intelligence-engine/revisions/71d711039de0?raw)
