public-apis: the collective directory of free public APIs
public-apis/public-apis · 483,096★ · 53,366 forks
A directory of free APIs in a single Markdown file, hand-maintained since 2016, that became the de facto reference for discovering public APIs — and a case study in what happens when a commercial vendor works its way into the curation.
What public-apis is
public-apis is a repository whose product is a single document: README.md (238 KB, 2,189 lines), organized into 51 categories (from Animals and Anime to Weather, through Authentication, Blockchain, Finance, Government, Machine Learning, Security, or Transportation) and 1,706 table entries.
Each entry describes an API with these columns: name (linked to its official documentation), description (100 characters max), Auth (authentication type: OAuth, apiKey, X-Mashape-Key, No, or User-Agent), HTTPS (yes/no), CORS (Yes, No, or Unknown), and “Call this API” (a link to a public Postman collection where one exists). There’s no application code: GitHub classifies the primary language as Python solely because of the validation scripts in scripts/validate/. The license is MIT (c) 2022 public-apis.
The origin: from a personal README to a community standard
The repository was created on March 20, 2016 by Todd Motto (toddmotto), who made the initial commit at 23:49 UTC and merged the first PRs himself. Within 24 hours the list gained NASA, OpenWeatherMap, Transport for London, irail, Deutsche Bahn, Dribbble, Netflix Roulette, iTunes, Spotify, and RandomUser, among others. Its first Hacker News appearance dates to March 21, 2016 (2 points); the real push came in 2017, when a thread reached 270 points.

Three milestones mark the project’s evolution. In 2018, davemachado (the second-largest contributor with 683 commits) created the official JSON API, davemachado/public-api, in Go, served at api.publicapis.org. In 2019 the project moved to the public-apis organization (created May 28, 2019, with 6,205 followers today and only this one public repository); that same year the first commercial friction appeared: in an HN thread, user brianherbert observed that “the repo owner runs the website sponsoring the list.”
The bigger controversy landed in 2022: on March 11 the APILayer GitHub account pushed three “Update README.md” commits directly to the README; that same day Yann Bertrand (yannbertrand, 79 commits, top 10 of the project) pushed three Revert "Update README.md" commits to undo them. On March 16 and May 18, 2022, APILayer edited the README again, and this time the changes stuck: today’s README opens with an “APILayer Unified Suite is now Live!” section, promotes APILayer’s own products (IPstack, Marketstack, Weatherstack, Aviationstack, Fixer, Zenserp, Screenshotlayer), and the repository’s homepage link is a referral link to apilayer.com carrying UTM parameters. That controversy gave rise to the maintained community fork public-apis-dev/public-apis (today redirected to marcelscruz/public-apis), created May 11, 2022.

Philosophy and principles
CONTRIBUTING.md explicitly states the philosophy: “This API list is not a marketing tool, but a tool to help the community build applications and use free, public APIs quickly and easily.” That statement yields verifiable rules:
- Real free access: a proposed API must have complete free access or at least a free tier; APIs that depend on buying a device or service are rejected, and PRs identified as marketing attempts aren’t accepted.
- Manual curation: the README states the list is “manually curated by community members like you and folks working at APILayer” — meaning no scraping or automated generation; every entry goes through a contributor’s human review.
- Per-entry technical transparency: the
Auth,HTTPS, andCORScolumns make integration cost visible before opening the documentation; the document notes that without CORS, an API is only usable server-side. - Documentation hygiene: alphabetical order per section, a description under 100 characters, one link per PR, PR titles formatted
Add Api-name API, squashed commits, no TLD in the name, and the name shouldn’t end in “API.” - Continuous verification: CI validates every link in the README daily and on every push or PR.

How it works
The entire content lives in README.md. The “Index” section links to the 51 categories, and each category is an alphabetically sorted table. Of the 1,706 entry links, 26 carry APILayer’s utm_source tracking parameter (including the 11 rows of the promotional “APILayer APIs” table that heads the file).
The repository’s infrastructure is minimal, limited to scripts/ (Python 3.8) and two GitHub Actions workflows: test_of_push_and_pull.yml (on every push or PR to master) validates Markdown formatting, runs a check against the proposed change, and looks for duplicate links; validate_links.yml (scheduled daily at midnight UTC) validates that every README link still responds.

The README also officially links the project’s JSON API (davemachado/public-api, Go, Apache 2.0), whose README documents the base https://api.publicapis.org/ with four public endpoints, no authentication, and CORS support: GET /entries (lists everything, with filters by title, description, auth, https, cors, and category), GET /random (a random entry), GET /categories, and GET /health. A documented detail: for categories with a space and ampersand, the parameter uses only the first word (Science & Math → category=science). That API’s own repository shows no commits since December 8, 2022, and the api.publicapis.org host did not respond in the most recent check, so its current availability remains unconfirmed.

