DEV Community

Cover image for 30 Free APIs Every Developer Should Know in 2026
Akshay Kurve
Akshay Kurve

Posted on

30 Free APIs Every Developer Should Know in 2026

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

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'));
Enter fullscreen mode Exit fullscreen mode

Response Example:

{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident",
  "body": "quia et suscipit\nsuscipit recusandae..."
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"
  }
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

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));
Enter fullscreen mode Exit fullscreen mode

Response Example:

{
  "message": "https://images.dog.ceo/breeds/husky/n02110185_10047.jpg",
  "status": "success"
}
Enter fullscreen mode Exit fullscreen mode

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));
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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
  }
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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
  }
}
Enter fullscreen mode Exit fullscreen mode

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}`);
  });
Enter fullscreen mode Exit fullscreen mode

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
  }
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"]
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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": []
          }
        ]
      }
    ]
  }
]
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

Response Example:

[
  {
    "id": "abc123",
    "url": "https://cdn2.thecatapi.com/images/abc123.jpg",
    "width": 1600,
    "height": 1200
  }
]
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode
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" />
Enter fullscreen mode Exit fullscreen mode

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" />
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode

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));
Enter fullscreen mode Exit fullscreen mode

Response Example:

{
  "activity": "Learn a new programming language",
  "type": "education",
  "participants": 1,
  "price": 0,
  "accessibility": 0.25,
  "key": "3943509"
}
Enter fullscreen mode Exit fullscreen mode

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));
Enter fullscreen mode Exit fullscreen mode

Response Example:

{
  "slip": {
    "id": 42,
    "advice": "Do something today that your future self will thank you for."
  }
}
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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"]
  }
]
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode
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`;
Enter fullscreen mode Exit fullscreen mode
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);
Enter fullscreen mode Exit fullscreen mode
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));
Enter fullscreen mode Exit fullscreen mode

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));
Enter fullscreen mode Exit fullscreen mode

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;
  }
}
Enter fullscreen mode Exit fullscreen mode

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);
});
Enter fullscreen mode Exit fullscreen mode

Project Ideas

Beginner Projects

  1. Weather Dashboard - OpenWeather + IP Geolocation
  2. Quote Generator - Quotable + Unsplash
  3. Country Explorer - REST Countries + Wikipedia
  4. Random Activity Finder - Bored API + JokeAPI

Intermediate Projects

  1. Crypto Portfolio Tracker - CoinGecko + Exchange Rates
  2. GitHub Profile Viewer - GitHub API
  3. Holiday Calendar - Public Holidays + WorldTimeAPI
  4. Dictionary App - Dictionary API + Wikipedia

Advanced Projects

  1. Developer Dashboard - GitHub + Stack Overflow + Dev.to
  2. Travel Planner - Countries + Weather + Holidays
  3. Learning Platform - Wikipedia + Dictionary + YouTube
  4. 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));
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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

  1. GitHub Public APIs

  2. RapidAPI Hub

  3. API List

  4. DevResources


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:

  1. Pick 2-3 APIs that interest you
  2. Read their documentation
  3. Make your first API call
  4. Build something small
  5. 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)