<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: public apis</title>
    <description>The latest articles on DEV Community by public apis (@publicapis).</description>
    <link>https://dev.to/publicapis</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4208429%2F1bae5de3-ef15-4cd8-83e1-4aeb16a7ee5f.png</url>
      <title>DEV Community: public apis</title>
      <link>https://dev.to/publicapis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/publicapis"/>
    <language>en</language>
    <item>
      <title>How to Vibe Code a Game Like Lagos Life: Free APIs, Prompts, and How to Survive the Traffic</title>
      <dc:creator>public apis</dc:creator>
      <pubDate>Sat, 24 Oct 2026 21:02:30 +0000</pubDate>
      <link>https://dev.to/publicapis/how-to-vibe-code-a-game-like-lagos-life-free-apis-prompts-and-how-to-survive-the-traffic-2m9p</link>
      <guid>https://dev.to/publicapis/how-to-vibe-code-a-game-like-lagos-life-free-apis-prompts-and-how-to-survive-the-traffic-2m9p</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhwx7xnwzjc3ueh3er28p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhwx7xnwzjc3ueh3er28p.png" alt="Cover illustration: How to Vibe Code a Game Like Lagos Life: Free APIs, Prompts, and How to Survive the Traffic"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;October 1, 2026&lt;/strong&gt; , Nigeria's Independence Day, a browser game called &lt;strong&gt;Lagos Life&lt;/strong&gt; went live at 7 a.m. Its creator had reportedly been building it through the night with AI help. Within days it was everywhere on Nigerian X and TikTok: you create a character, get a job, buy food, pay rent in virtual naira and run into other players on the streets of Lagos. Within a week and a half, the company behind it had raised a $500,000 angel round.&lt;/p&gt;

&lt;p&gt;The lesson for developers isn't "there's a secret API". It's that &lt;strong&gt;one person with an AI coding assistant, a sharp local idea and a handful of free APIs can ship something millions of people play&lt;/strong&gt;. This guide shows how to build your own version: what to build in which order, what to tell your AI tool at each step, which free APIs make the world feel real, and the traps that cost Lagos Life real money and trust in its first weeks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; we have no connection to Lagos Life or its developer, Vatar, and they haven't published their tech stack. Facts about the game come from public reporting, linked below. The build plan and API advice are ours, and we tested every API mentioned in October 2026.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What Lagos Life actually is (and why it spread)
&lt;/h2&gt;

&lt;p&gt;Here's what's been reported, mostly by &lt;a href="https://techpoint.africa/news/lagos-life-1m-players/" rel="noopener noreferrer"&gt;Techpoint Africa&lt;/a&gt;, &lt;a href="https://www.techcityng.com/lagos-life-game-explained/" rel="noopener noreferrer"&gt;TechCity&lt;/a&gt;, &lt;a href="https://innovation-village.com/lagos-life-game-draws-scrutiny-over-virtual-currency-payments-and-player-data/" rel="noopener noreferrer"&gt;Innovation Village&lt;/a&gt;, &lt;a href="https://thecondia.com/shalom-mathew-lagos-life" rel="noopener noreferrer"&gt;The Condia&lt;/a&gt; and &lt;a href="https://www.thecable.ng/vatar-raises-500000-funding-for-lagos-life-game-nine-days-after-launch/" rel="noopener noreferrer"&gt;TheCable&lt;/a&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;What happened&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sep 26&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Lagos Run&lt;/em&gt;, a danfo-driving browser game by another Nigerian developer, goes viral. It and The Sims are cited as inspirations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oct 1&lt;/td&gt;
&lt;td&gt;Lagos Life launches in the browser after an overnight, AI-assisted build.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oct 2&lt;/td&gt;
&lt;td&gt;A brief outage. Every player gets ₦100,000 of virtual cash as an apology.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oct 5&lt;/td&gt;
&lt;td&gt;1.2 million players and 55,000–72,000 online at once on the live counter; a peak of over 109,000 concurrent players reported.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oct 8&lt;/td&gt;
&lt;td&gt;About 4.3 million players across 15 countries, and a later claim of 200,000+ online at once (company figures).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oct 9&lt;/td&gt;
&lt;td&gt;Vatar announces a $500,000 angel round, with founders of Mono, Terra Industries and Flutterwave among the investors.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oct 11&lt;/td&gt;
&lt;td&gt;10 million+ accounts and 49 million visits claimed. Accounts, not unique people; none of these numbers are audited.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;How it makes money:&lt;/strong&gt; players can buy "Game Naira" with real money through Flutterwave. It &lt;strong&gt;can't be cashed out&lt;/strong&gt;. Brands buy in-game billboards and lagoon plots; reported prices went from ₦5,000 to ₦250,000 a week as the game grew. The founder said it made about $46,900 in its first four days, against hosting costs of roughly $6,000 a month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it spread:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It's local.&lt;/strong&gt; Danfo buses, Lekki rent, Yaba, the lagoon. Players recognise their own city and want to screenshot it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's a link.&lt;/strong&gt; No app store, no download, no "Android only". A post on X opens straight into character creation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's social.&lt;/strong&gt; Other real people are on the same map. That gives you something to post about.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The loop is simple.&lt;/strong&gt; Work, eat, sleep, pay rent, show off. Everyone already understands it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of these needs a big team, which is exactly why it's worth studying.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can you really vibe code a game like this?
&lt;/h2&gt;

&lt;p&gt;Yes, with one big condition. &lt;strong&gt;AI tools are excellent at the first 80%&lt;/strong&gt; : the map, the characters, the menus, the API calls. They're dangerously confident about the last 20%: money, multiplayer cheating, security and scale. Lagos Life's biggest public problems were in that last 20%. Hacked accounts and a loophole produced "trillion-naira" balances that the team had to wipe, and the servers needed an overload screen ("Lagos hit a small go-slow") within days.&lt;/p&gt;

&lt;p&gt;So the approach below is: &lt;strong&gt;let the AI write the code, but you design the rules and check the risky parts yourself.&lt;/strong&gt; You don't need to be a senior engineer for that, just to know what to ask and what to test.&lt;/p&gt;

