Reports
A report is what a room produces: a thread of blocks captured by the reporter, stored against a project and a channel. It’s not a single text field — it’s an ordered list of pieces the reporter assembled before sending.
Blocks
Section titled “Blocks”Each report holds a blocks array. Every block is one of four kinds:
| Block | What it captures |
|---|---|
text | A written message. |
screenshot | A captured image of the page. |
audio | A recorded voice note. |
selection | A quote of text the reporter highlighted on the page, plus the element it came from. |
A room can mix these freely — for example a text block describing a bug, a screenshot showing it, and a selection pointing at the exact element. A report must contain at least one block.
Block limits
Section titled “Block limits”The blocks are validated on the way in, so reports stay bounded:
- text — up to 10,000 characters per block.
- selection text — up to 2,000 characters.
- screenshot — up to 2 MB,
image/pngorimage/jpeg. - audio — up to 10 MB and 5 minutes,
audio/webmoraudio/mp4. - A report holds between 1 and 50 blocks.
Status
Section titled “Status”Every report has a status for triage. The statuses are:
new— the default for a freshly received report.triagedin-progressclosed
Context
Section titled “Context”Alongside the blocks, a report can carry context about where it came from — captured automatically by the widget when available:
- the URL the reporter was on,
- the user agent and viewport size (rendered in the dashboard as e.g.
Chrome / desktop / 1440×900), - recent console errors, if the SDK’s error hook was enabled,
- arbitrary extra fields the host app attaches.
This context is what makes a report actionable without a back-and-forth: you can see the page, the browser, and the failing console output in one place.
Reports arrive in real time
Section titled “Reports arrive in real time”When a report is received, the dashboard’s feed updates live — you don’t need to refresh to see a new report land in its channel.