Skip to main content
v1
A quiz shows its answer in the second colour, and a choice poll can draw Slim bars.
  • A choice poll takes mcStyle: "slim", called Slim bars in the editor: each option’s name and share on one line, with a slim bar under it as long as the share, so a long name never has to fit inside its bar.
  • Once a quiz’s answer is revealed, the bars and slim looks draw the right answer in the card’s counter and every other bar in the accent. The other choice looks draw the right answer in the counter and keep fading the rest. A card without a counter shows the right answer in the accent, as before.
A card takes a second colour, and the quiz standings follow the deck.
  • The card style takes counter, a hex for the deck’s second colour beside accent. An NPS card draws its promoters in it and its passives in the accent. The standings at the end of a quiz put their winner in the quiz card’s counter. Left out, both places take the accent as before.
  • The standings a presenter puts over a slide are now a card on that slide, in the colours, face and corners of the deck’s quiz card, instead of a screen of their own in our blue.
  • An NPS card fades its passives and detractors towards the card’s own colour instead of towards white, so a light accent on a dark card still shows three groups.
A free team keeps three decks.
  • create_deck on a team without Pro that already has three decks answers 403, with A free team keeps three decks. and the fix Delete one, or move the team to Pro. The editor and the deck manager refuse the same deck with the same sentence.
  • Every live deck in the team counts, whoever made it and through whichever door. A deck in the bin does not, so delete_deck makes room at once.
  • A team already past three keeps every deck it has and reads, changes and presents them as before. Only a new one is refused.
v1
Image choice became a look of the choice poll, the Fill-up look is retired, a card lands plain, and Spokes is now called Pinwheel.
  • A choice poll takes optionImages and a new mcStyle: "tiles": a tile per option with its picture, its share and its name. That is what the image-choice type drew, so it is no longer offered as a type of its own. image-choice is still read, and a deck opened in the editor is saved back as a choice poll with mcStyle: "tiles".
  • A look that has been retired no longer refuses a write. Send hpStyle: "marimekko" or imgStyle: "fill" and the poll is accepted with no look, which draws the family’s own; a value that was never a look is still refused.
  • imgStyle no longer takes fill. A picture filling from the bottom read as a loading bar and said less than the tiles, which carry the same share on the picture itself. A poll sent with fill is refused, and a room that ran with it shows the tiles.
  • A card’s default style is a white background with no shadow. shadow and background are unchanged as settings; only what a card starts with moved.
  • The spokes look of a choice poll is called Pinwheel in the editor, because it draws wedges whose length carries the share. The value in a deck is still spokes.
  • Every look has a measured minimum size, and the editor will not drag a card under it. warnings names the look’s own minimum; most looks need 30% of the slide’s width and 45% of its height, a few need more.
v1
The Marimekko look is retired, and a ranking now reports its spread.
  • hpStyle no longer takes marimekko. It stacked a column per group, which the sunburst and the icicle already draw from the same groups. A poll sent with marimekko is refused, and a room that ran with it shows the bars.
  • A ranking’s results carry rankSpread, a q1 and a q3 per option: the places a quarter and three quarters of the room put it at. The avg-rank look draws that as a bar behind each dot, so a room that disagreed reads as a long bar.
v1
The Rounds widget is retired.
  • rounds is no longer a poll type. It compared the tallies of earlier polls in the same deck, which the results of those polls already show, and the roundsMode and refs fields go with it.
  • A deck that still holds a rounds slide keeps it in storage, but it is no longer offered in the editor and the API no longer accepts rounds on a create or an update.
v1
Columns, donut and pie on the big screen.
  • mcStyle takes columns, donut and pie as well. Until now these three were only drawn on a card, through the card’s variant; a full-screen poll step fell back to bars. Now a poll draws them the same way on a card, on the big screen, in the preview and on the phone.
  • A card set to variant columns, donut or pie from the editor also sets mcStyle to match, so the two never disagree.
  • An image choice poll takes correctIndex like a multiple choice, which makes it a quiz question: the room scores it and the reveal marks the right picture.
  • mcStyle also takes stacked, one bar across the screen with a segment per option, and dots, one dot per answer. On the big screen the dot grid also shows the people who have not answered yet as pale dots.
v1
A radar on any scale from 5 to 10, and a bullet that says what its mark is.
  • radarMax takes a whole number from 5 to 10, the top of the scale a radar is rated on, as in 7 for a Likert scale. Left out, it is 5. The phone shows that many buttons per axis, the chart draws on that scale, and room_results markdown reads each axis as 4.3 of 5 or 5.2 of 7.
  • radarLow and radarHigh put a word at each end of that scale, as in Strongly disagree and Strongly agree, up to 30 characters each. The phone shows them under every axis and the chart shows them as its key. Both are optional.
  • targetLabel on a 100 points poll names what the bullet look’s mark stands for, as in Last year's budget, up to 40 characters. It is drawn as the key under the chart. Left out, no key is drawn.
