GuidesPUBLIC APIS

Free public APIs that work from the browser

All 70 free public APIs on this page answered without a key or signup in October 2026, and 55 of them send an Access-Control-Allow-Origin header, so a plain fetch() works from any web page. The other 15 send no CORS header and work from browser JavaScript once you prefix the URL with https://proxy.cors.dev/, which is free, needs no signup and allows 600 requests per minute per client IP for text responses up to 1 MiB. Each table lists an example URL, the response size and how to call the API; 19 popular APIs and endpoints that fail from a browser are listed at the end.

How the APIs were tested

We requested each example URL with an Origin header, the way a browser does, and recorded the Access-Control-Allow-Origin header of the response. Then we requested the same URL through https://proxy.cors.dev/. Sizes are the decoded response bodies of the example URL. The "From the browser" column says how to call each API from a page:

  • Direct: the API sends Access-Control-Allow-Origin, so fetch(url) works from any origin with no proxy.
  • Direct only: the API sends the header, but answered 400, 403 or 429 through the proxy because it blocks or rate-limits shared server IPs. Call it directly, so requests come from the visitor's own IP address.
  • Via proxy: the API sends no CORS header, so a direct fetch() fails with a CORS error. Prefix the URL with https://proxy.cors.dev/.

Gutendex and the Fake Store API sent a 403 challenge page to our servers and to the proxy, and normal JSON with Access-Control-Allow-Origin: * to a residential connection, which is what a visitor's browser uses.

Weather and earth APIs

Free weather and earth APIs, checked October 2026
APIExample URLFrom the browserSize
Open-Meteohttps://api.open-meteo.com/v1/forecast?latitude=52.37&longitude=4.89&current=temperature_2m,wind_speed_10mDirect365 B
National Weather Servicehttps://api.weather.gov/points/39.7456,-97.0892Direct3.8 KB
USGS Earthquakeshttps://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_day.geojsonDirect6.4 KB
Sunrise-Sunsethttps://api.sunrise-sunset.org/json?lat=52.37&lng=4.89&formatted=0Direct495 B
UK Carbon Intensityhttps://api.carbonintensity.org.uk/intensityDirect191 B
Where the ISS athttps://api.wheretheiss.at/v1/satellites/25544Direct314 B
Spaceflight Newshttps://api.spaceflightnewsapi.net/v4/articles/?limit=1Direct814 B

Geo, IP and time APIs

Free geo, IP and time APIs, checked October 2026
APIExample URLFrom the browserSize
Zippopotam.ushttps://api.zippopotam.us/us/90210Direct225 B
ipifyhttps://api.ipify.org?format=jsonDirect22 B
ipapi.cohttps://ipapi.co/json/Direct only727 B
Nominatim (OpenStreetMap)https://nominatim.openstreetmap.org/search?q=Amsterdam&format=json&limit=1Direct432 B
BigDataCloud reverse geocodinghttps://api.bigdatacloud.net/data/reverse-geocode-client?latitude=52.37&longitude=4.89&localityLanguage=enDirect4.4 KB
postcodes.iohttps://api.postcodes.io/postcodes/SW1A1AADirect1.9 KB
Nager.Date public holidayshttps://date.nager.at/api/v3/PublicHolidays/2026/NLDirect1.9 KB

IP lookup APIs report the address that sent the request, so always call them directly: through a proxy they report the proxy server's address instead of your visitor's. Nominatim's usage policy allows at most 1 request per second, so geocode on demand and cache the result.

Reference, books and media APIs

