Build on our data
A public, key-less REST API for the community's contribution stats, leaderboard, blog, and showcase. Wire it into your TUI, bot, or dashboard.
No API key
Fully public, read-only open data. Just make the request.
Rate limited
20 requests/min and 500/day per IP, fair for everyone.
Heavily cached
Served from cache and refreshed on every data sync.
OpenAPI + Zod
Typed schemas and a spec you can generate clients from.
Introduction
The Open Data API exposes the same data that powers this website so you can build your own tools on top of it. Everything is read-only, returns JSON, and requires no authentication.
Every successful response is wrapped in an envelope: the payload lives under data, with optional meta (such as count, month, or lastSyncedAt). Errors return { "error": { "code", "message" } }.
Base URL
All endpoints are versioned under a single base URL: https://githubcommunity.az/api/v1
Paths in this documentation are shown relative to it, e.g. /stats means https://githubcommunity.az/api/v1/stats.
Authentication
None. This is open data, so there are no API keys, tokens, or sign-up. Just send a GET request. Requests are attributed to your IP for rate limiting only.
Rate limits
Limits are applied per IP address: 20 requests per minute and 500 requests per day. Exceeding either returns 429 Too Many Requests with a Retry-After header.
Every response includes these headers:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Per-minute request cap (20). |
X-RateLimit-Remaining | Requests left in the current minute. |
X-RateLimit-Reset | Unix seconds when the minute window resets. |
X-RateLimit-Limit-Daily | Per-day request cap (500). |
X-RateLimit-Remaining-Daily | Requests left today. |
Retry-After | Seconds to wait after a 429 response. |
Caching
Responses are served from a server-side cache and refreshed automatically whenever the underlying data is synced, so you always get fresh numbers without hammering the database. Each response also carries Cache-Control: public, max-age=60, so your own client may reuse it for up to a minute. Please cache on your side rather than polling in a tight loop.
Errors
Errors use standard HTTP status codes and a consistent body: { "error": { "code", "message" } }.
| Status | Code | When |
|---|---|---|
400 | invalid_params | A path parameter is malformed (e.g. bad year/month). |
404 | not_found | No resource for that slug or month. |
429 | rate_limited | You exceeded the per-minute or monthly limit. |
500 | internal_error | Something went wrong on our side. |
Versioning
The API is versioned in the path (/api/v1). Additive changes (new endpoints or fields) ship within v1; any breaking change would land under a new version.
MCP server
For AI assistants (Claude, Cursor, and other Model Context Protocol clients) the same data is available as an MCP server, so a chatbot can query the community directly. It needs no key.
Endpoint: https://githubcommunity.az/api/mcp/mcp. Add it to your client's config:
Tools: get_stats, get_leaderboard, get_all_time_leaderboard, get_blog_posts, get_blog_post, and get_showcase_projects.
Endpoints
Every endpoint below has copy-pasteable snippets in 12 languages and a live “Run” button.
Stats
/api/v1/statsCommunity stats
Aggregated community totals, the same numbers shown on the home page hero.
Leaderboard
/api/v1/leaderboardCurrent month
Top 50 contributors for the current month, ranked by commits.
/api/v1/leaderboard/all-timeAll-time
Top 50 contributors by all-time commits. Note: GitHub's contribution window means this reflects roughly the last 12 months (the site labels it “Last Year”).
/api/v1/leaderboard/{year}/{month}Specific month
Top 50 contributors for a past month. Returns 404 if no data exists for that month.
Blog
/api/v1/blogList posts
All blog posts (metadata only, without the MDX body), newest first.
/api/v1/blog/{slug}Single post
A single blog post including its raw MDX body. Returns 404 for an unknown slug.
Showcase
/api/v1/showcaseList projects
Community showcase projects with live GitHub repo stats, newest first.
Schemas & OpenAPI
A machine-readable OpenAPI 3.1 spec is available. Generate a typed client in your language of choice, or import it into Postman/Insomnia:
Using TypeScript? Drop these Zod schemas in to validate and type every response: