Developers

The World Music Atlas is open to build on: every place, its coordinates and its song's metadata as JSON and GeoJSON, and a player you can embed in your own maps, lessons and exhibits.

What you get — and what you don't

  • Places: name, ISO code, kind, UN M49 continent and region, a representative point, and whether it is disputed.
  • Songs: title, description, musical style, edition, curator's selection, the place's page and its embed player.
  • No audio files or downloadable audio links, and no provider identifiers. Songs are heard through the embed player.
  • No internal database ids. Places are identified by their slug; editions by theirs.

Endpoints

GET /api/v1/placesEvery place
GET /api/v1/places/{slug}One place, with its song in each edition
GET /api/v1/editionsEvery published edition
GET /api/v1/editions/{slug}An edition with all its songs
GET /api/v1/editions/{slug}.geojsonAn edition as a GeoJSON FeatureCollection

Base URL https://openmusicatlas.org. Responses are JSON, cached for an hour, and callable from any website (CORS). Each caller is limited to 300 requests every 10 minutes; please cache on your side.

Example: /api/v1/places/jamaica

{
  "place": {
    "slug": "jamaica",
    "name": "Jamaica",
    "isoCode": "JM",
    "kind": "country",
    "continent": "Americas",
    "region": "Caribbean",
    "coordinates": [
      -77.32,
      18.14
    ],
    "isDisputed": false,
    "pageUrl": "https://openmusicatlas.org/place/jamaica"
  },
  "entries": [
    {
      "edition": {
        "slug": "2026-founding",
        "name": "World Music Atlas — 2026 Founding Edition",
        "year": 2026,
        "version": 1,
        "frozenAt": "2026-09-13T23:36:12.857Z"
      },
      "entry": {
        "title": "Island of One People",
        "description": null,
        "style": null,
        "curatorsSelection": false,
        "pageUrl": "https://openmusicatlas.org/place/jamaica",
        "embedUrl": "https://openmusicatlas.org/embed/jamaica/2026-founding"
      }
    }
  ]
}

GeoJSON on a map

One point feature per place, with the place and song metadata as properties. It loads directly into Leaflet, MapLibre, Mapbox, OpenLayers or QGIS. This is a complete page — save it as an HTML file and open it: every place becomes a marker, and each popup plays that place's song.

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>World Music Atlas on a Leaflet map</title>
  <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css">
  <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
  <style>html, body, #map { height: 100%; margin: 0 }</style>
</head>
<body>
  <div id="map"></div>
  <script>
    const map = L.map("map").setView([20, 0], 2)
    L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
      attribution: "&copy; OpenStreetMap contributors",
    }).addTo(map)

    fetch("https://openmusicatlas.org/api/v1/editions/2026-founding.geojson")
      .then((res) => res.json())
      .then((atlas) => {
        L.geoJSON(atlas, {
          onEachFeature: (feature, layer) => {
            const p = feature.properties
            layer.bindPopup(
              `<b>${p.name}</b><br>${p.title}<br>` +
              `<iframe src="${p.embedUrl}" width="300" height="212" style="border:0"></iframe>`,
              { maxWidth: 320 }
            )
          },
        }).addTo(map)
      })
  </script>
</body>
</html>

From Python

The same data with nothing but the standard library — for notebooks, GIS scripts and research.

import json
import urllib.request

url = "https://openmusicatlas.org/api/v1/editions/2026-founding.geojson"
with urllib.request.urlopen(url) as response:
    atlas = json.load(response)

print(atlas["name"], "-", len(atlas["features"]), "places")
for feature in atlas["features"][:5]:
    p = feature["properties"]
    lon, lat = feature["geometry"]["coordinates"]
    print(f"{p['name']}: {p['title']} ({lat}, {lon}) {p['pageUrl']}")

Embed the player

Any website may embed the player. It plays the song, links back to the place on Open Music Atlas, and runs in its own protected frame. Every place and edition has one; the embedUrl field gives its address.

<iframe
  src="https://openmusicatlas.org/embed/jamaica/2026-founding"
  width="100%" height="212" loading="lazy"
  style="border:0; border-radius:12px"
  allow="autoplay; encrypted-media"
  title="Jamaica — World Music Atlas"></iframe>

Licensing

The data (place and song metadata) and the music are licensed separately. The music is not licensed for download or reuse. Terms for the metadata are being finalised; until they are published, please credit “World Music Atlas, openmusicatlas.org” and link back to the place pages.

Coming next

Version 1 of the API is a stable contract: fields may be added, but never removed or renamed. Official packages for JavaScript (npm) and Python are planned as thin wrappers around it, once the API has settled in real use — until then, the HTTP API above is the way in, from any language.

New layers — cities first — and future editions will appear in the same API as they are published.