Undercurrent

API

Everything on this site comes from a free JSON API. No key needed; each address can make 240 requests a minute.

Interactive reference: https://undercurrent-api.vercel.app/docs

EndpointWhat it returns
GET /api/overviewHeadline numbers, risers, fallers, breakouts and the biggest switches.
GET /api/tools?category=&stage=&sort=momentum&limit=50Search and filter every tracked tool.
GET /api/tools/{id}Everything about one tool: momentum, stage, drivers, migrations, companions, health and rivals.
GET /api/tools/{id}/seriesMonthly history for every signal, plus the 12-month forecast.
GET /api/compare?ids=jest,vitestUp to six tools side by side, including switches between them.
GET /api/categoriesEvery category with its leader and its fastest mover.
GET /api/categories/{id}One category, with each rival's share over time.
GET /api/migrations?domain=&min_repos=2Switch counts between rivals, overall and by year.
GET /api/migrations/examples?from_tool=jest&to_tool=vitestThe repositories and commits behind one switch.
POST /api/check-stackSend { content, filename } for any dependency file and get a verdict per dependency.
GET /api/badge/{id}.svgA README badge with the tool's momentum and stage.
GET /api/reports and /api/reports/{YYYY-MM}Monthly State of Tools reports.
GET /api/forecasts/accuracyHow past forecasts compared with what actually happened.
POST /api/alerts/subscribeSend { email, tools: [ids] } to follow tools.
GET /api/statusHealth of every crawler and how fresh each data source is.

Example

curl https://undercurrent-api.vercel.app/api/tools/vitest curl -X POST https://undercurrent-api.vercel.app/api/check-stack \ -H "Content-Type: application/json" \ -d '{"filename": "requirements.txt", "content": "flask\nrequests\nnose"}'