Docs · Reference

API

JSON over HTTPS. Free endpoints need nothing; Pro endpoints take your license key as Authorization: Bearer <key> or X-API-Key: <key>. Be gentle: responses are cached for 5 to 10 minutes, so polling faster gains nothing.

Free

GET /api/v1/writer/{handle}

Current numbers for one writer.

curl https://stackblade.app/api/v1/writer/heathercoxrichardson
{
  "handle": "heathercoxrichardson",
  "name": "Heather Cox Richardson",
  "publication": "Letters from an American",
  "publication_url": "https://heathercoxrichardson.substack.com",
  "followers": 3530857,
  "subscribers_rounded": "3M+",
  "paid_band": "Hundreds of thousands",
  "bestseller_badge": 10000,
  "change_7d": null, "change_7d_days": null,
  "change_30d": null, "change_30d_days": null,
  "recommended_by": 196,
  "new_recommenders_7d": 34,
  "new_recommenders_30d": 52,
  "new_recommenders_30d_is_minimum": true,
  "recommends": 18,
  "boards": [
    { "category": "Podcasts", "board": "bestsellers", "rank": 1 },
    { "category": "U.S. Politics", "board": "bestsellers", "rank": 3 }
  ],
  "tracked_since": "2026-10-31",
  "last_reading": "2026-10-31",
  "url": "https://stackblade.app/w/heathercoxrichardson"
}

A real response from Oct 31, 2026, the first day of history, so the 7-day and 30-day changes are null.

GET /api/v1/board/{category-slug}?board=bestsellers|rising

The latest read of one board, with each row's previous rank.

GET /api/v1/activity?kind=all|rec|rank|followers

The activity feed, newest first.

Pro

GET /api/v1/writer/{handle}/history

Every reading, and every change in board position by day.

curl -H "Authorization: Bearer $STACKBLADE_KEY" https://stackblade.app/api/v1/writer/kyla/history

GET /api/csv/{handle}

The same as CSV.

GET /api/recs/{handle}.csv

Recommendations both ways, with start and stop dates.

GET /api/v1/writers.csv?…

Any Explore view (same query parameters), up to 2,000 rows.

GET /api/v1/watchlist

Your watchlist with current numbers. POST with {"handles": ["a", "b"]} adds, DELETE with the same body removes.

Errors

401 missing or invalid key. 404 not tracked. 429 too many new-writer lookups from one address (20 a day). Errors come as {"error": "…"}.