← all 90 tracked mock & placeholder APIs
UP right now — answered HTTP 200 in 12 ms.
Last checked 2026-09-26T00:30:43Z · checked every hour (a timeout/TLS/DNS blip on an otherwise-up service is confirmed with a same-run retry before it counts) · OK-rate 24h: 100% · 7d: 99.4% · raw JSON · Atom feed of its down/recovered events
Context: The classic keyless IP-geolocation API — but the free tier is HTTP-only: the same URL over https:// answers 403 (SSL is the paid tier), so every https-served page is locked out by mixed-content blocking before CORS even matters. Lookup failures (invalid query, private ranges) arrive as HTTP 200 with status:"fail". 45 requests/min per IP with a 1-hour ban for repeat overruns; free tier is non-commercial only. This probe uses the plain-HTTP endpoint — the only one the free tier has.
What we check: GET http://ip-api.com/json/8.8.8.8?fields=status,query — a plain, keyless request from Cloudflare's network with an honest bot UA, exactly what a tutorial curl or an <img> tag experiences. OK = HTTP 2xx/3xx within 8s. No retries, no cookies, no API keys.
If ip-api.com is failing (or you're tired of finding out mid-demo), Mockbird gives you your own copy of the reference data — 250 countries (names, ISO codes, capitals, regions, currencies, flags) or 170+ currencies with dated sample rates — served as a queryable REST API in one pipe, no key, no monthly cap — free, no signup:
curl -s https://mockbird.mockbird.workers.dev/data/countries.db.json \
| curl -s -X POST 'https://mockbird.mockbird.workers.dev/api/projects/import?name=countries' \
--data-binary @-
# then e.g. ?region=Europe or ?code=FR on /m/YOUR_ID/countries
# currencies + sample rates: /data/currencies.db.json (see /guides/mock-exchange-rates-api)
Read the honest ip-api.com migration guide → (it also says when ip-api.com is the better tool) or create your own mock API in one click.
Does your project's test suite or tutorial depend on ip-api.com? Embed a live status badge — it re-renders from our latest check (cached 5 min):
<!-- Markdown -->
[](https://mockbird.mockbird.workers.dev/status/ip-api)
<!-- HTML -->
<a href="https://mockbird.mockbird.workers.dev/status/ip-api"><img src="https://mockbird.mockbird.workers.dev/status/ip-api/badge.svg" alt="ip-api.com status"></a>
Green = answering plain GETs, red = network-dead, amber = answering but with an error status. Every tracked service has one; there's also a summary badge for all 90.
Subscribe any webhook URL — no account needed. One message when ip-api.com goes down, one when it recovers (debounced: two consecutive hourly checks must agree, so a single blip never fires). Slack and Discord incoming-webhook URLs get a formatted message; anything else gets an HMAC-signed JSON POST.
Or from a terminal / CI script:
curl -X POST https://mockbird.mockbird.workers.dev/api/status/watch \
-H "content-type: application/json" \
-d '{"service": "ip-api", "url": "https://hooks.slack.com/services/T000/B000/XXXX"}'
Use "service": "*" to watch all 90 tracked services at once. The response includes an unsubscribe curl; 5 consecutive failed deliveries auto-unsubscribe. No webhook? Omit "url" to get a pollable subscription instead — GET the returned poll URL anytime for the transitions since your last poll. Full API details →
The same checker can watch your own URL: POST /api/status/monitor {"url": "https://api.example.com/health", "notify": "<webhook>"} — every 30 minutes, alert on down + recovery, free, no account. Monitor API →
| Checked at (UTC) | Result | Time |
|---|---|---|
| 2026-09-26T00:30:43Z | OK 200 | 12 ms |
| 2026-09-25T23:30:44Z | OK 200 | 14 ms |
| 2026-09-25T22:30:45Z | OK 200 | 13 ms |
| 2026-09-25T21:30:49Z | OK 200 | 13 ms |
| 2026-09-25T20:30:50Z | OK 200 | 49 ms |
| 2026-09-25T19:30:59Z | OK 200 | 31 ms |
| 2026-09-25T18:30:53Z | OK 200 | 24 ms |
| 2026-09-25T17:30:56Z | OK 200 | 21 ms |
| 2026-09-25T16:30:56Z | OK 200 | 15 ms |
| 2026-09-25T15:30:54Z | OK 200 | 27 ms |
| 2026-09-25T14:31:04Z | OK 200 | 16 ms |
| 2026-09-25T13:31:10Z | OK 200 | 24 ms |
| 2026-09-25T12:31:05Z | OK 200 | 20 ms |
| 2026-09-25T11:31:02Z | OK 200 | 18 ms |
| 2026-09-25T10:30:54Z | OK 200 | 16 ms |
| 2026-09-25T09:30:53Z | OK 200 | 17 ms |
| 2026-09-25T08:31:02Z | OK 200 | 16 ms |
| 2026-09-25T07:30:56Z | OK 200 | 14 ms |
| 2026-09-25T06:30:51Z | OK 200 | 18 ms |
| 2026-09-25T05:30:49Z | OK 200 | 12 ms |
| 2026-09-25T04:30:47Z | OK 200 | 16 ms |
| 2026-09-25T03:30:43Z | OK 200 | 13 ms |
| 2026-09-25T02:30:42Z | OK 200 | 13 ms |
| 2026-09-25T01:30:43Z | OK 200 | 13 ms |
| 2026-09-25T00:30:45Z | OK 200 | 13 ms |
| 2026-09-24T23:30:43Z | OK 200 | 13 ms |
Bias disclosure: this page is run by Mockbird, a free hosted mock-API service. The status data is real and logged verbatim (pull it yourself), and the linked guides say when the incumbent wins.