BYTETOOLS

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.

No API key requiredHTTPSFree tier

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
curl 'https://24pullrequests.com/projects.json?year=2023'
JavaScript (fetch)
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);
Python (requests)
import requests

res = requests.get("https://24pullrequests.com/projects.json?year=2023", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
[
  {
    "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 Queu

Parameters

ParameterTypeRequiredDescription
yearintegerOptionalCampaign year to fetch. Without it you get the current year, which is empty outside December. 2023
(endpoint)pathOptional`/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

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.