Developers

PopulationCircle API

A beta API for estimating the population inside a GeoJSON Polygon or MultiPolygon.

Endpoint

Send a POST request to /api/population/estimate. The API uses the same WorldPop 2025 population dataset as the map.

POST https://populationcircle.com/api/population/estimate
Content-Type: application/json

{
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [10.75, 59.91],
        [10.77, 59.91],
        [10.77, 59.93],
        [10.75, 59.93],
        [10.75, 59.91]
      ]
    ]
  },
  "include_breakdown": true
}

Response

The response is an estimate, not an official census count. Set include_breakdown to true to get country breakdown data for shapes crossing country borders. If country totals are unavailable, percentage fields are returned as null.

{
  "population": 12483,
  "area_km2": 3.42,
  "year": 2025,
  "resolution_used": "100m",
  "source": "WorldPop Global2 2025",
  "is_estimate": true,
  "disclaimer": "Population is a modelled estimate based on WorldPop Global2 2025 data, not an exact count.",
  "countries_touched": ["Norway"],
  "breakdown": {
    "countries": [
      {
        "name": "Norway",
        "iso3": "NOR",
        "iso2": "NO",
        "population": 12000,
        "country_population_total": 5520000,
        "percent_of_country_population": 0.2174
      }
    ]
  }
}

Quick test

curl -X POST https://populationcircle.com/api/population/estimate \
  -H "Content-Type: application/json" \
  -d "{\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[10.75,59.91],[10.77,59.91],[10.77,59.93],[10.75,59.93],[10.75,59.91]]]},\"include_breakdown\":true}"

Limits

  • No API key is required during the beta.
  • Fair-use limit: 20 requests per minute and 1000 requests per day per IP.
  • Maximum public API area: 17,000,000 km2.
  • Country breakdown is capped at 50 touched countries.
  • Very complex polygons may be rejected; simplify the geometry and retry.

Errors

  • 422: invalid geometry, unsupported year, or too-complex breakdown request.
  • 413: polygon area or request body is too large.
  • 429: rate limit or daily fair-use limit reached.
  • 503: population data or processing capacity is temporarily unavailable.