Rooms

A room holds two stages, their timers, messages and labels. Use these endpoints to read a room, change its settings and create share links for its outputs.


The room object

Timers and messages aren't part of this object. They have their own endpoints.

  • Name
    _id
    Type
    string
    Description

    Unique id.

  • Name
    _model
    Type
    string
    Description

    The type of this object. Always room.

  • Name
    _updated_at
    Type
    timestamp
    Description

    When it last changed.

  • Name
    name
    Type
    string
    Description

    The name.

  • Name
    date
    Type
    string
    Description

    The event date as YYYY-MM-DD, or an empty string for none. Scheduled timers start on this day, and don't start without a date. You can't change it while a timer is running or paused.

  • Name
    blackout
    Type
    boolean
    Description

    Whether the Viewer is blacked out.

  • Name
    dim
    Type
    integer
    Description

    How dark the Viewer is, as a percentage. 100 is the same as blackout. From 0 to 100.

  • Name
    focus_message
    Type
    boolean
    Description

    Deprecated. Always false.

  • Name
    on_air
    Type
    boolean
    Description

    Whether the room is on air.

  • Name
    logo
    Type
    string
    Description

    The URL of the room's custom logo. An empty string means it uses its team's logo, or Kloksi's.

  • Name
    timezone
    Type
    string
    Description

    The room's timezone in IANA format, such as Europe/Berlin.

  • Name
    language
    Type
    string
    Description

    The language the room shows: its own, or else its team's. One of en, ru.

  • Name
    team_id
    Type
    string or null
    Description

    The team the room belongs to.

  • Name
    accepting_questions
    Type
    boolean
    Description

    Whether the Submit form accepts questions. Off by default.

  • Name
    questionnaire
    Type
    object
    Description

    How the Submit form looks: its logo and texts.

  • Name
    protected_outputs
    Type
    array of strings
    Description

    The outputs whose pages require their output password.

  • Name
    archived
    Type
    boolean
    Description

    Whether the room is archived. An archived room refuses every change.

  • Name
    cue_stage_id
    Type
    string
    Description

    The stage holding the room's cue. Transport endpoints act on it unless you name a timer.

  • Name
    stages
    Type
    array of objects
    Description

    Every stage in tab order. Each is an independent timer list that plays on its own; either may be empty.


GET/rooms/{room_id}

Get a room

Returns the room's settings and its stages.

Path parameters

  • Name
    room_id
    Type
    string
    Required
    Description

    The room's id, from its address: /o/ROOM_ID/….

Request

GET
/rooms/{room_id}
curl https://app.kloksi.com/api/v1/rooms/ROOM_ID \
  -H "Authorization: Bearer YOUR_API_KEY"

Response 200

{
  "ok": true,
  "message": "Room loaded",
  "data": {
    "_id": "x7kp2mqa",
    "_model": "room",
    "_updated_at": "2026-11-05T09:30:00.000Z",
    "name": "Annual Conference",
    "date": "2026-11-05",
    "blackout": false,
    "dim": 0,
    "focus_message": false,
    "on_air": false,
    "logo": "",
    "timezone": "Europe/Berlin",
    "language": "en",
    "team_id": "6f2c1e9ab04d7c3e8a5b1d20",
    "accepting_questions": false,
    "questionnaire": {
      "logo": {
        "mode": "kloksi"
      },
      "title": "",
      "subtitle": "",
      "question_label": "",
      "name_label": "",
      "hide_name": false
    },
    "protected_outputs": [
      "controller"
    ],
    "archived": false,
    "cue_stage_id": "stage-1",
    "stages": [
      {
        "_id": "x7kp2mqa",
        "name": "Annual Conference",
        "active_timer_id": "V1StGXR8Z5jd",
        "timers_count": 1,
        "end_of_show": null,
        "end_of_show_trigger": "MANUAL",
        "end_of_show_loops": 2,
        "end_of_show_new_day": false,
        "show_run": null
      }
    ]
  }
}

PATCH/rooms/{room_id}

Update a room

Changes only the fields you send.

Path parameters

  • Name
    room_id
    Type
    string
    Required
    Description

    The room's id, from its address: /o/ROOM_ID/….

