Every completed scan and rewrite can be downloaded as a PDF report. The
report contains the verdict band, the public is_ai score (0 means 0%
AI-like, and 100 means 100% AI-like — higher = more AI-like), a per-sentence
heatmap where the most AI-like sentences get the strongest warning color, a
methodology footnote, and the scan timestamp plus the share link reference
when an active share exists.
Download a scan report:
text
GET /v1/scans/{scanId}/report
The response is application/pdf with a Content-Disposition: attachment
header. Reports accept the same credentials as score-job reads — API keys,
Firebase ID tokens, and anonymous App Check tokens — and require the
score_jobs:read scope. A report is only visible to the account that created
the scan; anonymous App Check credentials can only download reports for scans
they created themselves. Unknown or foreign scans return
404 report_not_found; scans that have not completed return
409 report_not_ready.
Download a rewrite report (original vs. rewritten verdicts plus the
rewritten document with changed segments shaded):
text
GET /v1/rewrites/{rewriteId}/report
Rewrite reports require the rewrite_jobs:read scope and, like all rewrite
operations, do not accept anonymous App Check credentials.
Download a shared scan report (no credential required — the share id is the
capability, exactly like GET /v1/shared/{shareId}):
text
GET /v1/shared/{shareId}/report
Shared reports respect the share's redaction setting: when the share owner
enables text redaction, the PDF keeps per-sentence scores and character spans
but never embeds the scanned text, and shared reports reference only the
share id, never the internal scan id. Revoked shares return 404.
Report text rendering uses a Latin-1 PDF font; characters outside that range
(for example emoji) are replaced in the PDF while scores and layout are
unaffected.