The ecosystem
Official or same-author companions:
davemachado/public-api— the list’s official JSON API, linked from the README itself. 1,683 stars, 181 forks; Go, Apache 2.0; last published December 8, 2022.- The
public-apisorganization (6,205 followers) owns only this repository; there are no sibling repos in the org. toddmotto/public-apis— Todd Motto’s original repository, today a fork of the main project (2,739 stars, 311 forks); it’s the residue of the project’s personal origin.
Community forks and alternatives (verified via the GitHub API on August 21, 2026):
marcelscruz/public-apis(formerlypublic-apis-dev/public-apis) — “A collaborative list of public APIs for developers”; 9,360 stars, 1,023 forks, created May 11, 2022, MIT, homepagepublicapis.dev. It’s the marketing-free APILayer fork cited in later community discussions.public-api-lists/public-api-lists— “A curated list of free public APIs — searchable, community-maintained, with a free JSON API”; 15,552 stars, 1,691 forks, created January 5, 2020, MIT, web interface atpublic-api-lists.github.io.tonnyl/awesome_apis— “A collection of APIs”; 13,081 stars; a general API collection, not limited to free ones.Free-APIs/Free-APIs.github.io— “A collection of free APIs for new and experienced developers”; 1,284 stars.255kb/stack-on-a-budget— 12,389 stars; adjacent (free-tier services for tight budgets), not an API directory.

Outside GitHub itself, two related projects have no identified repository of their own: freepublicapis.com (“A collection of Free Public APIs for Students and Developers. Tested every single day.”, with a 2024 HN thread that reached 602 points) and apirank.dev (“We crawled and ranked public APIs from the internet,” a Show HN post with 176 points). No official npm/PyPI/crates package exists for the list, since it’s a document, not software.
Official and semi-official status
There’s no formal designation as a standard, nor any marketplace presence; the status is de facto: with 467,497 stars it’s the most-starred API list on GitHub and the canonical link that shows up in tutorials, threads, and podcasts whenever someone asks about “free APIs.”
What does exist is a documented vendor relationship: APILayer (a commercial API provider — IPstack, Weatherstack, Serpstack) participates in curation per the README’s own claim, had direct write access to the file in 2022, the repository’s homepage is a referral link to APILayer, and 26 rows of the list carry its UTM parameter. In practice, APILayer’s products get guaranteed visibility at the top of the niche’s most-consulted list, and the community responded with public reverts and an alternative fork. It’s not an “official status” of a standard, but a de facto commercial relationship between the list and a vendor.
Repo numbers
Measured: August 21, 2026, GitHub API.
| Metric | Value |
|---|---|
| Stars | 467,497 |
| Forks | 51,560 |
| Real subscribers | 4,674 |
| Commits | 5,158 |
| Open issues + PRs | 1,717 |
| Primary language | Python (validation scripts) |
| License | MIT (c) 2022 public-apis |
| Created | March 20, 2016 |
| Last push | August 19, 2026 |
| Releases / tags | none |
watchers_count mirrors the star count in the API response, so the reported subscriber figure is subscribers_count. open_issues_count includes open change requests, not only issues.

