Tracked tools
The index covers five AI coding tools:claude (Claude Code) · codex · copilot (GitHub Copilot) · cursor · devin (Cognition)
PRs and merge rates are tracked for all five. Commits are tracked for claude only, since it is the only tool that consistently attributes commits via a co-author trailer on public GitHub.
Metrics
Each daily row inllm_coding_daily_metrics carries one set of values per tool:
PR counts are stable once posted.
merged and merge_rate for recent days continue to update as in-flight PRs land, then settle once activity tails off.
These are public-GitHub signals only. Private repos, self-hosted instances, and IDE-side telemetry are out of scope. Treat the values as a directional measure of open-source adoption, not total usage.
Products
The API exposes pre-built products — a tool plus a metric — so you can fetch one series at a time without picking columns by hand. Each product has anid, a human-readable label, and a kind:
kind: "count"— a whole-number count (PRs or commits per day).kind: "pct"— a percentage (the daily merge rate).
Products whose ID starts with a
vs pairing (for example cc-vs-codex) return two series in a single response, ready to plot on one chart. They are only valid on /api/llm-coding/history — the single-day /api/llm-coding/index endpoint rejects them.
Update frequency
Values are refreshed once per day after a backfill-and-catch-up scrape. New days appear within roughly 24 hours of UTC midnight. Re-fetching the samedate later may return a higher merged count as previously open PRs land.
Reading the latest value
GET /api/llm-coding/index?product={id} returns the most recent daily value for a single (non-compare) product, with the day-over-day percent change. LLM coding analytics require an API key — there is no free tier:
changePct is null when there is no previous day on file or the previous value was zero.
Pulling a historical series
GET /api/llm-coding/history?product={id} returns the daily series for a product, oldest first. Pass startDate and endDate (both YYYY-MM-DD, inclusive) to bound the window, or limit to cap the row count (default 2000).
This endpoint requires an API key — LLM coding analytics have no free tier. Anonymous requests return 401.
For a single-tool product, each row carries one value:
value and value2, ordered to match seriesLabels:
product returns 400. A valid product with no rows in the requested window returns 200 with an empty data array — history never returns 404 (unlike the index endpoint, which returns 404 when a known product has no current value).
Listing available products
If you want to drive a selector from the live product list rather than hard-coding IDs, callGET /api/llm-coding/products. This catalog endpoint is public — no API key required:
Notes
- LLM coding analytics require an API key — the latest value (
/api/llm-coding/index) and history (/api/llm-coding/history) both return401without one. Only the products catalog (/api/llm-coding/products) is public. See Authentication. - History rows come back oldest first — the opposite of the OTPI and GPU history endpoints. You can plot them directly without re-sorting.
- Merge rates and merged counts for the last few days will keep ticking up as PRs land. Pin to a settled date if you need a stable value.