&lt;h3&gt;
  
  
  The toolkit
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An AI coding tool.&lt;/strong&gt; Agentic tools that edit a real project (Claude Code, Cursor, Windsurf) are the best fit, because a game grows past what fits in one chat. Browser builders (Bolt, Lovable, Replit) get you a first playable version fastest but get harder to steer as the game grows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A game framework&lt;/strong&gt; the AI knows well. Lagos Life is &lt;strong&gt;3D in the browser&lt;/strong&gt; , and its creator &lt;a href="https://x.com/Shalom_HeyEliy/status/2109053301195223529" rel="noopener noreferrer"&gt;announced&lt;/a&gt; that phones struggling with 3D now switch to a lighter view instead of crashing. For 3D, &lt;strong&gt;Three.js&lt;/strong&gt; (or Babylon.js) with low-poly models; for your first version, &lt;strong&gt;Phaser&lt;/strong&gt; in 2D is far easier and still works. AI tools write both fluently because there's so much example code online.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A backend with real-time support:&lt;/strong&gt;  &lt;strong&gt;Supabase&lt;/strong&gt; (Postgres database, auth and realtime channels, with a free tier) is the least-setup option. A small Node server with &lt;strong&gt;Socket.IO&lt;/strong&gt; gives you more control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; Vercel or Netlify for the front end. For an always-on game server, a small VPS (DigitalOcean, which Lagos Life's privacy policy names, or Hetzner).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free APIs&lt;/strong&gt; for everything that makes the world feel real. That's the big section below.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; before you start, write a one-page &lt;strong&gt;game design doc&lt;/strong&gt; (the jobs, prices, needs, what happens when you're broke) and give it to the AI as a file in the project. AI tools are much better at following a written spec than at reading your mind across fifty prompts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The build plan: 7 phases, with prompts
&lt;/h2&gt;

&lt;p&gt;Build in this order. Each phase ends with something you can play, which keeps both you and the AI on track. The prompts are starting points; paste them in, then iterate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1: A city you can walk around
&lt;/h3&gt;

&lt;p&gt;Start with the map and a character, nothing else.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a Vite + Phaser 3 project for a top-down 2D life-sim set in Lagos, Nigeria.
(For 3D: Vite + Three.js, low-poly glTF models, and an automatic 2D/low-detail
fallback when the frame rate drops below 25 fps.)
One scene: a tile-based map with roads and 6 named areas (Yaba, Surulere, Ikeja,
Lekki, Victoria Island, Lagos Island) as labelled zones. A player character moves
with arrow keys/WASD on desktop and a virtual joystick on mobile. Camera follows
the player. Keep the total bundle small: this must load fast on a cheap Android
phone on a 3G connection.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; play it on your actual phone, on mobile data. Most of your players will be on mid-range Android phones with expensive data. If it's slow now, it'll be unplayable at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 2: The life loop
&lt;/h3&gt;

&lt;p&gt;Now the "Sims" part: needs, jobs, money and rent.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add a life simulation loop, following docs/game-design.md:
- Game time runs at 1 real minute = 10 game minutes. Show the clock and day.
- Needs: hunger and energy (0-100), decaying over time. Sleeping restores energy.
- Jobs at specific buildings: start a shift, get paid at the end of it.
- Rent is due every 7 game days. If you can't pay, you get evicted to a cheaper area.
- All money is stored as whole kobo (integers), never decimals.
Put all game rules in one module (rules.ts) as pure functions so they can be tested.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; ask the AI to "write tests for rules.ts covering a full work day, rent day and going broke". Pure functions plus tests are the best defence against the AI quietly changing a rule in a later prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 3: The real-world layer (free APIs)
&lt;/h3&gt;

&lt;p&gt;This is what makes your game feel like &lt;em&gt;the&lt;/em&gt; city, not &lt;em&gt;a&lt;/em&gt; city: the real weather, real neighbourhoods, real holidays. See the API section below for which ones to use and their gotchas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add a "world" service on the server that, every 15 minutes, fetches current Lagos
weather from Open-Meteo (no API key) and today's Nigerian public holidays from
Nager.Date, and broadcasts them to all players. Effects: rain makes commutes
30 game minutes longer and costs extra energy; public holidays close workplaces.
Sync the day/night cycle to real Lagos sunrise and sunset from the
Sunrise-Sunset API. Cache everything; players must never call these APIs directly.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; that last sentence matters. AI tools love to put &lt;code&gt;fetch()&lt;/code&gt; calls in the client "for simplicity". With 100,000 players, that's 100,000 people hitting a free API, and you'll be blocked within minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 4: Multiplayer
&lt;/h3&gt;

&lt;p&gt;Seeing other people on the map is what turns a toy into Lagos Life.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add multiplayer with Socket.IO (or Supabase Realtime). The server is authoritative:
clients send movement *intents* (direction), the server validates speed and walls,
updates positions and broadcasts them. Only send each player the positions of
players within their area of interest (a spatial grid, 3x3 cells around them),
not everyone on the map. Throttle position updates to 10 per second.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt;"server is authoritative" and "area of interest" are the two phrases that matter. Without the first, anyone can open the browser console and teleport. Without the second, the server tells every player about every other player, so traffic grows with the square of your player count. In our simulation of 20,000 players on a large map, a simple grid cut each update from 19,999 recipients to about 19.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 5: The economy (do not skip this)
&lt;/h3&gt;

&lt;p&gt;This is where AI-generated code most often goes wrong, and where Lagos Life reportedly got hurt. The usual bugs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Read-then-write races.&lt;/strong&gt; Two "send money" requests read the same balance at the same time and both succeed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Double-counted retries.&lt;/strong&gt; A flaky connection resends a transfer, and it goes through twice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trusting the client.&lt;/strong&gt; Negative amounts, decimals, or "my balance is now 1,000,000" sent from the browser.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rebuild all money handling in the database, not in game code:
- A wallets table with a CHECK (balance &amp;gt;= 0) constraint, amounts in integer kobo.
- Transfers between players run in one transaction with a conditional update
  ("UPDATE ... SET balance = balance - X WHERE id = ? AND balance &amp;gt;= X") and an
  idempotency key, so replays are ignored.
- Every naira that enters the game (salary, purchase) or leaves it (rent, shops)
  is recorded in a supply_changes table.
- Add a reconcile job that checks SUM(wallet balances) == SUM(supply_changes)
  every 5 minutes and alerts me if it drifts.
Then write tests that try: double-sending, negative amounts, overdrafts and
1,000 concurrent transfers. Show me the results.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; the reconcile job is your smoke alarm. Remember that &lt;em&gt;you&lt;/em&gt; can break the economy too: Lagos Life's ₦100,000-per-player outage apology was, in effect, minting money for millions of accounts at once. Record grants like that as supply changes, so you can see their effect on prices. We built this pattern and then deliberately "hacked" a balance directly in the database; the reconcile check flagged the exact drift immediately. If Lagos Life's loophole had been caught in hours rather than after it spread, the clawback would have been much smaller.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 6: Chat and safety
&lt;/h3&gt;