Free reference, books and media APIs, checked October 2026
APIExample URLFrom the browserSize
Wikipediahttps://en.wikipedia.org/api/rest_v1/page/summary/AmsterdamDirect2.5 KB
Open Libraryhttps://openlibrary.org/search.json?q=the+hobbit&limit=1&fields=title,author_name,first_publish_yearDirect251 B
Gutendex (Project Gutenberg)https://gutendex.com/books/?search=dickens%20greatDirect only1.1 KB
arXivhttps://export.arxiv.org/api/query?search_query=all:cors&max_results=1Via proxy2.7 KB
DuckDuckGo Instant Answerhttps://api.duckduckgo.com/?q=amsterdam&format=json&no_html=1Direct18 KB
The Met Collectionhttps://collectionapi.metmuseum.org/public/collection/v1/objects/436535Direct2.7 KB
iTunes Searchhttps://itunes.apple.com/search?term=radiohead&entity=album&limit=1Direct only946 B
TVmazehttps://api.tvmaze.com/singlesearch/shows?q=severanceDirect1.4 KB
Deezerhttps://api.deezer.com/search?q=daft%20punk&limit=1Via proxy2.2 KB

arXiv answers with Atom XML; the arXiv API guide shows how to search papers and parse the feed in the browser. For music, books, films and archived pages, see the Deezer API guide, Goodreads shelves as RSS, the Letterboxd diary feed and the Wayback Machine API.

Free APIs for testing and fun

Free test data and fun APIs, checked October 2026
APIExample URLFrom the browserSize
JSONPlaceholderhttps://jsonplaceholder.typicode.com/todos/1Direct83 B
DummyJSONhttps://dummyjson.com/products/1Direct1.5 KB
Fake Store APIhttps://fakestoreapi.com/products/1Direct only285 B
Reqreshttps://reqres.in/api/users/2Direct only711 B
Random Userhttps://randomuser.me/api/?results=1Direct1.1 KB
PokeAPIhttps://pokeapi.co/api/v2/pokemon/pikachuDirect302 KB
Rick and Morty APIhttps://rickandmortyapi.com/api/character/1Direct2.7 KB
SWAPI (Star Wars)https://swapi.dev/api/people/1/Direct647 B
Open Trivia DBhttps://opentdb.com/api.php?amount=1Direct236 B
Dog CEOhttps://dog.ceo/api/breeds/image/randomDirect87 B
xkcdhttps://xkcd.com/info.0.jsonVia proxy402 B
ZenQuoteshttps://zenquotes.io/api/randomVia proxy151 B

For test data, JSONPlaceholder serves placeholder /posts, /users and /todos, DummyJSON adds /products, /users and /carts, and Reqres returns sample users. All three send the CORS header, so they work from localhost and from a deployed page alike.

Sports and games APIs

Free sports and games APIs, checked October 2026
APIExample URLFrom the browserSize
MLB Stats APIhttps://statsapi.mlb.com/api/v1/teams?sportId=1&fields=teams,id,name,abbreviationDirect1.7 KB
NHLhttps://api-web.nhle.com/v1/standings/nowVia proxy57 KB
Jolpica F1 (Ergast)https://api.jolpi.ca/ergast/f1/current/last/results.jsonDirect13 KB
OpenF1https://api.openf1.org/v1/sessions?year=2026&session_type=RaceDirect11 KB
ESPNhttps://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboardDirect only218 KB
Fantasy Premier Leaguehttps://fantasy.premierleague.com/api/fixtures/?event=1Via proxy26 KB
Chess.comhttps://api.chess.com/pub/player/hikaruDirect611 B
Lichesshttps://lichess.org/api/user/thibaultDirect only1.7 KB
Steam storehttps://store.steampowered.com/api/appdetails?appids=620&filters=basicVia proxy6.7 KB
Riot Data Dragonhttps://ddragon.leagueoflegends.com/api/versions.jsonDirect5.1 KB
Scryfallhttps://api.scryfall.com/cards/named?fuzzy=black+lotusDirect5.3 KB

The NHL API guide covers scores, standings and schedules, and the Steam API guide lists which Steam endpoints need no key. The ESPN API guide shows which ESPN endpoints work with a direct fetch(), and the Fantasy Premier League API guide covers live points, fixtures and mini-league tables.

Finance and crypto APIs

