openconcert

Developers and AI assistants

OpenConcert is open data infrastructure, not a destination. Build on it freely.

Core links

Examples

GET https://openconcert.org/api/events.json
GET https://openconcert.org/api/events?location=Melbourne&composer=Beethoven
GET https://openconcert.org/api/works/edvard-grieg/peer-gynt-suite-no-1-op-46
POST https://openconcert.org/mcp   (JSON-RPC 2.0)

Each event includes a canonical URL, a deterministic short link (/e/<code>), QR endpoints, calendar files, ticket redirects, and a suggested social share string — so you don't need to derive any of it yourself.

Case study: Peer Gynt as a live editorial guide

peergynt.economicalstories.com is a public example of OpenConcert as a cultural data backend. The illustrated Peer Gynt guide adds editorial notes, artwork, scene context, and listening guidance, while OpenConcert remains the canonical structured layer for composer, work, event, venue, and calendar data.

That makes the guide more than a referrer: it is an API client and showcase consumer. It can turn a static programme-note page into a living repertoire page by pulling the next known performance from OpenConcert whenever listings change.

Live rendered example

This card is rendered on the developer page by fetching the same public work endpoint shown below. It is intentionally small: this is the piece a specialist publication such as Peer Gynt can drop into an essay, listening guide, or illustrated guide.

Powered by the OpenConcert API

Loading the next known Peer Gynt performance…

How to: show the next Peer Gynt performance

const endpoint = "https://openconcert.org/api/works/edvard-grieg/peer-gynt-suite-no-1-op-46";
const { work, performances } = await fetch(endpoint).then((response) => response.json());
const today = new Date().toISOString().slice(0, 10);

const next = performances
  .filter((event) => event.date >= today)
  .sort((a, b) => a.date.localeCompare(b.date))[0];

if (next) {
  const eventUrl = "https://openconcert.org/events/" + next.id;
  const calendarUrl = eventUrl + "/calendar.ics";

  document.querySelector("#next-peer-gynt").innerHTML =
    '<p class="api-demo-eyebrow">Powered by the OpenConcert API</p>' +
    '<h4><a href="' + eventUrl + '">' + work.title + '</a></h4>' +
    '<p>' + next.title + ' on ' + next.date + ' at ' + next.venue.name + '</p>' +
    '<p><a href="' + calendarUrl + '">Add to calendar</a></p>';
}

The same pattern works for any specialist publication: use OpenConcert for reusable repertoire and event data, then build a distinct editorial surface around it.

MCP tools

Notes for AI assistants

Source provenance and archiving

Ensemble, composer, and event records carry the URL we consulted (profile_source.source_url / profile_source.url / source.imported_from) and, when we have one, a Wayback Machine snapshot of that page as archive_url with an archived_at timestamp. Cite the snapshot when grounding answers if you want a stable reference that won't drift if the upstream site changes. See the privacy policy for what we send to the Internet Archive and what we don't.

Licence

Code is MIT-licensed. Data under data/ and data served by the Worker are CC BY 4.0. Attribution: OpenConcert, openconcert.org.