Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 RangeLabelColor
0 - 30CriticalRed
31 - 50PoorOrange-red
51 - 70FairYellow
71 - 90GoodGreen
91 - 100ExcellentDark green

Adding a Badge from the Dashboard

  1. Open a completed report in Dashboard > Reports.
  2. Click the Badge button in the top action bar.
  3. Pick a tab: Markdown, HTML, or URL.
  4. 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

Odin Scan passed

[![Odin Scan](https://odinscan.ai/badge/ANALYSIS_ID)](https://odinscan.ai/dashboard/reports/ANALYSIS_ID)

Static “Secured by” badge

Secured by Odin Scan

[![Secured by Odin Scan](https://odinscan.ai/badges/secured-by-odin-scan.svg)](https://odinscan.ai)

Status badges

Odin Scan passed Odin Scan audited Odin Scan failed

[![Odin Scan](https://odinscan.ai/badges/odin-scan-passed.svg)](https://odinscan.ai)
[![Odin Scan](https://odinscan.ai/badges/odin-scan-audited.svg)](https://odinscan.ai)

HTML (Websites)

Score badge

Odin Scan passed

<a href="https://odinscan.ai/dashboard/reports/ANALYSIS_ID">
  <img src="https://odinscan.ai/badge/ANALYSIS_ID" alt="Odin Scan" />
</a>

Dark banner (480x80)

Dark banner

<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)

Light banner

<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)

Wide dark banner

<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)

Wide light banner

<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:

secured-by secured-by-flat audited passed failed

All static badges and banners are served from https://odinscan.ai/badges/:

FileSizeDescription
secured-by-odin-scan.svg186x20“secured by / Odin Scan” with gradient
secured-by-odin-scan-flat.svg186x20Same, flat style
odin-scan-audited.svg152x20“Odin Scan / audited”
odin-scan-passed.svg148x20“Odin Scan / passed” (green)
odin-scan-failed.svg140x20“Odin Scan / failed” (red)
odin-scan-banner-dark.svg480x80Dark website banner
odin-scan-banner-light.svg480x80Light website banner
odin-scan-banner-wide.svg728x90Wide dark banner (leaderboard)
odin-scan-banner-wide-light.svg728x90Wide 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