โ† All guides

๐Ÿ“ก Is httpstat.us down right now? We check it (and 36 other classic public mock/placeholder APIs) with a plain GET every 30 minutes โ€” see the live status page.

httpstat.us is unreachable โ€” here's a free replacement for status-code testing

httpstat.us has one perfect trick: put a status code in the URL, get that status back. httpstat.us/503 โ†’ 503. It's wired into a decade of retry-logic tests, monitoring checks, tutorials and CI suites.

And it keeps going down. As of late August 2026, connections to httpstat.us fail outright โ€” curl gets an empty reply and browsers show ERR_EMPTY_RESPONSE, on both HTTP and HTTPS:

curl -i https://httpstat.us/200
# โ†’ curl: (52) Empty reply from server

This isn't the first time: its GitHub issue tracker has "is it down?" threads going back to 2020, an issue filed against webmock in 2023 flatly called the site defunct, and Fleet's Go tests broke in 2025 for the same reason. A status-testing service your tests can't reach fails CI in the most confusing way possible โ€” with a network error instead of the status you asked for.

Here's the same job on Mockbird โ€” no signup, CORS on, free โ€” plus the retry-testing tools httpstat.us never had.

The drop-in replacement

Mockbird's httpbin-compatible surface has a status endpoint that works right now, no setup:

curl -i https://mockbird.mockbird.workers.dev/m/httpbin/status/503
# โ†’ HTTP/2 503

curl -i https://mockbird.mockbird.workers.dev/m/httpbin/status/418
# โ†’ HTTP/2 418

Swap httpstat.us/<code> for https://mockbird.mockbird.workers.dev/m/httpbin/status/<code> and your test points at something that answers. A comma-separated list picks one at random per request โ€” handy for flaky-upstream simulations:

curl -s -o /dev/null -w "%{http_code}\n" \
  "https://mockbird.mockbird.workers.dev/m/httpbin/status/200,500"
# โ†’ 200 or 500, chosen per request

httpstat.us feature โ†’ Mockbird translation

On httpstat.usOn Mockbird
/503 โ€” status by URL/m/httpbin/status/503
?sleep=5000 โ€” delay in ms?mock_delay=5000 on any mock URL (max 5000ms), or /m/httpbin/delay/5 in seconds (max 10)
Accept: application/json for a JSON bodyresponses are JSON by default
teapots & friends (418, 429, 522โ€ฆ)any code 200โ€“599 (Workers can't emit 1xx โ€” httpstat.us could)
error status on your data's endpoint?mock_status=503 on any resource URL โ€” the error arrives on the same endpoint your app actually calls

That last row matters: with httpstat.us, testing "what does my app do when the products API 500s" meant pointing your code at a different host. On Mockbird the status override rides on the real mock endpoint:

curl -i "https://mockbird.mockbird.workers.dev/m/demo/products?mock_status=503"
# โ†’ HTTP/2 503
# โ†’ {"error": "simulated 503 error (mock_status)"}

curl -s -o /dev/null -w "%{time_total}\n" \
  "https://mockbird.mockbird.workers.dev/m/demo/products?mock_delay=2000"
# โ†’ ~2.0s, then the real product list

What httpstat.us never did: deterministic retry sequences

The usual reason a test hits /503 is retry logic. But a fixed 503 can only prove your code gives up correctly โ€” proving it recovers needs an endpoint that fails, then succeeds. That's ?mock_seq:

# 1st request โ†’ 503, 2nd โ†’ 503, 3rd and later โ†’ the real 200 response
curl -s -o /dev/null -w "%{http_code}\n" \
  "https://mockbird.mockbird.workers.dev/m/demo/products?mock_seq=503,503,200"
# run it three times: 503, 503, 200 โ€” deterministic, per client

Every response carries an x-mockbird-seq: pos/len header so you can see where the sequence stands; ?mock_seq_reset=1 restarts it, and ?mock_seq_key=w1 isolates parallel test workers. There's also probabilistic chaos (?mock_chaos=0.5 fails half the requests with random 5xx/429) and a real rate-limit simulation (?mock_ratelimit=5 โ†’ five requests per minute, then 429 with Retry-After and x-ratelimit-* headers) โ€” see testing rate-limit handling and testing loading & error states.

Honest comparison

httpstat.usMockbird
Reachable (checked every 30 min)currently failinglive, free while in beta
Status by URLyes (when up)yes
1xx codesyes (when up)no (200โ€“599)
Max delay30s5s (mock_delay) / 10s (/delay/:n)
Random status from a poolโ€”/status/200,500
Deterministic fail-then-recover sequencesno?mock_seq=503,503,200
Rate-limit simulation w/ real headersno?mock_ratelimit=5
Errors on your own data endpointsno?mock_status on any mock URL
Free limitsfair-use50k req/day on the shared surface, 10k/day per project

This page is written by the Mockbird maker โ€” bias disclosed. httpstat.us's outage verified live on Aug 27, 2026 (empty reply on HTTP and HTTPS, curl and real browser); its feature set above is from its long-standing public docs and open-source repo, which also means you can self-host it (aaronpowell/httpstatus on GitHub) if you prefer that route. When it's up, its URL is shorter than ours and it supports 1xx codes we can't emit. Mockbird's /m/httpbin surface also covers the rest of the httpbin catalogue โ€” see the httpbin guide.

Full API reference in the docs. More guides: httpbin alternative ยท mock rate limits ยท testing loading & error states. Create your API โ†’

โšก Skip the terminal: this link creates a live, seeded e-commerce backend (products, orders, customers, reviews) in the dashboard โ€” real URL, data browser already open, no signup. Then break it on purpose with ?mock_status, ?mock_seq and friends.