Insitive · Developer portal
api.insitive.com.au API key, scopes, and usage.Try it liveNo signup
Fire a real API call right now with a preloaded demo key — no account needed. Type any Australian address (or keep the default), pick an endpoint and hit Run. Every response is live, using the same shape you get with your own key. The demo key is read-only and capped at a few free lookups per day.
Your API key
Paste your key — it stays in this browser and is sent only to api.insitive.com.au.
Stable property identifiers
Every property dataset shares one identifier contract: the G-NAF address PID
(gnaf_pid, e.g. GAVIC421234567) and the cadastral parcel
identifier (parcel_pfi) scoped by state. Resolve them once via
/v1/property/resolve, /api/cadastre/by-address or
/api/cadastre/lookup, then reuse them across datasets — point-based
endpoints (risk, demographics, development applications) also accept
?pfi=&state= in place of lat/lng and echo the resolved
identifiers back in an optional property block.
Identifiers are stable across releases; coordinates are not — store
gnaf_pid / parcel_pfi+state as your keys.
Property graph & risk summary
GET /v1/property/graph resolves a property once and fans out to every
data layer — cadastre, planning, hazards, development applications,
demographics, market trends, building footprints, easements, roads and land
values — in a single response. Each layer carries its own
status (ok / no_data /
not_covered / skipped / error), so a gap or
outage in one layer never fails the whole call. Per-layer access follows your
key’s scopes: request the graph with property-graph.read and it
includes exactly the layers you’re entitled to.
GET /v1/risk-summary (scope risk.summary.read) combines
flood, bushfire (BAL) and contamination into one read, with severity, coverage and
freshness per hazard — coverage flags distinguish “clear” from
“not yet mapped” so a blank is never mistaken for a green light.
Both accept ?pfi=&state= or ?gnaf_pid= in place of
lat/lng, and every layer ships source attribution and open-data licence
in the body plus the X-Insitive-Attribution and
X-Insitive-License response headers — so you can always cite where
a number came from.
Suburb analytics
GET /v1/suburb-analytics/bundle?state=&suburb= (scope
suburb-analytics.read) returns the precomputed intelligence bundle for
one suburb — median sale prices and 1/3/5-year growth, median weekly rents and
gross yields, rental-bond volume trend, building approvals and supply pipeline,
development-application activity, Census 2021 demographics, amenity counts,
livability score and hazard-overlay land shares.
Prefer path-style reads? The same data is served (same
suburb-analytics.read scope) as a per-state listing and a
per-suburb bundle — for example
GET /v1/suburb-analytics/VIC lists every computed suburb in
Victoria (paged via ?limit=&offset=), and
GET /v1/suburb-analytics/VIC/richmond returns Richmond’s full
bundle (suburb names are case-insensitive; URL-encode spaces, e.g.
/v1/suburb-analytics/VIC/box%20hill%20north).
GET /v1/suburb-analytics/timeseries?state=&suburb=&metric= serves
the full series behind each headline number — prices,
rents, approvals or bonds — and
GET /v1/suburb-analytics/screen screens suburbs across a state with
numeric range filters (<metric>_min /
<metric>_max, e.g.
gross_yield_house_pct_min=4&median_house_price_max=900000), ordered
and paged up to 100 rows.
Licensed market metrics (vacancy rate, days on market, stock on market, sales
volume, buyer demand) are served as an explicit licensed_metrics block
of { value, status } pairs — not_yet_available until
a licensed feed switches on, so your integration’s contract never changes.
Every response carries source attribution in the body and headers.
Walkable catchment
GET /v1/catchment/walking?lat=&lng=&minutes= (scope
catchment.read) computes the true walkable area within
5, 10 or 15 minutes of a point by
traversing Insitive’s self-hosted road-centreline network — a real
network isochrone, not a straight-line radius. The response carries the
catchment polygon (GeoJSON) plus every amenity inside it (schools, childcare,
transport, retail, recreation, cafes, hospitals) with its network walking
distance and time.
Where road data is sparse or missing the result degrades to a straight-line
buffer flagged approximate: true with a reason — never a hard
failure for coverage reasons. An optional state= hint overrides
coordinate-based state detection. Every response carries source attribution
(state road centrelines CC BY; OpenStreetMap amenities ODbL) in the body
and headers.
Land supply (land for sale)
GET /v1/land-supply/estates/nearby?lat=&lng=&radius_km= and
GET /v1/land-supply/lots/nearby?lat=&lng=&radius_km=&available=1
(scope land-supply.read) return the active land estates and the
individual lots for sale around a point from Insitive’s weekly national
new-land mirror — asking prices, lot dimensions (area, frontage, depth),
title status, sales status, geocoded locations and the parent estate with its
developer and per-estate active/available lot rollups. Each lot also carries
aspect — the standardised FRONT→REAR compass direction
of the lot (16-point code; "N" = rear yard faces north) —
with aspect_source provenance (geometry,
plan-compass or text-flip); both are
null when no tier could derive it. The same attributes, including
aspect/aspect_source, ride on every feature of the
lot vector tiles at
GET /api/land-supply/lots/tiles/{z}/{x}/{y}.
GET /v1/land-supply/suburb/{state}/{suburb}?weeks= returns the
weekly land-market series for a suburb — active/available lots (supply),
lots first seen (new supply), lots sold or delisted (consumption) and the
median asking price — plus the state-grain series for context and the
estates currently selling there. Every response carries the listing-data
attribution in the body and headers.
The same weekly series is served at every grain:
GET /v1/land-supply/estate/{estateId}?weeks= for one estate
(with the estate identity and live lot rollups),
GET /v1/land-supply/state/{state}?weeks= for a whole state,
and GET /v1/land-supply/states for the national overview
— the latest week’s rollup for every covered state in one call.
Market intelligence (product bundle)
Market Intelligence packages Insitive’s market-data layers as one coherent product — it is a scope bundle, not a separate endpoint family. A key provisioned for Market Intelligence carries five scopes and unlocks four surfaces that share identifiers (state + suburb, LGA codes, coordinates) so they compose cleanly:
Suburb analytics (suburb-analytics.read) —
the per-suburb intelligence bundle, per-metric time series and cross-state
screening under /v1/suburb-analytics/*.
Suburb trends (locality.suburb) — quarterly
median price/rent series and related market reads under
/api/suburb-trends/*.
Land supply (land-supply.read) — land-for-sale
estates/lots near a point plus weekly supply series at estate, suburb,
state and national grain under /v1/land-supply/*.
Development applications
(development-applications.read +
development-applications.feed.read) — DA lookups and
statistics near a point or by LGA, and the incremental change feed for
syncing DA activity into your own store.
Typical composition: screen suburbs with
/v1/suburb-analytics/screen, pull each shortlisted suburb’s
bundle + price/rent series, overlay weekly land-supply and DA activity for
the same suburb, then poll the DA feed for changes. All five scopes are
included in the Growth tier; each response carries per-source attribution
you must reproduce when redistributing.
Planning provisions, envelope by address & DA feed
GET /v1/planning-provisions?lat=&lng= (scope
planning.provisions.read) returns the structured planning-schedule
rules that apply at a point — front/side/rear setbacks, site coverage,
height and storey limits, wall-on-boundary allowances — with full
provenance (regulation reference, per-boundary applied rules) and an explicit
conservative_fallback flag so you always know whether a number is a
published control or a conservative default. Also accepts
?state=&pfi=, plus optional lot characteristics
(lot_area_m2, frontage_m, …) for
parametric schedules.
GET /v1/envelope-by-address?address= (scope
envelope.by-address.read) is the one-call pipeline: free-form
address → G-NAF point → cadastral parcel → full building
envelope. The response reports each stage’s provenance, and failures are
per-stage — a distinct status code plus stage and
retryable fields tell you exactly where resolution stopped
(unmatched address, no parcel, upstream cadastre outage, envelope formula gap).
GET /v1/development-applications/feed?lga_code= or
?bbox=minLng,minLat,maxLng,maxLat (span ≤ 2°, scope
development-applications.feed.read) is a polling change feed of
development applications — filter with updated_since and page
with the opaque keyset cursor (up to 200 rows per page) instead of
re-downloading whole regions. Every page carries per-state source credits you
must reproduce when redistributing records.
Data-layer add-ons
Any individual data layer can be added to a paid tier as a priced add-on. Each add-on maps 1:1 to a scope group on your key. Paste your live key above and buy directly — checkout is handled by Stripe and the scopes activate on your key as soon as payment completes (monthly prices in AUD, ex GST). Prefer an invoice? Contact support@insitive.com.au.
risk).
Per-property flood, bushfire (BAL) and contamination in one read — with severity and an explicit coverage flag per hazard, so "no overlay" is never mistaken for "not checked". Coverage: Statewide in VIC, NSW, WA and TAS; ACT and NT cover flood + bushfire (no contamination register). QLD is per-council (Brisbane, Gold Coast, Sunshine Coast, Moreton Bay, Logan, Ipswich, Toowoomba, Rockhampton, Townsville, Cairns, Mackay). SA is not yet covered. Uncovered areas return coverage: "not_covered" — never a clear result.
property-graph).
One call resolves a property and fans out to every data layer your key is scoped for — cadastre, planning, hazards, DAs, demographics, market trends, footprints, easements, roads, land values. Coverage: Per-layer coverage varies by state; each layer in the response carries its own status and coverage flag.
development-applications).
Development applications near a point or within an area, refreshed nightly from council and state portals, deduplicated per state. Coverage: Six of eight states live; QLD and WA coverage is partial (per-council sources).
locality).
Suburb-level market signal — median prices, median rents and trend series — plus proximity context (schools and amenities) for any address. Coverage: Median price and rent series currently cover VIC and NSW suburbs.
envelope).
Buildable-envelope computation from zoning, FSR, height and setback provisions — plus shadow analysis — for any residential lot. Coverage: Setback provisions are seeded per state; lots without a scheme-specific rule fall back to a clearly flagged conservative default.
geocode, cadastre).
G-NAF address resolution and cadastral parcel lookup (boundary, lot/plan, area) across all eight states and territories — the identifier backbone for every other layer.
Identity
Rate limit (current minute)
Embed map
Drop an interactive Insitive map into your own site. Embed loads are
metered against your basemap.read usage. Requires a
platform-tier key.
Webhooks
Register https:// endpoints to receive signed event
callbacks. The signing secret is shown once when you
create or rotate an endpoint — store it to verify the
X-Insitive-Signature header.
| Endpoint | Events | Status | Last delivery | |
|---|---|---|---|---|
| Loading… | ||||
| Event | Attempt | Status | HTTP | When |
|---|
Rotate key
Issue a fresh secret. Scopes, rate limit, monthly quota, embed allow-list, audit-retention settings and webhook subscriptions all carry over. The old secret stops working immediately, so update your integrations right away.
MCP server (AI agents)
Point any MCP-capable agent (Claude, OpenAI, LangChain, IDE agents) at the
hosted Model Context Protocol endpoint using your existing API key as the
bearer token. Tool calls run through the exact same scopes, rate limits,
quotas and metering as direct REST calls — a tool call bills identically
to calling the endpoint yourself. Protocol envelope traffic
(initialize, tools/list, ping) is free.
Endpoint: POST https://api.insitive.com.au/mcp Transport: streamable HTTP (stateless, JSON responses) Auth: Authorization: Bearer ins_live_… (or ins_test_…)
Example — Claude Code / MCP client config:
{
"mcpServers": {
"insitive": {
"type": "http",
"url": "https://api.insitive.com.au/mcp",
"headers": { "Authorization": "Bearer ins_live_YOUR_KEY" }
}
}
}
Twenty tools are exposed: thirteen read-only lookups (address resolution,
cadastre, planning zones, buildable envelope, hazards, development
applications, demographics, suburb trends, building footprints, easements,
roads), the heavier siting compute — siting_test_footprint_fit
(footprint-on-lot fit) and the async earthworks pair
siting_earthworks_submit / siting_earthworks_result
(submit returns a job id; the companion tool polls the DEM cut/fill result) —
plus the AI product line: ask_insitive_analyst (grounded
conversational Q&A with dataset citations) and the Enrich batch trio
enrich_submit_batch / enrich_approve_batch /
enrich_job_status.
Each tool requires the same scope as its underlying endpoint — a
403 tool error means your key is missing that scope. Tool schemas:
send tools/list, or see
/docs.
AI & Agentic data
Two AI products sit on top of the same keyed, metered API: the Insitive Analyst (grounded conversational Q&A) and Insitive Enrich (batch CSV address enrichment). Both are grounded via live tool calls into the governed data layers — no model is ever trained on the data, so answers stay fresh and licence-safe.
Analyst — scope ai-analyst.ask:
POST https://api.insitive.com.au/v1/ai-analyst/ask
Authorization: Bearer ins_live_…
Content-Type: application/json
{
"question": "What zone is this property in and what overlays apply?",
"context": { "lat": -37.8158, "lng": 144.9676 }
}
→ { "success": true, "answer": "…", "citations": [ { "dataset": "…" } ], "model": "…" }
context accepts lat/lng,
address, suburb and state. Every
factual claim is grounded in a tool call and the response lists the
datasets used. A GET variant with query params exists for
quick tests. Answers are AI-generated general information, not
professional advice.
Enrich — scopes enrich.submit + enrich.read · submit → approve → poll → download:
1. POST /v1/enrich/jobs { "csv": "<raw csv text>", "bundles": ["planning","hazards"] }
→ AI copilot proposes a column mapping + a normalized sample preview
2. POST /v1/enrich/jobs/{id}/approve (optionally override the proposed mapping)
→ the full batch run starts only after this explicit approval
3. GET /v1/enrich/jobs/{id} poll status + per-row progress
4. GET /v1/enrich/jobs/{id}/result download the enriched CSV
Rows are G-NAF-validated and geocoded, then the selected attribute bundles (parcel, planning, hazards, demographics, market) are appended per row. Limits: 2,000 rows / 2 MB per job; per-row metering applies. The AI-proposed mapping never auto-applies — a job cannot run without the approve step. Full schemas: /docs.
Insitive Livability Rating (ILR)
POST /v1/livability-rating (scope livability.rating.read)
computes the versioned Insitive Livability Rating (methodology
ilr-v2) — a NatHERS-style 0–10 star rating
in half-star steps — composing the 0–100 livability score
(solar/orientation) with a setback/living-to-open-space transition factor
and a floor-levels/topographic-response factor. Deterministic compute, no AI.
POST https://api.insitive.com.au/v1/livability-rating
Authorization: Bearer ins_live_…
Content-Type: application/json
{
"lotBearing": 12,
"drivewaySide": "left",
"rooms": [ { "roomName": "Living", "wallDirection": "N",
"visionWindowDirection": "N", "windowCount": 3 }, … ],
"latitude": -37.8158, "longitude": 144.9676, "state": "VIC",
"lot": { "type": "Feature", "geometry": { "type": "Polygon", … } },
"footprint": { "type": "Feature", "geometry": { "type": "Polygon", … } },
"setback": { "livingToPosSteps": 1, "posDepthM": 6 },
"design": { "frontEntryRisers": 2, "splitCount": 0 },
"elevation": { "source": "survey", "fallAcrossFootprintM": 0.4 }
}
→ { "success": true, "data": { "rating": { "stars": 8.5, "rating_type": "ILR", … }, "livability": … } }
ILR vs PILR — rating_type is
ILR (gold) when floor-level evidence comes from survey or LiDAR
(supplied via elevation), and PILR (silver,
preliminary) when evidence is contour-derived or absent. Evidence precedence
is survey > LiDAR > contours; contour evidence derives from the
multi-state contour mirror when state, lot and
footprint (WGS84 GeoJSON) are supplied.
Star bands — 0–10 stars in half-star steps.
Stars are withheld (stars: null, with
stars_withheld_reason) when only the base livability factor is
assessable; partially-assessed ratings are capped at 8 stars
(star_cap_applied). Unassessed factors renormalise out of the
composite — absence degrades confidence, it never
fabricates data.
Attribution — when floor-level evidence is
contour-derived, the response carries attribution /
license fields plus the X-Insitive-Attribution and
X-Insitive-License headers crediting the state contour source
(CC BY); pass the credit through to your end users. Survey/LiDAR and
no-evidence responses serve no third-party dataset, so no credit applies.
Full request schema: /docs.
Test request
Send an authenticated request with your key — pick a method, path and (optionally) a JSON body. Requests go to this origin only.