Skip to main content
Sharing applies to synced reports. A local-only report is a file — send the HTML if that is what you want.

Requirements

  • The scan was synced, so a cloud report exists.
  • You are the owner of that report. Workspace members can read it; only the owner can create, change, or revoke a share link.
  • The report has not passed its retention expiry.

Share modes

Optional on any mode: a password, and an expiry.

Per-recipient projections

A share carries a default policy plus zero or more principal rules. Each rule names a principal — a user id, a normalized email, a workspace id, or anonymous — and the projection policy that principal gets. That is what makes one URL render differently per viewer.
In the dashboard, the share panel previews exactly what each recipient receives before you create the link.

Create it over the API

The response returns the slug exactly once:
Plaintext slugs are not stored — only a hash. GET /api/v1/reports/{id}/shares lists existing shares and their settings, but it cannot re-list a link you did not save. Copy the URL when you create it.

Read a shared report

Formats: html, json, markdown, sarif. Browsers open /s/<slug> on whatever origin your deployment serves. The export route resolves the same projection the page does, so no format is a bypass.

Change or revoke

Revocation takes effect immediately. Setting "password": null clears a password; a non-empty string sets a new one. Setting "expiresAt": null removes the expiry.

What a viewer cannot do

Filtering happens server-side. Excluded content is absent from the payload, not hidden in it — in the page, the JSON, and every export. You can check that directly:
Password attempts are throttled per link — 10 attempts per 10 minutes. Exceeding that returns RATE_LIMITED with an explanation, not a lockout of the link’s legitimate readers.

Limits

Active share links per report come from the plan: 5 on free, 25 on pro, 100 on team, 1000 on enterprise. Exceeding it returns FORBIDDEN naming the limit. Revoked links do not count.