The shows endpoint
This endpoint gives you your production's public shows as JSON: their dates, venues, promotion and confirmed lineups. You can point a tour page or a listings site at it.
https://confirmed.show/api/v1/<your-production>/shows.json
It accepts GET requests, returns JSON, and allows cross-origin calls, so you can read it straight from a browser. You don't need an API key, because everything it returns is already public.
What it covers
You get the shows you've made public that haven't been cancelled, from thirty
days ago through to thirty days ahead. You can move the far end of that window with
future_shows_limit.
Only confirmed bookings show up in a lineup, so an act you're still waiting to hear from stays private until they say yes.
What stays private
The endpoint only shares information that isn't sensitive. It never includes:
- fees, settlements or anything else about money;
- call times, or arrival and leaving times;
- email addresses, phone numbers or payment details;
- your crew and production spots;
- notes, show reports or the custom fields your production adds under Data & API;
-
the room's capacity, though you get
tickets_availablewhen the room has one on record.
For any of that, you need an API key and the private Shows API.
Making a show public
You can publish shows from the show list by selecting them and setting their publish status from the toolbar. You can make a show private again the same way. It then drops out of this endpoint on the next call.
Response
You get back an array of shows, each with its scheduling, venue and room, promotional assets and lineup.
[
{
"id": "abc123",
"show_type": "friday-night",
"name": "Friday Night Comedy",
"emoji": "🎤",
"public_description": "Our flagship weekend show",
"duration": 90,
"ts": "2026-06-19T20:00:00",
"ts_utc": "2026-06-19T19:00:00Z",
"past": false,
"meta": {
"tickets_url": "https://tickets.example.com/abc123",
"event_url": "https://example.com/friday-night/june-19",
"promo_image": "https://st.confirmed.show/uploads/spectrum/shows/abc123/A1B2C3-promo.webp",
"promo_thumb": "https://st.confirmed.show/uploads/spectrum/shows/abc123/D4E5F6-thumb.webp",
"social_card": "https://st.confirmed.show/uploads/spectrum/shows/abc123/G7H8I9-card.webp",
"poster": "https://st.confirmed.show/uploads/spectrum/shows/abc123/J1K2L3-poster.webp",
"promo_blurb": "One night only, with a lineup we're keeping quiet until the doors open."
},
"tickets_available": 42,
"total_act_spots": 5,
"venue": {
"name": "The Comedy Cellar",
"city": "London",
"country": "GB",
"address": "1 Funny Street",
"postcode": "W1 2AB",
"tz": "Europe/London",
"description": "Basement room off the high street"
},
"room": {
"name": "Main Room",
"description": "",
"wheelchairAccess": true,
"greenRoom": true,
"diBox": false,
"projectorInfo": ""
},
"hosts": [
{
"name": "Jane Doe",
"category": "host",
"bio": "Compère and award-winning host.",
"headshot": "https://.../jane.jpg",
"website": "https://janedoe.com",
"instagram": "janedoe"
}
],
"acts": [
{
"name": "John Smith",
"category": "act",
"spot_length": 20,
"bio": "Touring headliner.",
"headshot": "https://.../john.jpg"
}
],
"lineup": [
{ "name": "Jane Doe", "category": "host" },
{ "name": "John Smith", "category": "act" }
]
}
]
Show fields
| Field | Description |
|---|---|
id |
The show's id |
show_type |
Which of your show types it is |
name |
The show's public name |
emoji |
The show type's emoji, when it has one |
public_description |
The description you show the public |
duration |
How long the show runs, in minutes |
ts |
Start time where the show happens, in the venue's timezone |
ts_utc |
The same start time in UTC, as ISO 8601 |
past |
Whether the show has already ended |
meta |
The show's promotion in full: pictures, video and blurb. See Promotion. |
tickets_available |
How many seats are left, when the room has a capacity on record |
total_act_spots |
How many act spots the show has |
venue |
The venue |
room |
The room |
hosts |
The confirmed hosts |
acts |
The confirmed acts |
lineup |
Hosts and acts together, in running order |
spot_roles |
The roles in play, when you're filtering by them |
Promotion
Everything your team fills in under Meta on the show card comes out in
meta: the ticket link, the pictures, a video and a blurb. You can build a
listing card or a show page from it.
| Field | Description |
|---|---|
tickets_url |
Where the audience buys tickets |
event_url |
The show's own page, separate from the ticket seller |
promo_image |
The main promotional picture |
promo_thumb |
A thumbnail of it, for a dense listing |
social_card |
The picture shown when someone shares a link to the show. It's the one
to use as your og:image.
|
promo_video |
A promotional video |
poster |
Poster artwork, usually portrait and larger than the rest |
promo_blurb |
A short description for listings and socials |
A field only appears once a show has a value for it, so it's worth checking before
you use one. A show with no promotion at all still has meta, as an empty
object.
Every picture is a URL you can use directly. Each one is sized to the shape the production chose, so covers and posters from one production share an aspect ratio. You can lay them out without measuring each one.
Where the values come from
When a show has no value of its own for a field, it falls back to the default you set for its show type under Live Pages. You can give a whole show type one ticket link and one cover, and only override the nights that differ. A show's own value is the most specific, so it always wins over the show type's default and over any city or venue exception.
Custom fields a production adds under Data & API aren't included here. This endpoint needs no key, so it leaves out anything a production may have meant only for its own integrations. With an API key, you can read and write all of them through the private Shows API.
Venue fields
| Field | Description |
|---|---|
name |
Venue name |
city |
The city it's in |
country |
ISO country code |
address |
Street address |
postcode |
Postcode |
tz |
IANA timezone that ts is in |
description |
Venue description |
Room fields
| Field | Description |
|---|---|
name |
Room name |
description |
Room description |
wheelchairAccess |
Whether the room is wheelchair accessible |
greenRoom |
Whether there's a green room |
diBox |
Whether there's a DI box |
projectorInfo |
Notes on the projector |
Performer fields
Everyone in hosts, acts and lineup has these
fields.
| Field | Description |
|---|---|
name |
Their name |
category |
host or act |
spot_length |
How long they're on for, in minutes. Acts only. |
bio |
Their bio, unless the production keeps bios off this endpoint |
headshot |
Headshot URL |
website |
Their website |
twitter |
Twitter handle or URL |
instagram |
|
facebook |
|
tiktok |
TikTok |
plug |
What they're plugging at the moment |
You can add -thumb to a headshot URL to get a small version of it.
Query parameters
| Parameter | Description |
|---|---|
future_shows_limit |
How many days ahead to include. Thirty by default. |
id / show_id |
Fetches one show by id, regardless of the date window |
show_types |
Only returns shows of these types. Separate the ids with commas. |
Example
const response = await fetch(
"https://confirmed.show/api/v1/your-production/shows.json?future_shows_limit=60"
);
const shows = await response.json();
for (const show of shows) {
console.log(show.name, show.ts_utc, show.venue?.city);
if (show.meta.tickets_url) {
console.log(" tickets:", show.meta.tickets_url);
}
if (show.meta.social_card) {
console.log(" og:image:", show.meta.social_card);
}
}
If anything here doesn't behave the way this page describes, write to support@confirmed.show and we'll sort it out.