DEV Community

Alex Spinov
Alex Spinov

Posted on

10 Free APIs You Can Use Without an API Key (Just Send a Request)

No signup. No OAuth. No API key. Just send an HTTP request and get data back.

Here are 10 APIs that work immediately:

1. Open-Meteo (Weather)

import requests
r = requests.get("https://api.open-meteo.com/v1/forecast",
    params={"latitude": 40.71, "longitude": -74.01, "current_weather": True})
print(f"NYC: {r.json()['current_weather']['temperature']}°C")
Enter fullscreen mode Exit fullscreen mode

2. USGS Earthquakes

r = requests.get("https://earthquake.usgs.gov/fdsnws/event/1/query",
    params={"format": "geojson", "minmagnitude": 5, "limit": 3})
for eq in r.json()['features']:
    print(f"M{eq['properties']['mag']}{eq['properties']['place']}")
Enter fullscreen mode Exit fullscreen mode

3. REST Countries

r = requests.get("https://restcountries.com/v3.1/name/japan")
c = r.json()[0]
print(f"{c['name']['common']}: {c['population']:,} people")
Enter fullscreen mode Exit fullscreen mode

4. Crossref (150M+ Academic Articles)

r = requests.get("https://api.crossref.org/works",
    params={"query": "machine learning", "rows": 3})
for item in r.json()['message']['items']:
    print(item['title'][0][:60])
Enter fullscreen mode Exit fullscreen mode

5. OpenAlex (250M+ Papers)

r = requests.get("https://api.openalex.org/works",
    params={"search": "CRISPR", "per_page": 3})
for w in r.json()['results']:
    print(f"{w['title'][:50]}... ({w['cited_by_count']} citations)")
Enter fullscreen mode Exit fullscreen mode

6. JSONPlaceholder (Fake Data)

r = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(r.json()['title'])
Enter fullscreen mode Exit fullscreen mode

7. Dog CEO (Random Dog Photos)

r = requests.get("https://dog.ceo/api/breeds/image/random")
print(r.json()['message'])  # URL to a random dog photo
Enter fullscreen mode Exit fullscreen mode

8. CoinGecko (Crypto Prices)

r = requests.get("https://api.coingecko.com/api/v3/simple/price",
    params={"ids": "bitcoin,ethereum", "vs_currencies": "usd"})
for coin, data in r.json().items():
    print(f"{coin}: ${data['usd']:,}")
Enter fullscreen mode Exit fullscreen mode

9. arXiv (Research Preprints)

r = requests.get("http://export.arxiv.org/api/query",
    params={"search_query": "all:quantum computing", "max_results": 3})
print(r.text[:500])  # XML response with paper data
Enter fullscreen mode Exit fullscreen mode

10. PubMed (Medical Papers)

r = requests.get("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi",
    params={"db": "pubmed", "term": "covid vaccine", "retmax": 3, "retmode": "json"})
print(f"Found: {r.json()['esearchresult']['count']} papers")
Enter fullscreen mode Exit fullscreen mode

Quick Reference

API Data URL
Open-Meteo Weather api.open-meteo.com
USGS Earthquakes earthquake.usgs.gov
REST Countries Countries restcountries.com
Crossref 150M+ papers api.crossref.org
OpenAlex 250M+ papers api.openalex.org
JSONPlaceholder Fake data jsonplaceholder.typicode.com
Dog CEO Dog photos dog.ceo
CoinGecko Crypto prices api.coingecko.com
arXiv Preprints export.arxiv.org
PubMed Medical papers eutils.ncbi.nlm.nih.gov

I built Python toolkits for the academic APIs — all on my GitHub.


What's your go-to free API? Drop it in the comments!

Top comments (0)