Free Setup Guide

Public APIs: the GitHub repo with thousands of free endpoints for your app

Hunting for live data turns into a tab maze pretty fast. One doc here, one forum post there, and a paywall when you finally find a working URL. Skip the scavenger hunt and start with Public APIs (a community GitHub list of free public APIs). It is a single README with thousands of endpoints tagged by category, auth, CORS, and HTTPS.

Adam BurgeAdam BurgeNano Flow

Open it, pick a section like Finance, News, Sports, or Science, then filter for entries with Auth: No. You get URLs you can hit right away from curl, HTTPie, or your app. When you want keys, you will see which ones have a free tier and the link to docs. I test with NASA's APOD using the DEMO_KEY, and no-key Dog API for instant wins.

You want a quick win. Open the public-apis/public-apis repo on GitHub. Scroll the categories, then press t to search inside the file for your topic. Focus on rows where Auth is No so you can hit them without setup.

Install HTTPie (a friendly curl-like HTTP client) so you can try URLs fast from the terminal.

bash
brew install httpie

Verify with a no-key call. Dog CEO Dog API is tagged No. This returns a random dog image URL you can drop into any prototype.

bash
http GET https://dog.ceo/api/breeds/image/random

You should see JSON with message and status. If you want a Science example, NASA's APOD works with DEMO_KEY and returns today’s space photo URL. Keep it under 30 requests per hour and 50 per day on DEMO_KEY. For production, request your own key. That is enough to prove the repo saves you time before you dig into deeper config.


You want a quick win. Open the public-apis/public-apis repo on GitHub. Scroll the categories, then press t to search inside the file for your topic. Focus on rows where Auth is No so you can hit them without setup.

Install HTTPie (a friendly curl-like HTTP client) so you can try URLs fast from the terminal.

bash
brew install httpie

Verify with a no-key call. Dog CEO Dog API is tagged No. This returns a random dog image URL you can drop into any prototype.

bash
http GET https://dog.ceo/api/breeds/image/random

You should see JSON with message and status. If you want a Science example, NASA's APOD works with DEMO_KEY and returns today’s space photo URL. Keep it under 30 requests per hour and 50 per day on DEMO_KEY. For production, request your own key. That is enough to prove the repo saves you time before you dig into deeper config.

Setup

Get the list

bash
git clone https://github.com/public-apis/public-apis.git
cd public-apis

The README.md is the catalog. It has columns for API, Description, Auth, HTTPS, CORS, Link, Category.

Install a test client

Pick one. I use HTTPie for readability. curl works too.

  • macOS
  • - HTTPie:

bash
brew install httpie

- curl ships with macOS. Update if you need HTTP/3 or newer TLS:

bash
brew install curl
  • Linux
  • - Debian/Ubuntu:

bash
sudo apt update && sudo apt install -y httpie

- Fedora:

bash
sudo dnf install -y httpie

- Arch:

bash
sudo pacman -S --noconfirm httpie
  • Windows
  • - HTTPie via winget:

bash
winget install --id HTTPie.HTTPie -e

- Or Chocolatey:

bash
choco install httpie -y

Optional helpers

  • jq (a JSON CLI filter) for pretty output and slicing fields.
  • - macOS:

bash
brew install jq

- Debian/Ubuntu:

bash
sudo apt install -y jq

- Windows (winget):

bash
winget install --id jqlang.jq -e

Verify

Start with a no-key API so you see a response in seconds.

  • Dog CEO Dog API, Auth: No
bash
http GET https://dog.ceo/api/breeds/image/random

Expected output:


HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "https://images.dog.ceo/breeds/hound-afghan/n02088094_12345.jpg",
"status": "success"
}

Pipe the URL only:

bash
http GET https://dog.ceo/api/breeds/image/random | jq -r .message
  • NASA APOD, Auth: apiKey. Use the public DEMO_KEY for quick tests.
bash
http GET "https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY"

Expected output snippet:


HTTP/1.1 200 OK
Content-Type: application/json
{
"title": "Astronomy Picture of the Day",
"media_type": "image",
"url": "https://apod.nasa.gov/apod/image/....jpg"
}

Rate limits on DEMO_KEY are 30 requests per hour and 50 per day. For sustained use, request your own key in the official docs.

Configuration tips

1) Filter the list locally for Auth: No entries in a category. This pulls API name and link from markdown rows.

bash
grep -n "| No |" README.md | awk -F'|' '{gsub(/\[|\]/, ""); printf "- %s -> %s\n", $2, $7}' | sed 's/ */ /g' | head -20

2) Keep a .env with keys for quick swaps. For testing NASA:

bash
printf "NASA_API_KEY=DEMO_KEY\n" > .env

Load it in Python and fetch APOD:

py
import os, requests
from dotenv import load_dotenv
load_dotenv()
key = os.getenv("NASA_API_KEY")
r = requests.get("https://api.nasa.gov/planetary/apod", params={"api_key": key})
r.raise_for_status()
print(r.json()["url"])

Install deps:

bash
pip install python-dotenv requests

3) Add basic retries and timeouts so free endpoints do not freeze your app.

py
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

s = requests.Session()
retries = Retry(total=3, backoff_factor=0.5, status_forcelist=[429, 500, 502, 503, 504])
s.mount("https://", HTTPAdapter(max_retries=retries))
print(s.get("https://dog.ceo/api/breeds/image/random", timeout=5).json())

4) Cache GETs during dev to stay under limits.

bash
pip install requests-cache
py
import requests_cache
requests_cache.install_cache("devcache", expire_after=300)

5) Avoid CORS pain in browser apps. Fetch server-side in your API layer or use a tiny local proxy during dev.

bash
npm init -y && npm i express node-fetch@2
ts
// proxy.js
const express = require('express')
const fetch = require('node-fetch')
const app = express()
app.get('/dog', async (_req, res) => {
const r = await fetch('https://dog.ceo/api/breeds/image/random')
res.json(await r.json())
})
app.listen(3000)

Run it:

bash
node proxy.js

Then call http://localhost:3000/dog from your frontend.

Troubleshooting

  • 429 Too Many Requests on NASA APOD
  • - Cause: DEMO_KEY rate limit hit. - Fix: Wait for the window to reset or request your own key. Add retries with backoff. Cache responses during dev.

  • CORS error in the browser console
  • - Cause: Many free APIs do not send permissive CORS headers. - Fix: Fetch from your backend or use the local proxy shown above. Do not ship with public CORS proxies.

  • HTTPie command not found
  • - Cause: Install did not land on PATH. - Fix: Reinstall using your platform package manager. On Windows, reopen PowerShell after winget install. On macOS with Homebrew, ensure /opt/homebrew/bin is in PATH.

  • JSON parser error but the body looks like HTML
  • - Cause: You hit a docs page or a wrong URL. - Fix: Recheck the Link column in the repo and copy the exact endpoint path from the API’s docs section, not the homepage.

When it beats RapidAPI

  • You want to explore options without accounts. Public APIs gives you working URLs and auth notes in one file. No login, no SDK install.
  • You teach a class or workshop. Students can test no-key endpoints in minutes. No billing setup or subscription traps.
  • You are building a small feature and do not want a marketplace proxy in the middle. You call the provider direct, read their docs, and control headers and retries.
  • You need offline browsing. Clone the repo and grep for candidates on a plane. Tag good ones in your own fork.

Sources

Want a hand?

Book a 30-min call.

Walk through your stack with us. We'll find the bottleneck and map out the exact wiring you need — free.

Book the callFree intro · 30 min · cal.com
Nano Flow

© 2026 Nano Flow. All rights reserved.