curl "https://api.areahub.com/v1/bundle/enterprise?lat=40.71&lng=-74.00" \
-H "X-API-Key: YOUR_API_KEY"
import requests
r = requests.get(
"https://api.areahub.com/v1/bundle/enterprise",
params={"lat": 40.71, "lng": -74.00},
headers={"X-API-Key": YOUR_API_KEY},
)
topics = r.json()["data"]["topics"]
for slug, topic in topics.items():
if topic.get("error"):
continue
value = topic["value"]
if isinstance(value, (int, float)):
print(f"{slug}: {value} nearby")
elif isinstance(value, dict) and "rating" in value:
print(f"{slug}: {value['rating']}")
else:
print(f"{slug}: {value}")
const res = await fetch(
"https://api.areahub.com/v1/bundle/enterprise?lat=40.71&lng=-74.00",
{ headers: { "X-API-Key": process.env.YOUR_API_KEY } },
);
const { data } = await res.json();
for (const [slug, topic] of Object.entries(data.topics)) {
if (topic.error) continue;
const { value } = topic;
if (typeof value === "number") {
console.log(`${slug}: ${value} nearby`);
} else if (value?.rating) {
console.log(`${slug}: ${value.rating}`);
}
}
{
"data": {
"location": { "lat": 40.71, "lng": -74.0 },
"topics": {
"wildfire": {
"value": {
"title": "Wildfires",
"rating": "No Rating",
"score": 0,
"frequency": 0
},
"details": {}
},
"brownfield": {
"value": 60,
"details": { "type": "FeatureCollection", "features": [] }
},
"superfund": {
"value": 4,
"details": { "type": "FeatureCollection", "features": [] }
},
"airQuality": {
"value": {
"metric": "Unhealthy for Sensitive Groups",
"progressValue": 101,
"additionalInfo": {
"daysWithAqi": 366,
"goodDays": 107,
"medianAqi": 59
}
},
"details": null
},
"ozone": {
"value": {
"measurement": { "value": 116.83, "unit": "µg/m³" },
"rating": "Good",
"timestamp": "2026-07-14T16:31:55.009Z"
},
"details": null
},
...
}
},
"meta": {
"request_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"timestamp": "2026-07-14T16:31:55.009Z",
"credit_cost": 35
}
}
API Reference
Enterprise Bundle
All 37 topics for one location. Costs 35 credits.
GET
/
v1
/
bundle
/
enterprise
curl "https://api.areahub.com/v1/bundle/enterprise?lat=40.71&lng=-74.00" \
-H "X-API-Key: YOUR_API_KEY"
import requests
r = requests.get(
"https://api.areahub.com/v1/bundle/enterprise",
params={"lat": 40.71, "lng": -74.00},
headers={"X-API-Key": YOUR_API_KEY},
)
topics = r.json()["data"]["topics"]
for slug, topic in topics.items():
if topic.get("error"):
continue
value = topic["value"]
if isinstance(value, (int, float)):
print(f"{slug}: {value} nearby")
elif isinstance(value, dict) and "rating" in value:
print(f"{slug}: {value['rating']}")
else:
print(f"{slug}: {value}")
const res = await fetch(
"https://api.areahub.com/v1/bundle/enterprise?lat=40.71&lng=-74.00",
{ headers: { "X-API-Key": process.env.YOUR_API_KEY } },
);
const { data } = await res.json();
for (const [slug, topic] of Object.entries(data.topics)) {
if (topic.error) continue;
const { value } = topic;
if (typeof value === "number") {
console.log(`${slug}: ${value} nearby`);
} else if (value?.rating) {
console.log(`${slug}: ${value.rating}`);
}
}
{
"data": {
"location": { "lat": 40.71, "lng": -74.0 },
"topics": {
"wildfire": {
"value": {
"title": "Wildfires",
"rating": "No Rating",
"score": 0,
"frequency": 0
},
"details": {}
},
"brownfield": {
"value": 60,
"details": { "type": "FeatureCollection", "features": [] }
},
"superfund": {
"value": 4,
"details": { "type": "FeatureCollection", "features": [] }
},
"airQuality": {
"value": {
"metric": "Unhealthy for Sensitive Groups",
"progressValue": 101,
"additionalInfo": {
"daysWithAqi": 366,
"goodDays": 107,
"medianAqi": 59
}
},
"details": null
},
"ozone": {
"value": {
"measurement": { "value": 116.83, "unit": "µg/m³" },
"rating": "Good",
"timestamp": "2026-07-14T16:31:55.009Z"
},
"details": null
},
...
}
},
"meta": {
"request_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"timestamp": "2026-07-14T16:31:55.009Z",
"credit_cost": 35
}
}
Returns every supported topic for a location in a single call — all 18 natural, all 14 proximity counts, and all 5 measurements.
This is the most efficient way to get a complete picture of a location. 37 topics for 35 credits.
Requires the
bundle scope.
Responses are large — typically 5–7 MB. Confirm your HTTP client doesn’t
impose a smaller
maxContentLength. Many default to 10 MB or less.number
required
Latitude in decimal degrees. US locations only.
number
required
Longitude in decimal degrees. US locations only.
Response
object
Map of topic slug to result — 37 entries.
value has three different shapes depending on the topic’s category. Do not assume a uniform structure:- Natural (18) → object with
rating,score,frequency - Proximity (14) → a plain number
- Measurements (5) → topic-specific object
number
Always
35 on success, 0 on failure.Type-check before you parse.
brownfield.value is a number.
wildfire.value is an object. Code that assumes one shape across all topics
will break.curl "https://api.areahub.com/v1/bundle/enterprise?lat=40.71&lng=-74.00" \
-H "X-API-Key: YOUR_API_KEY"
import requests
r = requests.get(
"https://api.areahub.com/v1/bundle/enterprise",
params={"lat": 40.71, "lng": -74.00},
headers={"X-API-Key": YOUR_API_KEY},
)
topics = r.json()["data"]["topics"]
for slug, topic in topics.items():
if topic.get("error"):
continue
value = topic["value"]
if isinstance(value, (int, float)):
print(f"{slug}: {value} nearby")
elif isinstance(value, dict) and "rating" in value:
print(f"{slug}: {value['rating']}")
else:
print(f"{slug}: {value}")
const res = await fetch(
"https://api.areahub.com/v1/bundle/enterprise?lat=40.71&lng=-74.00",
{ headers: { "X-API-Key": process.env.YOUR_API_KEY } },
);
const { data } = await res.json();
for (const [slug, topic] of Object.entries(data.topics)) {
if (topic.error) continue;
const { value } = topic;
if (typeof value === "number") {
console.log(`${slug}: ${value} nearby`);
} else if (value?.rating) {
console.log(`${slug}: ${value.rating}`);
}
}
{
"data": {
"location": { "lat": 40.71, "lng": -74.0 },
"topics": {
"wildfire": {
"value": {
"title": "Wildfires",
"rating": "No Rating",
"score": 0,
"frequency": 0
},
"details": {}
},
"brownfield": {
"value": 60,
"details": { "type": "FeatureCollection", "features": [] }
},
"superfund": {
"value": 4,
"details": { "type": "FeatureCollection", "features": [] }
},
"airQuality": {
"value": {
"metric": "Unhealthy for Sensitive Groups",
"progressValue": 101,
"additionalInfo": {
"daysWithAqi": 366,
"goodDays": 107,
"medianAqi": 59
}
},
"details": null
},
"ozone": {
"value": {
"measurement": { "value": 116.83, "unit": "µg/m³" },
"rating": "Good",
"timestamp": "2026-07-14T16:31:55.009Z"
},
"details": null
},
...
}
},
"meta": {
"request_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"timestamp": "2026-07-14T16:31:55.009Z",
"credit_cost": 35
}
}