Skip to main content
A deck is a JSON array of steps. It is the same shape the editor saves, and the API takes and returns it whole. There are three kinds of step.
The opener a deck used to start with, carrying the six-digit code and the QR while the room fills. New decks never have one. Since 2 Oct 2026 the code is a widget: add a join widget to any slide and it shows the code, the QR and the link there. Decks written before that can still carry this step and the API still reads it, but no verb creates one.

Cards

A slide titled Q3 kick-off, with a multiple-choice card in the bottom-right quarter

A card on a slide, beside the slide's own content. Drawn by get_screenshot.

A poll on a slide is a card: the poll, a rect and a style. Leave both out and you get the house card, the bottom-right quarter with the default look, exactly what the editor drops. Send a partial style and only those fields change. The card must stay on the slide: x + w and y + h at most 1. The API refuses a card that runs off. A card under its look’s minimum size (30% of the slide’s width and 45% of its height for most looks, more for a few) is too small to read, and warnings says so.

Ids

Steps, cards, text boxes, shapes and images carry an id. Leave it out and the server fills one in. Ids survive replace_step for the steps you did not touch. move_step keeps every id, and duplicate_step gives the copy fresh ones.

Numbering

The API counts steps from 0, and every step can be addressed. The editor’s counter starts at 1, so what the editor shows as 3 of 8 is step 2 in the API.

Reading a deck

  • get_outline reads every step in a line. For a slide it lists every element with its rect, which elements cover each other, and the warnings, without the pictures’ bytes. Read it first.
  • get_step reads one step whole.
  • get_deck returns the whole document, images included.

Changing a deck

Two ways, and both go through the same rules.
  • Whole document. update_deck replaces the document as you send it. Never a merge.
  • One step at a time. add_step, replace_step, remove_step, move_step and duplicate_step change one step without resending the rest.
  • One thing on a slide. add_overlay, update_overlay and remove_overlay act on one card. add_element, update_element and remove_element act on one text box, shape or picture. What an update leaves out stays as it was.
The step and element verbs always write onto the revision they read. Every write that changes a deck answers with revision, ready, problems and warnings. See Readiness and Revisions.

The widgets

Every poll has a type, a prompt and, where it takes answers, options. The widget gallery shows every one as the room sees it. The properties each reads, the looks it can take and what it needs before it can go on stage are in the document and widgets reference, generated from the code that enforces them.