source.unsplash.com was the magic trick in a thousand tutorials: a keyless URL that returned a gorgeous random Unsplash photo at any size โ /random/300x200 for anything, /1600x900/?nature,water for a themed hero, /user/erondu/600x400 for a specific photographer. It's baked into React image-gallery tutorials, Tailwind starter templates, CodePen demos, and CSS course exercises everywhere. And it's gone:
curl -si https://source.unsplash.com/random/300x200 | head -1
# HTTP/2 503
curl -si "https://source.unsplash.com/1600x900/?nature" | head -1
# HTTP/2 503 โ keyword URLs, same story
curl -si "https://source.unsplash.com/featured/?water" | head -1
# HTTP/2 503 โ /featured, /user/โฆ, /collection/โฆ, /daily โ all of it
Verified by direct request on September 6, 2026 โ and Mockbird now re-checks it every hour on the Unsplash Source live-status page. This wasn't an outage: Unsplash announced Source's deprecation in its official API changelog back in late 2021 ("Unsplash Source is being deprecated"), let existing URLs limp along for a while, and eventually turned the endpoint off. Every <img src="https://source.unsplash.com/โฆ"> still in a codebase renders a broken-image icon today.
Two things, and they matter:
1. Direct CDN links. images.unsplash.com/photo-โฆ URLs โ the kind you get from the "copy image address" on any Unsplash photo, or that the API hands out โ still load fine (verified September 2026). If your page hotlinks a specific photo by its CDN URL rather than through Source, you're not broken.
2. The official API โ Unsplash's recommended migration path. Register an app (free), and GET https://api.unsplash.com/photos/random?query=nature&client_id=KEY returns JSON with hotlinkable urls. The catches: it needs a key on every request, demo apps are limited to 50 requests/hour, and the 5,000/hour production tier requires a review-and-approval step. Fine for a real product; heavy for "I need an image in a layout."
Honest pointers first โ all verified alive September 6, 2026 (a plain GET answers a real JPEG):
| Service | URL shape | Notes |
|---|---|---|
picsum.photos | picsum.photos/300/200 | The closest spiritual successor โ and literally the descendant: Lorem Picsum began life as unsplash.it, which still answers and redirects into picsum's CDN. Seeded URLs (/seed/abc/300/200) pin a stable photo. No keyword search. |
loremflickr.com | loremflickr.com/300/200/nature | The only surviving keyless keyword photo URL โ the closest thing to Source's /?nature query syntax. Real Flickr photos by tag, 302 to a cached JPEG. |
<!-- the two-minute fixes -->
<img src="https://picsum.photos/1600/900"> <!-- was /random/1600x900 -->
<img src="https://loremflickr.com/1600/900/nature"> <!-- was /1600x900/?nature -->
Most Source URLs weren't about any particular photo โ they filled an image slot while building a UI. A random photo host is the wrong tool for that job twice over: it's a third-party dependency that can be deprecated out from under you (exhibit A: this page), and the bytes change between requests, which makes screenshot tests flake and layouts shift.
Mockbird serves deterministic SVG placeholders that accept Source's exact WxH size syntax, so the mechanical part of the swap is just the hostname and dropping /random:
<img src="https://mockbird.mockbird.workers.dev/m/demo/img/300x200">
<img src="https://mockbird.mockbird.workers.dev/m/demo/img/1600x900?text=hero&seed=nature">
<img src="https://mockbird.mockbird.workers.dev/m/demo/img/seed/team-page/300/200">
Rendered live from the API as you read this:
No signup, no key, no per-hour quota to think about (50,000 req/day on the shared demo), CORS *, cached a day, any size 1โ2000 px. Translation table for every Source URL shape:
| Unsplash Source URL | Where to point it now |
|---|---|
source.unsplash.com/random/300x200 | Real photo: picsum.photos/300/200. Deterministic placeholder: โฆ/m/demo/img/300x200 โ identical size syntax; /img/300/200 and square /img/300 work too |
source.unsplash.com/1600x900/?nature,water or /featured/?โฆ | Keyword photos: loremflickr.com/1600/900/nature,water โ the only keyless keyword option left. Or โฆ/img/1600x900?seed=nature&text=nature for a stable labeled stand-in |
source.unsplash.com/user/erondu/600x400, /collection/190727/โฆ, /WLUHO9A_xik/โฆ (photo id) | Official API only โ these addressed specific Unsplash content, and no keyless service can substitute it. If you have the photo open, grab its images.unsplash.com CDN URL directly: those still work |
source.unsplash.com/daily / /weekly | Official API, or fake the rotation deterministically: โฆ/img/seed/2026-09-06/1600/900 โ one stable image per date seed |
| cache-busting "new random photo each load" | ?seed=anything โ each seed picks a different (stable) palette; same seed = same bytes forever. Randomness that reproduces is a feature in tests |
/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. If you reached this page because a product grid of source.unsplash.com/random/โฆ thumbnails went blank, the durable fix isn't just a new image host โ it's letting the fake backend and its fake images live at the same base URL, where a third party's deprecation notice can never take out your demo again.
| Official Unsplash API | Lorem Picsum | LoremFlickr | Mockbird /img | |
|---|---|---|---|---|
| Real photos | โ the real thing | โ | โ by keyword | โ (SVG rectangles/circles) |
Keyless URL in an <img> tag | โ key + JSON round-trip | โ | โ | โ |
| Keyword / theme selection | โ | โ | โ | โ (?text= label instead) |
| Deterministic bytes (same URL โ same image) | โ | seed pins the photo | โ random per cache | โ always |
| Rate limits to think about | 50/hr demo, 5,000/hr approved | generous | generous | 50k/day demo, 10k/day per project |
| Same origin as your mock API data | โ | โ | โ | โ seeded data pre-wired |
Written by the Mockbird maker โ bias disclosed. If you want the photograph, use Lorem Picsum (any photo) or LoremFlickr (photo by keyword) โ both do their one job well, keyless, today. Use the official API when you need actual Unsplash content or search. 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; Unsplash Source itself is tracked hourly.
Is source.unsplash.com coming back? No reason to expect it: unlike an outage, this was a deliberate deprecation โ announced in Unsplash's official API changelog in late 2021, with the full API named as the replacement. The live status page re-checks every hour and will say so if anything changes.
My existing images.unsplash.com URLs โ are those dying too? They still answer (verified September 2026). The shutdown hit the dynamic source.unsplash.com picker, not the photo CDN. No promises forever โ hotlinks to any third party share that risk โ but nothing is broken today.
What about unsplash.it? Alive, amusingly โ it redirects into picsum.photos's CDN (Picsum's original name was "Unsplash It"). But it uses slash sizes (/300/200), not Source's 300x200, and has no keyword support: treat it as Picsum, not as Source.
My tests screenshot pages with these images โ what should I use? Exactly the case for deterministic placeholders: a Mockbird /img URL always returns identical bytes, so visual diffs can't flake because a different photo loaded. See deterministic test data.
Do I need an account? No โ /m/demo/img/โฆ works bare (shared demo project). One curl creates your own anonymous project with its own /img and a 10,000/day quota.
Full parameter reference in the docs. Related: picsum.photos alternative ยท free placeholder image API (all the dead classics) ยท placekitten alternative ยท avatar placeholder API ยท fake ecommerce API. Create your API โ