1. API

API · static files

Charts as data.

2391 charts from the labs and trackers, 73,917 points, each with where the number came from. One request, one chart.

curl1 credit when live
curl -s https://viral-chart.com/api/charts/3c6d3092be5c.json

These are static files for the prototype, not a live API. No key is needed and nothing is charged today. Use the host you are reading this on until the site is live.

What the data is

Each chart a lab or tracker published becomes one JSON file: the title, the publisher, a link to the original, every point (group, series, value, unit), whether the number was printed on the chart, how it was obtained (provenance) and a confidence from 0 to 1, plus a redraw spec for the native chart and a license note. Provenance is one of publisher-text, mixed or estimated-from-image. We pull no numbers from leaderboards; the source link is where you can check.

Every file also carries a style field: the style spec that says how the original chart looks (type, canvas and colours, fonts, legend, axes, series colours and patterns, highlight, value labels, logo markers). Our renderer draws a look-alike from the points plus that spec. A replica is accepted at 7 of 10 from our judges: 95 of 2391 charts are accepted today, and each file has replica.score and replica.accepted. Where the judges said the names or numbers were the main problem, a second reading is in replicaData.

2391charts
73,917points
2 / 29 / 2360publisher-text / mixed / estimated
12labs

Provenance and accuracy

Measured, not promised. On 16 real charts where the publisher also wrote the numbers as text (all grouped bars with the numbers printed), 86.7% of 240 points were within 3% of the publisher's number. Of the 32 points that were off by more than 3%, 26 were printed numbers that both reading passes read identically, so the chart and the text probably disagree. If so, 97.5% were within 3%. Such points show both numbers ("chart says X, model card says Y").

The controlled test below draws our own charts from known data. Numbers printed on the chart read well. Values read off an axis are coarser, lines are good, and stacked bars and scatter plots are the weak spots: stacked segments snap to round numbers, and only some scatter points keep a matchable label. We make no accuracy guarantee for unlabelled real charts, because there is no real ground truth for them yet.

Chart kindChartsPoints scoredWithin 1%Within 3%Within 3% of range
Real charts with publisher text (grouped bars, printed)1624085.4%86.7%87.5%
Controlled: Bars, numbers printed324100%100%100%
Controlled: Bars, read off the axis32470.8%100%100%
Controlled: Grouped bars, numbers printed224100%100%100%
Controlled: Grouped bars, read off the axis33969.2%100%100%
Controlled: Line, read off the axis35253.8%88.5%100%
Controlled: Stacked bars, read off the axis35022%42%86%
Controlled: Scatter, labelled points31816.7%55.6%72.2%

Within X% is relative to the true number. Within 3% of range is relative to the axis range. Source: data/chart-data/index.json.

Rules on every tier: provenance and the license note always come with the data, estimated numbers are always labelled, and the original link stays on every chart.

Endpoints

From the OpenAPI sketch in docs/chart-data.md. In this prototype the first three paths are static files; filters and paging need the live API.

PathCredits when liveReturns
GET/api/charts/{id}.json1One chart: points, provenance, redraw spec, license note. 404 for an unknown id, 402 when the plan does not include it.
GET/api/charts/{id}.skill.mdfreeThe agent skill file for one chart (Markdown). The sketch writes the path as /api/charts/{id}/skill.md.
GET/api/charts/index.json1The index: one row per chart. The live form is GET /api/charts.
GET/api/charts?model=&publisher=&form=&provenance=&limit=&cursor=1 per 25 rows (proposed)Live API only. Filters: model slug, publisher, form (bar, grouped-bar, benchmark-bars, line, scatter, stacked-bar, table), provenance (publisher-text, mixed, estimated-from-image). limit up to 200, cursor for the next page.

Proposed tiers: Free gets the first rows and publisher-text charts, Pro curates (saves, boards, alerts, full history, every chart unblurred), Max reverse engineers (chart data JSON, style spec, the redraw maker, API and bulk export). The site does not charge for any of it yet. Internal fields (selectionReason, nearMissTruth) are left out of the files.

Examples

Against the static files. Replace the host with the one you are on until the site is live.

curl1 credit when live
curl -s https://viral-chart.com/api/charts/3c6d3092be5c.json | jq '.points[:2]'
curl1 credit when live
curl -s https://viral-chart.com/api/charts/index.json \
  | jq '.charts[] | select(.provenance != "estimated-from-image") | .id'
curlfree
curl -s https://viral-chart.com/api/charts/3c6d3092be5c.skill.md

A response, trimmed to two points. The values are the real file for 3c6d3092be5c.

JSON
{
  "id": "3c6d3092be5c",
  "title": "LLM Performance Evaluation",
  "publisher": "Z.ai",
  "url": "https://huggingface.co/zai-org/GLM-5.3",
  "sourceUrl": "https://www.tbench.ai/leaderboard",
  "provenance": "publisher-text",
  "confidence": 1,
  "chart": {
    "type": "grouped-bar",
    "series": [
      "GLM-5.3",
      "GLM-5.2",
      "Kimi K3"
    ]
  },
  "points": [
    {
      "group": "Terminal Bench 3.0",
      "series": "GLM-5.3",
      "value": 28.3,
      "provenance": "publisher-text",
      "confidence": 1,
      "printed": true
    },
    {
      "group": "Terminal Bench 3.0",
      "series": "GLM-5.2",
      "value": 4.6,
      "provenance": "publisher-text",
      "confidence": 1,
      "printed": true
    }
  ],
  "license_note": "These numbers describe a chart published by Z.ai. The image and design belong to them. Values marked estimated-from-image may be off. Original: https://huggingface.co/zai-org/GLM-5.3"
}

The skill file

One Markdown file per chart for an agent. It has a front matter block (name, description), the fetch paths, the fields, a caveat copied from the license note and a redraw recipe for the native chart maker. It costs nothing. The start of the real file:

markdown
---
name: chart-data-3c6d3092be5c
description: Data points of the chart "LLM Performance Evaluation" published by Z.ai (publisher-text, 30 points). Use it to study the numbers or to redraw a similar chart under your own brand with the CountStory native chart maker.
---

# LLM Performance Evaluation

Publisher: Z.ai. Subject: GLM-5 (zai). Original: https://huggingface.co/zai-org/GLM-5.3

## Fetch

- Local file: `data/chart-data/3c6d3092be5c.json`
- API form: `GET /api/charts/3c6d3092be5c.json` (see docs/chart-data.md for the OpenAPI sketch)

## Fields

Credits per call

The price list for when billing opens. Today the files cost nothing. Dollars are at the smallest top-up pack; see pricing.

ActionCreditsIn dollars
One chart as JSON or CSV (download or API call)1$0.005
One list page of 25 rows (API)1$0.005
Family bundle: every chart of one model, up to 10010$0.05
Redraw kit: chart JSON, skill file and SVG starter3$0.015
Data points from a chart image (an estimate, labelled as such)40$0.20
Browsing, pages, chart of the day, weekly digest, skill files, llms.txt, failed or empty callsFree$0

Get keys when billing opens

Billing is not open yet. Leave your email and we write the day it is.

Prototype: this saves on this device only.

Questions people ask

Is this a live API?

No. In this prototype the files are static and need no key. The paths and the shapes are the ones a live API would keep, and billing is not open.

How accurate is the data?

On 16 real charts where the publisher also wrote the numbers as text, 86.7% of 240 points were within 3%. Stacked bars and scatter plots are weaker. See the table above.

Can I use the numbers commercially?

The numbers describe charts that their owners published. Each file carries a license_note. Credit the publisher and draw your own picture.