Free finance and crypto APIs, checked October 2026
APIExample URLFrom the browserSize
Frankfurterhttps://api.frankfurter.dev/v1/latest?base=USD&symbols=EUR,GBP,JPYDirect98 B
ExchangeRate-API open accesshttps://open.er-api.com/v6/latest/USDDirect2.9 KB
Currency API on jsDelivrhttps://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/eur.jsonDirect7.3 KB
Coinbasehttps://api.coinbase.com/v2/prices/BTC-USD/spotDirect61 B
Krakenhttps://api.kraken.com/0/public/Ticker?pair=XBTUSDDirect309 B
CoinGeckohttps://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum&vs_currencies=usdDirect only52 B
Bitfinexhttps://api-pub.bitfinex.com/v2/ticker/tBTCUSDVia proxy94 B
Yahoo Financehttps://query1.finance.yahoo.com/v8/finance/chart/AAPL?range=1d&interval=1dVia proxy1.3 KB

Frankfurter and the jsDelivr currency API return daily rates with a date field, not live quotes. For stock prices and history, see the Yahoo Finance API guide. For exchange tickers, the crypto price API guide tests 29 crypto APIs for CORS, including WebSocket feeds.

Developer and package registry APIs

Free developer and package registry APIs, checked October 2026
APIExample URLFrom the browserSize
GitHub REST APIhttps://api.github.com/repos/facebook/reactDirect only6.4 KB
npm registryhttps://registry.npmjs.org/react/latestDirect2.1 KB
PyPI JSON APIhttps://pypi.org/pypi/requests/jsonDirect188 KB
crates.iohttps://crates.io/api/v1/crates?q=serde&per_page=1Direct1.0 KB
jsDelivr statshttps://data.jsdelivr.com/v1/stats/packages/npm/react?period=monthDirect2.1 KB
RubyGemshttps://rubygems.org/api/v1/gems/rails.jsonDirect2.1 KB
Packagisthttps://repo.packagist.org/p2/monolog/monolog.jsonVia proxy83 KB
Stack Exchangehttps://api.stackexchange.com/2.3/questions?order=desc&sort=activity&site=stackoverflow&pagesize=1Direct only722 B

The GitHub REST API sends Access-Control-Allow-Origin: * and allows 60 unauthenticated requests per hour per IP address. Through a shared proxy IP that budget is spent by other users, which is why the proxy got 403. Why GitHub says rate limit exceeded covers the details.

News and feed APIs

Free news and feed APIs, checked October 2026
APIExample URLFrom the browserSize
Hacker News APIhttps://hacker-news.firebaseio.com/v0/topstories.jsonDirect4.4 KB
Hacker News search (Algolia)https://hn.algolia.com/api/v1/search?query=cors&hitsPerPage=1Direct1.7 KB
hnrss.orghttps://hnrss.org/frontpageVia proxy17 KB
BBC News RSShttps://feeds.bbci.co.uk/news/world/rss.xmlVia proxy21 KB
New York Times RSShttps://rss.nytimes.com/services/xml/rss/nyt/HomePage.xmlDirect46 KB
YouTube channel RSShttps://www.youtube.com/feeds/videos.xml?channel_id=UC_x5XG1OV2P6uZZ5FSM9TtwVia proxy25 KB
Bing image of the dayhttps://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-USVia proxy921 B
Lobstershttps://lobste.rs/hottest.jsonVia proxy14 KB

More on these: the Hacker News API and RSS feeds, 27 news RSS feeds that need no key, YouTube channel feeds and the Bing image of the day API.

Call each API the right way

Send APIs that allow browser calls straight to the API, and add the proxy prefix only for the hosts that need it. The proxy keeps the path and query string, so the URL after the prefix is the same one you would call directly.

Call APIs directly and add the proxy only where it is needed
// Runs in a module script or the DevTools console
const PROXY = 'https://proxy.cors.dev/';
const NEEDS_PROXY = new Set(['xkcd.com', 'api.deezer.com', 'api-web.nhle.com', 'export.arxiv.org']);

