For developers
An API for
Glasgow’s stages.
A free, read-only JSON API for every show and venue on Glasgow Theatre. No key, no account, no tracking. 125 upcoming shows across 12 venues, refreshed with the site.
Quick start
curl -s 'https://glasgowtheatre.com/api/v1/shows?venue=tron&limit=3' | jq '.shows[] | {title, run, pricing}'
Browse this page for the contract, open the interactive examples, or point a client at OpenAPI.
Endpoints
| Method | Path | What it returns |
|---|---|---|
| GET | /api/v1/shows | Filtered, paginated shows |
| GET | /api/v1/shows.json | Every upcoming show in one response |
| GET | /api/v1/shows/{id}.json | One show, including every performance |
| GET | /api/v1/shows.txt | Every show as tab-separated text |
| GET | /api/v1/venues.json | Every venue, with concessions |
| GET | /api/v1/venues/{id}.json | One venue |
| GET | /api/v1/venues/{id}/shows | Shows at one venue; same filters as /shows |
| GET | /api/v1/meta.json | Build time, refresh time and counts |
| GET | /api/v1/openapi.json | OpenAPI 3.1 description |
| GET | /api/v1/schema.json | JSON Schema for every response |
Filtering
All parameters are optional. Repeat a parameter or comma-separate values to match any of them.
| Parameter | Example | Meaning |
|---|---|---|
from, to | ?from=2026-10-01&to=2026-10-31 | Match overlapping runs, not just opening nights |
date | ?date=2026-10-17 | One day; shorthand for from=to=date |
venue | ?venue=tron,tramway | Venue ids from /venues.json |
form | ?form=play,musical | Art form, e.g. play, dance, stand-up |
tag | ?tag=lunchtime | Any tag, including structural ones |
q | ?q=macbeth | Search title, venue, description, producer, art form and tags |
free | ?free=true | Free shows |
payWhatYouLike | ?payWhatYouLike=true | Pay-what-you-like shows |
hasPerformances | ?hasPerformances=true | Only shows with a performance list |
minPrice, maxPrice | ?maxPrice=15 | Filter on the published from-price |
sort, order | ?sort=price&order=asc | date (default), closes, title, venue, price |
limit, offset | ?limit=20&offset=20 | Pagination; limit is 1–200, default 50 |
format | ?format=txt | Tab-separated text instead of JSON |
A show
Every response has the same top-level provenance fields, so a client can tell when the data was built and refreshed.
{
"id": "oran-mor-zamboni",
"url": "https://glasgowtheatre.com/shows/oran-mor-zamboni.html",
"title": "Zamboni",
"artForm": "play",
"tags": [
"play",
"lunchtime",
"a-play-a-pie-a-pint"
],
"producer": null,
"description": "Skating instructors Donal, Noa and Gus would rather be at their local ice rink than anywhere else in the world. Joking, gossiping and watching over the ice below. But when they witness a horrific accident on shift, their safe haven is shattered, and their greatest passion becomes the very thing...",
"venue": {
"id": "oran-mor",
"name": "A Play, a Pie and a Pint",
"area": "West End"
},
"run": {
"opens": "2026-11-02",
"closes": "2026-11-07",
"time": "13:00"
},
"schedule": {
"text": "Monday – Saturday 1pm\n(Doors 12pm/12.30pm on Mondays)"
},
"performances": [
{
"date": "2026-11-02",
"time": "13:00",
"price": 17
},
{
"date": "2026-11-03",
"time": "13:00",
"price": 19
},
{
"date": "2026-11-04",
"time": "13:00",
"price": 19
},
{
"date": "2026-11-05",
"time": "13:00",
"price": 19
},
{
"date": "2026-11-06",
"time": "13:00",
"price": 19
},
{
"date": "2026-11-07",
"time": "13:00",
"price": 22.5
}
],
"pricing": {
"currency": "GBP",
"from": 17,
"to": 22.5,
"concessionFrom": null,
"concessionTo": null,
"free": false,
"payWhatYouLike": false,
"text": "Monday: £17\nTuesday-Friday: £19\nSaturday: £22.50",
"source": "published-text",
"checkedAt": "2026-11-07"
},
"accessibility": null,
"durationMinutes": null,
"image": {
"url": "https://glasgowtheatre.com/images/6ee73a9329c0e0f01999.webp",
"alt": "Zamboni",
"credit": null
},
"bookingUrl": "https://playpiepint.com/whats-on/event/zamboni/",
"updatedAt": "2026-11-07"
}
A venue
Concessions are a property of the building, not the show. They are hand-checked against the venue's own page and the date is published with them. colour is the house colour used on the calendar, adjusted to clear WCAG AA against ink; use the pair together if you are drawing the venue yourself.
{
"id": "oran-mor",
"name": "A Play, a Pie and a Pint",
"area": "West End",
"colour": "#d54222",
"ink": "#ffffff",
"description": "A lunchtime theatre programme in a converted church at the top of Byres Road. Every week brings a new short play, with a pie and a drink included in the ticket.",
"website": "https://playpiepint.com",
"instagram": "playpiepint",
"programme": "theatre",
"url": "https://glasgowtheatre.com/venues/oran-mor.html",
"upcomingShows": 3,
"showsUrl": "https://glasgowtheatre.com/api/v1/venues/oran-mor/shows.json",
"concessions": {
"url": "https://playpiepint.com/",
"checkedAt": "2026-09-10",
"summary": "A Play, a Pie and a Pint tickets include a drink and a pie. Prices rise across the week, from Monday to Saturday, and a cheaper play-only ticket is held back for midweek performances.",
"schemes": [
{
"name": "Play-only ticket",
"broad": false,
"eligibility": "Tuesday to Thursday, for students, arts workers, and audience members who are unemployed or on a low income or household benefits. The ticket covers the play without the pie and drink.",
"how": "Chosen when booking."
}
],
"offers": [],
"fees": "Published prices include a £1.50 booking fee. A small extra fee applies when booking online through Universe."
}
}
What the data means
- Dates are Europe/London calendar dates. There is no UTC offset on
run.opens,run.closesor performance dates. - Only upcoming shows are published. The build drops expired listings, so an empty response means nothing is listed for that query.
- Prices are a guide.
pricing.fromcan be the cheapest seat still on sale, not the face value, especially at the King's, Theatre Royal and Pavilion.pricing.textis the venue's own wording;pricing.sourcesays how it was read;pricing.checkedAtsays when. - Not every show has performances. Where a venue publishes only a run,
performancesis empty andrun.timemay be the only time. - Accessibility is free text. It is not a structured guarantee; check the booking page.
- Images remain the venue's copyright. Credit is included where we have it.
- Attribution. Please credit Glasgow Theatre and link to glasgowtheatre.com when you use the data. Do not present it as official venue information.
Versioning
The path carries the major version: /api/v1. Minor versions are additive only, so a client written for 1.0 keeps working with 1.1. A breaking change gets /api/v2 and at least twelve months of overlap.
Changelog
- v1.1, October 2026. Venue objects gained
colourandinkfor the calendar's house palette. Additive;/api/v1is unchanged. - v1.0, October 2026. First public release: shows, venues, concessions, OpenAPI and JSON Schema.
Static snapshots and CORS
The .json endpoints are files written by the daily build; they are cached at the edge and are the safest thing to poll. The extensionless /shows endpoint is a Cloudflare Pages Function that filters the same snapshot. All endpoints send Access-Control-Allow-Origin: *, so they can be called from a browser on any origin.
Need a language example?
Open the interactive examples for JavaScript, Python, PHP, C and Go. Each one is editable, runs in a sandbox, and is also available as a file in the repository under examples/.