REST API reference
Base URL: https://commareports.com/api/v1. Every endpoint takes a Bearer
token in the Authorization header:
Authorization: Bearer comma_sk_…
Tokens carry scopes; each endpoint below lists the scope
it requires. Requests and responses are JSON unless noted. Errors come back
as { "error": "…" } with a conventional status code (401 bad token,
403 missing scope or no access to the report, 404 not found, 429 rate
limited).
Reports
| Method | Path | Scope | What it does |
|---|---|---|---|
POST |
/reports |
reports:write |
Create a report. Body: html (required, ≤ 5 MB), title, description, visibility (private | registered | public). |
GET |
/reports/search?q=… |
reports:read |
Full-text search across reports the token's owner can read. |
GET |
/reports/:id |
reports:read |
Report metadata. |
PATCH |
/reports/:id |
reports:write |
Update html, title, or description. New HTML appends a revision; the URL is stable. |
GET |
/reports/:id/revisions |
reports:read |
Revision history (ids, hashes, authorship, timestamps). |
GET |
/reports/:id/revisions/:rev |
reports:read |
A single revision's content. |
GET |
/reports/:id/diff?from=…&to=… |
reports:read |
Line-level diff between two revisions: { added, removed, unchanged }. |
Active HTML is sanitized server-side on write, and the public viewer renders report HTML inside an opaque-origin sandboxed iframe — see Security.
Sharing
| Method | Path | Scope | What it does |
|---|---|---|---|
GET |
/reports/:id/share |
reports:read |
Current visibility + link permission. |
PUT |
/reports/:id/share |
sharing |
Change visibility (private, team, registered, public, domain) and link permission (none, view, comment, edit). |
POST |
/reports/:id/password |
— | Set a link password (owner only; Enterprise). |
DELETE |
/reports/:id/password |
— | Clear the link password. |
The full access model is described in Sharing & access control →.
Comments
| Method | Path | Scope | What it does |
|---|---|---|---|
GET |
/reports/:id/comments |
comments:read |
List comment threads, including anchors and resolve state. |
POST |
/reports/:id/comments |
comments:write |
Leave a comment, optionally anchored to a text range or table cell. |
GET |
/comments/:id/replies |
comments:read |
Replies in a thread. |
POST |
/comments/:id/replies |
comments:write |
Reply to a thread. |
PATCH |
/comments/:id |
comments:write |
Resolve / reopen a thread. |
Assets
Attach files (images, stylesheets, data) to a report. Limits: 25 MB per file, 250 MB and 500 files per report.
| Method | Path | Scope |
|---|---|---|
GET |
/reports/:id/assets |
reports:read |
POST |
/reports/:id/assets |
reports:write |
DELETE |
/reports/:id/assets/:assetId |
reports:write |
Reviews & reviewers
Standing AI reviewers re-check a report when it changes and post their findings as comments.
| Method | Path | Scope |
|---|---|---|
POST |
/reports/:id/review |
reports:write |
POST |
/reviews |
reports:write |
GET |
/reviews/:id |
reports:read |
GET / POST |
/reviewers |
routines |
GET / PATCH / DELETE |
/reviewers/:id |
routines |
Routines, skills, connectors
Scheduled regeneration: a routine runs a skill (optionally against connectors) on a cron and appends the output as a new revision. See Routines →.
| Method | Path | Scope |
|---|---|---|
GET / POST |
/routines |
routines |
GET / PATCH / DELETE |
/routines/:id |
routines |
POST |
/routines/:id/run |
routines |
GET / POST |
/skills |
routines |
GET / PATCH / DELETE |
/skills/:id |
routines |
GET / POST |
/connectors |
connections |
GET / PATCH / DELETE |
/connectors/:id |
connections |
POST |
/connectors/:id/test |
connections |
Notifications
Webhook subscriptions on report events (revision.created,
comment.created, mentions) — deliverable to Slack, Discord, or plain JSON.
| Method | Path | Scope |
|---|---|---|
GET / POST |
/notifications |
routines |
GET / PATCH / DELETE |
/notifications/:id |
routines |
POST |
/notifications/:id/test |
routines |
Account
| Method | Path | Scope | What it returns |
|---|---|---|---|
GET |
/me/usage |
any | Usage against your plan's limits. |
GET |
/me/plan-caps |
any | Your plan's caps (routine cadence, AI run budget). |
Rate limits
Per-token sliding window, 60 requests/minute by default; higher caps per
plan. 429 responses include Retry-After. Details in
API tokens →.
Same surface, other transports
The MCP server at /api/mcp exposes this exact surface as tools
(create_report, add_comment, run_routine, …) under the same token —
see MCP server →.