async function getJson(url) {
  const { hostname } = new URL(url);
  const response = await fetch(NEEDS_PROXY.has(hostname) ? PROXY + url : url, { credentials: 'omit' });
  if (!response.ok) {
    throw new Error(`${hostname}: ${response.headers.get('X-Cors-Error') ?? response.status}`);
  }
  return response.json();
}

const [weather, pokemon, comic, songs] = await Promise.all([
  getJson('https://api.open-meteo.com/v1/forecast?latitude=52.37&longitude=4.89&current=temperature_2m'),
  getJson('https://pokeapi.co/api/v2/pokemon/pikachu'),
  getJson('https://xkcd.com/info.0.json'),
  getJson('https://api.deezer.com/search?q=daft%20punk&limit=3'),
]);

console.log(`${weather.current.temperature_2m}${weather.current_units.temperature_2m} in Amsterdam`);
console.log(pokemon.name, pokemon.types.map((slot) => slot.type.name).join(', '));
console.log(`xkcd ${comic.num}: ${comic.safe_title}`, comic.img);
console.log(songs.data.map((song) => `${song.title} by ${song.artist.name}`));

When a proxied request fails, cors.dev names the reason in the X-Cors-Error response header, for example response_too_large or upstream_timeout, and the code puts it in the error message. Errors from the API itself, such as 404 or 429, pass through with their own status. To check an API that is not listed here, look for the CORS header yourself:

Check any API for a CORS header
# access-control-allow-origin: * means fetch() works from any page, no proxy needed
curl -s -o /dev/null -D - -H 'Origin: https://example.com' \
  'https://pokeapi.co/api/v2/pokemon/pikachu' | grep -i access-control-allow-origin

# No output: xkcd sends no CORS header, so browser code needs the proxy prefix
curl -s -o /dev/null -D - -H 'Origin: https://example.com' \
  'https://xkcd.com/info.0.json' | grep -i access-control-allow-origin

Free APIs that do not work from a browser

These APIs appear in many free API lists but failed from browser JavaScript in our test. Most were down, need a key, use plain HTTP or block requests from servers.

Free APIs that failed from the browser, checked October 2026
APIURLWhat happened
REST Countrieshttps://restcountries.com/v3.1/name/netherlandsv3.1 returns a deprecation error, and v5 needs an API key in an Authorization header
ADSB.lolhttps://api.adsb.lol/v2/point/52.31/4.76/10No CORS header; 2 of 6 requests through the proxy failed with 502 unsupported_response
SpaceX APIhttps://api.spacexdata.com/v5/launches/latestOrigin down: 522 direct, 525 through the proxy
Quotablehttps://api.quotable.io/randomDomain does not resolve; proxy 502 upstream_unreachable
WorldTimeAPIhttps://worldtimeapi.org/api/timezone/Europe/AmsterdamConnection reset; the proxy relayed a 525
Jikan (MyAnimeList)https://api.jikan.moe/v4/anime?q=frierenConnection timed out; proxy 504 upstream_timeout
OpenSky Networkhttps://opensky-network.org/api/states/allAllows only its own origin; proxy 504 upstream_timeout
NASA APODhttps://api.nasa.gov/planetary/apod?api_key=DEMO_KEYNeeds a key in the URL, which the free tier refuses with 400; DEMO_KEY returned 500
Open Notify ISShttp://api.open-notify.org/iss-now.jsonPlain HTTP: HTTPS pages block it as mixed content and the proxy refuses HTTP targets
ip-api.comhttp://ip-api.com/json/HTTPS answers 403 without a paid key; plain HTTP is blocked as above
Universities (Hipo)http://universities.hipolabs.com/search?name=delftHTTP only; the HTTPS address does not connect
Reddit JSONhttps://www.reddit.com/r/programming/top.json403 to servers, the proxy and a residential IP
NBA live datahttps://cdn.nba.com/static/json/liveData/scoreboard/todaysScoreboard_00.json403 even from a residential IP; proxy 520
Mojanghttps://api.mojang.com/users/profiles/minecraft/NotchNo CORS header; proxy 403
Docker Hubhttps://hub.docker.com/v2/repositories/library/nginx/No CORS header; proxy 429
Free Dictionary APIhttps://api.dictionaryapi.dev/api/v2/entries/en/hello403 to the proxy and our servers; timed out from a residential IP
Fantasy Premier League bootstraphttps://fantasy.premierleague.com/api/bootstrap-static/1.7 MiB, over the free 1 MiB cap: 502 response_too_large
Roblox gameshttps://games.roblox.com/v1/games?universeIds=1818No CORS header; proxy 502 upstream_unreachable
Google Bookshttps://www.googleapis.com/books/v1/volumes?q=isbn:9780261103344429 without a key from every IP we tried

