Codebutor for developers

A free read-only JSON API, README badges, signed webhooks for your Radar and a CI check for abandoned dependencies.

API

Everything under /api/v1 is described by an OpenAPI 3 document, so you can generate a client in your language. Anonymous requests work and share a limit of 600 requests per minute per IP. For more, create an API key and send it as a header: 3,000 requests per minute and a daily quota of 100,000 requests, with a usage chart per key.

curl -H "X-Api-Key: $CODEBUTOR_KEY" \
  "https://codebutor.com/api/v1/contribute?language=Go&sort=friendly&pageSize=5"

Going over a limit returns 429 with a Retry-After header (seconds). Keyed responses include X-Api-Quota-Remaining.

EndpointWhat it returns
GET /api/v1/contributeProjects with good first issues, ranked by a 0-100 welcome score
GET /api/v1/search?q=Plain-words relevance search over the catalog
GET /api/v1/similar/{id}Repositories similar to one repository
POST /api/v1/scanDependency health for a manifest
GET /api/v1/repo/{user}/{repo}One repository with activity status and contribution signals
GET /api/v1/repo/{user}/{repo}/historyStar and fork history
GET /api/v1/trending/search?query=Search the current trending list
GET /api/v1/awesome/listsAwesome lists with health scores

Dependency check in CI

Send a package.json, .csproj, requirements.txt or go.mod and get each dependency's maintenance status (up to 150 packages and 512 KB per request, limited to 10 scans per minute without a key). Nothing you send is stored. Try it in the browser at Dependency Health, or from a shell:

curl -X POST "https://codebutor.com/api/v1/scan?file=requirements.txt" \
  -H "Content-Type: text/plain" --data-binary @requirements.txt

Or use the composite GitHub Action from this repository to fail a build on archived dependencies:

- uses: aminmesbahi/codebutor/.github/actions/dependency-check@main
  with:
    manifest: package.json
    fail-on: archived   # or: inactive, never

README badges

Replace user and repo with a tracked repository:

[![Codebutor](https://codebutor.com/badge/user/repo.svg)](https://codebutor.com/compare?repos=user/repo)
[![Activity](https://codebutor.com/badge/user/repo/activity.svg)](https://codebutor.com/compare?repos=user/repo)
[![Good first issues](https://codebutor.com/badge/user/repo/issues.svg)](https://codebutor.com/contribute)
[![Stars](https://codebutor.com/badge/user/repo/stars.svg)](https://codebutor.com/compare?repos=user/repo)

Radar webhooks

On your Radar you can add a webhook URL (https, port 443). Slack, Discord and Teams URLs receive a ready-made message. Any other URL receives JSON like the sample below, with an X-Codebutor-Signature: sha256=<hex> header: the HMAC-SHA256 of the raw request body using the signing secret shown on your Radar page. Verify it before trusting the payload.

{
  "event": "radar.digest",
  "generatedAt": "2026-10-21T08:00:00.0000000Z",
  "radarUrl": "https://codebutor.com/radar",
  "totalChanges": 1,
  "items": [{
    "id": "9f2c…", "kind": "Trending",
    "title": "alice/rocket is trending",
    "detail": "#4 on daily trending (+300 stars)",
    "url": "https://codebutor.com/repo/42",
    "at": "2026-10-21T06:00:00.0000000Z"
  }]
}

Only changes that happen after you save the webhook are sent. A webhook that fails 10 deliveries in a row is switched off and the last error is shown on your Radar page.