v1
Fewer result looks.
  • wcStyle takes cloud or bubbles. wordle is retired, because it drew the same cloud as cloud. A poll sent with wordle is refused, and a room that ran with it shows the cloud.
  • imgStyle takes tiles or fill. mosaic and hero are retired. A poll sent with either is refused, and a room that ran with one shows the tiles.
  • mapStyle takes pins or heat. bars is retired, because a ranked list of countries is what a multiple-choice poll already draws. A poll sent with bars is refused, and a room that ran with it shows the flag pins.
  • ofStyle (open feed) and qaStyle (Q&A) are gone. Each widget has one look now: Q&A is the question list, and an open feed shows its answers as the same list without counts. A poll that still sends either property is accepted and the property is dropped.
v1
Every session of a deck, with the names behind the answers.
  • deck_results reads every session a deck has run in one call, each with its results and markdown. With answers, every answer comes as a row with the name the person joined under, the answer, whether a quiz answer was right and how many seconds it took.
  • start_room takes askName: people type their own name to join instead of getting a nickname, and a name already in the room is refused.
  • A deck’s sourceKind can be slides, for a deck imported from a Google Slides link.
v1
A wheel holds a whole floor.
  • wheelNames takes up to 1000 names, where it took 20. A wheel is a picture, not a list, so the limit that remains is what the dial can draw: up to 48 names, a full class, get a slice each, and a bigger crowd spins the same wheel of 48 slices without names, with the winner written on the slice it lands on and in the card beside it. room_action with spin answers with that winner as before.
v1
Sessions, counted and named.
  • list_decks returns each deck’s sessionCount, the sessions presented from it. list_rooms with that deckId lists them.
  • list_rooms reports a room the app no longer holds as ended, whatever its row last said. Rooms only live in the app’s memory.
  • A room’s saved status no longer flips to ended while it runs. Before, another process loading the app could close the row of every open room.
  • The markdown results name the session beside the deck, as in # Weekly lesson · Class 3B, Tuesday, and count one poll and one minute in the singular.
v1
Finding your way in a deck, and changing one thing at a time.
  • get_outline reads every step in a line, and get_step reads one step whole.
  • Cards change and go with update_overlay and remove_overlay. Text boxes, shapes and pictures come, change and go with add_element, update_element and remove_element. What an update leaves out stays.
  • duplicate_step copies a step with fresh ids, and move_step moves one and keeps its ids.
  • list_fonts names the font keys a text box and a card take, including the fonts a deck uploaded.
  • get_screenshot takes scale, element and annotate, and answers with every element’s rect, the pairs that overlap, warnings and coversPageText.
  • Deck writes and get_deck answer with warnings next to ready and problems. get_outline, get_step and get_screenshot name the warnings per step.
  • titleFont on a card is retired and no longer offered. Old documents that carry it still open.
  • start_room starts decks with PDF slides too. The server draws the pages first.
  • Hiding a card’s join link is a Pro setting. Without Pro the API answers 403, and a room shows the join code on every card.
  • Without Pro, a card whose join link is already stored off gets a warning on every deck read and write, since the room and the screenshot show the link anyway.
  • A multiple-choice quiz with quizView set to standings is the standings board, the quiz’s scoreboard, and takes no votes of its own. It works on every plan.
  • A room nobody touches for a day closes itself, the same way stop does. Its results stay readable.
  • One deck runs many sessions. start_room takes a label to name one, and list_rooms takes a deckId for the sessions a deck has run and returns each session’s deckId, label and endedAt.
  • A session keeps its results. They are saved when a poll closes and when the room ends, and room_results answers from them once the app no longer holds the room, a restart included.
  • update_overlay changes only the style fields you send.
  • room_action spins the wheel with spin and answers with the winner, shows or hides the join code in the corner of the audience screen with chip, and switches live reactions with reactions.
  • A multiple-choice poll with a correctIndex runs as a quiz. Closing it reveals the answer on the big screen and on every phone and gives a point to each person whose one pick was the answer; room_results names the answer in correctOptionId and the standings in leaderboard.
  • The markdown results mark a quiz’s answer and list its standings. An open feed reads as its answers, a word cloud or a live map as its counts.
  • /openapi.json shows a request and a response example beside every verb, taken from real calls.
v1
The API, the MCP server and these docs.
  • The verbs under /api/v1: decks, steps, cards, screenshots, the PDF behind a deck, rooms, actions and results.
  • The same verbs as MCP tools at /api/mcp, stateless Streamable HTTP with a bearer key. get_screenshot returns an image block the agent can see.
  • Deck writes and get_deck answer with revision, ready and problems. Writes accept revision and answer 409 when the deck moved.
  • A card gets the house look and the bottom-right quarter when style and rect are left out. A card that runs off the slide is refused.
  • Rate-limit headers on every REST reply past the key and scope check, Retry-After on 429, and Idempotency-Key on POST and PUT.
  • Plain fix sentences that name the field, instead of validator wording.
  • The free plan may create and change decks. Starting rooms over the API is Pro.
  • /openapi.json, /llms.txt and /llms-full.txt, generated from the same table as the API.