Import & Export

Download a room's timers, messages and questions, or load timers into a stage. Import and export need a Pro or Premium plan.


GET/rooms/{room_id}/export/{file}

Download an export

Downloads timers.csv (one stage's timers), messages.csv, questions.csv or room.json (the whole room, in the usual response wrapper).

Path parameters

  • Name
    room_id
    Type
    string
    Required
    Description

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

  • Name
    file
    Type
    string
    Required
    Description

    The file to download. One of timers.csv, messages.csv, questions.csv, room.json.

Query parameters

  • Name
    stage_id
    Type
    string
    Description

    Which stage (stage-1, stage-2); Stage #1 when omitted. One of stage-1, stage-2.

Request

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

Response 200

#,Start,Duration,Title,Speaker,Notes,Labels
1,09:00,0:20:00,Opening keynote,Ada Lovelace,,Keynote

POST/rooms/{room_id}/import

Import timers

Adds timers to a stage, or replaces its timers. append adds timers only, and refuses messages. replace stops that stage and removes its timers and the labels nothing else uses, plus operator messages if you send messages. Other stages, room settings and audience questions stay, unless you send settings.

Path parameters

  • Name
    room_id
    Type
    string
    Required
    Description

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

Body

  • Name
    mode
    Type
    string
    Required
    Description

    append adds after the current timers. replace takes their place. One of append, replace.

  • Name
    stage_id
    Type
    string
    Description

    Stage the timers go to; Stage #1 when omitted. replace replaces that stage's timers only. One of stage-1, stage-2.

  • Name
    expected_updated_at
    Type
    timestamp
    Description

    The room's _updated_at when you prepared the import. If the room has changed since, you get a 409.

  • Name
    labels
    Type
    array of objects
    Required
    Description

    Labels the imported timers use.

  • Name
    timers
    Type
    array of objects
    Required
    Description

    The timers to import. Your plan limits how many a stage can hold.

  • Name
    messages
    Type
    array of objects
    Description

    replace only: these become the room's operator messages. Refused with append.

  • Name
    settings
    Type
    object
    Description

    Room-wide settings that every timer and output inherits.

Request

POST
/rooms/{room_id}/import
curl -X POST https://app.kloksi.com/api/v1/rooms/ROOM_ID/import \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"mode":"append","labels":[],"timers":[{"name":"Opening keynote","speaker":"Ada Lovelace","minutes":20,"labels":[]}]}'

Response 200

{
  "ok": true,
  "message": "Room imported",
  "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
      }
    ]
  }
}