Documentation
This guide covers everything you need to know about using free public APIs listed in our directory. Whether you are building a side project, a prototype, or learning to code, these APIs provide valuable data without cost.
Introduction
FWVAPI is a curated directory of free and open public APIs. Our goal is to help developers discover useful APIs quickly without sifting through outdated lists or broken endpoints.
Each API entry in our catalog includes:
- Authentication type — whether the API requires an API key, OAuth, or no authentication at all
- Protocol — HTTP or HTTPS support
- Response format — JSON, XML, Protobuf, or others
- Rate limits — how many requests you can make per time period
- Category tags — for easy filtering and discovery
Quick Start
The fastest way to get started is to pick an API from our catalog that does not require authentication. Here is an example using the REST Countries API:
curl -s "https://restcountries.com/v3.1/name/netherlands" | python3 -m json.tool
This returns detailed information about the Netherlands, including population, area, languages, and currencies.
Authentication
APIs in our directory use one of three authentication methods:
| Type | Description | Header Example |
|---|---|---|
| Free | No authentication required. Make requests immediately. | N/A |
| API Key | Register for a free key. Pass it as a query parameter or header. | X-API-Key: your_key |
| OAuth | Standard OAuth 2.0 flow. Requires app registration. | Authorization: Bearer token |
Making Requests
Most APIs in our catalog follow RESTful conventions. Here are the standard HTTP methods you will encounter:
| Method | Purpose | Example |
|---|---|---|
GET |
Retrieve data | GET /api/v1/users |
POST |
Create a resource | POST /api/v1/users |
PUT |
Update a resource | PUT /api/v1/users/42 |
DELETE |
Remove a resource | DELETE /api/v1/users/42 |
Common Query Parameters
Many APIs support these standard query parameters:
pageandper_pagefor paginationsortandorderfor sorting resultsqorsearchfor text searchfieldsfor selecting specific response fieldsformatfor specifying response format (json, xml)
Rate Limiting
Most APIs enforce rate limits to prevent abuse. Common response headers include:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1709856000
Retry-After: 30
Best practices for handling rate limits:
- Cache responses when possible to reduce API calls
- Implement exponential backoff on
429responses - Monitor
X-RateLimit-Remainingheaders proactively - Use bulk endpoints when available instead of individual requests
Error Handling
Standard HTTP status codes are used across most APIs:
| Code | Meaning | Action |
|---|---|---|
200 | Success | Process the response |
400 | Bad Request | Check your query parameters |
401 | Unauthorized | Verify your API key or token |
403 | Forbidden | Check permissions or plan limits |
404 | Not Found | Verify the endpoint URL |
429 | Too Many Requests | Wait and retry with backoff |
500 | Server Error | Retry later; not your fault |
Pagination
APIs with large datasets typically support pagination. Two common patterns:
Offset-based
GET /api/items?page=2&per_page=25
# Response includes:
# "total": 342, "page": 2, "per_page": 25
Cursor-based
GET /api/items?cursor=eyJpZCI6MTAwfQ&limit=25
# Response includes:
# "next_cursor": "eyJpZCI6MTI1fQ"
cURL Examples
Simple GET request
# Get current weather for Amsterdam
curl -s "https://api.open-meteo.com/v1/forecast?latitude=52.37&longitude=4.89¤t_weather=true"
# Get a random user
curl -s "https://randomuser.me/api/" | python3 -m json.tool
# Get country information
curl -s "https://restcountries.com/v3.1/alpha/NL"
With API key
# OpenWeatherMap (replace YOUR_KEY)
curl -s "https://api.openweathermap.org/data/2.5/weather?q=Amsterdam&appid=YOUR_KEY&units=metric"
Python Examples
import requests
# No authentication required
response = requests.get("https://api.open-meteo.com/v1/forecast", params={
"latitude": 52.37,
"longitude": 4.89,
"current_weather": True
})
data = response.json()
print(f"Temperature: {data['current_weather']['temperature']}C")
# With API key
API_KEY = "your_api_key_here"
response = requests.get(
"https://api.openweathermap.org/data/2.5/weather",
params={"q": "Amsterdam", "appid": API_KEY, "units": "metric"}
)
weather = response.json()
print(f"Weather: {weather['weather'][0]['description']}")
JavaScript Examples
// Using fetch (browser or Node.js 18+)
const response = await fetch(
"https://api.open-meteo.com/v1/forecast?latitude=52.37&longitude=4.89¤t_weather=true"
);
const data = await response.json();
console.log(`Temperature: ${data.current_weather.temperature}C`);
// With error handling
async function fetchAPI(url) {
try {
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return await res.json();
} catch (err) {
console.error("API Error:", err.message);
return null;
}
}
const countries = await fetchAPI("https://restcountries.com/v3.1/all");
console.log(`Found ${countries.length} countries`);