Keys you control
Create organization API keys in settings, name them per integration and revoke them instantly. Secrets are shown once and sent as a bearer token.
- Up to 3 keys on Pro, 10 on Business
- Last-used timestamps
- Usage dashboard by month
REST API
A predictable JSON API over HTTPS: places, visits, trade areas, market data and the full SDSS toolkit, with GeoJSON for anything that belongs on a map.
Create organization API keys in settings, name them per integration and revoke them instantly. Secrets are shown once and sent as a bearer token.
Suitability, Huff forecasts, catchments and site comparisons run on the same engine the app uses, so a notebook and a dashboard always agree.
Consistent error envelopes with stable codes, limit/offset pagination, ISO dates, and plan limits reported as 402 so you can handle them explicitly.
One request returns predicted visits, market share, cannibalization and the trade area.
curl https://api.mapdove.com/api/v1/sdss/huff \
-H "Authorization: Bearer $MAPDOVE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"city":"austin","category":"coffee","lng":-97.705,"lat":30.298,"sqft":2200,"brand_strength":1.1}' const res = await fetch('https://api.mapdove.com/api/v1/sdss/huff', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.MAPDOVE_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"city": "austin",
"category": "coffee",
"lng": -97.705,
"lat": 30.298,
"sqft": 2200,
"brand_strength": 1.1
}),
});
if (!res.ok) throw new Error((await res.json()).error.message);
const forecast = await res.json();
console.log(forecast.predicted_daily_visits, forecast.total_cannibalized_daily); import os, requests
r = requests.post(
"https://api.mapdove.com/api/v1/sdss/huff",
headers={"Authorization": f"Bearer {os.environ['MAPDOVE_API_KEY']}"},
json={"city": "austin", "category": "coffee", "lng": -97.705, "lat": 30.298,
"sqft": 2200, "brand_strength": 1.1},
timeout=30,
)
r.raise_for_status()
f = r.json()
print(f["predicted_daily_visits"], f["market_share"], len(f["impacted"])) {
"attractiveness": 1.29,
"calibration_k": 0.0138,
"predicted_daily_visits": 397,
"predicted_annual_visits": 145002,
"market_share": 0.0338,
"category_avg_daily_visits": 345,
"total_cannibalized_daily": 381,
"impacted": [
{ "place_id": 118, "name": "Bean Republic · Mueller", "distance_km": 0.84,
"current_daily_visits": 402, "delta_daily_visits": -61, "delta_pct": -15.2 }
],
"trade_area": { "type": "FeatureCollection", "features": [ "…" ] }
} Pro (10,000 calls/month), Business (100,000) and Enterprise (unlimited). The Free plan has no API access.
An SDSS call made with an API key counts as one API call and one analysis.
The demo cities are the sandbox: synthetic, deterministic and safe to experiment with.
Start free with the demo cities, or book a walkthrough with our team.