Upload an HTML file, get a link
The file works on your machine and nowhere else. Here is the shortest
path from report.html to a URL you can paste into a message.
1. Work out what you actually have
Two shapes, and they upload differently.
One self-contained file. Everything inlined — pandoc --embed-resources,
plotly.offline with include_plotlyjs="inline", an Evidently or
ydata-profiling report, a df.style.to_html() table. Upload the file.
A directory. An index.html next to a folder of CSS, JS and JSON.
This is what Playwright, Allure, Serenity, genhtml, coverage html,
Sphinx, MkDocs and jupyter nbconvert --to html --template lab produce.
Upload the whole directory. Uploading only index.html is the single
most common reason a published report renders as an unstyled skeleton —
see why the report lost its CSS.
Not sure? Look next to the file. If there's a folder named assets,
_static, data, or the report's own name, you have a directory.
2. Drop it in
Drag onto Comma — a file, a folder, or a zip of the folder:
index.htmlbecomes the report body.- Every asset uploads alongside, and the relative references inside the
HTML are rewritten to point at the uploaded copies. This is the step
that a plain file share, an email attachment and
file://all skip, and it's why those three all end up looking broken. - Scripts run inside a sandboxed iframe (
allow-scripts, noallow-same-origin), so filters, sortable tables and charts keep working while the page can't touch your session. See interactive HTML reports.
You get the URL as soon as the upload finishes.
3. Decide who can open it
Per report, not per account:
- Private — only you.
- Team — your workspace.
- Anyone signed in — useful for a company-wide read.
- Anyone with the link — and separately, whether link holders can view, comment, or edit.
The full model, including what an expired or revoked link does, is in sharing & access control.
From a script, instead of a browser
curl -fsS -X POST "https://commareports.com/api/v1/reports" \
-H "Authorization: Bearer $COMMA_API_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n --rawfile html report.html \
'{title: "Nightly report", html: $html}')"
The response carries the report id and its URL. PATCH the same id on
the next run and the URL stays put while the old version is kept as a
revision — which is how you get "did this get better or worse" without
building a dashboard. See the API and
publishing from CI.
Agents do the same thing through MCP instead of curl.
Then: review, not screenshots
Once it's a URL, feedback lands on the report. Select a number, leave a thread, and it stays anchored there across revisions — see commenting on HTML and stop screenshotting reports.
Limits
Entry HTML 5 MB; assets 25 MB per file, 250 MB and 500 files per report; 60 requests/minute per token.
Try it
Comma is free — unlimited reports, unlimited commenters, unlimited revision history.
Related
- Where to host a single HTML file — every option compared
- Someone sent me an HTML file · Email an HTML report
- Embed a report · Share an HTML report