Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: DataQuoll Addresses API
description: 'DataQuoll turns fragmented Australian public data into answers about locations, events and assets.
Today''s datasets: real-time emergency incidents and warnings (bushfires, floods, storms, earthquakes, rescues, and more) in one GeoJSON schema with CAP-aligned severity, urgency, and certainty fields that carry only what each agency states; disaster declarations reported by LGA as declared-area status; live river gauges with BoM flood classes; and a historical archive. DataQuoll was formerly EmergencyAPI. Standards-validated CAP output is available as an Atom feed via ?format=cap-atom and as per-incident documents via /api/v1/incidents/{id}?format=cap-au, both validated against the OASIS CAP 1.2 schema and the CAP-AU Profile v3.0. Includes real-time incidents, proximity search, and historical audit trail snapshots.
**Disclaimer:** DataQuoll provides aggregated emergency incident data for informational
purposes only. This data is sourced from
official government feeds, community-decoded SA pager feeds and an agency feed whose licence is not published (NT PFES).
It may be delayed, incomplete, or inaccurate. Do not use this API as a substitute for
official emergency warnings.'
version: 1.113.0
contact:
name: DataQuoll Support
url: https://dataquoll.io
license:
name: Proprietary
servers:
- url: https://dataquoll.io
description: Primary host
- url: https://emergencyapi.com
description: Legacy host, identical responses until the announced sunset
security:
- BearerAuth: []
tags:
- name: Addresses
description: Every Australian address from G-NAF, matched exactly, with what is known about its point. One address per call, never a list.
paths:
/api/v1/address:
post:
operationId: lookupAddress
summary: Look up an Australian address and what is known about it
description: 'One Australian address in, one call: the address matched EXACTLY against G-NAF (every Australian address, Geoscape Australia under the Open G-NAF EULA), and what DataQuoll knows about its point: the local government area, declared-area status (with the declarations scope), active incidents within radiusKm, the nearest river gauge, the nearest emergency facilities and the mobile network sites around it.
Matching is exact, never fuzzy: a misspelt street or suburb returns status no_match with the part that failed (reason and part), never a guess and never a list of addresses. Units (3/12, Unit 3, U3), levels, lots (Lot 101 Port Wakefield Rd), ranges (87-89) and suffixes (12A) are read exactly. Give the state or the postcode.
precision says how far G-NAF''s point can be trusted: address (on the property), street, locality or interpolated. The LGA and declared-area status are given only for an address-level point, because a street or suburb point can sit in another LGA. The address is sent in the body and is never logged, stored or echoed; responses are not cached. Hazard history for the point is a separate call to /api/v1/hazard-history/point with the returned coordinates.'
tags:
- Addresses
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- address
properties:
address:
type: string
maxLength: 200
description: One line, e.g. "12 Smith St, Morphett Vale SA 5162". State or postcode required.
radiusKm:
type: number
exclusiveMinimum: 0
maximum: 50
default: 10
description: Radius for the incidents lane, in km.
security:
- BearerAuth: []
- PaymentAuth: []
x-payment-info:
offers:
- amount: '80000'
currency: '0x20C000000000000000000000b9537d11c60E8b50'
description: One request
intent: charge
method: tempo
price:
mode: fixed
currency: USD
amount: '0.08'
protocols:
- mpp:
method: tempo
intent: charge
currency: '0x20C000000000000000000000b9537d11c60E8b50'
- x402:
scheme: exact
network: eip155:8453
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
amount: '80000'
responses:
'200':
description: A match with its answers, or status no_match with the part that failed
headers:
Payment-Receipt:
$ref: '#/components/headers/PaymentReceipt'
content:
application/json:
schema:
type: object
properties:
status:
type: string
enum:
- matched
- no_match
reason:
type: string
description: no_match only.
enum:
- not_understood
- needs_state
- no_locality
- ambiguous_locality
- no_street
- ambiguous_street
- no_number
- no_lot
- ambiguous_number
- needs_unit
- no_unit
- ambiguous_unit
- postcode_mismatch
part:
type: string
description: no_match only. The part of the address that failed, never its text.
enum:
- address
- postcode
- state
- unit
- level
- number
- street
- locality
- po_box
count:
type: integer
description: needs_unit and the ambiguous reasons. How many addresses share that part (never listed).
understood:
type: object
description: Which parts the parser found (true or false for building, unit, level, lot, number, state, postcode). Names only, never the text sent.
additionalProperties:
type: boolean
address:
type: object
properties:
gnafPid:
type: string
formatted:
type: string
components:
type: object
properties:
building:
type:
- string
- 'null'
level:
type:
- object
- 'null'
unit:
type:
- object
- 'null'
number:
type:
- string
- 'null'
lot:
type:
- string
- 'null'
street:
type: string
locality:
type: string
state:
type: string
postcode:
type:
- string
- 'null'
coordinates:
type: object
properties:
lat:
type: number
lng:
type: number
precision:
type: string
enum:
- address
- street
- interpolated
- locality
- unstated
geocodeType:
type:
- string
- 'null'
description: G-NAF's default geocode type, e.g. PC (property centroid), STL, LOC, GG.
confidence:
type:
- integer
- 'null'
description: 'G-NAF''s confidence: 2 is held by three or more contributors, -1 by none currently.'
lowConfidence:
type: boolean
alias:
type: boolean
addressType:
type:
- string
- 'null'
enum:
- rural
- urban
- null
meshBlocks:
type: object
description: ABS mesh block codes (2021 and 2026 editions).
properties:
'2021':
type:
- string
- 'null'
'2026':
type:
- string
- 'null'
location:
type: object
properties:
state:
type:
- string
- 'null'
lga:
type: object
description: code and name, or null with a reason when the point is not on the property.
declarations:
type: object
description: Declared-area status (the /api/v1/declarations/point answer) with included true, or included false and a reason. Status only, never eligibility. Any lane (location.lga, declarations, incidents, nearestGauge, facilities, mobileSites) that fails on its own answers { error } instead, and the rest of the answer stands.
incidents:
type: object
properties:
radiusKm:
type: number
count:
type: integer
nearest:
type: array
items:
type: object
description: Up to 10 incident features, nearest first.
nearestGauge:
type:
- object
- 'null'
description: The nearest river (water-level) gauge with its distance in metres.
facilities:
type: object
description: The nearest emergency facility of each class within 25 km.
mobileSites:
type: object
description: Mobile site records within 2 km, counted per operator, and the nearest 5.
disclaimer:
type: string
'400':
description: The body is not a JSON object with an address string, or radiusKm is out of range
'401':
description: Missing or invalid API key. While pay per request is on, a request with no Authorization header gets 402 instead.
'402':
description: 'Pay per request: no key was sent, so the answer is a price. The WWW-Authenticate header carries an MPP Payment challenge; pay it and send the request again with Authorization: Payment. Also sent, with a fresh price, when a payment fails its checks or its price has expired. Only while pay per request is on; otherwise a request without a key gets 401.'
headers:
WWW-Authenticate:
$ref: '#/components/headers/PaymentChallenge'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ProblemDetails'
application/json:
schema:
$ref: '#/components/schemas/ProblemDetails'
'429':
description: Rate limit exceeded
components:
headers:
PaymentChallenge:
description: 'The MPP payment challenge, scheme Payment: the price, the token, where to pay, the realm (dataquoll.io) and when the price expires, 5 minutes after it is issued. Pay it with an MPP client and send the request again with Authorization: Payment.'
schema:
type: string
PaymentReceipt:
description: 'Sent only on the response to a paid request (Authorization: Payment): the receipt for the payment, naming its transaction. Never sent when a key was used.'
schema:
type: string
schemas:
ProblemDetails:
type: object
description: RFC 9457 Problem Details
properties:
type:
type: string
example: https://emergencyapi.com/errors/rate-limit-exceeded
title:
type: string
example: Rate Limit Exceeded
status:
type: integer
example: 429
detail:
type: string
instance:
type: string
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: 'API key in format: eak_live_... . Keys work from any origin by default. A key can optionally be restricted to specific browser origins in the dashboard; a request from a browser origin not on the allowlist is rejected with 403. Requests without an Origin header (server-side) are never blocked by this.'
PaymentAuth:
type: http
scheme: payment
description: 'Pay per request with MPP (the Machine Payments Protocol), for an agent with no API key. Send the request with no Authorization header and the 402 response carries the price in its WWW-Authenticate header. Pay it in USDC.e on Tempo with an MPP client, then send the request again with `Authorization: Payment <credential>`; the response carries a Payment-Receipt header. Offered only on the operations that list it, and only while pay per request is on. A request with a Bearer key is never charged. Prices, receipts and refunds: https://docs.dataquoll.io/machine-payments'
x-service-info:
docs:
homepage: https://dataquoll.io
apiReference: https://docs.dataquoll.io
llms: https://dataquoll.io/llms.txt