Top contributors by commits: matheusfelipeog (826), davemachado (683), ArindamOSS (292), pawelborkar (150), jbrooksuk (135), marekdano (133), mikestreety (129), toddmotto (99), yannbertrand (79), wesbos (44). One pattern stands out: matheusfelipeog’s hundreds of “Remove X, it’s broken” commits — a streak of 20 removals in a single day is just one example — evidence of ongoing cleanup of dead APIs.
Quick-start guide
Installation and first run
There’s no software to install: the product is a document. Three ways to access it, from lowest to highest control:
- Browse: open the repository on GitHub and read the rendered README. The file weighs 238 KB; the browser’s search (Ctrl/Cmd+F) is the natural navigation tool.
- Clone locally:
git clonethe repository and openREADME.mdin whatever viewer suits you, or process it with your own scripts. - Official JSON API (if it responds):
curl https://api.publicapis.org/categoriesandcurl "https://api.publicapis.org/entries?category=weather". It requires no authentication and supports CORS.
On first use, pay attention to the Auth and CORS columns — they determine whether the API can be integrated from the browser without a key, and how much effort it’ll take.
Common workflows
- Find an API for a specific domain: open the README, locate the category, and read the rows. To filter without browsing,
GET /entries?category=weather&auth=Noreturns only weather APIs with no authentication. - Test before integrating: the “Call this API” column links to public Postman collections; for keyless APIs, a single test request is enough.
- Ingest the catalog as data: consume
GET /entries(orGET /random) from your own project, or parse theREADME.mdtables if the API is unavailable. - Validate your own project’s link: if contributing, the PR triggers format and link validation, plus the daily midnight-UTC check.
Common pitfalls and fixes
- The API is listed but goes down or changes contract: CI validates that documentation links respond, not that the endpoint works. The fix is a smoke test against the chosen endpoint before depending on it.
- “Free” with fine print: many entries are “free up to N requests, then $” — free tiers with a scaling ceiling. Verify the free plan in the official docs before sizing a project around it.
CORS: Nofrom the browser:CONTRIBUTING.mdwarns that without CORS an API is only usable server-side; the fix is a backend proxy or picking an entry withCORS: Yes.- Vendor advertising in the list: the header promotes APILayer and 26 rows carry
utm_source. For a clean catalog, the community uses themarcelscruz/public-apisfork — same format, no marketing. - Depending on
api.publicapis.org: that API’s repository has been inactive since December 2022; having a fallback (the README itself orpublic-api-lists, which offers its own free JSON API) avoids a dead dependency.
Contributing
CONTRIBUTING.md documents a full process: fork the repository, clone it, and connect the upstream; create a branch for the change; add one API per PR, in the section that best fits the service, in alphabetical order, with the exact table format and a description under 100 characters; title the PR Add Api-name API; squash all commits and verify CI passes before requesting review.
Content restrictions: the API must have complete free access or a free tier, must not depend on buying a device or service, must have adequate documentation, and must not be a marketing attempt.
How the community received it
The recovered evidence shows sustained adoption over a decade, a turning point with APILayer’s arrival, and an ecosystem of alternatives.
In the 2017 Hacker News thread (270 points, 23 comments), iDemonix wrote “next time I feel the urge for a side project I know which page to start on”; thedatamonger awarded it “github star of the week award.” In a 2019 thread, brianherbert raised the first verified commercial criticism — “The repo owner runs the website sponsoring the list” — while yllus defended the process as “structured enough — TravisCI tests to ensure a consistent documentation style.”
During the 2022–2023 APILayer controversy, a thread titled “Tell HN: The 226K stars ‘public-APIs’ repo has been ruined by a greedy company” gathered 25 points, with a user linking both the maintained fork (marcelscruz/public-apis) and the public-api-lists alternative. The direct community reply lives in the git history: three reverts by yannbertrand the same day as the APILayer account’s edits.
In 2024, the site freepublicapis.com (“Tested every single day”) gathered 602 points and 122 comments on Hacker News: one user proposed an “API forwarder” as a shared goal that would log endpoint failures, and another summed up the reliability discussion with “API doesn’t mean someone’s else’s computer.”
public-apis versus other proposals
| Proposal | Verifiable overlap | Verifiable difference |
|---|---|---|
public-api-lists/public-api-lists (15,552 ⭐) | Curated list of free public APIs, community-maintained | Adds a searchable web interface and its own free JSON API; born in 2020 |
marcelscruz/public-apis (9,360 ⭐) | Same table format; direct fork of the project | No APILayer marketing; site at publicapis.dev; born out of the 2022 controversy |
tonnyl/awesome_apis (13,081 ⭐) | Collection of APIs | Not limited to free or public APIs |
| freepublicapis.com (site) | Directory of free APIs for students and developers | Tests the APIs “every single day”; no public repository found |
| apirank.dev (Show HN, 176 pts) | List of public APIs | Crawls and ranks APIs from the internet instead of curating by hand |
The structural difference isn’t scale but nature: public-apis is a hand-curated Markdown document with integration metadata (Auth/HTTPS/CORS) and CI-driven link validation; its alternatives either add an interface, health testing, or automated ranking.
Use cases and who this repository can help
- Prototype and side-project developers: discover a free
Auth: NoAPI for sample data in minutes, without signing up or reading documentation. - Full-stack developers: the
CORSandAuthcolumns show at a glance which APIs can be called directly from the browser; the Postman column lets you test the endpoint without writing code. - Students and instructors: the 51 categories work as a map of what exists in public APIs.
- Data pipeline maintainers: the catalog can be ingested programmatically; the daily link-validation cron is a reusable pattern for watching over your own catalog’s documentation.
- Teams that need a clean data source: the
marcelscruz/public-apisfork offers the same format with no promotional rows or UTM parameters. - Open-source ecosystem researchers: a decade of git history, contributors, and HN threads form a documented case of community governance versus vendor capture.
Resources
- Repository: https://github.com/public-apis/public-apis
- Official JSON API: https://github.com/davemachado/public-api (availability not confirmed in the latest check)
- Marketing-free community fork: https://github.com/marcelscruz/public-apis (site:
publicapis.dev) - Alternative with interface and JSON API: https://github.com/public-api-lists/public-api-lists
Note: this article combines the repository’s README and CONTRIBUTING file, the GitHub API, the README’s git history, and Hacker News threads consulted on August 21, 2026. Figures change over time.
Comments