{"openapi":"3.1.0","info":{"title":"Active Timers and Schedule API","version":"1","x-calls-per-minute":300,"description":"Control Active Timers and Schedule rooms from other systems. Keys are made by signed-in users in the technician's window (one room) or on My rooms (the whole account). Send the key as \"Authorization: Bearer <key>\" or as \"?key=<key>\". Every key may make 300 calls a minute; the headers RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset say where you stand. Answers are {\"ok\": true, \"data\": …} or {\"ok\": false, \"error\": {\"code\", \"message\"}}."},"servers":[{"url":"https://timer.activeled.se/api/v1"}],"tags":[{"name":"General"},{"name":"Rooms"},{"name":"Status"},{"name":"Transport"},{"name":"Message"},{"name":"Name plates"},{"name":"Timers"}],"paths":{"/":{"get":{"operationId":"index","tags":["General"],"summary":"Where the documentation is.","description":"No key needed.","x-scope":"none","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Index"}}}}}}}}},"/openapi.json":{"get":{"operationId":"openapi","tags":["General"],"summary":"This API as an OpenAPI 3.1 document.","description":"No key needed.","x-scope":"none","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/ping":{"get":{"operationId":"ping","tags":["General"],"summary":"Check a key: says what it may do and which room it belongs to.","description":"Any key.","x-scope":"any","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Ping"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms":{"get":{"operationId":"rooms.list","tags":["Rooms"],"summary":"The rooms on the account, and after them the rooms other people have let the account edit – those carry sharedBy.","description":"An account key.","x-scope":"account","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/Room"}}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"rooms.create","tags":["Rooms"],"summary":"Create a room.","description":"An account key.","x-scope":"account","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Room"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"Event name, at most 120 characters."},"mode":{"type":"string","description":"\"basic\" (a list of timers; the default) or \"advanced\" (timers and schedule: clock times, headings and a schedule page to share)."}}}}}}}},"/rooms/{room}":{"get":{"operationId":"rooms.get","tags":["Rooms"],"summary":"One room with its settings, run list and status.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/RoomDetail"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"patch":{"operationId":"rooms.update","tags":["Rooms"],"summary":"Rename a room or change its settings. Send only what should change.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/RoomDetail"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"Event name."},"settings":{"type":"object","description":"Any of: columns (the room's own columns, see Settings), crewPage and crewNotes (true or false), mode (\"basic\" or \"advanced\"), yellowSec and redSec (seconds left when the clock turns yellow and red, 0–3600), showTitle, showClock, blinkOver (true or false), dayStart (when the first row is planned to start, \"HH:MM\" in the organiser's own clock, or \"\" for no schedule), screens (the designs the stage screen and the Now and Next screen draw with: { stage, nownext }, each a design id of the room owner's or \"\" for the built-in screen)."}}}}}}},"delete":{"operationId":"rooms.delete","tags":["Rooms"],"summary":"Delete a room with its run list and its keys. Cannot be undone. Only for the room's owner: a room that is shared with you answers 403.","description":"An account key.","x-scope":"account","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Deleted"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/status":{"get":{"operationId":"status.get","tags":["Status"],"summary":"What is on stage right now: time left, colour, current and next timer, message.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/clock.txt":{"get":{"operationId":"status.clock","tags":["Status"],"summary":"Only the clock as plain text, for example 4:59 or +0:12. Empty when nothing is on stage.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"Plain text.","content":{"text/plain":{"schema":{"type":"string"}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/table.json":{"get":{"operationId":"status.table","tags":["Status"],"summary":"The status as a one-row table of plain text, for programs that read JSON as rows and columns – vMix data sources. With the speaker on stage split into one column per name, for name plates.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Table"}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/events":{"get":{"operationId":"status.events","tags":["Status"],"summary":"A live stream (Server-Sent Events). Sends the event \"status\" at once, after every change, and when the colour changes. Count the seconds yourself from endsAt.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"Events named \"status\"; the data of each is {\"status\": Status}.","content":{"text/event-stream":{"schema":{"type":"string"}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/report":{"get":{"operationId":"report.get","tags":["Status"],"summary":"How the timers were actually run: one entry each time a timer left the stage, with planned and used time. What ran while the technician's window was offline is not included.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/Run"}}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/start":{"get":{"operationId":"run.start.get","tags":["Transport"],"summary":"Start. With a timer or position: that timer from the beginning. Without: continue the loaded timer, or start the first row when nothing is loaded.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"timer","in":"query","required":false,"description":"Timer id.","schema":{"type":"string"}},{"name":"position","in":"query","required":false,"description":"The row's number in the run list, as the technician's window shows it: 1 = the first timer, headings are not counted. Used when no timer id is given.","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"run.start.post","tags":["Transport"],"summary":"Start. With a timer or position: that timer from the beginning. Without: continue the loaded timer, or start the first row when nothing is loaded.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"timer","in":"query","required":false,"description":"Timer id.","schema":{"type":"string"}},{"name":"position","in":"query","required":false,"description":"The row's number in the run list, as the technician's window shows it: 1 = the first timer, headings are not counted. Used when no timer id is given.","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/pause":{"get":{"operationId":"run.pause.get","tags":["Transport"],"summary":"Pause the running timer.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"run.pause.post","tags":["Transport"],"summary":"Pause the running timer.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/toggle":{"get":{"operationId":"run.toggle.get","tags":["Transport"],"summary":"Pause when running, otherwise start – for a single button.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"run.toggle.post","tags":["Transport"],"summary":"Pause when running, otherwise start – for a single button.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/next":{"get":{"operationId":"run.next.get","tags":["Transport"],"summary":"Start the next row in the run list. Headings are passed over. At the end of the list nothing happens.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"run.next.post","tags":["Transport"],"summary":"Start the next row in the run list. Headings are passed over. At the end of the list nothing happens.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/reset":{"get":{"operationId":"run.reset.get","tags":["Transport"],"summary":"Put the loaded timer back to its full time, stopped.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"run.reset.post","tags":["Transport"],"summary":"Put the loaded timer back to its full time, stopped.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/load":{"get":{"operationId":"run.load.get","tags":["Transport"],"summary":"Put a timer on stage without starting it. Needs a timer or a position.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"timer","in":"query","required":false,"description":"Timer id.","schema":{"type":"string"}},{"name":"position","in":"query","required":false,"description":"The row's number in the run list, as the technician's window shows it: 1 = the first timer, headings are not counted. Used when no timer id is given.","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"run.load.post","tags":["Transport"],"summary":"Put a timer on stage without starting it. Needs a timer or a position.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"timer","in":"query","required":false,"description":"Timer id.","schema":{"type":"string"}},{"name":"position","in":"query","required":false,"description":"The row's number in the run list, as the technician's window shows it: 1 = the first timer, headings are not counted. Used when no timer id is given.","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/clear":{"get":{"operationId":"run.clear.get","tags":["Transport"],"summary":"Take the timer off the stage.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"run.clear.post","tags":["Transport"],"summary":"Take the timer off the stage.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/adjust":{"get":{"operationId":"run.adjust.get","tags":["Transport"],"summary":"Give the loaded timer more or less time.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"seconds","in":"query","required":true,"description":"Seconds to add; negative takes time off. Between -3600 and 3600.","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"run.adjust.post","tags":["Transport"],"summary":"Give the loaded timer more or less time.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"seconds","in":"query","required":true,"description":"Seconds to add; negative takes time off. Between -3600 and 3600.","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/message/show":{"get":{"operationId":"message.show.get","tags":["Message"],"summary":"Show a message to the speaker on the stage screen.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"text","in":"query","required":true,"description":"At most 200 characters.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"message.show.post","tags":["Message"],"summary":"Show a message to the speaker on the stage screen.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"text","in":"query","required":true,"description":"At most 200 characters.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/message/hide":{"get":{"operationId":"message.hide.get","tags":["Message"],"summary":"Take the message away.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"message.hide.post","tags":["Message"],"summary":"Take the message away.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Status"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/plates":{"get":{"operationId":"plates.get","tags":["Name plates"],"summary":"The name plates for the stream: the plate on air, the names the row on stage offers, the look, and the overlay link. Only in the advanced mode.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Plates"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/plates/show":{"get":{"operationId":"plates.show.get","tags":["Name plates"],"summary":"Put a plate on air: a name of the row on stage by number, or any name. One plate at a time – it replaces the one that is on.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"number","in":"query","required":false,"description":"Which name of the row on stage: 1 = the first, up to 4 – as the control page numbers them. The row's title becomes the second line, unless the control page says the name alone.","schema":{"type":"integer"}},{"name":"name","in":"query","required":false,"description":"A name of your own instead, at most 80 characters.","schema":{"type":"string"}},{"name":"line","in":"query","required":false,"description":"The line under a name of your own, at most 120 characters.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Plates"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"plates.show.post","tags":["Name plates"],"summary":"Put a plate on air: a name of the row on stage by number, or any name. One plate at a time – it replaces the one that is on.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"number","in":"query","required":false,"description":"Which name of the row on stage: 1 = the first, up to 4 – as the control page numbers them. The row's title becomes the second line, unless the control page says the name alone.","schema":{"type":"integer"}},{"name":"name","in":"query","required":false,"description":"A name of your own instead, at most 80 characters.","schema":{"type":"string"}},{"name":"line","in":"query","required":false,"description":"The line under a name of your own, at most 120 characters.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Plates"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/plates/hide":{"get":{"operationId":"plates.hide.get","tags":["Name plates"],"summary":"Take the plate off air.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Plates"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"post":{"operationId":"plates.hide.post","tags":["Name plates"],"summary":"Take the plate off air.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room. GET and POST do the same; with POST the values may also be sent as JSON.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Plates"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}},"/rooms/{room}/timers":{"get":{"operationId":"timers.list","tags":["Timers"],"summary":"The run list, in order.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/Timer"}}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"put":{"operationId":"timers.replace","tags":["Timers"],"summary":"Replace the whole run list in one call, for example with the agenda from another system. A timer keeps its id when you send the id along. The timer on stage is taken off if it is no longer in the list.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/Timer"}}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["timers"],"properties":{"timers":{"type":"array","description":"The timers in order, each with title, durationSec and note (and id to keep an existing timer). A row with heading: true is a heading in the schedule."}}}}}}},"post":{"operationId":"timers.create","tags":["Timers"],"summary":"Add a timer, last in the list or at a position.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Timer"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"title":{"type":"string","description":"Shown on stage, at most 120 characters."},"durationSec":{"type":"integer","description":"Length in seconds, 0–86400. 300 when left out."},"note":{"type":"string","description":"Only the technician sees it, at most 500 characters."},"speaker":{"type":"string","description":"Who holds the item, at most 80 characters. Shown after the title on stage and on the schedule page. \"\" takes it away."},"startAt":{"type":"string","description":"A fixed start, \"HH:MM\": the row is planned for that time whatever the rows before it add up to. \"\" takes it away."},"cells":{"type":"object","description":"What stands in the room's own columns on this row: { \"<column id>\": \"text\" }, at most 200 characters each. Only the cells named are changed; \"\" empties one. The columns are in the room's settings."},"heading":{"type":"boolean","description":"true makes the row a heading in the schedule (\"Morning\"): a title only, no time, never on stage."},"position":{"type":"integer","description":"Row to put it on, 1 = first; headings count as rows here. Last when left out."}}}}}}}},"/rooms/{room}/timers/{timer}":{"get":{"operationId":"timers.get","tags":["Timers"],"summary":"One timer.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"timer","in":"path","required":true,"description":"Timer id, as given by the timer list.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Timer"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]},"patch":{"operationId":"timers.update","tags":["Timers"],"summary":"Change a timer or move it. Send only what should change.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"timer","in":"path","required":true,"description":"Timer id, as given by the timer list.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Timer"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"title":{"type":"string","description":"Shown on stage, at most 120 characters."},"durationSec":{"type":"integer","description":"Length in seconds, 0–86400."},"note":{"type":"string","description":"Only the technician sees it, at most 500 characters."},"speaker":{"type":"string","description":"Who holds the item, at most 80 characters. Shown after the title on stage and on the schedule page. \"\" takes it away."},"startAt":{"type":"string","description":"A fixed start, \"HH:MM\": the row is planned for that time whatever the rows before it add up to. \"\" takes it away."},"cells":{"type":"object","description":"What stands in the room's own columns on this row: { \"<column id>\": \"text\" }, at most 200 characters each. Only the cells named are changed; \"\" empties one. The columns are in the room's settings."},"position":{"type":"integer","description":"Row to move it to, 1 = first; headings count as rows here."}}}}}}},"delete":{"operationId":"timers.delete","tags":["Timers"],"summary":"Remove a timer from the run list.","description":"The room's key, or an account key – the owner's, or that of somebody the owner lets edit the room.","x-scope":"room","parameters":[{"name":"room","in":"path","required":true,"description":"Room id, 12 characters. It is the last part of the address of the technician's window.","schema":{"type":"string"}},{"name":"timer","in":"path","required":true,"description":"Timer id, as given by the timer list.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"data":{"$ref":"#/components/schemas/Deleted"}}}}}},"401":{"description":"No key, or a key that does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"More than 300 calls in a minute with this key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearer":[]},{"key":[]}]}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"},"key":{"type":"apiKey","in":"query","name":"key"}},"schemas":{"Status":{"type":"object","properties":{"room":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"state":{"type":"string","enum":["idle","ready","running","paused"],"description":"idle = nothing on stage, ready = loaded but not started."},"phase":{"type":"string","enum":["idle","normal","yellow","red","over"],"description":"The colour of the clock. over = the time is up and the clock counts up."},"clock":{"type":"string","description":"The clock as the stage shows it: 4:59, 1:04:59, +0:12. Empty when idle."},"remainingSec":{"type":["integer","null"],"description":"Seconds left; negative when over time. null when idle."},"endsAt":{"type":["integer","null"],"description":"When the time is up, in milliseconds since 1970 (server time). Only while running."},"nextPhaseAt":{"type":["integer","null"],"description":"When the colour changes next by itself (server time), or null."},"timer":{"type":["object","null"],"properties":{"id":{"type":"string"},"position":{"type":"integer"},"title":{"type":"string"},"durationSec":{"type":"integer"},"speaker":{"type":"string"},"names":{"type":"array","items":{"type":"string"},"description":"The names in the speaker field, one by one (at most four) – the plates the row offers."}},"description":"The timer on stage."},"next":{"type":["object","null"],"properties":{"id":{"type":"string"},"position":{"type":"integer"},"title":{"type":"string"},"durationSec":{"type":"integer"},"speaker":{"type":"string"},"names":{"type":"array","items":{"type":"string"},"description":"The names in the speaker field, one by one (at most four) – the plates the row offers."}},"description":"The row after it."},"message":{"type":"string","description":"The message shown to the speaker; empty when none."},"plate":{"type":["object","null"],"properties":{"name":{"type":"string"},"line":{"type":"string"}},"description":"The plate on air, or null."},"serverTime":{"type":"integer","description":"The server's clock when this was written, in milliseconds since 1970."},"rev":{"type":"integer","description":"Goes up by one with every change in the room."}}},"Plates":{"type":"object","properties":{"shown":{"type":["object","null"],"properties":{"name":{"type":"string"},"line":{"type":"string"}},"description":"The plate on air, or null."},"names":{"type":"array","items":{"type":"object","properties":{"number":{"type":"integer"},"name":{"type":"string"},"line":{"type":"string"}}},"description":"The plates the row on stage offers, numbered from 1."},"template":{"type":"string","description":"The look: clean, dark, block, line, news, classic, centre, rounded, or the id of an own look."},"accent":{"type":"string","description":"\"#rrggbb\" or \"\" for the look's own colour."},"size":{"type":"string","enum":["s","m","l"]},"line":{"type":"string","enum":["title","none"],"description":"What stands under a name from the run list: the item's title, or nothing. Set on the control page."},"overlayUrl":{"type":"string","description":"The page to add as a browser source in the video mixer."}}},"Timer":{"type":"object","properties":{"id":{"type":"string"},"position":{"type":["integer","null"],"description":"The number shown in the technician's window: 1 = the first timer. Headings are not counted and have null."},"title":{"type":"string"},"durationSec":{"type":"integer"},"note":{"type":"string"},"heading":{"type":"boolean","description":"Present and true on a heading row: a title only, no time."},"speaker":{"type":"string","description":"Who holds the item. Present when set."},"startAt":{"type":"string","description":"The row's fixed start, \"HH:MM\". Present when set."},"cells":{"type":"object","description":"The room's own columns on this row, by column id. Present when something is written."}}},"Room":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"mode":{"type":"string","enum":["basic","advanced"]},"timers":{"type":"integer","description":"Number of timers, headings not counted."},"stageUrl":{"type":"string","description":"The link to open on the screen by the stage."},"updatedAt":{"type":"string"},"sharedBy":{"type":"string","description":"Only on a room that belongs to somebody else who lets you edit it: the owner's email address."}}},"RoomDetail":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"sharedBy":{"type":"string","description":"Only on a room that is shared with you: the owner's email address."},"stageUrl":{"type":"string"},"scheduleUrl":{"type":["string","null"],"description":"The schedule page to share – titles and times, no notes. null in the basic mode."},"crewUrl":{"type":["string","null"],"description":"The crew page – the schedule with the room's own columns. null unless settings.crewPage is true and the room is advanced."},"platesUrl":{"type":["string","null"],"description":"The name-plate overlay for a video mixer. null in the basic mode."},"settings":{"type":"object","properties":{"mode":{"type":"string","enum":["basic","advanced"],"description":"basic = a list of timers; advanced = timers and schedule."},"yellowSec":{"type":"integer"},"redSec":{"type":"integer"},"showTitle":{"type":"boolean"},"showClock":{"type":"boolean"},"blinkOver":{"type":"boolean"},"dayStart":{"type":"string","description":"\"HH:MM\" or \"\"."},"crewPage":{"type":"boolean","description":"true shares the crew page: the schedule with the room's own columns, on a link of its own (crewUrl)."},"crewNotes":{"type":"boolean","description":"true puts the notes on the crew page too."},"columns":{"type":"array","description":"The room's own columns for the crew (audio, video, light …), at most four: [{ id, name }]. Send the whole list to change it; leave id out for a new column.","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}}},"screens":{"type":"object","description":"The designs made in the designer that the screens draw with. Each is a design id of the room owner's, or \"\" for the built-in screen. Only the screens named change.","properties":{"stage":{"type":"string","description":"The stage screen."},"nownext":{"type":"string","description":"The Now and Next screen."}}}}},"timers":{"type":"array","items":{"$ref":"#/components/schemas/Timer"}},"status":{"$ref":"#/components/schemas/Status"}}},"Table":{"type":"array","description":"Always exactly one row, always the same columns.","items":{"type":"object","properties":{"clock":{"type":"string"},"state":{"type":"string"},"phase":{"type":"string"},"title":{"type":"string","description":"The item on stage."},"speaker":{"type":"string","description":"Its speaker field as written."},"speaker1":{"type":"string","description":"The first name in the speaker field: \"Anna Berg, Bo Ek & Cia Dahl\" gives Anna Berg. For a panel, one plate each."},"speaker2":{"type":"string"},"speaker3":{"type":"string"},"speaker4":{"type":"string","description":"Empty when the field has fewer names."},"next":{"type":"string","description":"The item after it."},"nextSpeaker":{"type":"string"},"message":{"type":"string"}}}},"Run":{"type":"object","properties":{"timer":{"type":"string","description":"Timer id."},"title":{"type":"string"},"plannedSec":{"type":"integer","description":"Its length, with added or removed time."},"usedSec":{"type":"integer","description":"How long the clock ran, pauses not counted."},"overSec":{"type":"integer","description":"usedSec − plannedSec; negative when it ended early."},"startedAt":{"type":"integer","description":"When it first started, in milliseconds since 1970."},"endedAt":{"type":"integer","description":"When it left the stage."}}},"Ping":{"type":"object","properties":{"key":{"type":"object","properties":{"scope":{"type":"string","enum":["room","account"]},"room":{"type":["string","null"]}}},"serverTime":{"type":"integer"}}},"Index":{"type":"object","properties":{"service":{"type":"string"},"version":{"type":"string"},"docs":{"type":"string"},"openapi":{"type":"string"}}},"Deleted":{"type":"object","properties":{"deleted":{"type":"string"}}},"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","rate_limited","server_error"]},"message":{"type":"string"}}}}}}}}