24 Pull Requests API
Free JSON API listing open source projects and contributors from the 24 Pull Requests campaign. No key required. Working curl example and response breakdown.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the 24 Pull Requests API?
24 Pull Requests offers a small public JSON API at `https://24pullrequests.com`. `GET /projects.json?year=2023` returns suggested open source projects with a description, GitHub URL and primary language, and `/users.json` returns participating contributors. No key is needed.
24 Pull Requests is the December campaign that nudges developers into sending one pull request a day, and its API is the campaign's project list exposed as plain JSON. Each entry is deliberately minimal: a description, a GitHub URL and a main language. That is exactly the shape you want if you are building a 'find something to contribute to' widget, because everything else can be fetched from GitHub with the URL you already have.
Worth knowing before you build: the API sends no `Access-Control-Allow-Origin` header, so a browser fetch will be blocked and you need a small server-side proxy or a build-time fetch. The `year` parameter also matters more than it looks. Projects are curated per campaign year, and omitting it gives you the current year, which is empty for most of the calendar.
Quick facts
- Base URL
https://24pullrequests.com- Authentication
- No key. Read-only endpoints only; signing up to the campaign itself uses GitHub OAuth and is unrelated to the API.
- Rate limit
- Not published. The dataset is small and static enough that a single cached fetch per day is plenty.
- Pricing
- Free and open source (MIT).
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the 24 Pull Requests API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. List suggested projects for a campaign year
GET https://24pullrequests.com/projects.json?year=2023
curl 'https://24pullrequests.com/projects.json?year=2023'const res = await fetch("https://24pullrequests.com/projects.json?year=2023");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://24pullrequests.com/projects.json?year=2023", timeout=20)
res.raise_for_status()
print(res.json())[
{
"description": "Doctrine Object Relational Mapper (ORM)",
"github_url": "https://github.com/doctrine/doctrine2",
"main_language": "PHP"
},
{
"description": "WordPress for iOS - Official repository",
"github_url": "https://github.com/wordpress-mobile/WordPress-iOS",
"main_language": "Swift"
},
{
"description": "A mighty CSS linter that helps you avoid errors and enforce conventions.",
"github_url": "https://github.com/stylelint/stylelint",
"main_language": "JavaScript"
},
{
"description": "A client library for Apple TV and AirPlay devices",
"github_url": "https://github.com/postlund/pyatv",
"main_language": "Python"
},
{
"description": "A markdown parser and compiler. Built for speed.",
"github_url": "https://github.com/markedjs/marked",
"main_language": "JavaScript"
},
{
"description": "Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD",
"github_url": "https://github.com/go-gitea/gitea",
"main_language": "Go"
},
{
"description": "Graphical Java application for managing BibTeX and biblatex (.bib) databases",
"github_url": "https://github.com/JabRef/jabref",
"main_language": "Java"
},
{
"description": "An interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.",
"github_url": "https://github.com/mitmproxy/mitmproxy",
"main_language": "Python"
},
{
"description": "Distributed Task QueuParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
year | integer | Optional | Campaign year to fetch. Without it you get the current year, which is empty outside December. 2023 |
(endpoint) | path | Optional | `/projects.json`, `/users.json`, `/users/{login}.json` or `/leaderboard.json`. /projects.json |
Response fields
(root)array- The response is a bare JSON array, not an object with a wrapper. There is no total count or pagination metadata.
descriptionstring- One-line project summary, copied from the maintainer's submission rather than from GitHub.
github_urlstring- Canonical GitHub repository URL. Some entries point at repositories that have since been renamed, so expect the occasional redirect.
main_languagestring- Primary language as a display name such as `JavaScript` or `Go`. It is a free-text field, so group case-insensitively.
What you can build with the 24 Pull Requests API
- Show a 'projects looking for contributors' panel on a developer blog or newsletter
- Build a first-timers-friendly issue finder by combining these repositories with the GitHub issues API
- Track which languages dominate a given year's campaign for a write-up
- Seed a hackathon or onboarding exercise with real projects that welcome outside pull requests
- Mirror the list into your own database so an internal tool has no external dependency
Common errors and how to fix them
Empty array
The requested year has no curated projects, usually because the campaign for that year has not started.
Fix: Pass an explicit `year` for a completed campaign, such as 2023.
CORS error in the browser
The API sends no `Access-Control-Allow-Origin` header.
Fix: Fetch it server-side or at build time and serve the result from your own origin.
404
The path is wrong. The extension is part of the route.
Fix: Use `/projects.json`, not `/projects` or `/api/projects`.
24 Pull Requests API — frequently asked questions
Is the 24 Pull Requests API free to use?
Yes. It needs no key, no account and no attribution beyond ordinary courtesy. The project itself is MIT-licensed open source.
Can I call it from front-end JavaScript?
Not directly. The response carries no CORS header, so browsers will block it. Proxy the request through your own backend or fetch it during a static build.
Does the API still work outside December?
Yes, but you must pass a `year` for a past campaign. Requests without a year return the current campaign, which is empty for most of the year.
How current is the project data?
Projects are submitted by maintainers during the campaign and are not re-validated afterwards, so a small share of the GitHub URLs in older years now redirect or 404.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
JSON Viewer
View JSON as a collapsible interactive tree online. Expand and collapse nodes, search keys and values, and copy the JSONPath of any node privately.
24 Pull Requests is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.