Badges & Banners
Odin Scan provides embeddable badges and banners that display your project’s security status. Add them to GitHub READMEs, websites, or documentation to signal that your code has been audited.
Dynamic Score Badge
Every completed report gets a unique badge URL that auto-updates when the report is re-scanned:
https://odinscan.ai/badge/ANALYSIS_ID
The badge displays the security score and label (Critical, Poor, Fair, Good, Excellent) with color coding:
| Score Range | Label | Color |
|---|---|---|
| 0 - 30 | Critical | Red |
| 31 - 50 | Poor | Orange-red |
| 51 - 70 | Fair | Yellow |
| 71 - 90 | Good | Green |
| 91 - 100 | Excellent | Dark green |
Adding a Badge from the Dashboard
- Open a completed report in Dashboard > Reports.
- Click the Badge button in the top action bar.
- Pick a tab: Markdown, HTML, or URL.
- Copy the snippet and paste it into your README or website.
The dialog shows a live preview of your badge and provides two snippet types:
- Dynamic score badge – links to the report, updates automatically.
- Static “Secured by” badge – links to odinscan.ai, does not change.
Markdown (GitHub README)
Dynamic badge with score
[](https://odinscan.ai/dashboard/reports/ANALYSIS_ID)
Static “Secured by” badge
[](https://odinscan.ai)
Status badges
[](https://odinscan.ai)
[](https://odinscan.ai)
HTML (Websites)
Score badge
<a href="https://odinscan.ai/dashboard/reports/ANALYSIS_ID">
<img src="https://odinscan.ai/badge/ANALYSIS_ID" alt="Odin Scan" />
</a>
Dark banner (480x80)
<a href="https://odinscan.ai">
<img src="https://odinscan.ai/badges/odin-scan-banner-dark.svg"
alt="Secured by Odin Scan" width="480" height="80" />
</a>
Light banner (480x80)
<a href="https://odinscan.ai">
<img src="https://odinscan.ai/badges/odin-scan-banner-light.svg"
alt="Secured by Odin Scan" width="480" height="80" />
</a>
Wide dark banner (728x90)
<a href="https://odinscan.ai">
<img src="https://odinscan.ai/badges/odin-scan-banner-wide.svg"
alt="Secured by Odin Scan" width="728" height="90" />
</a>
Wide light banner (728x90)
<a href="https://odinscan.ai">
<img src="https://odinscan.ai/badges/odin-scan-banner-wide-light.svg"
alt="Secured by Odin Scan" width="728" height="90" />
</a>
Available Static Assets
Badges:
All static badges and banners are served from https://odinscan.ai/badges/:
| File | Size | Description |
|---|---|---|
secured-by-odin-scan.svg | 186x20 | “secured by / Odin Scan” with gradient |
secured-by-odin-scan-flat.svg | 186x20 | Same, flat style |
odin-scan-audited.svg | 152x20 | “Odin Scan / audited” |
odin-scan-passed.svg | 148x20 | “Odin Scan / passed” (green) |
odin-scan-failed.svg | 140x20 | “Odin Scan / failed” (red) |
odin-scan-banner-dark.svg | 480x80 | Dark website banner |
odin-scan-banner-light.svg | 480x80 | Light website banner |
odin-scan-banner-wide.svg | 728x90 | Wide dark banner (leaderboard) |
odin-scan-banner-wide-light.svg | 728x90 | Wide light banner |
Badge API
The dynamic badge is powered by a public API endpoint that requires no authentication:
GET /api/v1/analysis/:id/badge
Returns minimal JSON with the analysis status and finding counts:
{
"status": "completed",
"totalFindings": 12,
"criticalFindings": 2,
"highFindings": 3,
"mediumFindings": 4,
"lowFindings": 3,
"informationalFindings": 0
}
This endpoint intentionally exposes only aggregate counts, not individual findings or report contents.
Caching
Dynamic badges are cached for 5 minutes (Cache-Control: public, max-age=300). After a re-scan completes, the badge will reflect the new score within 5 minutes.
Static badges served from /badges/ are cached for 1 hour.
Next Steps
- Reports – understanding report contents
- Exports – download reports in JSON, Markdown, or SARIF
- GitHub Action – automate scans in CI