Developers ( 001 )
blipton API reference
blipton is headless property-data infrastructure: the listing
status of every NSW residential address, reachable as a REST API, a CSV, or an MCP server your AI agent can call directly. The dashboard is
just one client. Base URL https://www.blipton.com/api.
Every new account starts with A$2 of free credit — 100 calls,
no card required.
Authentication
Pass your key as a bearer token. Generate and rotate keys in your dashboard. Keys are secret — never ship them in client-side code or public repositories.
Authorization: Bearer YOUR_KEYRate limits & metering
- · 120 requests/minute per token (token bucket). Excess returns
429. - · Per-address lookups (
gnaf_pidandaddress) are metered at A$0.02 each (incl. GST), deducted from prepaid credit. The suburb sweep and CSV exports are not metered. - · Exhausted credit returns
402before the query runs. Metered responses include abilledobject with the remaining balance.
Endpoints
| Method | Path | Auth | Metered | Purpose |
|---|---|---|---|---|
| POST | /v1/resolve | none | — | Resolve a list of free-text addresses to G-NAF ids. Start here — every other endpoint keys off the id this returns. Add ?format=csv&fields=… to fill your OWN template (your columns kept, blipton columns appended). |
| POST | /mcp | token | yes | MCP server (JSON-RPC 2.0) — tools any AI agent can call: address_status, suburb_on_market, address_history, enrich_addresses. Same auth + metering as REST. |
| GET | /v1/status?gnaf_pid= | token | yes | Full record for one address by G-NAF id. |
| GET | /v1/status?address=&postcode= | token | yes | Match a single free-text address, top 5. |
| GET | /v1/status?suburb=&postcode= | token | — | All on-market addresses in a suburb (≤500). |
| GET | /v1/history?gnaf_pid= | token | — | Audit trail for one address — episodes + dated observations. |
| GET | /v1/exports/suburb?suburb=&postcode= | token · csv | — | One suburb’s on-market addresses, daily CSV (gzip). |
| GET | /v1/exports/suburb?…&format=geojson | token · csv | — | The same rows as GeoJSON, for QGIS / ArcGIS / Land iQ. |
| GET | /v1/exports/latest | token · csv | — | Newest full-NSW on-market CSV (gzip). |
| GET | /v1/suburbs?q= | none | — | Suburb autocomplete (postcode + suburb). |
| GET | /status | none | — | Crawl health — 200 healthy, 503 stale/failed. |
| GET | /public/stats | none | — | Live headline stats (on-market count, heating). |
| GET | /config | none | — | Publishable key, currency, rate, plans. |
| GET | /healthz | none | — | Liveness — { "ok": true }. |
Resolve addresses
Everything else on this page is keyed by gnaf_pid. This is how you get one.
Post free-text addresses — a holdings extract, a work-order export, a rates roll — and each row
comes back matched, flagged as ambiguous, or honestly unresolved. Duplicate rows are grouped by cluster. No key required: 100 rows
per request signed out, 5,000 with a session.
# No key required. Post a CSV, or {"rows":[…]} as JSON.
curl -X POST -H "Content-Type: text/csv" --data-binary @holdings.csv \
"https://www.blipton.com/api/v1/resolve"
# Fill YOUR template: keep your columns, append only the blipton columns you pick
curl -X POST -H "Content-Type: text/csv" --data-binary @holdings.csv \
"https://www.blipton.com/api/v1/resolve?format=csv&fields=currently_on_market,on_market_date,gnaf_pid,source,as_of" {
"results": [
{
"rid": "NSW-004182",
"input": "UNIT 5, 187-189 SPIT RD",
"gnaf_pid": null,
"confidence": 0,
"method": "none",
"flags": ["NO_MATCH"]
},
{
"rid": "WO-88213",
"input": "150/90 werombi rd grasmere 2570",
"gnaf_pid": "GANSW718280320",
"address": "150/90 Werombi Road",
"confidence": 0.97,
"method": "unit_exact",
"flags": ["MULTIPLE_GNAF_IDS_2", "DUPLICATE"],
"cluster": "C-0001",
"on_market": false
}
],
"summary": { "total": 2, "resolved": 1, "ambiguous": 0, "unresolved": 1,
"duplicateClusters": 1, "onMarket": 0, "truncated": false }
} A street number is never approximated — only the street name is allowed to be fuzzy. An address that doesn’t exist in the register stays unmatched rather than being attached to the nearest plausible neighbour.
Address status
Look up one address by its G-NAF id (metered), or fuzzy-match by address + postcode.
curl -H "Authorization: Bearer YOUR_KEY" \
"https://www.blipton.com/api/v1/status?gnaf_pid=GANSW705423559" {
"results": [
{
"gnaf_pid": "GANSW705423559",
"address_full": "187 Spit Road",
"suburb": "Mosman",
"postcode": "2088",
"lat": -33.82891, "lon": 151.24106,
"on_market": false,
"on_market_date": null,
"lga_name": "MOSMAN"
}
],
"billed": { "rate_aud": 0.02, "credit_remaining_aud": 1.98 }
} Suburb sweep
# All on-market addresses in a suburb (unmetered)
curl -H "Authorization: Bearer YOUR_KEY" \
"https://www.blipton.com/api/v1/status?suburb=Mosman&postcode=2088" CSV exports
Gzipped CSV of every address currently on the market —
everything else is omitted. Columns: address, suburb, postcode, on_market, on_market_date.
# Newest full-NSW CSV (gzip) — needs a CSV-enabled plan
curl -H "Authorization: Bearer YOUR_KEY" \
"https://www.blipton.com/api/v1/exports/latest" -o nsw.csv.gz GeoJSON for GIS
Add &format=geojson to the
suburb export to get the identical rows as an uncompressed application/geo+json point layer —
opens directly in QGIS, ArcGIS and Land iQ with no intermediate join or unzip step. Same
entitlement rules as the CSV.
# Same rows, same entitlement — uncompressed GeoJSON for GIS
curl -H "Authorization: Bearer YOUR_KEY" \
"https://www.blipton.com/api/v1/exports/suburb?suburb=Mosman&postcode=2088&format=geojson" -o mosman.geojsonAudit trail
/v1/history returns the evidence
behind an address’s current status: completed on→off episodes, up to 200 dated
observations with the matching method that produced each one, and the delisting rule itself
inline — so a status can be defended, not just quoted. Unmetered.
The observation log starts July 2026. An address whose last transition predates that has a
status and episodes but an empty observations array — the log is append-only and is never backfilled with reconstructed rows.
# Audit trail for one address (unmetered)
curl -H "Authorization: Bearer YOUR_KEY" \
"https://www.blipton.com/api/v1/history?gnaf_pid=GANSW705423559" {
"address": {
"gnaf_pid": "GANSW705423559",
"address": "187 Spit Road",
"suburb": "Mosman",
"postcode": "2088"
},
"current": {
"on_market": true,
"on_market_date": "2026-07-21",
"off_market_date": null,
"consecutive_days_unseen": 0
},
"episodes": [
{ "on_market_date": "2026-03-04", "off_market_date": "2026-05-02", "days": 59 }
],
"observations": [
{
"observed_at": "2026-07-21T14:02:11.884Z",
"event": "new",
"match_method": "exact_unit",
"source_listing_id": "2020317441",
"lastmod": "2026-07-21T09:41:00.000Z"
}
],
"method": {
"delisting_rule": "delisting is confirmed after 3 consecutive daily crawls without the listing (hysteresis)",
"billed": false
}
}MCP server — for AI agents
blipton speaks the Model Context Protocol, so Claude or any
agent can query NSW property data in natural language. POST JSON-RPC 2.0 to https://www.blipton.com/api/mcp. Four tools: address_status, suburb_on_market, address_history, enrich_addresses. Auth, rate
limits and metering are identical to the REST API — the same
token, the same A$0.02 on a matched, fresh lookup; a miss or a stale index costs nothing.
# MCP server — JSON-RPC 2.0. List the tools (no key needed):
curl -X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
"https://www.blipton.com/api/mcp"
# Call a tool (Bearer key required; address_status is metered like GET /v1/status):
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_KEY" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"address_status",
"arguments":{"address":"1/78 Hind Avenue","postcode":"2428"}}}' \
"https://www.blipton.com/api/mcp"Response fields
| gnaf_pid | string | G-NAF persistent identifier (stable primary key). |
| address_full | string | Full street address. |
| suburb / postcode | string | Suburb (Title Case) and 4-digit postcode. |
| lat / lon | number | GDA2020 geocode (≈ WGS84). |
| on_market | boolean | true if currently advertised for sale. |
| on_market_date | string | null | ISO date the current on-market episode began. |
| lga_name | string | null | Local government area. |
Errors
| 401 | invalid or missing token — check the Authorization header. |
| 402 | API credit exhausted — top up in the dashboard. |
| 403 | plan has no CSV access, or suburb outside your plan scope. |
| 429 | rate limited — 120 requests/minute per token. |
Errors return JSON { "error": "…" } with the status above.
Address data incorporates G-NAF © Geoscape Australia (Open G-NAF EULA). Full terms at /terms.