Responses over 1 MiB, like the Fantasy Premier League bootstrap file, work on Pro, which relays any content type up to 6 MiB for $5 per month.

Proxy limits

  • Free tier: GET and HEAD with no signup or key, 600 requests per minute per client IP from a shared pool, and no daily or monthly quota.
  • Responses: text only (JSON, XML, HTML, CSV, plain text, JavaScript and SVG) up to 1 MiB, and the API gets 10 seconds to answer. Larger bodies return 502 response_too_large, images and other binary bodies 502 unsupported_response, slow APIs 504 upstream_timeout.
  • Request headers: only Accept, If-None-Match and If-Modified-Since reach the API; Authorization and custom headers such as X-Api-Key return 400 header_not_allowed. HTTPS targets only, and API keys in the URL are refused.
  • [Pro](/pricing): $5 per month for 500,000 requests per billing period, with a 7-day trial of 1,000 requests and no card. Adds POST, PUT, PATCH and DELETE, Authorization and custom headers, keys in the URL and any content type up to 6 MiB.
  • API keys: a secret key in browser code is visible to anyone who opens DevTools, and cors.dev never stores or adds keys for you. Keep secret keys on a server or Worker.

Good questions.

Which free APIs need no API key?

All 70 APIs in the tables above answered without a key or signup in October 2026. Popular picks: Open-Meteo for weather, PokeAPI and the Rick and Morty API for fun data, JSONPlaceholder and DummyJSON for test data, Frankfurter for exchange rates and the Hacker News API for news. All of them send a CORS header, so fetch() works from the browser.

What is a good free API for testing?

JSONPlaceholder (https://jsonplaceholder.typicode.com) returns placeholder posts, users and todos, DummyJSON returns products, users and carts, and Reqres returns sample users. All three send Access-Control-Allow-Origin, so they work from a local dev server and a deployed page without a proxy.

Why does fetch() fail on a free API that works in Postman or curl?

Browsers hand a cross-origin response to your script only when it carries Access-Control-Allow-Origin. Postman and curl skip that check, so the same URL works there and fails in the page. For APIs marked Via proxy, prefix the URL with https://proxy.cors.dev/. Postman vs the browser explains the difference.

Should I send every API call through a CORS proxy?

No. If an API sends Access-Control-Allow-Origin, call it directly: it saves a hop and each request comes from the visitor's own IP. The GitHub REST API, CoinGecko, Lichess and ipapi.co answered 403 or 429 through the proxy in our test, because many users share the proxy's IP addresses.

Can I use an API that needs a key from browser JavaScript?

Only if the key is meant to be public. Anything in browser code is visible to anyone who opens DevTools, and cors.dev never stores or adds keys for you. The free tier refuses keys in the URL; Pro forwards keys and Authorization headers, but a secret key still belongs on a server or Worker.

How do I check if an API supports CORS?

Request it with an Origin header and look for Access-Control-Allow-Origin in the response, as in the curl example above, or paste the response headers into the CORS header checker. No header means browser code needs a proxy.

Are free public APIs reliable enough for a real project?

Not without a fallback. In this test the SpaceX API, Quotable and WorldTimeAPI were down, and REST Countries moved its current version behind API keys. Cache responses, handle errors and keep each API behind one function you can swap out.