API documentation

Three read-only JSON endpoints for search and single-record lookups. For bulk access use the CSV and JSON downloads instead.

Key facts

The API is at https://venues-site.pages.dev/api and needs no key. Every response is JSON, sent with Access-Control-Allow-Origin: * and Cache-Control: public, max-age=86400. The API returns a subset of the fields in venues.json and organizations.json.

Base URL
https://venues-site.pages.dev/api
Methods
GET (and HEAD)
Auth
None
CORS
Access-Control-Allow-Origin: *
Caching
24 hours

Full-text search over venue names, former names, cities, tenant team names and organization names. Returns at most 20 results, best match first.

Parameters
ParameterRequiredDescription
qYesSearch text. The first 200 characters and first 8 words are used. Punctuation is ignored. The last word matches as a prefix, so "wemb" finds Wembley.

Each result has kind (venue or organization), slug and name. Venues add city and country when known; organizations add org_type. A query with no searchable characters returns {"results":[]}. A missing or blank q returns 400 missing_query.

curl 'https://venues-site.pages.dev/api/search?q=1'
{
  "results": [
    {
      "kind": "venue",
      "slug": "1-november-1954-stadium",
      "name": "1 November 1954 Stadium",
      "city": "القبة",
      "country": "DZ"
    },
    {
      "kind": "organization",
      "slug": "1-fc-bocholt",
      "name": "1. FC Bocholt",
      "org_type": "team"
    }
  ]
}

GET /api/venue/<slug>

One venue with its former names, current owner, operator, tenant and naming-rights organizations, and its teams. Slugs are the ones in page URLs (/venue/<slug>/). An unknown slug returns 404 venue_not_found.

Response fields
FieldDescription
slug, name, name_localIdentity and names.
city, country, lat, lngLocation. country is ISO 3166-1 alpha-2.
venue_type, capacity, opened_year, statusType, seats, opening year and status.
former_namesList of earlier names as plain strings, without dates.
rolesCurrent organizations: role (owner, operator, tenant or naming_rights), org_slug, org_name. is_current is always true.
teamsTeams that play here: team_org_slug, team_org_name.
updated_atWhen the API copy of the row was last synced.
curl 'https://venues-site.pages.dev/api/venue/1-november-1954-stadium'
{
  "slug": "1-november-1954-stadium",
  "name": "1 November 1954 Stadium",
  "name_local": null,
  "city": "القبة",
  "country": "DZ",
  "venue_type": "stadium",
  "capacity": 21240,
  "opened_year": 1978,
  "status": "active",
  "lat": 36.706944,
  "lng": 4.056111,
  "updated_at": "<timestamp of the last D1 sync>",
  "former_names": [],
  "roles": [
    {
      "role": "tenant",
      "org_slug": "js-kabylie",
      "org_name": "JS Kabylie",
      "is_current": true
    },
    {
      "role": "tenant",
      "org_slug": "jeunesse-sportive-de-kabylie-women-s-association-football",
      "org_name": "Jeunesse sportive de Kabylie (women's association football)",
      "is_current": true
    }
  ],
  "teams": []
}

GET /api/org/<slug>

One organization with the venues it is currently linked to. An unknown slug returns 404 org_not_found.

Response fields
FieldDescription
slug, name, org_type, tickerIdentity, type and stock ticker.
parent_org_slug, parent_org_nameParent organization, when known.
venuesCurrent links: venue_slug, venue_name, relationship (owner, operator, tenant or naming_rights), is_current (always true).
home_venuesFor teams, the venues they play at: venue_slug, venue_name.
updated_atWhen the API copy of the row was last synced.
curl 'https://venues-site.pages.dev/api/org/1-fc-bocholt'
{
  "slug": "1-fc-bocholt",
  "name": "1. FC Bocholt",
  "org_type": "team",
  "ticker": null,
  "parent_org_slug": null,
  "parent_org_name": null,
  "updated_at": "<timestamp of the last D1 sync>",
  "venues": [
    {
      "venue_slug": "stadion-am-hunting",
      "venue_name": "Stadion am Hünting",
      "relationship": "tenant",
      "is_current": true
    }
  ],
  "home_venues": []
}

Errors and limits

Errors are JSON of the form {"error":"venue_not_found","message":"No venue with slug \"x\"."}. Methods other than GET and HEAD return 405 method_not_allowed; unknown paths return 404 not_found. Responses are cached at the edge for 24 hours and the x-edge-cache header shows HIT or MISS. There is no published rate limit; please cache results and use the bulk downloads for large jobs.

What the API does not return

The API is a narrower copy of the dataset. It has no role dates, no source URLs or confidence levels, no naming-rights timeline or deal values, no competitions, and no Wikidata or Wikipedia identifiers. Use venues.json, organizations.json or sponsorships.csv for those.