Data & Trust

A plain account of what NittiM stores, how long it keeps it, and how to make it go away.

What we store — and what we don't

STORED

Audit report

Findings, scores, verdict, repository name. Persisted so you can retrieve it later via a shareable link or the API.

NOT STORED

Source code

Never stored. Fetched into server memory during analysis, discarded when the pipeline finishes. The one deliberate exception: a finding's evidence includes the few offending lines it points at — those excerpts live in your report (access-gated for private repos), because a finding without evidence is an opinion.

NOT STORED

GitHub tokens

Never stored. A pasted token is used once to call the GitHub API, then discarded from memory. GitHub App installation tokens are minted per-audit and expire on their own within the hour; NittiM records only the installation id.

NOT STORED

Request logs containing code

Application logs record request metadata only — never the source snapshot content.

Does an AI train on your code? No.

The free deterministic scan never sends your code to any AI at all — the secret scanner and dependency check run inside NittiM's own server process, and the only external call is to GitHub to fetch the snapshot.

Deep Verification sends a prioritized digest of the code to the Anthropic API for the audit. That is an API relationship under commercial terms that do not use API inputs or outputs to train models — NittiM has no data-sharing or training arrangement of any kind, and NittiM itself retains nothing from the digest after the audit returns. See Anthropic's commercial terms for their side of that boundary.

Read-only by construction

NittiM can never modify your code. The fis-audit GitHub App holds exactly two permissions — repository contents: read-only, and metadata: read-only — and subscribes to no events. GitHub shows you that permission screen before you approve it and enforces it regardless of what NittiM'scode does; you can confirm it any time at github.com/settings/installations. If you use a pasted token instead, create it fine-grained, read-only, scoped to the one repository you're auditing, and revoke it right after — NittiM works identically either way.

Retention schedule

Reports are kept until you choose to delete them. There is no automatic expiry for live reports.

When a report is deleted, it immediately disappears from all read paths — the report link returns not-found and the API returns 404. The underlying row is then permanently and irrecoverably removed from the database on the next nightly retention pass, which runs at 03:00 UTC. Rows deleted more than 30 days prior are purged on that pass; a row deleted today will be purged on or after the corresponding date 30 days out.

Deleting a report

You own every report you generate. To delete one:

via API (API key or session token)

DELETE /api/v1/audit/<id>
Authorization: Bearer <your-api-key>

The response is 200 on success. Deleting a report you do not own returns 403. Deleting a report that is already gone (or was never created) returns 404.

Shareable links

Public reports — audits of public repositories — are accessible to anyone with the link. This is intentional: the link is the share mechanism. If you want a report to stop being accessible, delete it.

Reports of private repositories are never accessible via a shareable link to anyone other than the report's owner or an organization member. The link returns 404 for everyone else.

Organization access

When you run an audit inside an organization, all members of that organization can read the report. An organization owner or admin can also delete it. Reports are scoped to a single organization — members of a different organization cannot access them.

Infrastructure

Reports are stored in Supabase (managed Postgres, us-east-1). All data is encrypted in transit (TLS 1.2+) and at rest (AES-256). Access to the database is via a service-role key held in Vercel environment variables — it is never exposed client-side and never committed to source control.

How accurate is NittiM?

Trust shouldn't be taken on faith. We publish our accuracy methodology and results in the open.

See the benchmark →