FreeAPI.watch

Public API

All the data on FreeAPI.watch is also available as a free JSON API for any developer to consume. No auth, no rate limits beyond the underlying Cloudflare edge cache. Build your own dashboards, alerting, or integrations on top of the same data that powers this site.

Endpoints

GET /snapshot.json

Full snapshot: all APIs with latest check, 30-day rollups, and recent events.

curl -s https://freeapi-builder.a10ayassine.workers.dev/snapshot.json | head -c 200
GET /api/v1/apis

Returns { apis: SnapshotApi[] } — the full list of tracked APIs with live status.

curl -s https://freeapi-builder.a10ayassine.workers.dev/api/v1/apis
GET /api/v1/apis/:slug

Returns a single SnapshotApi object, or 404 if the slug is unknown.

curl -s https://freeapi-builder.a10ayassine.workers.dev/api/v1/apis/open-meteo
GET /api/v1/categories

Returns { categories: string[] } — sorted list of unique category names.

curl -s https://freeapi-builder.a10ayassine.workers.dev/api/v1/categories
GET /api/v1/category/:cat

Returns { category, apis: SnapshotApi[] } — active APIs in the specified category.

curl -s https://freeapi-builder.a10ayassine.workers.dev/api/v1/category/weather
GET /api/v1/graveyard

Returns { apis: SnapshotApi[] } — APIs with status dead or paid.

curl -s https://freeapi-builder.a10ayassine.workers.dev/api/v1/graveyard

Response shape

Each API object follows the SnapshotApi shape:

interface SnapshotApi {
  id: number;
  slug: string;
  name: string;
  category: string;
  description: string;
  base_url: string;
  health_url: string;
  health_method: "GET" | "HEAD";
  expected_status: number;
  auth_type: "none" | "api_key" | "oauth";
  free_tier_text: string;
  free_tier_score: number;          // 1–10 editorial score
  docs_url: string | null;
  paid_alternatives_json: string;   // JSON-encoded array
  affiliate_links_json: string;     // JSON-encoded array
  added_at: string;                 // ISO 8601
  status: "active" | "dead" | "paid";
  latest_check: {
    api_id: number;
    ts: string;
    status_code: number | null;
    response_ms: number | null;
    alive: 0 | 1;
  } | null;
  rollups: Array<{
    api_id: number;
    day: string;        // YYYY-MM-DD
    uptime_pct: number; // 0–100
    avg_ms: number;
  }>;
}

Rate limits & caching

All responses are cached at the Cloudflare edge for 5 minutes (Cache-Control: public, max-age=300). There is no per-client rate limit — the edge cache absorbs the load. If you hammer the origin faster than 5 minutes you will still receive the cached response. The underlying data is refreshed once per hour by our health-check Worker.

License

All data is public. Attribution appreciated but not required. Link back to freeapi.watch if you find it useful.

Example: list weather APIs in JavaScript

const res = await fetch("https://freeapi-builder.a10ayassine.workers.dev/api/v1/category/weather");
const { apis } = await res.json();

for (const api of apis) {
  console.log(
    api.name,
    api.latest_check?.alive === 1 ? "✅ up" : "❌ down",
    api.free_tier_text
  );
}