Body

  • Name
    stage_id
    Type
    string
    Description

    Which stage end_of_show* apply to; Stage #1 when omitted. One of stage-1, stage-2.

  • Name
    name
    Type
    string
    Description

    The name. At most 50 characters.

  • Name
    date
    Type
    string
    Description

    The event date as YYYY-MM-DD, or an empty string for none. Scheduled timers start on this day, and don't start without a date. You can't change it while a timer is running or paused.

  • Name
    blackout
    Type
    boolean
    Description

    Whether the Viewer is blacked out.

  • Name
    dim
    Type
    integer
    Description

    How dark the Viewer is, as a percentage. 100 is the same as blackout. From 0 to 100.

  • Name
    on_air
    Type
    boolean
    Description

    Whether the room is on air.

  • Name
    logo
    Type
    string
    Description

    The URL of the room's custom logo. An empty string means it uses its team's logo, or Kloksi's.

  • Name
    timezone
    Type
    string
    Description

    The room's timezone in IANA format, such as Europe/Berlin.

  • Name
    end_of_show
    Type
    timestamp or null
    Description

    A fixed end of show. Null means it's calculated from the timers.

  • Name
    end_of_show_trigger
    Type
    string
    Description

    What the last timer does at 0:00. MANUAL follows its overtime setting, LINKED stops at 0:00, and LOOP restarts the show until it has played end_of_show_loops times. One of MANUAL, LINKED, LOOP.

  • Name
    end_of_show_loops
    Type
    integer
    Description

    How many times the show plays in total, when the trigger is LOOP. From 2 to 10.

  • Name
    end_of_show_new_day
    Type
    boolean
    Description

    Starts a new day at the end of show (true) or removes it (false).

Request

PATCH
/rooms/{room_id}
curl -X PATCH https://app.kloksi.com/api/v1/rooms/ROOM_ID \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Annual Conference","timezone":"Europe/Berlin"}'

Response 200

{
  "ok": true,
  "message": "Room updated",
  "data": {
    "_id": "x7kp2mqa",
    "_model": "room",
    "_updated_at": "2026-11-05T09:30:00.000Z",
    "name": "Annual Conference",
    "date": "2026-11-05",
    "blackout": false,
    "dim": 0,
    "focus_message": false,
    "on_air": false,
    "logo": "",
    "timezone": "Europe/Berlin",
    "language": "en",
    "team_id": "6f2c1e9ab04d7c3e8a5b1d20",
    "accepting_questions": false,
    "questionnaire": {
      "logo": {
        "mode": "kloksi"
      },
      "title": "",
      "subtitle": "",
      "question_label": "",
      "name_label": "",
      "hide_name": false
    },
    "protected_outputs": [
      "controller"
    ],
    "archived": false,
    "cue_stage_id": "stage-1",
    "stages": [
      {
        "_id": "x7kp2mqa",
        "name": "Annual Conference",
        "active_timer_id": "V1StGXR8Z5jd",
        "timers_count": 1,
        "end_of_show": null,
        "end_of_show_trigger": "MANUAL",
        "end_of_show_loops": 2,
        "end_of_show_new_day": false,
        "show_run": null
      }
    ]
  }
}

POST/rooms/{room_id}/connections

Returns a token for a link to one output. Build the link as https://app.kloksi.com/o/ROOM_ID/VIEW?c=TOKEN. It opens that output only. Team rooms have no Controller links, so controller is refused with a 403.

Path parameters

  • Name
    room_id
    Type
    string
    Required
    Description

    The room's id, from its address: /o/ROOM_ID/….

Body

  • Name
    view
    Type
    string
    Required
    Description

    The output the link opens. One of controller, viewer, agenda, moderator.

Request

POST
/rooms/{room_id}/connections
curl -X POST https://app.kloksi.com/api/v1/rooms/ROOM_ID/connections \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"view":"viewer"}'

Response 200

{
  "ok": true,
  "message": "Connection issued",
  "data": {
    "connection_id": "0b9c4f2e-7a31-4d6e-9f10-3c5a8e2d1b74"
  }
}