> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Run live polls and moderated Q&A in a video meeting or webinar

> Launch a poll, collect votes in real time, and moderate attendee questions in a scheduled video room — from the room controls or the Video API — with the role rules, limits, and failure codes explained.

# Run live polls and moderated Q\&A in a video meeting or webinar

Live polls and moderated Q\&A turn a scheduled video room from a
broadcast into a conversation. A poll puts one question with a fixed
set of answers in front of everyone in the room and tallies the votes
as they arrive; the Q\&A queue collects questions from attendees and
lets you answer, mark answered, or dismiss each one in front of the
room. Both run on the room's realtime data channel, so a vote or a
question appears for every participant the moment it is cast.

This guide walks the full happy path: launch a poll, read the live
results, close it, moderate the question queue, and run the same steps
from the API. When something refuses instead, the
[troubleshooting page](https://docs.orbit.devotel.io/troubleshooting/video-features-chat-polls-rtmp.md)
maps every `VIDEO_POLL_*` and `VIDEO_QA_*` code to its fix.

## Before you start

* **Use a scheduled video room.** Polls and Q\&A belong to the
  scheduled-room surface — the same rooms you run
  [meetings](https://docs.orbit.devotel.io/guides/video-meetings.md) and
  [webinars](https://docs.orbit.devotel.io/guides/video-webinars.md) in — and the API addresses them as
  `rooms-scheduled/{id}`. Create and schedule the room first, then run
  engagement while the session is live.
* **You need a host-capable role to moderate.** Launching or closing a
  poll and answering or dismissing a question are moderation actions,
  limited to the room's host, co-hosts (participants the host promoted
  to moderator during the meeting), and organization owners and admins.
  Everyone else in the room can still vote and ask questions. A caller
  without a moderation role receives a `403`; see
  [Limits and the failure ladder](#limits-and-the-failure-ladder).
* **Plan the question before the meeting.** A poll carries one question
  of up to 280 characters with 2 to 10 answer options, so decide the
  choices you want to offer ahead of time. Votes reference each
  option's id rather than its position, so reordering options never
  scrambles results.

## Launch a poll

Open the room controls in the dashboard and start a poll from the polls
panel:

1. **Write the question.** One question per poll, up to 280 characters.
2. **Add 2 to 10 options.** Keep labels short enough to read at a
   glance on a phone.
3. **Choose single or multi-select.** Multi-select lets a participant
   pick more than one option in the same vote.
4. **Launch.** The poll is broadcast to everyone in the room the moment
   it goes live.

While the poll is open, votes accumulate per option in real time on
your controls. When you are done, **close the poll** to stop accepting
votes; the final tally stays visible in the room. You can launch
another poll straight after, but one open question at a time is what
participants read best.

The same three steps are the API's shape: launch with
`POST /api/v1/video/rooms-scheduled/{id}/polls`, stop collecting with
`POST .../polls/close`, and read the room's poll state for the tally.
The [walkthrough below](#run-polls-from-the-api) shows the full
requests.

## Moderate the Q\&A queue

Any participant can submit a question from the Q\&A panel; submissions
land in a queue visible to the moderation team. For each question you
can:

* **Answer** it in writing. Your answer is posted to the room under
  your name.
* **Mark it answered** when you answer out loud instead of in writing.
* **Dismiss** it to remove it from the queue without an answer, for
  duplicates and off-topic posts.

Identities are stamped server-side: the room always shows who asked and
who answered, and a participant cannot post or answer under someone
else's name.

### Q\&A versus live chat

The two surfaces serve different jobs:

* **Chat** is the free-form stream — quick reactions and side comments
  from everyone, in the order they arrive.
* **Q\&A** is the structured queue — questions stay until a moderator
  resolves them, so a good question asked at minute five is still on
  your list at minute forty.

They are governed independently. Chat runs through the room's content
policy, which you set per room in `block`, `flag`, or `log` mode, while
Q\&A is governed by moderator review. If chat messages are refused, that
is the policy surface, not Q\&A; the
[chat section of the troubleshooting page](https://docs.orbit.devotel.io/troubleshooting/video-features-chat-polls-rtmp.md)
covers the `VIDEO_CHAT_*` codes.

## The participant side

Voting and asking need no special role. Every participant in the room
sees an open poll, casts a vote (several option ids in a multi-select
poll), and can submit questions to the queue. Because the voter and
asker identities are stamped by the platform from the signed-in
session, results cannot be spoofed by a modified client. A vote that
races a poll closing is a normal transient — refetch the room state and
re-submit once; the
[failure ladder](#limits-and-the-failure-ladder) below covers it.

## Run polls from the API

The poll endpoints live under the scheduled-room prefix. `{id}` is the
scheduled room id, the same `num_…` identifier the room APIs return,
and server-to-server calls authenticate with an API key holding the
`video:write` scope.

### Launch

Your client mints the `poll_id` (a UUID) that ties the launch, the
votes, and the close together; retrying with the same `poll_id`
replaces the poll rather than duplicating it.

```bash theme={null}
curl -X POST "https://api.orbit.devotel.io/api/v1/video/rooms-scheduled/num_8fb2d1b7c00c4ec9a1d3f5e7b9c1d3/polls" \
  -H "X-API-Key: dv_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "poll_id": "0f6a1c2e-4b8d-4a2f-9e3c-7d5b6a8c9e01",
    "question": "Which rollout plan should we pick?",
    "options": [
      { "id": "opt-a", "label": "Launch now" },
      { "id": "opt-b", "label": "Wait one week" },
      { "id": "opt-c", "label": "Run a beta first" }
    ],
    "allow_multiple": false
  }'
```

### Vote

Any participant credential can vote. The voter identity is stamped
server-side, so the body carries only the poll and the chosen options;
a single-select poll sends exactly one option id.

```bash theme={null}
curl -X POST "https://api.orbit.devotel.io/api/v1/video/rooms-scheduled/num_8fb2d1b7c00c4ec9a1d3f5e7b9c1d3/polls/vote" \
  -H "X-API-Key: dv_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "poll_id": "0f6a1c2e-4b8d-4a2f-9e3c-7d5b6a8c9e01",
    "option_ids": ["opt-b"]
  }'
```

### Close

Closing stops vote collection while the final tally stays available to
the room.

```bash theme={null}
curl -X POST "https://api.orbit.devotel.io/api/v1/video/rooms-scheduled/num_8fb2d1b7c00c4ec9a1d3f5e7b9c1d3/polls/close" \
  -H "X-API-Key: dv_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "poll_id": "0f6a1c2e-4b8d-4a2f-9e3c-7d5b6a8c9e01"
  }'
```

The full endpoint reference, including the Q\&A submission and
moderation endpoints, is in the
[Video API reference](https://docs.orbit.devotel.io/api-reference/endpoints/video.md).

## Limits and the failure ladder

**Roles.** Launch, close, and Q\&A moderation need the host, a co-host,
or an organization owner or admin; any other signed-in caller receives
a `403` before room state changes. API keys with `video:write` follow
the key's organization role floor instead.

**Shapes.** One question of up to 280 characters; 2 to 10 options with
labels up to 160 characters; a vote carries 1 to 10 option ids; a Q\&A
question is up to 1,000 characters.

**Codes.** Work refusals in this order:

1. A `403` on launch or close means the caller lacks a moderation role.
   Fix the caller; retrying with the same credentials refuses the same
   way.
2. `VIDEO_POLL_LAUNCH_FAILED` means the broadcast itself failed after a
   clean role check. No room state changed, so retry once after a short
   backoff with the same `poll_id`.
3. `VIDEO_POLL_VOTE_FAILED` usually means the poll closed between fetch
   and vote. Refetch the room state, then re-submit once.
4. `VIDEO_POLL_CLOSE_FAILED`: fetch the current poll state before
   retrying; a partially applied close is treated as still open.

If the same code survives about ten minutes of retries, open a ticket
with the room id and the `request_id` from the response `meta`. The
[troubleshooting page](https://docs.orbit.devotel.io/troubleshooting/video-features-chat-polls-rtmp.md)
has the per-code runbook and the escalation checklist.

## After the meeting

Polls and Q\&A are realtime surfaces: they live on the room's data
channel for the length of the session. There is no stored poll or
question archive to reopen afterwards, so if a tally matters beyond the
live room, capture it while the session is still open — screenshot the
final results, or keep your own record of votes collected through the
API. The session recording and the attendance report still cover the
meeting itself;
[video room history](https://docs.orbit.devotel.io/guides/video-room-history.md) lists what a finished
session keeps.

## See also

* [Run video meetings](https://docs.orbit.devotel.io/guides/video-meetings.md) — scheduling and running
  the room this guide adds engagement to.
* [Registration-gated video webinars](https://docs.orbit.devotel.io/guides/video-webinars.md) — the
  webinar surface polls and Q\&A pair with.
* [Video API reference](https://docs.orbit.devotel.io/api-reference/endpoints/video.md) — the poll and
  Q\&A endpoint contracts.
* [Troubleshooting: chat, polls, Q\&A, invites, RTMP](https://docs.orbit.devotel.io/troubleshooting/video-features-chat-polls-rtmp.md) —
  the per-code runbook.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.