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_KEY

Rate limits & metering

  • · 120 requests/minute per token (token bucket). Excess returns 429.
  • · Per-address lookups (gnaf_pid and address) 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 402 before the query runs. Metered responses include a billed object with the remaining balance.

Endpoints

MethodPathAuthMeteredPurpose
POST/v1/resolvenoneResolve 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/mcptokenyesMCP 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=tokenyesFull record for one address by G-NAF id.
GET/v1/status?address=&postcode=tokenyesMatch a single free-text address, top 5.
GET/v1/status?suburb=&postcode=tokenAll on-market addresses in a suburb (≤500).
GET/v1/history?gnaf_pid=tokenAudit trail for one address — episodes + dated observations.
GET/v1/exports/suburb?suburb=&postcode=token · csvOne suburb’s on-market addresses, daily CSV (gzip).
GET/v1/exports/suburb?…&format=geojsontoken · csvThe same rows as GeoJSON, for QGIS / ArcGIS / Land iQ.
GET/v1/exports/latesttoken · csvNewest full-NSW on-market CSV (gzip).
GET/v1/suburbs?q=noneSuburb autocomplete (postcode + suburb).
GET/statusnoneCrawl health — 200 healthy, 503 stale/failed.
GET/public/statsnoneLive headline stats (on-market count, heating).
GET/confignonePublishable key, currency, rate, plans.
GET/healthznoneLiveness — { "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.geojson

Audit 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_pidstringG-NAF persistent identifier (stable primary key).
address_fullstringFull street address.
suburb / postcodestringSuburb (Title Case) and 4-digit postcode.
lat / lonnumberGDA2020 geocode (≈ WGS84).
on_marketbooleantrue if currently advertised for sale.
on_market_datestring | nullISO date the current on-market episode began.
lga_namestring | nullLocal government area.

Errors

401invalid or missing token — check the Authorization header.
402API credit exhausted — top up in the dashboard.
403plan has no CSV access, or suburb outside your plan scope.
429rate 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.