Esta página aún no está traducida. Estás leyendo la versión en inglés.

Reference data endpoints

Health, public stats, plans, cities, hex grids, neighborhoods, categories, brands and lifestyle segments.

Reference data describes the markets and taxonomies everything else refers to. It changes rarely, so cache it on your side (hours to days) and save API calls. Paths are relative to https://api.mapdove.com/api/v1 unless noted. Conventions, auth and errors are in the API overview.

Method Path Auth
GET /health (root, also /healthz) none
GET /public/stats none
GET /plans none
GET /cities required
GET /cities/:slug required
GET /cities/:slug/hexes required
GET /cities/:slug/neighborhoods required
GET /categories required
GET /brands required
GET /segments required

Health

GET /health — served at the root of the API host, without the /api/v1 prefix (also available as /healthz). Use it for uptime checks and load-balancer probes.

curl https://api.mapdove.com/health
{ "status": "ok", "db": true, "version": "0.1.0" }

db is false if the database is unreachable.

Public stats

GET /public/stats — headline counts of the dataset, used on the marketing site. No authentication.

curl https://api.mapdove.com/api/v1/public/stats
{ "cities": 5, "places": 1235, "visits_tracked": 123456789, "hexes": 2417 }

visits_tracked is the total number of synthetic visits in the demo dataset.

Plans

GET /plans — the public plan catalog with limits. No authentication. -1 means unlimited; price_monthly is in USD and null for “contact us”.

curl https://api.mapdove.com/api/v1/plans
[
  {
    "id": "pro",
    "name": "Pro",
    "price_monthly": 149,
    "limits": {
      "history_days": 365, "analyses_per_month": 500, "api_calls_per_month": 10000,
      "api_keys": 3, "seats": 5, "exports": true, "cities": -1, "alerts": 10
    },
    "features": ["12 months of history", "500 site analyses / month", "CSV export", "REST API (10k calls)", "5 seats", "Visit alerts"]
  }
]

The response contains all four plans (free, pro, business, enterprise). See Plans and limits.

Cities

List cities

GET /cities — all demo markets.

curl https://api.mapdove.com/api/v1/cities \
  -H "Authorization: Bearer $MAPDOVE_KEY"
const cities = await fetch('https://api.mapdove.com/api/v1/cities', {
  headers: { Authorization: `Bearer ${key}` },
}).then((r) => r.json());
cities = requests.get(f"{BASE}/cities", headers=H, timeout=30).json()
[
  {
    "id": 1, "slug": "austin", "name": "Austin", "region": "Texas", "country": "US",
    "timezone": "America/Chicago", "currency": "USD", "units": "imperial",
    "center": [-97.7431, 30.2672], "zoom": 10.6,
    "bbox": [-97.9201, 30.1561, -97.5785, 30.5412],
    "description": "Fast-growing tech hub with a dense core, strong suburban growth north along the I-35 and US-183 corridors.",
    "places": 247, "population": 668641
  }
]

center is [lng, lat]; bbox is [minLng, minLat, maxLng, maxLat] of the study area.

City detail

GET /cities/:slug — a city plus data range, city KPIs, category and neighborhood summaries.

Param Description
slug austin, houston, phoenix, miami or dubai
curl https://api.mapdove.com/api/v1/cities/austin \
  -H "Authorization: Bearer $MAPDOVE_KEY"
{
  "id": 1, "slug": "austin", "name": "Austin", "currency": "USD", "units": "imperial",
  "places": 247, "population": 668641,
  "data_range": { "from": "2025-11-01", "to": "2026-10-31" },
  "kpis": {
    "visits_30d": 4182310, "visits_prev_30d": 4079555, "change_pct": 2.5,
    "median_income": 92140, "daytime_pop": 811204
  },
  "categories": [
    { "slug": "coffee", "name": "Coffee & Cafés", "color": "#92400e", "places": 34, "visits_30d": 371820, "change_pct": 1.2 }
  ],
  "neighborhoods": [
    { "id": 1, "name": "Downtown", "population": 58210, "median_income": 116400, "places": 31 }
  ]
}

(Trimmed: the detail also includes every City field.)

Hex grid

GET /cities/:slug/hexes — the city’s hexagonal grid (≈0.8 km² cells) as a GeoJSON FeatureCollection of polygons. Use it to build choropleth maps or to join your own data by id.

curl https://api.mapdove.com/api/v1/cities/austin/hexes \
  -H "Authorization: Bearer $MAPDOVE_KEY" -o austin-hexes.geojson
{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": { "type": "Polygon", "coordinates": [[[-97.7452, 30.2651], [-97.7401, 30.2651], "…"]] },
      "properties": {
        "id": 12, "population": 1520, "households": 600, "median_income": 91000, "median_age": 34.2,
        "daytime_pop": 3000, "density": 1880, "pct_college": 45.1, "pct_family": 31.0,
        "rent_index": 62.3, "traffic_index": 55.0, "growth_rate": 0.031,
        "segment": "urban-professionals", "neighborhood": "Downtown"
      }
    }
  ]
}
Property Meaning
density residents per km²
daytime_pop people present during the day
pct_college, pct_family percent of adults with a degree; percent family households
rent_index, traffic_index 0–100 within the city
growth_rate annual population growth as a fraction (0.031 = 3.1%)
segment lifestyle segment slug

Neighborhoods

GET /cities/:slug/neighborhoods — neighborhood polygons with summary properties.

curl https://api.mapdove.com/api/v1/cities/miami/neighborhoods \
  -H "Authorization: Bearer $MAPDOVE_KEY"
{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": { "type": "MultiPolygon", "coordinates": ["…"] },
      "properties": { "id": 50, "name": "Brickell", "population": 41820, "median_income": 108300, "places": 24 }
    }
  ]
}

Neighborhood boundaries in the demo are geometric (Voronoi cells), not official boundaries.

Categories

GET /categories — the 14 place categories.

curl https://api.mapdove.com/api/v1/categories \
  -H "Authorization: Bearer $MAPDOVE_KEY"
[
  { "id": 1, "slug": "coffee", "name": "Coffee & Cafés", "color": "#92400e", "icon": "coffee", "places": 170 },
  { "id": 2, "slug": "grocery", "name": "Grocery", "color": "#16a34a", "icon": "shopping-basket", "places": 110 }
]

places is the count across all cities. Slugs: coffee, grocery, qsr, dining, fitness, apparel, pharmacy, home, electronics, department, cinema, hotel, fuel, mall. Model parameters per category are listed in Methodology.

Brands

GET /brands — the 31 fictional chains, optionally filtered by category.

Param Description
category optional category slug
curl "https://api.mapdove.com/api/v1/brands?category=coffee" \
  -H "Authorization: Bearer $MAPDOVE_KEY"
[
  { "id": 1, "slug": "bean-republic", "name": "Bean Republic", "category": "coffee", "color": "#6f4e37", "price_tier": 2, "locations": 40 },
  { "id": 2, "slug": "copperline-coffee", "name": "Copperline Coffee", "category": "coffee", "color": "#b45309", "price_tier": 3, "locations": 41 }
]

price_tier runs from 1 (value) to 4 (premium); locations counts all cities. Brand performance is under Market endpoints.

Segments

GET /segments — the eight lifestyle segments.

curl https://api.mapdove.com/api/v1/segments \
  -H "Authorization: Bearer $MAPDOVE_KEY"
[
  {
    "slug": "urban-professionals", "name": "Urban Professionals", "color": "#14b8a6",
    "description": "Well-paid singles and couples in dense cores; coffee, fitness, dining, weekday daytime traffic."
  }
]

See Lifestyle segments for definitions.