APIs are the backbone of modern software development.
Every time you check the weather on your phone, log in with Google, or see real-time cryptocurrency prices — an API is working behind the scenes.
For developers, free APIs are game-changers. They let you build powerful applications without reinventing the wheel or spending money on infrastructure.
But here's the problem:
Most "free API" lists are misleading. They include:
- APIs that require credit cards
- "Free trials" that expire in 7 days
- APIs with unusable limits (like 5 requests/day)
- Deprecated or abandoned projects
This guide is different.
I've compiled 30 genuinely free APIs that are:
- Actually free (no credit card required)
- Production-ready (reasonable rate limits)
- Well-documented
- Actively maintained in 2026
- Practically useful for real projects
Let's dive in.
Quick Navigation
Jump to the category you need:
- Learning & Practice APIs (5 APIs)
- Weather & Location APIs (3 APIs)
- Finance & Cryptocurrency APIs (3 APIs)
- Data & Information APIs (4 APIs)
- Media & Content APIs (3 APIs)
- Developer Tools APIs (4 APIs)
- Fun & Entertainment APIs (4 APIs)
- Productivity & Utilities APIs (4 APIs)
Learning & Practice APIs
Perfect for beginners learning API integration. No authentication, no rate limits, easy to use.
1. JSONPlaceholder
What it is: Fake REST API for testing and prototyping
Why you need it:
- Learn CRUD operations without setting up a backend
- Test frontend applications
- Practice HTTP methods (GET, POST, PUT, DELETE)
- Zero setup required
Documentation: https://jsonplaceholder.typicode.com/
Available Resources:
- Posts (100)
- Comments (500)
- Albums (100)
- Photos (5000)
- Todos (200)
- Users (10)
Example Usage:
// GET all posts
fetch('https://jsonplaceholder.typicode.com/posts')
.then(res => res.json())
.then(data => console.log(data));
// GET single post
fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(res => res.json())
.then(data => console.log(data));
// CREATE new post
fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
title: 'My First Post',
body: 'This is the content',
userId: 1
})
})
.then(res => res.json())
.then(data => console.log(data));
// UPDATE post
fetch('https://jsonplaceholder.typicode.com/posts/1', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
id: 1,
title: 'Updated Title',
body: 'Updated content',
userId: 1
})
})
.then(res => res.json())
.then(data => console.log(data));
// DELETE post
fetch('https://jsonplaceholder.typicode.com/posts/1', {
method: 'DELETE'
})
.then(() => console.log('Deleted'));
Response Example:
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident",
"body": "quia et suscipit\nsuscipit recusandae..."
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None |
| HTTPS | ✅ Yes |
| CORS | ✅ Enabled |
Perfect for:
- Learning REST API basics
- Testing frontend frameworks (React, Vue, Angular)
- Building demo applications
- Understanding API structure
2. ReqRes
What it is: Realistic REST API for testing HTTP requests
Why it's different:
- Simulates real authentication flows
- Includes pagination
- Realistic response delays
- Proper error responses
Documentation: https://reqres.in/
Example Usage:
// GET users (paginated)
fetch('https://reqres.in/api/users?page=2')
.then(res => res.json())
.then(data => console.log(data));
// GET single user
fetch('https://reqres.in/api/users/2')
.then(res => res.json())
.then(data => console.log(data));
// CREATE user
fetch('https://reqres.in/api/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'John Doe',
job: 'Developer'
})
})
.then(res => res.json())
.then(data => console.log(data));
// LOGIN (simulated)
fetch('https://reqres.in/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: "eve.holt@reqres.in",
password: "cityslicka"
})
})
.then(res => res.json())
.then(data => console.log(data));
// Delayed response (testing loading states)
fetch('https://reqres.in/api/users?delay=3')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"page": 2,
"per_page": 6,
"total": 12,
"total_pages": 2,
"data": [
{
"id": 7,
"email": "michael.lawson@reqres.in",
"first_name": "Michael",
"last_name": "Lawson",
"avatar": "https://reqres.in/img/faces/7-image.jpg"
}
]
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None (but simulates auth) |
| HTTPS | ✅ Yes |
| Delayed Responses | ✅ Yes (for testing) |
Perfect for:
- Testing authentication flows
- Learning pagination
- Practicing error handling
- Testing loading states
3. PokéAPI
What it is: Comprehensive Pokémon database API
Why developers love it:
- Extensive data on 1000+ Pokémon
- Well-structured relational data
- Great for learning complex API structures
- Actively maintained
Documentation: https://pokeapi.co/
Available Data:
- Pokémon stats and abilities
- Moves and type effectiveness
- Evolution chains
- Items and berries
- Game versions
- Locations
Example Usage:
// GET Pokémon by name
fetch('https://pokeapi.co/api/v2/pokemon/pikachu')
.then(res => res.json())
.then(data => console.log(data));
// GET Pokémon by ID
fetch('https://pokeapi.co/api/v2/pokemon/25')
.then(res => res.json())
.then(data => console.log(data));
// LIST all Pokémon (first 151)
fetch('https://pokeapi.co/api/v2/pokemon?limit=151&offset=0')
.then(res => res.json())
.then(data => console.log(data));
// GET Pokémon type information
fetch('https://pokeapi.co/api/v2/type/electric')
.then(res => res.json())
.then(data => console.log(data));
// GET evolution chain
fetch('https://pokeapi.co/api/v2/evolution-chain/10')
.then(res => res.json())
.then(data => console.log(data));
// GET Pokémon ability
fetch('https://pokeapi.co/api/v2/ability/static')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"id": 25,
"name": "pikachu",
"height": 4,
"weight": 60,
"types": [
{
"slot": 1,
"type": {
"name": "electric"
}
}
],
"abilities": [
{
"ability": {
"name": "static"
},
"is_hidden": false
}
],
"stats": [
{
"base_stat": 35,
"stat": {
"name": "hp"
}
},
{
"base_stat": 55,
"stat": {
"name": "attack"
}
}
],
"sprites": {
"front_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/25.png"
}
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ Fair use (cache responses recommended) |
| Authentication | ✅ None |
| Resources | 1000+ Pokémon, moves, abilities, items |
| Languages | Multiple languages supported |
Perfect for:
- Learning complex data relationships
- Building game-like applications
- Portfolio projects
- Understanding API pagination
4. Random User Generator
What it is: Generate realistic random user data for testing
Why it's essential:
- Perfect for populating databases
- Realistic profile pictures
- Complete user profiles
- Multiple nationalities
Documentation: https://randomuser.me/
Generated Data:
- Full names
- Email addresses
- Profile pictures (3 sizes)
- Physical addresses
- Phone numbers
- Birthdates and age
- Login credentials
- Nationality
Example Usage:
// Generate single user
fetch('https://randomuser.me/api/')
.then(res => res.json())
.then(data => console.log(data));
// Generate 50 users
fetch('https://randomuser.me/api/?results=50')
.then(res => res.json())
.then(data => console.log(data));
// Users from specific countries
fetch('https://randomuser.me/api/?results=10&nat=us,gb,ca')
.then(res => res.json())
.then(data => console.log(data));
// Only specific fields
fetch('https://randomuser.me/api/?inc=name,email,picture')
.then(res => res.json())
.then(data => console.log(data));
// Exclude fields
fetch('https://randomuser.me/api/?exc=login,registered,id')
.then(res => res.json())
.then(data => console.log(data));
// Use seed for reproducible results
fetch('https://randomuser.me/api/?seed=abc123&results=5')
.then(res => res.json())
.then(data => console.log(data));
// Only female users
fetch('https://randomuser.me/api/?gender=female&results=10')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"results": [
{
"gender": "female",
"name": {
"title": "Ms",
"first": "Emma",
"last": "Johnson"
},
"location": {
"street": {
"number": 1234,
"name": "Oak St"
},
"city": "Seattle",
"state": "Washington",
"country": "United States",
"postcode": "98101"
},
"email": "emma.johnson@example.com",
"dob": {
"date": "1990-05-15T12:00:00.000Z",
"age": 36
},
"phone": "(206) 555-0123",
"picture": {
"large": "https://randomuser.me/api/portraits/women/65.jpg",
"medium": "https://randomuser.me/api/portraits/med/women/65.jpg",
"thumbnail": "https://randomuser.me/api/portraits/thumb/women/65.jpg"
}
}
]
}
Supported Countries: AU, BR, CA, CH, DE, DK, ES, FI, FR, GB, IE, IN, IR, MX, NL, NO, NZ, RS, TR, UA, US
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None |
| Nationalities | 20+ countries |
| Customization | ✅ Extensive |
Perfect for:
- Populating test databases
- UI/UX prototyping
- Demo applications
- User interface testing
5. Dog CEO's Dog API
What it is: Random dog images by breed
Why it's popular:
- Completely free
- No authentication
- 100+ breeds
- High-quality images
- Simple to use
Documentation: https://dog.ceo/dog-api/
Example Usage:
// Random dog image
fetch('https://dog.ceo/api/breeds/image/random')
.then(res => res.json())
.then(data => console.log(data));
// Multiple random images
fetch('https://dog.ceo/api/breeds/image/random/5')
.then(res => res.json())
.then(data => console.log(data));
// List all breeds
fetch('https://dog.ceo/api/breeds/list/all')
.then(res => res.json())
.then(data => console.log(data));
// Random image by breed
fetch('https://dog.ceo/api/breed/husky/images/random')
.then(res => res.json())
.then(data => console.log(data));
// All images of a breed
fetch('https://dog.ceo/api/breed/labrador/images')
.then(res => res.json())
.then(data => console.log(data));
// Sub-breed images
fetch('https://dog.ceo/api/breed/retriever/golden/images/random')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"message": "https://images.dog.ceo/breeds/husky/n02110185_10047.jpg",
"status": "success"
}
Popular Breeds Available:
- Husky, Labrador, Golden Retriever
- Bulldog, Beagle, Poodle
- German Shepherd, Corgi, Pug
- 100+ more breeds
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None |
| Breeds | 100+ breeds |
| Image Quality | ✅ High quality |
Perfect for:
- Learning API basics
- Image gallery projects
- Testing image loading
- Fun side projects
Weather & Location APIs
Real-time weather data and location services for your applications.
6. OpenWeather API
What it is: Comprehensive weather data for any location
Free Tier:
- 1,000 API calls/day
- Current weather data
- 5-day forecast
- Historical data (last 5 days)
- Air pollution data
Documentation: https://openweathermap.org/api
Example Usage:
const API_KEY = 'YOUR_API_KEY'; // Free signup at openweathermap.org
// Current weather by city
fetch(`https://api.openweathermap.org/data/2.5/weather?q=London&appid=${API_KEY}&units=metric`)
.then(res => res.json())
.then(data => console.log(data));
// Weather by coordinates
fetch(`https://api.openweathermap.org/data/2.5/weather?lat=51.5074&lon=-0.1278&appid=${API_KEY}&units=metric`)
.then(res => res.json())
.then(data => console.log(data));
// 5-day forecast
fetch(`https://api.openweathermap.org/data/2.5/forecast?q=London&appid=${API_KEY}&units=metric`)
.then(res => res.json())
.then(data => console.log(data));
// Air pollution
fetch(`https://api.openweathermap.org/data/2.5/air_pollution?lat=51.5074&lon=-0.1278&appid=${API_KEY}`)
.then(res => res.json())
.then(data => console.log(data));
// One Call API (comprehensive data)
fetch(`https://api.openweathermap.org/data/2.5/onecall?lat=51.5074&lon=-0.1278&exclude=minutely&appid=${API_KEY}&units=metric`)
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"coord": {
"lon": -0.1278,
"lat": 51.5074
},
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01d"
}
],
"main": {
"temp": 15.2,
"feels_like": 14.8,
"temp_min": 13.9,
"temp_max": 16.5,
"pressure": 1013,
"humidity": 72
},
"wind": {
"speed": 3.6,
"deg": 210
},
"clouds": {
"all": 0
},
"dt": 1705305600,
"name": "London"
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ 1,000 calls/day (60/min) |
| Authentication | API key (free signup) |
| Data | Current, forecast, historical |
| Coverage | Worldwide |
Perfect for:
- Weather applications
- Travel planning tools
- Smart home integrations
- Agricultural applications
7. IP Geolocation API (ipapi.co)
What it is: Get location data from IP addresses
Free Tier:
- 1,000 requests/day
- No credit card required
- IPv4 and IPv6 support
Documentation: https://ipapi.co/
Available Data:
- City, region, country
- Latitude/longitude
- Timezone
- Currency
- ISP information
Example Usage:
// Your own IP location
fetch('https://ipapi.co/json/')
.then(res => res.json())
.then(data => console.log(data));
// Specific IP address
fetch('https://ipapi.co/8.8.8.8/json/')
.then(res => res.json())
.then(data => console.log(data));
// Get only city
fetch('https://ipapi.co/8.8.8.8/city/')
.then(res => res.text())
.then(data => console.log(data));
// Get only country
fetch('https://ipapi.co/8.8.8.8/country/')
.then(res => res.text())
.then(data => console.log(data));
// Get timezone
fetch('https://ipapi.co/8.8.8.8/timezone/')
.then(res => res.text())
.then(data => console.log(data));
Response Example:
{
"ip": "8.8.8.8",
"city": "Mountain View",
"region": "California",
"region_code": "CA",
"country": "US",
"country_name": "United States",
"continent_code": "NA",
"postal": "94035",
"latitude": 37.386,
"longitude": -122.0838,
"timezone": "America/Los_Angeles",
"utc_offset": "-0800",
"country_calling_code": "+1",
"currency": "USD",
"languages": "en-US,es-US,haw,fr",
"asn": "AS15169",
"org": "Google LLC"
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ 1,000 requests/day |
| Authentication | ✅ None (for free tier) |
| IPv6 Support | ✅ Yes |
| HTTPS | ✅ Yes |
Perfect for:
- User location detection
- Analytics dashboards
- Content localization
- Security/fraud detection
8. Sunrise-Sunset API
What it is: Sunrise and sunset times for any location
Why it's useful:
- Completely free
- No authentication
- No rate limits
- Accurate calculations
Documentation: https://sunrise-sunset.org/api
Example Usage:
// Get sunrise/sunset for coordinates
const lat = 36.7201600;
const lng = -4.4203400;
fetch(`https://api.sunrise-sunset.org/json?lat=${lat}&lng=${lng}&formatted=0`)
.then(res => res.json())
.then(data => console.log(data));
// Get for today (formatted)
fetch(`https://api.sunrise-sunset.org/json?lat=36.7201600&lng=-4.4203400`)
.then(res => res.json())
.then(data => console.log(data));
// Specific date
fetch(`https://api.sunrise-sunset.org/json?lat=36.7201600&lng=-4.4203400&date=2026-12-25`)
.then(res => res.json())
.then(data => console.log(data));
// Today's date
const today = new Date().toISOString().split('T')[0];
fetch(`https://api.sunrise-sunset.org/json?lat=36.7201600&lng=-4.4203400&date=${today}`)
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"results": {
"sunrise": "2026-01-15T07:27:44+00:00",
"sunset": "2026-01-15T17:53:12+00:00",
"solar_noon": "2026-01-15T12:40:28+00:00",
"day_length": 37528,
"civil_twilight_begin": "2026-01-15T06:59:34+00:00",
"civil_twilight_end": "2026-01-15T18:21:22+00:00",
"nautical_twilight_begin": "2026-01-15T06:26:47+00:00",
"nautical_twilight_end": "2026-01-15T18:54:09+00:00",
"astronomical_twilight_begin": "2026-01-15T05:54:36+00:00",
"astronomical_twilight_end": "2026-01-15T19:26:20+00:00"
},
"status": "OK"
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None |
| Accuracy | ✅ High |
| Date Range | Any date |
Perfect for:
- Photography apps
- Travel planning
- Outdoor activity apps
- Smart home automation
Finance & Cryptocurrency APIs
Free financial data for building trading apps, converters, and trackers.
9. CoinGecko API
What it is: Comprehensive cryptocurrency data
Free Tier:
- 10-50 calls/minute
- 10,000+ cryptocurrencies
- Real-time prices
- Historical data
- Market statistics
Documentation: https://www.coingecko.com/en/api/documentation
Example Usage:
// Simple price lookup
fetch('https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum&vs_currencies=usd,eur,gbp')
.then(res => res.json())
.then(data => console.log(data));
// Detailed coin data
fetch('https://api.coingecko.com/api/v3/coins/bitcoin')
.then(res => res.json())
.then(data => console.log(data));
// Top 100 coins by market cap
fetch('https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=100&page=1')
.then(res => res.json())
.then(data => console.log(data));
// Historical chart data (7 days)
fetch('https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=7')
.then(res => res.json())
.then(data => console.log(data));
// Trending coins
fetch('https://api.coingecko.com/api/v3/search/trending')
.then(res => res.json())
.then(data => console.log(data));
// Global crypto data
fetch('https://api.coingecko.com/api/v3/global')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"bitcoin": {
"usd": 43250.50,
"usd_market_cap": 846789234567,
"usd_24h_vol": 28456789123,
"usd_24h_change": 2.45,
"eur": 39850.25,
"gbp": 34120.80
},
"ethereum": {
"usd": 2245.30,
"usd_market_cap": 269876543210,
"usd_24h_vol": 15678901234,
"usd_24h_change": 1.85
}
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ 10-50 calls/minute |
| Authentication | ✅ None (basic tier) |
| Cryptocurrencies | 10,000+ |
| Data | Price, market cap, volume, charts |
Perfect for:
- Crypto price trackers
- Portfolio management apps
- Market analysis tools
- Trading dashboards
10. Frankfurter API (Currency Exchange)
What it is: European Central Bank currency exchange rates
Why it's excellent:
- Completely free
- No authentication
- No rate limits
- Reliable data source
Documentation: https://www.frankfurter.app/
Example Usage:
// Latest rates
fetch('https://api.frankfurter.app/latest')
.then(res => res.json())
.then(data => console.log(data));
// Latest from USD
fetch('https://api.frankfurter.app/latest?from=USD')
.then(res => res.json())
.then(data => console.log(data));
// Convert 100 USD to EUR
fetch('https://api.frankfurter.app/latest?amount=100&from=USD&to=EUR')
.then(res => res.json())
.then(data => console.log(data));
// Multiple target currencies
fetch('https://api.frankfurter.app/latest?from=USD&to=EUR,GBP,JPY')
.then(res => res.json())
.then(data => console.log(data));
// Historical rates (specific date)
fetch('https://api.frankfurter.app/2026-01-01')
.then(res => res.json())
.then(data => console.log(data));
// Time series data
fetch('https://api.frankfurter.app/2026-01-01..2026-01-15?from=USD&to=EUR')
.then(res => res.json())
.then(data => console.log(data));
// Available currencies
fetch('https://api.frankfurter.app/currencies')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"amount": 100.0,
"base": "USD",
"date": "2026-01-15",
"rates": {
"EUR": 92.15,
"GBP": 78.92,
"JPY": 14950.50,
"CAD": 135.20,
"AUD": 152.30
}
}
Supported Currencies: EUR, USD, GBP, JPY, CAD, AUD, and 30+ more
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None |
| Currencies | 30+ major currencies |
| Historical Data | ✅ Since 1999 |
Perfect for:
- Currency converters
- E-commerce price display
- Travel budget calculators
- Financial dashboards
11. Exchange Rate API
What it is: Simple currency exchange rates
Free Tier:
- 1,500 requests/month
- 160+ currencies
- No credit card required
Documentation: https://www.exchangerate-api.com/
Example Usage:
// Latest rates for USD
fetch('https://api.exchangerate-api.com/v4/latest/USD')
.then(res => res.json())
.then(data => console.log(data));
// Latest rates for EUR
fetch('https://api.exchangerate-api.com/v4/latest/EUR')
.then(res => res.json())
.then(data => console.log(data));
// Convert currency
const amount = 100;
const from = 'USD';
const to = 'EUR';
fetch(`https://api.exchangerate-api.com/v4/latest/${from}`)
.then(res => res.json())
.then(data => {
const rate = data.rates[to];
const converted = amount * rate;
console.log(`${amount} ${from} = ${converted.toFixed(2)} ${to}`);
});
Response Example:
{
"provider": "https://www.exchangerate-api.com",
"base": "USD",
"date": "2026-01-15",
"time_last_updated": 1705305600,
"rates": {
"EUR": 0.92,
"GBP": 0.79,
"JPY": 149.50,
"CAD": 1.35,
"AUD": 1.52,
"INR": 83.12
}
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ 1,500/month (free) |
| Authentication | ✅ None (basic tier) |
| Currencies | 160+ |
| Updates | Daily |
Perfect for:
- Simple currency conversion
- Travel apps
- E-commerce platforms
- Budget trackers
Data & Information APIs
Access to encyclopedic data, country information, and knowledge bases.
12. REST Countries API
What it is: Detailed information about every country in the world
Why it's amazing:
- Completely free
- No authentication
- No rate limits
- 250+ countries
- Comprehensive data
Documentation: https://restcountries.com/
Available Data:
- Names (common, official, native)
- Population
- Currencies
- Languages
- Flags (PNG & SVG)
- Geographic coordinates
- Borders
- Timezones
Example Usage:
// All countries
fetch('https://restcountries.com/v3.1/all')
.then(res => res.json())
.then(data => console.log(data));
// Specific country by name
fetch('https://restcountries.com/v3.1/name/japan')
.then(res => res.json())
.then(data => console.log(data));
// Full name search
fetch('https://restcountries.com/v3.1/name/united states?fullText=true')
.then(res => res.json())
.then(data => console.log(data));
// By country code
fetch('https://restcountries.com/v3.1/alpha/jp')
.then(res => res.json())
.then(data => console.log(data));
// Multiple country codes
fetch('https://restcountries.com/v3.1/alpha?codes=us,ca,mx')
.then(res => res.json())
.then(data => console.log(data));
// By currency
fetch('https://restcountries.com/v3.1/currency/usd')
.then(res => res.json())
.then(data => console.log(data));
// By region
fetch('https://restcountries.com/v3.1/region/europe')
.then(res => res.json())
.then(data => console.log(data));
// By language
fetch('https://restcountries.com/v3.1/lang/spanish')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"name": {
"common": "Japan",
"official": "Japan",
"nativeName": {
"jpn": {
"official": "日本",
"common": "日本"
}
}
},
"capital": ["Tokyo"],
"population": 125836021,
"region": "Asia",
"subregion": "Eastern Asia",
"languages": {
"jpn": "Japanese"
},
"currencies": {
"JPY": {
"name": "Japanese yen",
"symbol": "¥"
}
},
"flags": {
"png": "https://flagcdn.com/w320/jp.png",
"svg": "https://flagcdn.com/jp.svg"
},
"latlng": [36, 138],
"timezones": ["UTC+09:00"]
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None |
| Countries | 250+ |
| Languages | All languages |
Perfect for:
- Educational applications
- Travel planning apps
- Geography tools
- Country selectors
13. Wikipedia API
What it is: Access Wikipedia's vast knowledge base programmatically
Why it's powerful:
- Completely free
- 6+ million articles (English)
- Multiple languages
- Images and media
- No authentication for reading
Documentation: https://www.mediawiki.org/wiki/API:Main_page
Example Usage:
// Search Wikipedia
fetch('https://en.wikipedia.org/w/api.php?action=opensearch&search=javascript&limit=5&format=json&origin=*')
.then(res => res.json())
.then(data => console.log(data));
// Get page summary
fetch('https://en.wikipedia.org/api/rest_v1/page/summary/JavaScript')
.then(res => res.json())
.then(data => console.log(data));
// Get full page content
fetch('https://en.wikipedia.org/w/api.php?action=query&titles=JavaScript&prop=extracts&exintro&format=json&origin=*')
.then(res => res.json())
.then(data => console.log(data));
// Random article
fetch('https://en.wikipedia.org/api/rest_v1/page/random/summary')
.then(res => res.json())
.then(data => console.log(data));
// Get page image
fetch('https://en.wikipedia.org/w/api.php?action=query&titles=JavaScript&prop=pageimages&format=json&pithumbsize=500&origin=*')
.then(res => res.json())
.then(data => console.log(data));
// Search with results
fetch('https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch=artificial intelligence&format=json&origin=*')
.then(res => res.json())
.then(data => console.log(data));
Response Example (summary):
{
"type": "standard",
"title": "JavaScript",
"displaytitle": "JavaScript",
"extract": "JavaScript, often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web...",
"extract_html": "<p><b>JavaScript</b>, often abbreviated as <b>JS</b>, is a programming language...</p>",
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Unofficial_JavaScript_logo_2.svg/240px-Unofficial_JavaScript_logo_2.svg.png",
"width": 240,
"height": 240
},
"content_urls": {
"desktop": {
"page": "https://en.wikipedia.org/wiki/JavaScript"
}
}
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ 200 requests/second |
| Authentication | ✅ None (for reading) |
| Languages | 300+ |
| Articles | Millions |
Perfect for:
- Educational apps
- Knowledge base integration
- Content enrichment
- Research tools
14. Free Dictionary API
What it is: English dictionary with definitions, phonetics, and examples
Why it's great:
- Completely free
- No authentication
- Audio pronunciations
- Synonyms/antonyms
- Etymology
Documentation: https://dictionaryapi.dev/
Example Usage:
// Get word definition
fetch('https://api.dictionaryapi.dev/api/v2/entries/en/programming')
.then(res => res.json())
.then(data => console.log(data));
// Multiple words
const words = ['code', 'debug', 'compile'];
Promise.all(
words.map(word =>
fetch(`https://api.dictionaryapi.dev/api/v2/entries/en/${word}`)
.then(res => res.json())
)
).then(results => console.log(results));
// Handle not found
fetch('https://api.dictionaryapi.dev/api/v2/entries/en/asdfghjkl')
.then(res => {
if (!res.ok) {
console.log('Word not found');
}
return res.json();
})
.then(data => console.log(data));
Response Example:
[
{
"word": "programming",
"phonetic": "/ˈprəʊɡramɪŋ/",
"phonetics": [
{
"text": "/ˈprəʊɡramɪŋ/",
"audio": "https://api.dictionaryapi.dev/media/pronunciations/en/programming-uk.mp3"
}
],
"meanings": [
{
"partOfSpeech": "noun",
"definitions": [
{
"definition": "The action or process of writing computer programs.",
"example": "Programming requires logical thinking.",
"synonyms": ["coding", "software development"],
"antonyms": []
}
]
}
]
}
]
| Feature | Details |
|---|---|
| Rate Limit | ✅ None specified |
| Authentication | ✅ None |
| Audio | ✅ Pronunciations included |
| Data | Definitions, examples, synonyms |
Perfect for:
- Language learning apps
- Writing tools
- Educational platforms
- Vocabulary builders
15. Numbers API
What it is: Interesting facts about numbers, dates, and years
Why it's fun:
- Completely free
- No authentication
- Multiple fact types
- Great for learning
Documentation: http://numbersapi.com/
Fact Types:
- Trivia - Random facts
- Math - Mathematical properties
- Date - Historical events
- Year - Events in years
Example Usage:
// Trivia about 42
fetch('http://numbersapi.com/42')
.then(res => res.text())
.then(data => console.log(data));
// Math fact
fetch('http://numbersapi.com/42/math')
.then(res => res.text())
.then(data => console.log(data));
// Date fact (July 4)
fetch('http://numbersapi.com/7/4/date')
.then(res => res.text())
.then(data => console.log(data));
// Year fact
fetch('http://numbersapi.com/1969/year')
.then(res => res.text())
.then(data => console.log(data));
// Random fact
fetch('http://numbersapi.com/random/trivia')
.then(res => res.text())
.then(data => console.log(data));
// JSON format
fetch('http://numbersapi.com/42?json')
.then(res => res.json())
.then(data => console.log(data));
// Batch request (1-10)
fetch('http://numbersapi.com/1..10')
.then(res => res.json())
.then(data => console.log(data));
Response Examples:
// Text
"42 is the answer to the Ultimate Question of Life, the Universe, and Everything."
// JSON
{
"text": "42 is the answer to the Ultimate Question...",
"number": 42,
"found": true,
"type": "trivia"
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None |
| Formats | Text, JSON |
| Types | Trivia, math, date, year |
Perfect for:
- Fun widgets
- Educational apps
- Birthday facts
- Historical timelines
Media & Content APIs
High-quality images, space data, and multimedia content.
16. Unsplash API
What it is: High-quality free stock photos
Free Tier:
- 50 requests/hour
- 3+ million photos
- High-resolution images
- Search functionality
- Collections
Documentation: https://unsplash.com/documentation
Example Usage:
const ACCESS_KEY = 'YOUR_ACCESS_KEY'; // Free signup
// Random photo
fetch(`https://api.unsplash.com/photos/random?client_id=${ACCESS_KEY}`)
.then(res => res.json())
.then(data => console.log(data));
// Random by topic
fetch(`https://api.unsplash.com/photos/random?query=nature&client_id=${ACCESS_KEY}`)
.then(res => res.json())
.then(data => console.log(data));
// Search photos
fetch(`https://api.unsplash.com/search/photos?query=mountains&client_id=${ACCESS_KEY}`)
.then(res => res.json())
.then(data => console.log(data));
// Multiple random photos
fetch(`https://api.unsplash.com/photos/random?count=5&client_id=${ACCESS_KEY}`)
.then(res => res.json())
.then(data => console.log(data));
// Get specific photo
fetch(`https://api.unsplash.com/photos/PHOTO_ID?client_id=${ACCESS_KEY}`)
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"id": "abc123",
"width": 5472,
"height": 3648,
"color": "#26547C",
"description": "Beautiful mountain landscape",
"urls": {
"raw": "https://images.unsplash.com/photo-abc?ixid=...",
"full": "https://images.unsplash.com/photo-abc?w=1920",
"regular": "https://images.unsplash.com/photo-abc?w=1080",
"small": "https://images.unsplash.com/photo-abc?w=400",
"thumb": "https://images.unsplash.com/photo-abc?w=200"
},
"user": {
"username": "johndoe",
"name": "John Doe"
},
"downloads": 5432,
"likes": 234
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ 50/hour (free tier) |
| Authentication | API key required |
| Photos | 3+ million |
| Quality | ✅ High resolution |
Perfect for:
- Blog platforms
- Portfolio websites
- Image galleries
- Background images
17. NASA APOD API
What it is: Astronomy Picture of the Day from NASA
Why it's amazing:
- Completely free
- Stunning space imagery
- Educational content
- Historical archive
- HD images
Documentation: https://api.nasa.gov/
Example Usage:
const NASA_API_KEY = 'DEMO_KEY'; // Get free key at api.nasa.gov
// Today's picture
fetch(`https://api.nasa.gov/planetary/apod?api_key=${NASA_API_KEY}`)
.then(res => res.json())
.then(data => console.log(data));
// Specific date
fetch(`https://api.nasa.gov/planetary/apod?api_key=${NASA_API_KEY}&date=2026-01-15`)
.then(res => res.json())
.then(data => console.log(data));
// Date range
fetch(`https://api.nasa.gov/planetary/apod?api_key=${NASA_API_KEY}&start_date=2026-01-01&end_date=2026-01-07`)
.then(res => res.json())
.then(data => console.log(data));
// Random count
fetch(`https://api.nasa.gov/planetary/apod?api_key=${NASA_API_KEY}&count=5`)
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"copyright": "NASA",
"date": "2026-01-15",
"explanation": "What's happening in the center of spiral galaxy M83?...",
"hdurl": "https://apod.nasa.gov/apod/image/2601/M83_Hubble_4000.jpg",
"media_type": "image",
"title": "M83: The Southern Pinwheel Galaxy",
"url": "https://apod.nasa.gov/apod/image/2601/M83_Hubble_960.jpg"
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ 1,000/hour with key |
| Authentication | API key (free, instant) |
| Archive | Since 1995 |
| Quality | ✅ HD images |
Perfect for:
- Educational apps
- Space-themed projects
- Daily inspiration
- Science platforms
18. The Cat API
What it is: Cat images and breeds information
Free Tier:
- No authentication for basic use
- 10 requests/second
- Breed information
- Image search
Documentation: https://thecatapi.com/
Example Usage:
// Random cat image (no auth needed)
fetch('https://api.thecatapi.com/v1/images/search')
.then(res => res.json())
.then(data => console.log(data));
// Multiple random images
fetch('https://api.thecatapi.com/v1/images/search?limit=10')
.then(res => res.json())
.then(data => console.log(data));
// All cat breeds
fetch('https://api.thecatapi.com/v1/breeds')
.then(res => res.json())
.then(data => console.log(data));
// Specific breed
fetch('https://api.thecatapi.com/v1/breeds/search?q=bengal')
.then(res => res.json())
.then(data => console.log(data));
// Images of specific breed
fetch('https://api.thecatapi.com/v1/images/search?breed_id=beng')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
[
{
"id": "abc123",
"url": "https://cdn2.thecatapi.com/images/abc123.jpg",
"width": 1600,
"height": 1200
}
]
| Feature | Details |
|---|---|
| Rate Limit | ✅ 10/second |
| Authentication | Optional (for more features) |
| Breeds | 60+ cat breeds |
| Images | Thousands |
Perfect for:
- Pet websites
- Fun projects
- Image galleries
- Animal lover apps
Developer Tools APIs
APIs for developers building developer tools, portfolio sites, and code-related projects.
19. GitHub API
What it is: Access GitHub data programmatically
Free Tier:
- 60 requests/hour (unauthenticated)
- 5,000 requests/hour (authenticated)
- Public repository data
- User information
- Commits, issues, PRs
Documentation: https://docs.github.com/en/rest
Example Usage:
// User information
fetch('https://api.github.com/users/octocat')
.then(res => res.json())
.then(data => console.log(data));
// User repositories
fetch('https://api.github.com/users/octocat/repos')
.then(res => res.json())
.then(data => console.log(data));
// Specific repository
fetch('https://api.github.com/repos/facebook/react')
.then(res => res.json())
.then(data => console.log(data));
// Repository commits
fetch('https://api.github.com/repos/facebook/react/commits')
.then(res => res.json())
.then(data => console.log(data));
// Search repositories
fetch('https://api.github.com/search/repositories?q=javascript&sort=stars&order=desc')
.then(res => res.json())
.then(data => console.log(data));
// Trending (last 7 days)
const date = new Date();
date.setDate(date.getDate() - 7);
const dateStr = date.toISOString().split('T')[0];
fetch(`https://api.github.com/search/repositories?q=created:>${dateStr}&sort=stars&order=desc`)
.then(res => res.json())
.then(data => console.log(data));
// With authentication (higher limits)
const token = 'YOUR_GITHUB_TOKEN';
fetch('https://api.github.com/user/repos', {
headers: {
'Authorization': `Bearer ${token}`
}
})
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"login": "octocat",
"id": 1,
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"name": "The Octocat",
"company": "GitHub",
"blog": "https://github.blog",
"location": "San Francisco",
"public_repos": 8,
"followers": 9870,
"following": 9,
"created_at": "2008-01-14T04:33:35Z"
}
| Feature | Details |
|---|---|
| Rate Limit | 60/hour (unauth), 5,000/hour (auth) |
| Authentication | Optional (token) |
| Data | Users, repos, commits, issues |
| Search | ✅ Advanced search |
Perfect for:
- Portfolio websites
- Developer dashboards
- Code search tools
- Contribution trackers
20. Public APIs GitHub Repository API
What it is: Metadata from the Public APIs GitHub repository
Why it's useful:
- Discover new APIs
- Filter by category
- Check API status
- No authentication
Documentation: https://api.publicapis.org/
Example Usage:
// Get all APIs
fetch('https://api.publicapis.org/entries')
.then(res => res.json())
.then(data => console.log(data));
// Random API
fetch('https://api.publicapis.org/random')
.then(res => res.json())
.then(data => console.log(data));
// Multiple random APIs
fetch('https://api.publicapis.org/random?count=5')
.then(res => res.json())
.then(data => console.log(data));
// Filter by category
fetch('https://api.publicapis.org/entries?category=weather')
.then(res => res.json())
.then(data => console.log(data));
// No auth required only
fetch('https://api.publicapis.org/entries?auth=')
.then(res => res.json())
.then(data => console.log(data));
// HTTPS only
fetch('https://api.publicapis.org/entries?https=true')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"count": 1,
"entries": [
{
"API": "OpenWeather",
"Description": "Weather data for any location",
"Auth": "apiKey",
"HTTPS": true,
"Cors": "yes",
"Link": "https://openweathermap.org/api",
"Category": "Weather"
}
]
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None |
| APIs Listed | 1400+ |
| Categories | 50+ |
Perfect for:
- API discovery tools
- Developer resources
- Finding APIs by category
21. JSON Storage API (JSONBin.io)
What it is: Free JSON storage for testing and prototyping
Free Tier:
- No credit card
- Private bins
- API access
- Version control
Documentation: https://jsonbin.io/
Example Usage:
const API_KEY = 'YOUR_API_KEY'; // Free signup
// Create a bin
fetch('https://api.jsonbin.io/v3/b', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Master-Key': API_KEY
},
body: JSON.stringify({
name: 'John Doe',
age: 30
})
})
.then(res => res.json())
.then(data => console.log(data));
// Read a bin
fetch('https://api.jsonbin.io/v3/b/BIN_ID', {
headers: {
'X-Master-Key': API_KEY
}
})
.then(res => res.json())
.then(data => console.log(data));
// Update a bin
fetch('https://api.jsonbin.io/v3/b/BIN_ID', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'X-Master-Key': API_KEY
},
body: JSON.stringify({
name: 'Jane Doe',
age: 25
})
})
.then(res => res.json())
.then(data => console.log(data));
| Feature | Details |
|---|---|
| Rate Limit | Varies by tier |
| Authentication | API key (free) |
| Storage | JSON data |
| Versioning | ✅ Yes |
Perfect for:
- Quick prototyping
- Testing without backend
- Simple data storage
- Configuration management
22. Placeholder Image APIs
What it is: Generate placeholder images for testing
Options:
Placeholder.com (No auth needed)
// Basic placeholder
<img src="https://via.placeholder.com/300x200" />
// With text
<img src="https://via.placeholder.com/300x200?text=Hello+World" />
// With background color
<img src="https://via.placeholder.com/300x200/FF0000/FFFFFF" />
Picsum.photos (Lorem Picsum)
// Random image
<img src="https://picsum.photos/300/200" />
// Specific image
<img src="https://picsum.photos/id/237/300/200" />
// Grayscale
<img src="https://picsum.photos/300/200?grayscale" />
// Blur
<img src="https://picsum.photos/300/200?blur=2" />
| Service | Features |
|---|---|
| Placeholder.com | Custom colors, text |
| Picsum.photos | Real photos, filters |
| Rate Limit | ✅ None |
| Authentication | ✅ None |
Perfect for:
- UI prototyping
- Testing layouts
- Image loading states
- Demo applications
Fun & Entertainment APIs
APIs for jokes, quotes, activities, and entertainment.
23. JokeAPI
What it is: Programming and general jokes
Why it's great:
- Multiple categories
- Safe mode filtering
- Single and two-part jokes
- No authentication
Documentation: https://jokeapi.dev/
Categories:
- Programming
- Miscellaneous
- Dark
- Puns
- Spooky
- Christmas
Example Usage:
// Random programming joke
fetch('https://v2.jokeapi.dev/joke/Programming')
.then(res => res.json())
.then(data => console.log(data));
// Safe jokes only
fetch('https://v2.jokeapi.dev/joke/Any?safe-mode')
.then(res => res.json())
.then(data => console.log(data));
// Single-liner only
fetch('https://v2.jokeapi.dev/joke/Programming?type=single')
.then(res => res.json())
.then(data => console.log(data));
// Multiple jokes
fetch('https://v2.jokeapi.dev/joke/Programming?amount=5')
.then(res => res.json())
.then(data => console.log(data));
// Search jokes
fetch('https://v2.jokeapi.dev/joke/Programming?contains=debug')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"error": false,
"category": "Programming",
"type": "twopart",
"setup": "Why do programmers prefer dark mode?",
"delivery": "Because light attracts bugs!",
"flags": {
"nsfw": false,
"religious": false
},
"safe": true,
"lang": "en"
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ 120/minute |
| Authentication | ✅ None |
| Languages | Multiple |
| Filtering | ✅ Safe mode |
Perfect for:
- Fun widgets
- Break time apps
- Developer humor
- Social sharing
24. Quotable API
What it is: Inspirational and famous quotes
Documentation: https://github.com/lukePeavey/quotable
Example Usage:
// Random quote
fetch('https://api.quotable.io/random')
.then(res => res.json())
.then(data => console.log(data));
// By tag
fetch('https://api.quotable.io/random?tags=technology')
.then(res => res.json())
.then(data => console.log(data));
// By author
fetch('https://api.quotable.io/random?author=albert-einstein')
.then(res => res.json())
.then(data => console.log(data));
// Multiple quotes
fetch('https://api.quotable.io/quotes/random?limit=5')
.then(res => res.json())
.then(data => console.log(data));
// List authors
fetch('https://api.quotable.io/authors')
.then(res => res.json())
.then(data => console.log(data));
// Search quotes
fetch('https://api.quotable.io/search/quotes?query=success')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"_id": "abc123",
"content": "The best way to get started is to quit talking and begin doing.",
"author": "Walt Disney",
"tags": ["inspirational", "success"],
"authorSlug": "walt-disney",
"length": 64
}
Available Tags: wisdom, success, life, love, happiness, technology, famous-quotes
| Feature | Details |
|---|---|
| Rate Limit | ✅ 180/minute |
| Authentication | ✅ None |
| Quotes | 2000+ |
| Authors | 900+ |
Perfect for:
- Motivational apps
- Social media bots
- Daily inspiration
- Quote generators
25. Bored API
What it is: Activity suggestions when bored
Documentation: https://www.boredapi.com/
Filter Options:
- Activity type
- Participants
- Price range
- Accessibility
Example Usage:
// Random activity
fetch('https://www.boredapi.com/api/activity')
.then(res => res.json())
.then(data => console.log(data));
// By type
fetch('https://www.boredapi.com/api/activity?type=education')
.then(res => res.json())
.then(data => console.log(data));
// Free activities
fetch('https://www.boredapi.com/api/activity?price=0')
.then(res => res.json())
.then(data => console.log(data));
// For 2 people
fetch('https://www.boredapi.com/api/activity?participants=2')
.then(res => res.json())
.then(data => console.log(data));
// High accessibility
fetch('https://www.boredapi.com/api/activity?accessibility=0.1')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"activity": "Learn a new programming language",
"type": "education",
"participants": 1,
"price": 0,
"accessibility": 0.25,
"key": "3943509"
}
Activity Types: education, recreational, social, diy, charity, cooking, relaxation, music, busywork
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None |
| Activities | 200+ |
| Filters | ✅ Multiple |
Perfect for:
- Activity suggestion apps
- Boredom busters
- Productivity tools
26. Advice Slip API
What it is: Random pieces of advice
Documentation: https://api.adviceslip.com/
Example Usage:
// Random advice
fetch('https://api.adviceslip.com/advice')
.then(res => res.json())
.then(data => console.log(data));
// Specific advice by ID
fetch('https://api.adviceslip.com/advice/117')
.then(res => res.json())
.then(data => console.log(data));
// Search advice
fetch('https://api.adviceslip.com/advice/search/love')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"slip": {
"id": 42,
"advice": "Do something today that your future self will thank you for."
}
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ 2 seconds between requests |
| Authentication | ✅ None |
| Advice | 200+ |
| Search | ✅ Yes |
Perfect for:
- Motivational widgets
- Daily advice apps
- Random inspiration
Productivity & Utilities APIs
APIs for productivity, holidays, and utility functions.
27. Public Holidays API (Nager.Date)
What it is: Public holidays for 100+ countries
Documentation: https://date.nager.at/
Example Usage:
// Get holidays for 2026 in US
fetch('https://date.nager.at/api/v3/PublicHolidays/2026/US')
.then(res => res.json())
.then(data => console.log(data));
// Check if today is a holiday
fetch('https://date.nager.at/api/v3/IsTodayPublicHoliday/US')
.then(res => res.json())
.then(data => console.log(data));
// Next public holidays
fetch('https://date.nager.at/api/v3/NextPublicHolidays/US')
.then(res => res.json())
.then(data => console.log(data));
// Available countries
fetch('https://date.nager.at/api/v3/AvailableCountries')
.then(res => res.json())
.then(data => console.log(data));
// Long weekends
fetch('https://date.nager.at/api/v3/LongWeekend/2026/US')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
[
{
"date": "2026-01-01",
"localName": "New Year's Day",
"name": "New Year's Day",
"countryCode": "US",
"fixed": true,
"global": true,
"types": ["Public"]
},
{
"date": "2026-07-04",
"localName": "Independence Day",
"name": "Independence Day",
"countryCode": "US",
"fixed": true,
"global": true,
"types": ["Public"]
}
]
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None |
| Countries | 100+ |
| Years | Current + future |
Perfect for:
- Calendar apps
- Travel planners
- HR systems
- Event schedulers
28. WorldTimeAPI
What it is: Current time in any timezone
Documentation: http://worldtimeapi.org/
Example Usage:
// Current time (auto-detect from IP)
fetch('http://worldtimeapi.org/api/ip')
.then(res => res.json())
.then(data => console.log(data));
// Specific timezone
fetch('http://worldtimeapi.org/api/timezone/America/New_York')
.then(res => res.json())
.then(data => console.log(data));
// All timezones
fetch('http://worldtimeapi.org/api/timezone')
.then(res => res.json())
.then(data => console.log(data));
// By area
fetch('http://worldtimeapi.org/api/timezone/America')
.then(res => res.json())
.then(data => console.log(data));
// Specific IP
fetch('http://worldtimeapi.org/api/ip/8.8.8.8')
.then(res => res.json())
.then(data => console.log(data));
Response Example:
{
"abbreviation": "EST",
"datetime": "2026-01-15T10:30:45.123456-05:00",
"day_of_week": 4,
"day_of_year": 15,
"dst": false,
"dst_from": null,
"dst_offset": 0,
"dst_until": null,
"raw_offset": -18000,
"timezone": "America/New_York",
"unixtime": 1705326645,
"utc_datetime": "2026-01-15T15:30:45.123456+00:00",
"utc_offset": "-05:00",
"week_number": 3
}
| Feature | Details |
|---|---|
| Rate Limit | ✅ None |
| Authentication | ✅ None |
| Timezones | All IANA timezones |
| Accuracy | ✅ High |
Perfect for:
- World clocks
- Timezone converters
- Scheduling apps
- Meeting planners
29. QR Code Generator API
What it is: Generate QR codes
Free Services:
GoQR.me
// Generate QR code (as image)
const data = encodeURIComponent('https://example.com');
const qrUrl = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${data}`;
// Use in HTML
<img src={qrUrl} alt="QR Code" />
// Different sizes
const qrUrl = `https://api.qrserver.com/v1/create-qr-code/?size=500x500&data=${data}`;
// With custom color (hex without #)
const qrUrl = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${data}&color=FF0000`;
| Feature | Details |
|---|---|
| Rate Limit | ✅ None specified |
| Authentication | ✅ None |
| Formats | PNG, SVG |
| Customization | Size, color |
Perfect for:
- Event tickets
- Contact sharing
- URL shortening
- Payment codes
30. UUID Generator API
What it is: Generate unique identifiers
Free Service: UUID Generator
// Generate UUID v4
fetch('https://www.uuidgenerator.net/api/version4')
.then(res => res.text())
.then(uuid => console.log(uuid));
// Generate multiple UUIDs
fetch('https://www.uuidgenerator.net/api/version4/10')
.then(res => res.text())
.then(uuids => console.log(uuids.split('\n')));
// Or use browser's built-in crypto
const uuid = crypto.randomUUID();
console.log(uuid);
| Feature | Details |
|---|---|
| Rate Limit | ✅ Reasonable use |
| Authentication | ✅ None |
| Version | UUID v4 |
| Format | Standard UUID |
Perfect for:
- Unique identifiers
- Session management
- Database keys
- Testing
Quick Reference Table
| # | API | Category | Auth | Rate Limit | Best For |
|---|---|---|---|---|---|
| 1 | JSONPlaceholder | Learning | ❌ | None | Learning CRUD |
| 2 | ReqRes | Learning | ❌ | None | Testing auth |
| 3 | PokéAPI | Learning | ❌ | Fair use | Complex data |
| 4 | Random User | Learning | ❌ | None | Test data |
| 5 | Dog API | Learning | ❌ | None | Images |
| 6 | OpenWeather | Weather | ✅ | 1K/day | Weather apps |
| 7 | IP Geolocation | Location | ❌ | 1K/day | Location |
| 8 | Sunrise-Sunset | Weather | ❌ | None | Sun times |
| 9 | CoinGecko | Finance | ❌ | 10-50/min | Crypto |
| 10 | Frankfurter | Finance | ❌ | None | Currency |
| 11 | Exchange Rate | Finance | ❌ | 1.5K/month | Currency |
| 12 | REST Countries | Data | ❌ | None | Countries |
| 13 | Wikipedia | Data | ❌ | 200/sec | Knowledge |
| 14 | Dictionary | Data | ❌ | None | Definitions |
| 15 | Numbers API | Data | ❌ | None | Facts |
| 16 | Unsplash | Media | ✅ | 50/hour | Photos |
| 17 | NASA APOD | Media | ✅ | 1K/hour | Space |
| 18 | The Cat API | Media | ❌ | 10/sec | Cat images |
| 19 | GitHub | Dev Tools | Optional | 60-5K/hour | Repos |
| 20 | Public APIs | Dev Tools | ❌ | None | Discovery |
| 21 | JSONBin | Dev Tools | ✅ | Varies | Storage |
| 22 | Placeholder | Dev Tools | ❌ | None | Images |
| 23 | JokeAPI | Fun | ❌ | 120/min | Jokes |
| 24 | Quotable | Fun | ❌ | 180/min | Quotes |
| 25 | Bored API | Fun | ❌ | None | Activities |
| 26 | Advice Slip | Fun | ❌ | 2s delay | Advice |
| 27 | Public Holidays | Productivity | ❌ | None | Holidays |
| 28 | WorldTimeAPI | Productivity | ❌ | None | Time |
| 29 | QR Generator | Productivity | ❌ | None | QR codes |
| 30 | UUID Generator | Productivity | ❌ | None | UUIDs |
How to Use These APIs Effectively
1. Always Read the Documentation
Every API has unique:
- Endpoints
- Parameters
- Response formats
- Rate limits
- Terms of service
Spend 10 minutes reading docs before coding.
2. Respect Rate Limits
// Simple rate limiter
class RateLimiter {
constructor(requestsPerMinute) {
this.requests = [];
this.limit = requestsPerMinute;
}
async throttle() {
const now = Date.now();
this.requests = this.requests.filter(time => now - time < 60000);
if (this.requests.length >= this.limit) {
const waitTime = 60000 - (now - this.requests[0]);
await new Promise(resolve => setTimeout(resolve, waitTime));
}
this.requests.push(now);
}
async fetch(url, options) {
await this.throttle();
return fetch(url, options);
}
}
// Usage
const limiter = new RateLimiter(50);
limiter.fetch('https://api.example.com/data')
.then(res => res.json())
.then(data => console.log(data));
3. Cache Responses
// Simple cache with expiration
class APICache {
constructor(ttl = 300000) { // 5 minutes
this.cache = new Map();
this.ttl = ttl;
}
async fetch(url, options = {}) {
const key = url + JSON.stringify(options);
const cached = this.cache.get(key);
if (cached && Date.now() - cached.timestamp < this.ttl) {
console.log('Returning cached data');
return cached.data;
}
const response = await fetch(url, options);
const data = await response.json();
this.cache.set(key, {
data,
timestamp: Date.now()
});
return data;
}
}
// Usage
const cache = new APICache(600000); // 10 minutes
cache.fetch('https://api.example.com/data')
.then(data => console.log(data));
4. Handle Errors Gracefully
async function fetchWithErrorHandling(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
return await response.json();
} catch (error) {
console.error('API Error:', error);
// Show user-friendly message
return null;
}
}
5. Never Expose API Keys in Frontend
// ❌ BAD
const API_KEY = 'secret123';
fetch(`https://api.example.com/data?key=${API_KEY}`);
// ✅ GOOD - Use backend proxy
// Frontend
fetch('/api/weather?city=London')
.then(res => res.json());
// Backend (Node.js)
app.get('/api/weather', async (req, res) => {
const API_KEY = process.env.WEATHER_API_KEY;
const response = await fetch(
`https://api.openweathermap.org/data/2.5/weather?q=${req.query.city}&appid=${API_KEY}`
);
const data = await response.json();
res.json(data);
});
Project Ideas
Beginner Projects
- Weather Dashboard - OpenWeather + IP Geolocation
- Quote Generator - Quotable + Unsplash
- Country Explorer - REST Countries + Wikipedia
- Random Activity Finder - Bored API + JokeAPI
Intermediate Projects
- Crypto Portfolio Tracker - CoinGecko + Exchange Rates
- GitHub Profile Viewer - GitHub API
- Holiday Calendar - Public Holidays + WorldTimeAPI
- Dictionary App - Dictionary API + Wikipedia
Advanced Projects
- Developer Dashboard - GitHub + Stack Overflow + Dev.to
- Travel Planner - Countries + Weather + Holidays
- Learning Platform - Wikipedia + Dictionary + YouTube
- News Aggregator - Multiple news sources
Testing Your APIs
Browser Console
// Quick test
fetch('https://api.example.com/data')
.then(res => res.json())
.then(data => console.table(data));
cURL Command Line
# Simple GET
curl https://api.example.com/data
# With headers
curl -H "Authorization: Bearer TOKEN" \
https://api.example.com/data
# POST request
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name":"John"}'
# Save response
curl https://api.example.com/data -o response.json
Postman/Thunder Client
- Visual interface
- Save requests
- Collections
- Environment variables
- Testing scripts
Best Practices Summary
✅ Read documentation first
✅ Respect rate limits
✅ Cache when possible
✅ Handle errors gracefully
✅ Secure API keys
✅ Use environment variables
✅ Test before deploying
✅ Monitor usage
✅ Have fallback options
✅ Keep dependencies updated
Resources for Finding More Free APIs
-
GitHub Public APIs
- https://github.com/public-apis/public-apis
- Most comprehensive list
- Community-maintained
- Regularly updated
-
RapidAPI Hub
- https://rapidapi.com/hub
- Filter by free tier
- Test in browser
- API marketplace
-
API List
- https://apilist.fun
- Curated collection
- Clean interface
- Categories
-
DevResources
- https://devresourc.es
- Developer tools
- Free resources
- API section
My Opinion
Free APIs are game-changers for developers in 2026.
They let you:
✅ Build production apps without expensive infrastructure
✅ Learn real-world skills by working with actual data
✅ Create impressive portfolios that showcase your abilities
✅ Prototype ideas quickly without upfront costs
✅ Focus on innovation instead of reinventing the wheel
Start today:
- Pick 2-3 APIs that interest you
- Read their documentation
- Make your first API call
- Build something small
- Share your project
Remember: Every expert developer started with their first API call. The key is to start building.
💬 Which API will you try first? Share your project idea in the comments!
Top comments (0)