API Documentation

All endpoints return JSON. No authentication required.

https://ferretwatch.dev
GET /feed

Paginated feed of recent scans.

ParamTypeDefaultDescription
limitnumber20Results per page (max 100)
cursornumberScan ID for cursor-based pagination
searchstringFilter by package name (case-insensitive)
minScorenumberMinimum risk score
alertedstringSet to "true" to show only alerted scans
Example
curl 'https://ferretwatch.dev/feed?limit=5&search=express'
Response
{
  "scans": [
    {
      "id": 42,
      "packageName": "express",
      "version": "4.21.1",
      "previousVersion": "4.21.0",
      "riskScore": 0,
      "staticFlags": [],
      "scannedAt": "2026-04-05T12:00:00.000Z",
      "alerted": false
    }
  ],
  "nextCursor": null
}
GET /scan/:package/:version

Detailed scan results for a specific package version. Returns HTML for browsers, JSON for API clients.

Example
curl 'https://ferretwatch.dev/scan/express/4.21.1'
Response
{
  "id": 42,
  "packageName": "express",
  "version": "4.21.1",
  "previousVersion": "4.21.0",
  "riskScore": 0,
  "staticFlags": [],
  "llmSummary": null,
  "diffUrl": null,
  "alerted": false,
  "scannedAt": "2026-04-05T12:00:00.000Z",
  "alerts": []
}
GET /scan/:package

Scan history for a package — all scanned versions.

ParamTypeDefaultDescription
limitnumber20Results per page (max 100)
Example
curl 'https://ferretwatch.dev/scan/express'
Response
{
  "package": "express",
  "scans": [
    { "id": 42, "version": "4.21.1", "riskScore": 0, "alerted": false, ... },
    { "id": 30, "version": "4.21.0", "riskScore": 0, "alerted": false, ... }
  ]
}
GET /stats

Dashboard statistics.

Example
curl 'https://ferretwatch.dev/stats'
Response
{
  "totalPackages": 156,
  "scansToday": 42,
  "totalAlerts": 3
}