&lt;p&gt;Players will talk, flirt, argue, and someone will try to scam someone. Plan for it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add proximity chat (only players within the same area of interest see messages).
Rate-limit to 1 message per 2 seconds per player. Filter messages with a local
word list (include Nigerian Pidgin and Yoruba insults I'll provide), and run the
PurgoMalum API asynchronously as a second pass for reported messages only.
Add report and block buttons. Block any message that contains a phone number,
bank account number or payment link, with a warning about scams.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; the scam filter isn't optional. Within days of Lagos Life going viral, accounts were being hacked, people were offering to "buy and sell game cash for real naira", and an unofficial crypto token appeared using its name. Your game will attract the same.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 7: Payments and launch
&lt;/h3&gt;

&lt;p&gt;If you sell virtual currency, the money is real even when the naira on screen isn't.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add a "Buy Game Naira" flow with Flutterwave Standard checkout. Credit coins ONLY
after the server calls Flutterwave's verify endpoint
(GET /v3/transactions/{id}/verify) and checks: data.status is "successful",
tx_ref matches our order, currency is NGN and amount matches the pack. Use the
Flutterwave transaction id as an idempotency key so the webhook and the redirect
can't both credit. Write clear terms: Game Naira can't be withdrawn or exchanged.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; Flutterwave's response has two "statuses": the top-level &lt;code&gt;status&lt;/code&gt; is &lt;code&gt;"success"&lt;/code&gt; when the transaction is &lt;em&gt;found&lt;/em&gt;, while &lt;code&gt;data.status&lt;/code&gt; must be &lt;code&gt;"successful"&lt;/code&gt; for the payment to have &lt;em&gt;gone through&lt;/em&gt;. Mixing them up is a classic way to hand out free coins.&lt;/p&gt;

&lt;h2&gt;
  
  
  The free APIs that make a game world feel real
&lt;/h2&gt;

&lt;p&gt;Every API here is free, and the ones marked "no key" need no sign-up. We tested all of them in October 2026; click through to the directory for live status and uptime.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Key?&lt;/th&gt;
&lt;th&gt;What we learned testing it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Live weather&lt;/td&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/open-meteo-2" rel="noopener noreferrer"&gt;Open-Meteo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Fast and reliable. Returns WMO weather codes (≥ 51 is rain, ≥ 95 thunderstorms), which map neatly to game effects.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Day and night&lt;/td&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/sunrise-and-sunset" rel="noopener noreferrer"&gt;Sunrise and Sunset&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Times come back in UTC. Lagos is UTC+1, so a "05:32" sunrise is 6:32 a.m. local. Convert, or your city wakes up an hour early.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public holidays&lt;/td&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/nager-date" rel="noopener noreferrer"&gt;Nager.Date&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Has Nigeria (&lt;code&gt;/PublicHolidays/2026/NG&lt;/code&gt;). Fetch once a year and store it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real places&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://publicapis.lol/apis/nominatim" rel="noopener noreferrer"&gt;Nominatim&lt;/a&gt; / Photon&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Nominatim allows &lt;strong&gt;1 request per second&lt;/strong&gt; and requires a User-Agent. Geocode your map's places once, save the coordinates, and never call it from the game. Photon (also OpenStreetMap data) is better for search-as-you-type.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avatars&lt;/td&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/dicebear-avatars" rel="noopener noreferrer"&gt;DiceBear&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;The same username always gives the same avatar: free profile pictures with no image storage. Licences differ per style, so check the one you pick allows commercial use.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NPC names and faces&lt;/td&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/randomuser" rel="noopener noreferrer"&gt;RandomUser&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Doesn't support Nigerian names.&lt;/strong&gt; &lt;code&gt;?nat=ng&lt;/code&gt; silently returns another nationality. Write your own list of Nigerian names.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exchange rates&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://publicapis.lol/apis/exchangerate-api" rel="noopener noreferrer"&gt;ExchangeRate-API&lt;/a&gt; open endpoint&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Has NGN; updates daily; the free endpoint asks for attribution. &lt;strong&gt;Frankfurter doesn't have NGN&lt;/strong&gt; (it only covers ECB currencies).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chat filtering&lt;/td&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/purgomalum" rel="noopener noreferrer"&gt;PurgoMalum&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Works, and you can add your own words with &lt;code&gt;add=&lt;/code&gt;, but it took over &lt;strong&gt;4 seconds&lt;/strong&gt; to answer in our test. Too slow for live chat; use it as a second pass. It knows English profanity only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quiz nights&lt;/td&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/open-trivia" rel="noopener noreferrer"&gt;Open Trivia DB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Thousands of questions, but limited to one request every 5 seconds per IP. Fetch in batches and store them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mini-games&lt;/td&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/deck-of-cards" rel="noopener noreferrer"&gt;Deck of Cards&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Ready-made shuffling and dealing for a card table in a bar.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three rules apply to all of them:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The server calls the APIs, never the players.&lt;/strong&gt; Free APIs are free because they're used politely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache by how often the data changes.&lt;/strong&gt; Weather every 15 minutes, holidays once a year, places once ever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Have a fallback.&lt;/strong&gt; If the weather API fails, the game should default to "sunny", not crash.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For more ideas, browse &lt;a href="https://publicapis.lol/best/games-and-comics" rel="noopener noreferrer"&gt;free game and comics APIs&lt;/a&gt; and every &lt;a href="https://publicapis.lol/no-api-key" rel="noopener noreferrer"&gt;API that needs no key&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI won't warn you about
&lt;/h2&gt;

&lt;p&gt;After testing this build, these are the things we'd check in any AI-generated game before launch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Secrets in the front end.&lt;/strong&gt; Ask the AI: "list every API key or secret and where it's used". Payment keys must only exist on the server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database rules.&lt;/strong&gt; If you use Supabase, ask it to "audit row-level security on every table". A missing policy means any player can edit any wallet from the browser console.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sign-up abuse.&lt;/strong&gt; Questions were raised about how many Lagos Life accounts were real people. Add email verification and a CAPTCHA (Cloudflare Turnstile is free) before launch, not after bots arrive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Age and data rules.&lt;/strong&gt; Lagos Life became 18+ and publishes a privacy policy naming its providers. Nigeria's data protection law applies to you too. Write the policy before you collect a single email.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your own name.&lt;/strong&gt; Within days there were fake Lagos Life tokens and cash-sellers. Register your handles early, and pin an "official links only" post.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Lagos Life handled the traffic, and how you would
&lt;/h2&gt;

&lt;p&gt;This is the part most "I built a game in a weekend" stories skip, and it's where a viral game lives or dies. Lagos Life went from zero to a reported 109,000+ people online at once in days. Here's what that means technically, what's known about how Lagos Life coped, and the architecture that survives it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Total players don't matter. Concurrent players do.
&lt;/h3&gt;

&lt;p&gt;"1.2 million players" sounds terrifying, but on the morning of October 5 the live counter showed about &lt;strong&gt;55,000 online&lt;/strong&gt; , and later that day around 72,000. Roughly 5–6% of all accounts were playing at the same moment. That's normal, and it's the number to design for: &lt;strong&gt;servers, bandwidth and database connections scale with concurrent players&lt;/strong&gt; , not sign-ups.&lt;/p&gt;

&lt;p&gt;A sign-up costs you one database row. A player who's online costs you an open WebSocket connection, position updates ten times a second, chat messages, and a slice of CPU on a game server, for every minute they play.&lt;/p&gt;

&lt;h3&gt;
  
  
  What we know about how Lagos Life coped
&lt;/h3&gt;

&lt;p&gt;The developer hasn't published a post-mortem, but the public record shows the classic pattern of a game scaling live, in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An early outage (October 2).&lt;/strong&gt; The game went down briefly a day after launch. The team apologised by giving every player ₦100,000 of virtual cash: free to issue, and very good for goodwill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An overload screen.&lt;/strong&gt; Players reported a "Lagos hit a small go-slow" screen when the servers were busy. Showing a friendly, on-brand "we're full" message instead of an error is exactly the right move (see &lt;em&gt;admission control&lt;/em&gt; below).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptive graphics.&lt;/strong&gt; Phones that couldn't handle the 3D city were &lt;a href="https://x.com/Shalom_HeyEliy/status/2109053301195223529" rel="noopener noreferrer"&gt;switched to a lighter view&lt;/a&gt; instead of crashing. That's a scaling fix too: the cheapest server request is the one a crashed client never retries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat pressure.&lt;/strong&gt; Developers on X speculated that in-game chat was the biggest bandwidth problem, because a social game's chat can turn into "everyone talks to everyone". That's speculation, but it's the right instinct, as the maths below shows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The bill.&lt;/strong&gt; The founder cited hosting of about &lt;strong&gt;$6,000 a month&lt;/strong&gt; , and the privacy policy names DigitalOcean as the host.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The maths of 100,000 people on one map
&lt;/h3&gt;

&lt;p&gt;Here's a back-of-envelope estimate for a shared map, assuming each position update is 12 bytes (a player ID plus x and y) and the server sends ten updates a second:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Data each player receives&lt;/th&gt;
&lt;th&gt;Total server output (100,000 online)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Naive: send everyone's position to everyone&lt;/td&gt;
&lt;td&gt;~12 MB per second (impossible on mobile)&lt;/td&gt;
&lt;td&gt;~1.2 &lt;strong&gt;terabytes&lt;/strong&gt; per second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Area of interest: only the ~20 nearest players, batched into one packet per tick&lt;/td&gt;
&lt;td&gt;~3 KB per second&lt;/td&gt;
&lt;td&gt;~300 MB per second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same, at 5 updates per second&lt;/td&gt;
&lt;td&gt;~1.5 KB per second&lt;/td&gt;
&lt;td&gt;~150 MB per second&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The first row is why naive multiplayer code (exactly what an AI writes if you don't ask for more) falls over at a few thousand players. The second row is very manageable.&lt;/p&gt;

&lt;p&gt;It also matters for your players' &lt;strong&gt;data bundles&lt;/strong&gt; : at 3 KB per second, an hour of play is about &lt;strong&gt;11 MB&lt;/strong&gt; of mobile data, plus the one-off download of the game's assets. In Nigeria, where players pay for every megabyte, that's a feature worth bragging about.&lt;/p&gt;

&lt;h3&gt;
  
  
  The architecture that survives going viral
&lt;/h3&gt;

&lt;p&gt;Each of these is a prompt you can give your AI tool, one at a time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Put every static file on a CDN.&lt;/strong&gt; HTML, JavaScript, 3D models, textures, sounds and avatars should be served by Cloudflare, Vercel or Netlify, never by your game server. Compress 3D models (glTF with Draco or Meshopt compression, and KTX2 textures) so the first load stays small.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Split "web" from "game".&lt;/strong&gt; Sign-up, profiles, the shop and the stats page are ordinary stateless HTTP endpoints that can scale out behind a load balancer. The live world (WebSocket connections, positions, chat) runs on separate &lt;strong&gt;game servers&lt;/strong&gt; , which hold state in memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shard the city into zones.&lt;/strong&gt; One game server process per area (Island, Mainland, Lekki…), with players handed off when they cross a boundary. If one zone gets busy, it slows down alone, and you can add instances of the busiest zones (Lekki on a Friday night) without touching the rest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Area of interest plus tick batching.&lt;/strong&gt; As in Phase 4: only send nearby players, and send one combined binary packet per tick rather than one JSON message per player. Send distant or idle players less often.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat chat as its own service.&lt;/strong&gt; Proximity chat only reaches players in the same area of interest; global or city-wide channels are rate-limited and paginated; messages are kept for hours, not forever. Use Redis pub/sub so chat scales independently of the game servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep positions out of the database.&lt;/strong&gt; Writing 100,000 positions ten times a second would melt any database. Positions live in game-server memory and are saved as snapshots every minute or two. Only the important things (money, purchases, property) go straight to Postgres, in transactions, through a connection pooler like PgBouncer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache the stats page.&lt;/strong&gt; A "live players" counter that every visitor reloads is one of the most popular pages. Compute it once every 30 seconds and serve the cached number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admission control: your "go-slow" screen.&lt;/strong&gt; Decide the maximum players per zone and per server &lt;em&gt;before&lt;/em&gt; launch. When you're full, put new arrivals in a queue with their position ("you're number 340"), instead of letting everyone in and making the game unplayable for all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptive quality on the client.&lt;/strong&gt; Detect a low frame rate and drop to fewer players drawn, lower-detail models, or a 2D view. Lagos Life's 3D fallback is this exact idea.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autoscale on the right signal.&lt;/strong&gt; Scale game servers on open connections and tick time (how long each 100 ms tick takes to compute), not on CPU alone. If a tick takes longer than the tick interval, players feel lag before any CPU graph looks scary.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A combined prompt to start with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Refactor the multiplayer server for scale: (1) split the map into zones, one
process per zone, with handoff between zones; (2) use a spatial grid for area of
interest and send one binary snapshot per 100 ms tick with only nearby players;
(3) move chat to a separate service using Redis pub/sub with per-player rate
limits; (4) keep positions in memory and snapshot to Postgres every 60 seconds;
(5) add an admission queue with a friendly "Lagos is full" screen when a zone
reaches MAX_PLAYERS_PER_ZONE. Explain each change before making it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What it costs
&lt;/h3&gt;

&lt;p&gt;Bandwidth is usually the surprise line on the bill, and the provider you pick changes it by roughly 9×. Using the ~300 MB per second estimate above for 100,000 concurrent players (about 1.1 TB per hour at peak):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider pricing for outbound data&lt;/th&gt;
&lt;th&gt;Cost per peak hour&lt;/th&gt;
&lt;th&gt;4 peak hours a day for a month&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;~$0.01 per GB (e.g. DigitalOcean or Hetzner overage)&lt;/td&gt;
&lt;td&gt;~$11&lt;/td&gt;
&lt;td&gt;~$1,300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;~$0.09 per GB (big-cloud list price, e.g. AWS)&lt;/td&gt;
&lt;td&gt;~$97&lt;/td&gt;
&lt;td&gt;~$11,700&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Add servers, a managed database, Redis and a CDN, and a game at Lagos Life's reported peak landing somewhere in the low thousands of dollars a month on a budget host is plausible. On a big cloud with default settings, it could easily be several times that. Choose a host with cheap or bundled egress &lt;em&gt;before&lt;/em&gt; you go viral.&lt;/p&gt;

&lt;h3&gt;
  
  
  Load test before the internet does it for you
&lt;/h3&gt;

&lt;p&gt;Ask your AI tool to write a load test with &lt;strong&gt;k6&lt;/strong&gt; or &lt;strong&gt;Artillery&lt;/strong&gt; that opens 1,000, then 5,000, then 20,000 fake WebSocket players, has them walk around and chat, and records tick time, memory and messages per second. Run it against a staging server the same size as production. The numbers tell you how many players one server handles, so when the next spike comes you know exactly how many to add, and which screen people see when you run out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your launch checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Loads in under 5 seconds on a mid-range Android phone over mobile data&lt;/li&gt;
&lt;li&gt;Opens straight into character creation from a shared link&lt;/li&gt;
&lt;li&gt;A shareable "my character" card (avatar + job + area) for X and TikTok&lt;/li&gt;
&lt;li&gt;Server-authoritative movement and money, with tests&lt;/li&gt;
&lt;li&gt;Area-of-interest updates, zones and an admission queue, load-tested&lt;/li&gt;
&lt;li&gt;Economy reconcile job running, with alerts&lt;/li&gt;
&lt;li&gt;Chat filter, scam-pattern blocking, report and block&lt;/li&gt;
&lt;li&gt;Payments credited only after server-side verification&lt;/li&gt;
&lt;li&gt;Privacy policy, terms (no cash-out), age gate&lt;/li&gt;
&lt;li&gt;Official social handles registered and pinned&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;Lagos Life worked because it was &lt;strong&gt;local, instant and social&lt;/strong&gt; , and it was built fast because AI tools now handle most of the code. You can do the same for Accra, Nairobi, Jo'burg or your own city. Let the AI build the world; you own the rules, the money and the safety. That split is the difference between a viral hit and a viral clawback.&lt;/p&gt;

&lt;p&gt;New to APIs? Start with &lt;a href="https://publicapis.lol/blog/what-is-a-public-api" rel="noopener noreferrer"&gt;what a public API is&lt;/a&gt;, then browse the &lt;a href="https://publicapis.lol/no-api-key" rel="noopener noreferrer"&gt;no-key API list&lt;/a&gt; for your city's real-world layer.&lt;/p&gt;

</description>
      <category>games</category>
      <category>tutorial</category>
      <category>freeapis</category>
    </item>
    <item>
      <title>Best Free Weather APIs in 2026: 8 Options Tested and Compared</title>
      <dc:creator>public apis</dc:creator>
      <pubDate>Sat, 24 Oct 2026 15:11:37 +0000</pubDate>
      <link>https://dev.to/publicapis/best-free-weather-apis-in-2026-8-options-tested-and-compared-4cf2</link>
      <guid>https://dev.to/publicapis/best-free-weather-apis-in-2026-8-options-tested-and-compared-4cf2</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxl3y9fdgvamwb5avhrzc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxl3y9fdgvamwb5avhrzc.png" alt="Cover illustration: Best Free Weather APIs in 2026: 8 Options Tested and Compared"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The short answer:&lt;/strong&gt; for most projects in 2026, start with &lt;strong&gt;Open-Meteo&lt;/strong&gt;. It needs no API key, allows 10,000 calls a day for non-commercial use and covers the whole world. If you need a commercial free tier with a key, &lt;strong&gt;WeatherAPI.com&lt;/strong&gt; (100,000 calls a month) and &lt;strong&gt;OpenWeatherMap's One Call 3.0&lt;/strong&gt; (1,000 calls a day) are the strongest options. For US-only projects, the &lt;strong&gt;National Weather Service API&lt;/strong&gt; is free, keyless and official.&lt;/p&gt;

&lt;p&gt;That recommendation comes from data. Our directory tracks all &lt;strong&gt;47 weather APIs&lt;/strong&gt; in the public-apis list and checks each one every day. On October 24, 2026, 43 were online, 22 need no API key and 20 support CORS for browser calls. Below we compare the eight you're most likely to choose between, show working code, and explain which to pick for which job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free weather API comparison (October 2026)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;API key&lt;/th&gt;
&lt;th&gt;Free allowance&lt;/th&gt;
&lt;th&gt;Commercial use on free tier&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/open-meteo-2" rel="noopener noreferrer"&gt;Open-Meteo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;10,000 calls/day, 300,000/month&lt;/td&gt;
&lt;td&gt;No (non-commercial)&lt;/td&gt;
&lt;td&gt;Global forecasts, historical data, many weather models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/openweathermap" rel="noopener noreferrer"&gt;OpenWeatherMap&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;1,000 One Call 3.0 calls/day&lt;/td&gt;
&lt;td&gt;Yes, pay per call above the free amount&lt;/td&gt;
&lt;td&gt;The most widely used; card may be needed for One Call 3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/weatherapi" rel="noopener noreferrer"&gt;WeatherAPI.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;100,000 calls/month&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Free plan: 3-day forecast, 1 day of history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/pirate-weather" rel="noopener noreferrer"&gt;Pirate Weather&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yes (free)&lt;/td&gt;
&lt;td&gt;Generous free tier&lt;/td&gt;
&lt;td&gt;Check terms&lt;/td&gt;
&lt;td&gt;Dark Sky-compatible response format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/tomorrow" rel="noopener noreferrer"&gt;Tomorrow.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;500 requests/day (25/hour)&lt;/td&gt;
&lt;td&gt;Check terms&lt;/td&gt;
&lt;td&gt;Hyperlocal forecasts and weather layers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/visual-crossing" rel="noopener noreferrer"&gt;Visual Crossing&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Free plan with a daily record limit&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Strong historical weather data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/weatherstack" rel="noopener noreferrer"&gt;Weatherstack&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;100 calls/month&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Paid plans from $9.99/month for 50,000 calls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/us-weather" rel="noopener noreferrer"&gt;US Weather (NWS)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No (User-Agent)&lt;/td&gt;
&lt;td&gt;Free, fair use&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;US only, official National Weather Service data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Prices and limits were taken from each provider's pricing page in October 2026. Free tiers change, so check the provider's page before you commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Open-Meteo: the best free weather API without a key
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://publicapis.lol/apis/open-meteo-2" rel="noopener noreferrer"&gt;Open-Meteo&lt;/a&gt; is the default choice for hobby projects, prototypes and research. There's no sign-up: you call the URL and get JSON back. Its free, non-commercial tier allows &lt;strong&gt;600 calls a minute, 5,000 an hour and 10,000 a day&lt;/strong&gt;. It combines forecasts from national weather services, and it also offers historical weather, marine and air-quality endpoints. It sends CORS headers, so you can call it straight from the browser.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.open-meteo.com/v1/forecast&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URLSearchParams&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;latitude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;51.51&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;longitude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;-0.13&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;temperature_2m,wind_speed_10m&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;daily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;temperature_2m_max,temperature_2m_min&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;auto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Now: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;temperature_2m&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;°C`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Next 7 days (max):&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;daily&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;temperature_2m_max&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The catch:&lt;/strong&gt; the free endpoint is for non-commercial use only. A commercial product needs one of Open-Meteo's paid API plans, which start at 1 million calls a month.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. OpenWeatherMap: the most popular, with a pay-as-you-go free tier
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://publicapis.lol/apis/openweathermap" rel="noopener noreferrer"&gt;OpenWeatherMap&lt;/a&gt; is the API most tutorials use. Its current flagship, &lt;strong&gt;One Call API 3.0&lt;/strong&gt; , includes &lt;strong&gt;1,000 free calls per day&lt;/strong&gt;. Above that you're billed per call, and you can set a daily cap in your account to avoid surprise charges. Users report that One Call 3.0 asks for a payment card even if you stay within the free calls.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;51.51&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lon&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;units&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metric&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;appid&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OWM_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.openweathermap.org/data/3.0/onecall&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;current&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you're moving off OpenWeatherMap, our &lt;a href="https://publicapis.lol/alternatives/openweathermap" rel="noopener noreferrer"&gt;OpenWeatherMap alternatives&lt;/a&gt; page ranks every comparable API.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. WeatherAPI.com: the biggest commercial-friendly free tier
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://publicapis.lol/apis/weatherapi" rel="noopener noreferrer"&gt;WeatherAPI.com&lt;/a&gt; offers &lt;strong&gt;100,000 calls a month on its free plan&lt;/strong&gt; , with paid plans from $7/month for 3 million calls. The free plan includes real-time weather, a 3-day forecast and one day of history. It also bundles extras like astronomy, time zone and IP-to-location lookups.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.weatherapi.com/v1/forecast.json?key=&lt;/span&gt;&lt;span class="nv"&gt;$WEATHERAPI_KEY&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;q=London&amp;amp;days=3"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Pirate Weather: a Dark Sky replacement
&lt;/h2&gt;

&lt;p&gt;When Apple shut down the Dark Sky API, &lt;a href="https://publicapis.lol/apis/pirate-weather" rel="noopener noreferrer"&gt;Pirate Weather&lt;/a&gt; rebuilt its response format from public NOAA and ECMWF model data. If you have old Dark Sky code, it's the closest drop-in replacement. The public-apis list marks it as keyless, but it now needs a free API key: requests without one return &lt;code&gt;401 Unauthorized&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.pirateweather.net/forecast/&lt;/span&gt;&lt;span class="nv"&gt;$PIRATE_WEATHER_KEY&lt;/span&gt;&lt;span class="s2"&gt;/51.51,-0.13?units=si"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Tomorrow.io: hyperlocal forecasts with tight limits
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://publicapis.lol/apis/tomorrow" rel="noopener noreferrer"&gt;Tomorrow.io&lt;/a&gt; is strong on hyperlocal and minute-by-minute data. Its free plan is the tightest here: &lt;strong&gt;500 requests a day, 25 an hour and 3 a second&lt;/strong&gt; , resetting at midnight UTC. Map tiles count as requests too. It's best for a small dashboard, not for polling many locations.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Visual Crossing: best for historical weather
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://publicapis.lol/apis/visual-crossing" rel="noopener noreferrer"&gt;Visual Crossing&lt;/a&gt; is the pick when you need decades of history in one request, for example for analytics, insurance or energy models. Its free plan allows commercial use and limits the number of weather "records" you can retrieve per day, so a long date range costs more than a single forecast.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Weatherstack: simple, but a small free tier
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://publicapis.lol/apis/weatherstack" rel="noopener noreferrer"&gt;Weatherstack&lt;/a&gt; has a clean API for current weather, but its free plan includes only &lt;strong&gt;100 calls a month&lt;/strong&gt;. Paid plans run from $9.99/month (50,000 calls) to $99.99/month (1 million calls). It suits a project that already uses other APILayer services.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. National Weather Service: free, official, US only
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://publicapis.lol/apis/us-weather" rel="noopener noreferrer"&gt;US National Weather Service API&lt;/a&gt; is run by the US government. It's free, has no key and returns GeoJSON. It does ask you to send a &lt;code&gt;User-Agent&lt;/code&gt; header that identifies your app. Getting a forecast takes two calls: one to find the forecast grid for a coordinate, then the forecast itself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User-Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-weather-app (you@example.com)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.weather.gov/points/38.8894,-77.0352&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;forecast&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;point&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;forecast&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;period&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;forecast&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;periods&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;period&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;period&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temperature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;period&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shortForecast&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Which free weather API should you choose?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prototype, student project or personal app:&lt;/strong&gt; Open-Meteo. No key, generous limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commercial app on a budget:&lt;/strong&gt; WeatherAPI.com's free plan, or OpenWeatherMap with a daily spending cap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Front-end only (no server):&lt;/strong&gt; Open-Meteo or WeatherAPI, both CORS-friendly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Historical data and analytics:&lt;/strong&gt; Visual Crossing or Open-Meteo's historical API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;US-only:&lt;/strong&gt; the National Weather Service API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legacy Dark Sky code:&lt;/strong&gt; Pirate Weather.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Weather APIs that need no key at all
&lt;/h2&gt;

&lt;p&gt;Besides Open-Meteo, these keyless weather APIs were online in our latest check: &lt;a href="https://publicapis.lol/apis/7timer" rel="noopener noreferrer"&gt;7Timer!&lt;/a&gt;, &lt;a href="https://publicapis.lol/apis/wttr-in" rel="noopener noreferrer"&gt;wttr.in&lt;/a&gt;, &lt;a href="https://publicapis.lol/apis/nasa-power" rel="noopener noreferrer"&gt;NASA POWER&lt;/a&gt; for solar and agricultural weather data, and &lt;a href="https://publicapis.lol/apis/rainviewer" rel="noopener noreferrer"&gt;RainViewer&lt;/a&gt; for radar imagery. See all of them on our list of &lt;a href="https://publicapis.lol/no-api-key/weather" rel="noopener noreferrer"&gt;weather APIs with no API key&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;wttr.in is a fun one for terminal tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://wttr.in/London?format=3"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tips for using any weather API
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cache aggressively.&lt;/strong&gt; Forecasts update every 10–60 minutes. OpenWeatherMap recommends polling no more than every 10 minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Round coordinates.&lt;/strong&gt; Rounding to two decimal places (about 1 km) improves your cache hit rate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep keys on the server.&lt;/strong&gt; Proxy keyed APIs through a server or serverless function, not front-end code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan for outages.&lt;/strong&gt; Keep a second provider configured. Our &lt;a href="https://publicapis.lol/best/weather" rel="noopener noreferrer"&gt;weather API rankings&lt;/a&gt; update daily, so you can see which ones are up right now.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the best free weather API?
&lt;/h3&gt;

&lt;p&gt;For non-commercial use, Open-Meteo: no API key and 10,000 calls a day. For a commercial project, WeatherAPI.com's free plan of 100,000 calls a month is the most generous.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there a free weather API without an API key?
&lt;/h3&gt;

&lt;p&gt;Yes. Open-Meteo, wttr.in, 7Timer! and the US National Weather Service API all work without a key. 22 of the 47 weather APIs we track need no key.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the OpenWeatherMap API still free?
&lt;/h3&gt;

&lt;p&gt;Yes, within limits. One Call API 3.0 includes 1,000 free calls per day, and calls above that are billed. You can set a daily limit in your account to stay free.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which weather APIs can I call from the browser?
&lt;/h3&gt;

&lt;p&gt;APIs that send CORS headers, including Open-Meteo, WeatherAPI.com, Pirate Weather and wttr.in. 20 of the 47 weather APIs we track support CORS.&lt;/p&gt;

</description>
      <category>weather</category>
      <category>freeapis</category>
      <category>comparison</category>
    </item>
    <item>
      <title>What Is a Public API? A Plain-English Guide With 20 Examples You Can Call Today</title>
      <dc:creator>public apis</dc:creator>
      <pubDate>Sat, 24 Oct 2026 15:11:37 +0000</pubDate>
      <link>https://dev.to/publicapis/what-is-a-public-api-a-plain-english-guide-with-20-examples-you-can-call-today-47b5</link>
      <guid>https://dev.to/publicapis/what-is-a-public-api-a-plain-english-guide-with-20-examples-you-can-call-today-47b5</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4y3209dlcl2jpskoilch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4y3209dlcl2jpskoilch.png" alt="Cover illustration: What Is a Public API? A Plain-English Guide With 20 Examples You Can Call Today"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;public API&lt;/strong&gt; is an interface that any developer can use, over the internet, to get data or functionality from someone else's service. You send an HTTP request to a URL, and you get structured data back, usually JSON. Weather forecasts, exchange rates, Pokémon stats and random cat facts are all a single request away.&lt;/p&gt;

&lt;p&gt;The word "public" is about &lt;strong&gt;who can access it&lt;/strong&gt; , not about price. Some public APIs are completely open, with no sign-up at all. Others ask you to register for a free API key, and many have paid tiers for heavier use. What they share is that they're published for outside developers, with documentation, instead of being locked inside one company.&lt;/p&gt;

&lt;p&gt;This guide explains how public APIs work, the jargon you'll meet (API keys, rate limits, CORS), and finishes with 20 real APIs you can call right now. The examples come from the &lt;a href="https://github.com/public-apis/public-apis" rel="noopener noreferrer"&gt;public-apis&lt;/a&gt; list, which our &lt;a href="https://publicapis.lol/" rel="noopener noreferrer"&gt;directory&lt;/a&gt; tracks and health-checks every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does a public API work?
&lt;/h2&gt;

&lt;p&gt;Almost every public API you'll use is a &lt;strong&gt;REST API over HTTPS&lt;/strong&gt;. The pattern is always the same:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You send an HTTP request (usually &lt;code&gt;GET&lt;/code&gt;) to an &lt;strong&gt;endpoint&lt;/strong&gt; , a URL like &lt;code&gt;https://catfact.ninja/fact&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You optionally add &lt;strong&gt;parameters&lt;/strong&gt; (&lt;code&gt;?city=London&lt;/code&gt;) and &lt;strong&gt;headers&lt;/strong&gt; (like an API key).&lt;/li&gt;
&lt;li&gt;The server replies with a &lt;strong&gt;status code&lt;/strong&gt; (&lt;code&gt;200&lt;/code&gt; means OK) and a &lt;strong&gt;body&lt;/strong&gt; , almost always JSON.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's the whole thing in one line of terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;curl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://catfact.ninja/fact&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"fact"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"An adult lion's roar can be heard up to five miles (eight kilometers) away."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"length"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's a public API call. No account, no SDK, no setup.&lt;/p&gt;

&lt;p&gt;The same request from JavaScript and Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const res = await fetch("https://catfact.ninja/fact");
const { fact } = await res.json();
console.log(fact);

import requests

data = requests.get("https://catfact.ninja/fact", timeout=10).json()
print(data["fact"])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Public vs private vs partner APIs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Who can use it&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Public (open) API&lt;/td&gt;
&lt;td&gt;Any developer, sometimes after free sign-up&lt;/td&gt;
&lt;td&gt;Open-Meteo, PokéAPI, CoinGecko&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Partner API&lt;/td&gt;
&lt;td&gt;Approved businesses under a contract&lt;/td&gt;
&lt;td&gt;Airline booking or banking integrations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private (internal) API&lt;/td&gt;
&lt;td&gt;Only the company's own apps&lt;/td&gt;
&lt;td&gt;The API behind a company's mobile app&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When people say "public API", they almost always mean the first row: documented, self-serve, and free to start with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do public APIs need an API key?
&lt;/h2&gt;

&lt;p&gt;Many don't. Of the 2,166 APIs in our directory, &lt;strong&gt;1,038 need no API key at all&lt;/strong&gt;. The rest use one of a few schemes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API key&lt;/strong&gt; : a long string you get after signing up, sent as a query parameter (&lt;code&gt;?apikey=...&lt;/code&gt;) or a header (&lt;code&gt;X-API-Key: ...&lt;/code&gt;). This is the most common.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OAuth&lt;/strong&gt; : used when the API acts on behalf of a user, like posting to their account (GitHub, Spotify, Discord).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User-Agent or contact header&lt;/strong&gt; : some open services, like OpenStreetMap's Nominatim, ask you to identify your app instead of registering.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keys exist so providers can count your usage, enforce rate limits and contact you. They're not a sign that an API costs money; most keyed APIs on the list have a free tier. If you're just starting out, browse &lt;a href="https://publicapis.lol/no-api-key" rel="noopener noreferrer"&gt;free APIs with no API key&lt;/a&gt; first.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are rate limits?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;rate limit&lt;/strong&gt; caps how many requests you can make in a period: per second, minute, day or month. Go over it and you'll get an HTTP &lt;code&gt;429 Too Many Requests&lt;/code&gt; response. Free tiers are where limits matter most. For example, as of October 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open-Meteo's free, non-commercial API allows 10,000 calls per day.&lt;/li&gt;
&lt;li&gt;Alpha Vantage's free key allows 25 requests per day.&lt;/li&gt;
&lt;li&gt;ipstack's free plan includes 100 requests per month.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical rules: cache responses, don't call an API on every page view, and back off when you see a &lt;code&gt;429&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is CORS, and why does it matter?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CORS&lt;/strong&gt; (Cross-Origin Resource Sharing) decides whether JavaScript running in a browser can call an API on another domain. If the API sends an &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt; header, your front end can call it directly. If not, the browser blocks the response and you'll need to call the API from a server instead.&lt;/p&gt;

&lt;p&gt;In our directory, &lt;strong&gt;878 APIs&lt;/strong&gt; are listed as CORS-enabled. If you're building a front-end-only project, start with &lt;a href="https://publicapis.lol/free-apis/for-frontend-projects" rel="noopener noreferrer"&gt;free APIs for frontend projects&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Are public APIs safe to use in production?
&lt;/h2&gt;

&lt;p&gt;They can be, with a few precautions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prefer HTTPS.&lt;/strong&gt; 2,078 of the 2,166 APIs we track support it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check uptime.&lt;/strong&gt; Free services come and go. Our daily health check found 1,923 of the 2,166 listed APIs online on October 24, 2026, which means roughly one in nine was unreachable that day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read the terms.&lt;/strong&gt; Several free tiers are "non-commercial only" (Open-Meteo's free endpoint and ip-api.com's free endpoint, for example).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Have a fallback.&lt;/strong&gt; For anything critical, know which alternative you'd switch to. Every API page in our directory links to its alternatives.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  20 public APIs you can call right now
&lt;/h2&gt;

&lt;p&gt;Every URL below returned data in our checks this week, and none of them needs an API key.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;What it returns&lt;/th&gt;
&lt;th&gt;Try it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/cat-facts" rel="noopener noreferrer"&gt;Cat Facts&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A random cat fact&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://catfact.ninja/fact&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/dogs" rel="noopener noreferrer"&gt;Dogs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A random dog photo URL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://dog.ceo/api/breeds/image/random&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/pokeapi" rel="noopener noreferrer"&gt;PokéAPI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Pokémon data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://pokeapi.co/api/v2/pokemon/pikachu&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/open-meteo-2" rel="noopener noreferrer"&gt;Open-Meteo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Weather forecasts&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://api.open-meteo.com/v1/forecast?latitude=51.5&amp;amp;longitude=-0.13&amp;amp;current=temperature_2m&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/wttr-in" rel="noopener noreferrer"&gt;wttr.in&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Weather as JSON or text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://wttr.in/London?format=j1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/frankfurter" rel="noopener noreferrer"&gt;Frankfurter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Currency exchange rates&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://api.frankfurter.dev/v1/latest?base=USD&amp;amp;symbols=EUR,GBP&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/coingecko" rel="noopener noreferrer"&gt;CoinGecko&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crypto prices&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&amp;amp;vs_currencies=usd&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/coinpaprika" rel="noopener noreferrer"&gt;Coinpaprika&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crypto market data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://api.coinpaprika.com/v1/tickers/btc-bitcoin&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/jsonplaceholder-2" rel="noopener noreferrer"&gt;JSONPlaceholder&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fake posts, users and todos&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://jsonplaceholder.typicode.com/todos/1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/dummyjson" rel="noopener noreferrer"&gt;DummyJSON&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fake products, carts and users&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://dummyjson.com/products/1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/randomuser" rel="noopener noreferrer"&gt;RandomUser&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Random user profiles&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://randomuser.me/api/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/fakestoreapi" rel="noopener noreferrer"&gt;FakeStoreAPI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;E-commerce sample data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://fakestoreapi.com/products/1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/open-trivia" rel="noopener noreferrer"&gt;Open Trivia&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Trivia questions&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://opentdb.com/api.php?amount=5&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/jokeapi" rel="noopener noreferrer"&gt;JokeAPI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Jokes, with safe mode&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://v2.jokeapi.dev/joke/Programming?safe-mode&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/advice-slip" rel="noopener noreferrer"&gt;Advice Slip&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A random piece of advice&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://api.adviceslip.com/advice&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/agify-io" rel="noopener noreferrer"&gt;Agify.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Predicted age from a first name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://api.agify.io/?name=michael&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/open-library" rel="noopener noreferrer"&gt;Open Library&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Book search&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://openlibrary.org/search.json?q=dune&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/zippopotam-us" rel="noopener noreferrer"&gt;Zippopotam.us&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Postal code lookup&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://api.zippopotam.us/us/90210&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/spaceflight-news" rel="noopener noreferrer"&gt;Spaceflight News&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Space news articles&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://api.spaceflightnewsapi.net/v4/articles/?limit=5&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://publicapis.lol/apis/httpbin" rel="noopener noreferrer"&gt;Httpbin&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Echoes your request back&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://httpbin.org/get&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to find the right public API
&lt;/h2&gt;

&lt;p&gt;A list of 2,000+ APIs is only useful if you can narrow it down. A quick checklist:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start from the category.&lt;/strong&gt; Weather, finance, maps, games: &lt;a href="https://publicapis.lol/categories" rel="noopener noreferrer"&gt;browse by category&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filter by access.&lt;/strong&gt; No key for prototypes, CORS for front-end calls, HTTPS for anything real.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check reliability.&lt;/strong&gt; Our &lt;a href="https://publicapis.lol/best" rel="noopener noreferrer"&gt;best API rankings&lt;/a&gt; put APIs with strong uptime and fast responses first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read the docs and terms&lt;/strong&gt; before you build on it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is a public API the same as a free API?
&lt;/h3&gt;

&lt;p&gt;Not always. "Public" means anyone can access it; many public APIs are free or have a free tier, but some charge from the first request. Every API in the public-apis list is free or has a free tier.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the difference between an API and an endpoint?
&lt;/h3&gt;

&lt;p&gt;An API is the whole interface a service offers. An endpoint is one URL within it, like &lt;code&gt;/v1/forecast&lt;/code&gt; in the Open-Meteo API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use public APIs in a commercial product?
&lt;/h3&gt;

&lt;p&gt;Often yes, but check the terms. Some free tiers are non-commercial only, and you'll need a paid plan for a commercial product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where can I find more public APIs?
&lt;/h3&gt;

&lt;p&gt;Our directory tracks every API in the &lt;a href="https://github.com/public-apis/public-apis" rel="noopener noreferrer"&gt;public-apis GitHub list&lt;/a&gt;, the most-starred API list on GitHub, with daily health checks, rankings and developer reviews. Start with the &lt;a href="https://publicapis.lol/best" rel="noopener noreferrer"&gt;best free APIs by category&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>freeapis</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
