Insitive · Developer portal
api.insitive.com.au API key, scopes, and usage.Permitted use — lookup only
Your key is licensed for individual property lookups inside your own product or workflow, with a limited operational cache of the responses you looked up. Systematic enumeration or exhaustive retrieval of a dataset or geographic area, mirroring or warehousing our data, building a derived or competing dataset, and redistributing raw responses are not permitted. We monitor usage patterns for enumeration and may throttle, suspend or terminate access. Bulk or dataset-level access is available only under a separate written agreement — email admin@insitive.com.au. Full text: API Terms of Use.
Try it liveNo signup
Fire a real API call right now with a preloaded demo key — no account needed. Search any Australian address — start typing and pick from the suggestions, or keep the preloaded default — then choose 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; suggestions are free, only the request you run counts.
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, and what that is worth depends on the key: it turns the layer on if you do not hold the group, raises the per-layer cap if you hold it but your tier caps it below your overall quota, and otherwise only adds calls to that quota. Each row below says which of the three applies to the key you paste. 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; no GST is charged). Prefer an invoice? Contact support@insitive.com.au.
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.
envelope).
Buildable-envelope computation from zoning, FSR, height and setback provisions 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.
envelope, planning, siting).
The whole lot answer, not the layers underneath it — the buildable-envelope polygon, the setback, site-coverage and height provisions it was derived from with per-boundary provenance, footprint fit at a position and orientation, cut/fill earthworks, area fit search and a pre-lodgement compliance report with scheme citations. Coverage: Provisions are seeded per planning scheme; a lot with no scheme-specific rule is answered from a conservative default and flagged as an estimate, never presented as the scheme rule. Earthworks needs DEM coverage for the lot and is returned as an async job. Area fit search is bounded to 0.02° per axis per request.
pii).
Detect and redact sensitive personal information from caller-supplied content, with reversible anonymization support, through the metered API.
Identity
Rate limit (current minute)
Overage · this month
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. A rotated key carries the current API Terms of Use.
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.
Bulk property export
A CSV of every property in an area, one row per property, carrying the layers your key is already scoped for — planning zone and scheme provisions, the height/setback/site-coverage/min-lot rules that drive a buildable envelope, flood/bushfire/contamination, DA activity, easements, road frontage, land values, terrain and more. Metered in property exports per month, sold as the Bulk Export add-ons above.
Capability bulk_export on your key (default-deny) ·
submit → poll → download:
0. GET /v1/exports/layers the row contract: every layer, its columns, the scope it needs
1. POST /v1/exports { "selection": { "type": "suburb", "name": "Werribee", "state": "VIC" } }
selection also accepts { "type":"lga", "name", "state" } (QLD only),
{ "type":"area", "polygon": <GeoJSON Polygon> },
{ "type":"addresses", "addresses": [ "…" ] }
→ 202 { "jobId", "requestedRows", "layers", "layersOmittedForScope", "header" }
2. GET /v1/exports/{id} poll status + rows processed
3. GET /v1/exports/{id}/result download the CSV
4. GET /v1/exports/{id}/manifest per-layer attribution, licence and freshness
5. GET /v1/exports/usage rows used against your monthly allowance
Reading a row honestly. Every row carries stable
identifiers (gnaf_pid, address, locality, state, postcode,
latitude, longitude) so it joins against your own records. Every
requested layer carries a <layer>_status column:
ok (data present), no_feature (checked, and
the layer genuinely has nothing here — the ONLY status that means
“clear”), not_covered (the dataset does not
reach this land), unavailable (the source failed or timed
out for this row) and no_identifier (the layer needs an
identifier this row does not have). When a layer is not
ok, its data cells carry the status text rather than a
blank — a blank cell can be misread as a zero or an all-clear, and
it never appears.
Scopes decide what is IN the file. A layer your key is
not scoped for is absent from the CSV entirely — not an
empty column. Buying an export add-on grants no data scopes and can
never widen what your key reads. Three refusals stay distinguishable:
bulk_export_required (no export entitlement),
insufficient_scope (no readable layer in the request), and
bulk_export_allowance_exhausted (entitled, out of rows this
month — the body names the allowance, what is used and what is
left).
Limits: 25,000 properties per export and 5,000 addresses per uploaded list. A selection over the cap is refused, never silently truncated. One exported property row is one export whatever it resolves to, and exported rows are not also debited against your call quota. Not exportable at any price: Sales history and comparable sales, AVM / estimated value, Dwelling attributes (beds, baths, car spaces), On-market listings, Insitive Livability Rating — we do not hold redistribution rights and will not approximate them. Full schemas: /docs.
Insitive Livability Rating (ILR)
POST /v1/livability-rating (scope livability.rating.read)
computes the versioned Insitive Livability Rating (methodology
ilr-v2.2) — a 0–10 livability rating
in half-point 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.
Livability, not energy. NatHERS energy stars are a separate, regulated rating.
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.
Rating bands — 0–10 in half-point steps. The
rating is withheld (stars: null, with
stars_withheld_reason — the established wire keys, kept
unchanged) when only the base livability factor is
assessable; partially-assessed ratings are capped at 8.0
(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.