Private API

Shows

Read, create, and update shows in a Confirmed production over HTTP. All endpoints return JSON.

GET /shows — list shows

Returns shows within a date window as a JSON array. A read or read-write token works.

Query parameters

Parameter

Type

Description

ts_from

timestamp

Earliest start time to include. Defaults to 10 days ago.

ts_to

timestamp

Latest start time to include. Defaults to 30 days ahead.

show_type

string

Restrict to a single show type.

Response

An array of show objects in the shape described under The show object.


GET /shows/{show_id} — get details for a specific show

Returns a single show. A read or read-write token works. An unknown id returns 404.

Example

curl https://your-host/api/v1/spectrum/shows/nan3 \
  -H "Authorization: Bearer <token>"

The show object

The read endpoints and the single-show PUT all return this shape. Spots are split by category into hosts, lineup, and production, each sorted by order.

Field

Type

Description

id

string

Show id.

type

string

Show type.

ts

timestamp

Start date & time.

doors_ts

timestamp

Doors time, derived from ts plus the doors offset.

venue_id

string

Venue id.

room_id

string

Room id.

description

string

Show description.

tags

string[]

Tags.

public

boolean

Whether the show is public.

production_contacts

string[]

Contact act ids.

hosts

Slot[]

Host spots.

lineup

Slot[]

Performer spots (categories act and break).

production

Slot[]

Production/crew spots.

Each spot carries the Slot fields, with the booked act under act_id. settled reads back as true when a spot has been settled.


POST /shows — create shows

Creates one show per entry in dates, each at the given time. All shows share the same type, venue, lineup, and contacts.

Request body

Field

Type

Required

Description

dates

string[]

Yes

One show per date. Format YYYY-MM-DD. Dates that don't parse are skipped.

time

string

Yes

Start time, HH:MM (24-hour). Combined with each date.

type

string

Yes

Show type. Must already exist in the production.

production_contacts

string[]

Yes

Act ids of the responsible contacts. Cannot be empty; each must be on the production's team.

venue_id

string

No

Venue id (also accepted as venueID). Must exist.

room_id

string

No

Room id (also accepted as roomID). Must belong to venue_id when that's given.

doors

integer

No

Doors offset in minutes relative to the start time.

public

boolean

No

Whether the show is public.

tags

string[]

No

Free-form tags.

description

string

No

Show description.

hosts

Slot[]

No

Host spots. Each entry is filed under category host and has to be in the shape of Slot (see below)

lineup

Slot[]

No

Performer spots. Category defaults to act (or break if specified). Has to be in the shape of Slot (see below)

production

Slot[]

No

Production/crew spots. Each entry is filed under category production. Has to be in the shape of Slot (see below)

Spot defaults. If none of the hosts,lineup,production are specified, the show will be created with 1 host, 3 acts, 1 production. Act spot length default to 10 minutes.

The Slot object

The shape of a single spot — used for the create arrays above and for spot_updates on the update endpoint. Unknown fields are rejected.

Field

Type

Description

actID

string

Booked act id (also accepted as act_id). Must be an act in the production.

category

enum

act, host, production, break, other. For hosts/production arrays it's set for you; in lineup it defaults to act.

order

integer

Position within the show. Auto-assigned on create if omitted; set it to reorder.

spot_length

integer

Length in minutes. Acts default to 10.

role

string

Role label (e.g. MC, headliner).

fee

string

Fee for the spot.

arrive_mins

integer

Arrival offset in minutes.

leave_mins

integer

Departure offset in minutes.

call_time

timestamp

Call time, YYYY-MM-DD HH:MM.

spot_start

timestamp

Spot start, YYYY-MM-DD HH:MM.

spot_end

timestamp

Spot end, YYYY-MM-DD HH:MM.

mc_opens

integer[]

For hosts: spot orders this host opens.

status

enum

planning (default), offered, confirmed, rejected, cancelled, no-show.

settled

string

Settlement marker; usually left to the settlement flow.

Example

curl -X POST https://your-host/api/v1/spectrum/shows \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "dates": ["2026-07-21"],
    "time": "21:00",
    "type": "dmx-madness",
    "production_contacts": ["ejcs"],
    "hosts":  [ { "role": "MC" } ],
    "lineup": [ { "actID": "b9b4" }, {}, {} ],
    "production": [ {}, {} ]
  }'

Response

Returns the count created and the new show ids:

{ "created": 1, "ids": ["nan3"] }

PUT /shows — update shows

Applies partial updates to one or more existing shows. Only the fields you send change; everything else is left as-is. If any entry fails validation, the whole batch is rejected before anything is written.

Request body

{
  "updates": [
    { "id": "<show id>", "changes": { ... } }
  ]
}

Each changes object may set any of these fields:

Field

Type

Description

type

string

Show type. Must exist in the production.

ts

timestamp

Start date & time, YYYY-MM-DD HH:MM.

venue_id

string

Venue id (or venueID). Must exist.

room_id

string

Room id (or roomID). Must belong to the venue when both are sent together.

doors

integer

Doors offset in minutes.

public

boolean

Public flag.

tags

string[]

Replaces the tag list.

description

string

Show description.

production_contacts

string[]

Contact act ids. Each must be on the team.

status

string

Show status.

currency

string

Show currency.

comment

string

Comment attached to the change.

spot_updates

object

Patch individual spots — see below.

Editing spots with spot_updates

A map of { spot_id: { field: value } }. Each named spot is merged in place — the fields you send overwrite that spot's values, every other field on the spot and every other spot on the show stays untouched. The value object takes the same fields as the Slot object above. A spot id that isn't on the show is rejected.

This does not replace the show's lineup. To change one spot's fee and reorder another, send only those two spot ids with only the fields that change.

Example

curl -X PUT https://your-host/api/v1/spectrum/shows \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "updates": [
      {
        "id": "nan3",
        "changes": {
          "ts": "2026-07-21 20:00",
          "venue_id": "5c9g",
          "room_id": "bpjj",
          "spot_updates": {
            "a1b2": { "actID": "b9b4", "fee": "150", "status": "confirmed" },
            "c3d4": { "order": 2 }
          }
        }
      }
    ]
  }'

Response

Returns the updated shows as a JSON array, each in the show object shape.


PUT /shows/{show_id} — update a specific show

Applies a partial update to a single show. The body is a changes object on its own — the same shape as one entry's changes in the bulk PUT above, with the id taken from the path. Only the fields you send change. An unknown id returns 404.

Example

curl -X PUT https://your-host/api/v1/spectrum/shows/nan3 \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "ts": "2026-07-21 20:00",
    "venue_id": "5c9g",
    "spot_updates": {
      "a1b2": { "fee": "150", "status": "confirmed" }
    }
  }'

Response

Returns the updated show in the show object shape.


Errors

Status

Meaning

400

Missing API token.

401

Invalid token.

403

Token lacks read-write permission.

404

No show with that id (single-show GET and PUT).

422

Validation failed — bad field, unknown reference (type / venue / room / act / contact), a room not in its venue, or an unknown spot id. The body carries an error describing what failed; no changes are written.

Was this helpful?