API Documentation
ZoneIQ provides planning zone and overlay data for South East Queensland addresses. Pass any address as a query parameter and receive structured JSON with zone rules, setbacks, permitted uses, and overlays.
Base URL: https://zoneiq.com.au
RapidAPI
Available on RapidAPI
ZoneIQ is listed on RapidAPI. Search for zoneiq at rapidapi.com to subscribe.
X-RapidAPI-Key header (RapidAPI injects this automatically).zoneiq.com.au. Check your RapidAPI dashboard for the correct host.| Plan | Requests | Price |
|---|---|---|
| Free | 100/month | $0 |
| Basic | 1,000/month | $29 USD/month |
| Pro | 10,000/month | $99 USD/month |
ziq_live_...) and RapidAPI subscriptions are independent. Use whichever suits your workflow.Authentication
Pass your API key via the X-Api-Key header or the api_key query parameter.
X-Api-Key: ziq_live_your_key_here
/api/lookup?address=...&api_key=ziq_live_...
Unauthenticated requests are supported for testing but are rate-limited. Get a free API key to increase your limits.
Endpoint
/api/lookupLook up planning zone and development rules for any SEQ address.
Parameters
| Parameter | In | Required | Description |
|---|---|---|---|
address | query | Yes | Full address string. Include suburb and state for best results. e.g. 1 George St Brisbane QLD 4000 |
X-Api-Key | header | No | Your API key. Required for higher rate limits. |
api_key | query | No | Alternative to X-Api-Key header. |
Response format
Successful response (HTTP 200):
{
"success": true,
"query": {
"address_input": "1 George St Brisbane QLD 4000",
"address_resolved": "1 George Street, Brisbane City QLD 4000",
"lat": -27.4697,
"lng": 153.0238
},
"zone": {
"code": "CR3",
"name": "Centre",
"category": "commercial",
"council": "brisbane"
},
"rules": {
"max_height_m": null,
"max_storeys": null,
"max_site_coverage_pct": 100,
"min_permeability_pct": 0,
"setbacks": {
"front_m": 0,
"side_m": 0,
"rear_m": 0
},
"secondary_dwelling_permitted": "no",
"short_term_accom_permitted": "yes",
"home_business_permitted": "no",
"subdivision_min_lot_size_m2": null
},
"key_rules": [
"Height determined by applicable centre precinct",
"Active street frontages required at ground level"
],
"uses": {
"permitted": ["Shop", "Office", "Food and drink outlet"],
"requires_permit": ["Hospital", "Stadium"],
"prohibited": ["Extractive industry", "Heavy industry"]
},
"overlays": {
"flood": {
"has_flood_overlay": false,
"risk_level": "none"
},
"character": {
"has_character_overlay": false
},
"schools": []
},
"meta": {
"source": "Brisbane City Plan 2014",
"source_url": "https://cityplan.brisbane.qld.gov.au",
"last_verified": "2025-01-01",
"disclaimer": "Indicative only. Always verify with council.",
"response_ms": 312,
"auth": {
"authenticated": true,
"plan": "starter"
}
}
}Error codes
| HTTP | error field | Description |
|---|---|---|
| 400 | MISSING_ADDRESS | No address query parameter provided |
| 401 | INVALID_KEY | API key is missing, invalid, inactive, or rate-limited |
| 404 | ADDRESS_NOT_FOUND | Geocoding failed — address could not be resolved |
| 404 | OUTSIDE_COVERAGE | Address is outside the covered council areas |
| 404 | ZONE_NOT_SEEDED | Zone polygon found but rules not yet in database |
All error responses follow the shape: { "success": false, "error": "CODE", "message": "..." }
Coverage
Rate limits
| Plan | Requests/day | Price |
|---|---|---|
| Unauthenticated | Limited | Free — for testing only |
| Free | 100 | $0/month |
| Starter | 500 | $29 AUD/month |
| Pro | 5,000 | $99 AUD/month |
Rate limits reset at midnight UTC. When exceeded, the response will be HTTP 401 with error INVALID_KEY and a message indicating the limit.
Examples
curl -G https://zoneiq.com.au/api/lookup \ --data-urlencode "address=12 Windermere Rd Ascot QLD 4007" \ -H "X-Api-Key: ziq_live_your_key_here"
const response = await fetch(
'https://zoneiq.com.au/api/lookup?address=' +
encodeURIComponent('12 Windermere Rd Ascot QLD 4007'),
{
headers: { 'X-Api-Key': 'ziq_live_your_key_here' }
}
)
const data = await response.json()
if (data.success) {
console.log(data.zone.name) // "Low Density Residential"
console.log(data.rules.max_height_m) // 9.5
console.log(data.overlays.flood.has_flood_overlay) // false
}import httpx
response = httpx.get(
"https://zoneiq.com.au/api/lookup",
params={"address": "12 Windermere Rd Ascot QLD 4007"},
headers={"X-Api-Key": "ziq_live_your_key_here"},
)
data = response.json()
if data["success"]:
print(data["zone"]["name"]) # Low Density Residential
print(data["rules"]["max_height_m"]) # 9.5
print(data["overlays"]["flood"]["has_flood_overlay"]) # False