For over a decade, placekitten.com/300/200 was the charming way to fill a layout: a kitten photo at any size you asked for. It's baked into CSS course exercises, README screenshots, Stack Overflow answers, and thousands of starter templates. And it's gone:
curl -si https://placekitten.com/300/200 | head -1
# HTTP/2 521 โ Cloudflare: "origin web server is down"
curl -si https://placekitten.com/g/300/200 | head -1
# HTTP/2 521 โ grayscale endpoint, same story
Verified by direct request on September 6, 2026 โ and Mockbird checks it every hour on the placekitten live-status page, so if it ever comes back, that page will say so before this one does. Every <img src="https://placekitten.com/โฆ"> in your codebase currently renders a broken-image icon.
Being honest first: Mockbird does not serve kittens. If the whole point was the cat, use one of these โ all verified alive September 6, 2026 (a plain GET answers 2xx/3xx with a real JPEG):
| Service | URL shape | Notes |
|---|---|---|
placecats.com | placecats.com/300/200 | The spiritual successor โ same path shape as placekitten, including /g/300/200 for grayscale. Drop-in: replace the hostname, done. |
loremflickr.com | loremflickr.com/300/200/kitten | Real Flickr photos by tag โ kitten, cat, or anything else. Redirects (302) to a cached JPEG. |
placebear.com | placebear.com/300/200 | Bears. Same path shape. Still up. |
place.dog | place.dog/300/200 | Dogs. Same path shape. Still up. |
<!-- the one-word fix if you just want your kittens back -->
<img src="https://placecats.com/300/200">
Most placekitten URLs weren't really about cats โ they were about filling an image slot while building a UI. For that job, a random photo host is the wrong tool twice over: it's a third-party dependency that can die (exhibit A: this page), and the bytes change between requests, which makes screenshot tests flake.
Mockbird serves deterministic SVG placeholders with the same slash-path shape placekitten used, so the swap is mechanical:
<img src="https://mockbird.mockbird.workers.dev/m/demo/img/300/200">
<img src="https://mockbird.mockbird.workers.dev/m/demo/img/300/200?text=meow&seed=kitten">
<img src="https://mockbird.mockbird.workers.dev/m/demo/img/128?round=1&text=๐ฑ">
Rendered live from the API as you read this:
No signup, no key, CORS *, cached a day, any size 1โ2000 px. Translation table:
| placekitten URL | Mockbird equivalent |
|---|---|
placekitten.com/300/200 | โฆ/m/demo/img/300/200 โ identical path shape; /img/300x200 and square /img/300 work too |
placekitten.com/g/300/200 (grayscale) | โฆ/m/demo/img/300/200?bg=9ca3af&fg=1f2937 โ pick your own grays |
| cache-busting "different kitten each time" | ?seed=anything โ each seed picks a different (stable) palette color; same seed = same bytes forever |
| (no equivalent) | ?text=, ?bg=/?fg= hex colors, ?round=1 circle avatars |
/m/demo/Mockbird is a hosted mock REST API โ you describe resources (or import an OpenAPI spec / db.json / CSV) and get a live fake backend at a URL. The placeholder endpoint exists so that seeded fake data ships with images that render: every seeded image and avatar field already points at the project's own /img:
curl -s -X POST https://mockbird.mockbird.workers.dev/api/projects \
-H 'content-type: application/json' -d '{"preset":"ecommerce"}'
# โ 30 fake products whose image URLs work, users with initial-avatars,
# full CRUD, filters, OpenAPI export โ one origin, one curl, no signup
Prefer clicking: create the same project in one click. So if you reached this page because a mock product grid full of placekitten URLs went blank โ the fix isn't just swapping the image host, it's letting the fake backend and its fake images live at the same base URL, where an image-host obituary can never take out your demo again.
| placecats / placebear / place.dog | LoremFlickr | Mockbird /img | |
|---|---|---|---|
| Actual animal photos | โ (the point) | โ any tag | โ (SVG rectangles/circles) |
| Deterministic bytes (same URL โ same image) | varies | โ random per cache | โ always |
| Custom text / colors / avatars | โ | โ | โ |
| Same origin as your mock API data | โ | โ | โ seeded data pre-wired |
| Formats | JPEG | JPEG | SVG + PNG (.png/.jpg suffix or ?format=png) |
Written by the Mockbird maker โ bias disclosed. If you want the cat, use placecats.com โ it exists precisely to be the placekitten drop-in and does that one job well. Use Mockbird's /img when the image is standing in for real product photos or avatars in a UI you're building against mock data โ deterministic bytes, no third-party host, and the rest of the fake backend lives at the same URL. Statuses above verified by direct request on September 6, 2026; placekitten itself is tracked hourly.
Is placekitten.com coming back? Unknown. Its DNS still resolves and Cloudflare still fronts it, but the origin has been answering 521 (origin down) on every path we check. The live status page re-checks every hour.
My tests assert on image bytes/snapshots โ what should I use? Exactly the case for deterministic placeholders: a Mockbird /img URL always returns identical bytes, so screenshot diffs can't flake because a different kitten loaded. See deterministic test data.
Do I need an account? No โ /m/demo/img/โฆ works bare (shared demo project, 50,000 req/day quota). One curl creates your own anonymous project with its own /img and a 10,000/day quota.
Full parameter reference in the docs. Related: free placeholder image API (all the dead classics) ยท picsum.photos alternative ยท lorempixel / placeimg alternative ยท source.unsplash.com alternative ยท avatar placeholder API ยท fake ecommerce API. Create your API โ