← All guides

Free fake REST APIs for testing & prototyping — and which are actually up right now

You need placeholder data behind a real URL: a tutorial, a frontend prototype, a Postman demo, a coding-class exercise. There are half a dozen classic free fake APIs for this — and, because they're free side projects, they break more often than their tutorials admit. One of the biggest (reqres.in) started rejecting every keyless request in 2026; mocky.io is gone entirely.

This page lists the ones worth knowing, what each genuinely does well, where each one stops — and a live up/down badge for each, because we check every service below with a plain keyless GET every 30 minutes from Cloudflare's network (full status page, methodology and bias disclosed there).

Bias disclosure: this page is published by Mockbird, a free hosted mock-API service that appears at the end as the "make your own" option. Every fact about the other services is verifiable — most have a dedicated guide here with the exact curl commands we ran, and the badges are live data you can fetch yourself.

The quick answer

You want…Use
Blog-ish posts/comments/users, read-only, zero setupJSONPlaceholder
Richer datasets (products w/ images, carts, quotes, recipes)DummyJSON
E-commerce demo data with real product photosFakeStoreAPI
Realistic random people (localized names, photo headshots)randomuser.me
Request echo / status-code / delay testing (not fake data)httpbin or Postman Echo
Your own schema, and writes that actually persista hosted mock backend

JSONPlaceholder checking…

jsonplaceholder.typicode.com — the original, running since 2014, and still the fastest way to get JSON into a fetch() example. Six resources (posts, comments, albums, photos, todos, users), sane relations, CORS on.

The walls: the dataset is fixed (the same 100 posts for everyone), the six resources are the only ones you get, and writes are fakedPOST /posts answers 201 {"id":101}, but GET /posts/101 is a 404. Fine for read-only demos; a dead end the moment your tutorial says "now save it". Full breakdown →

DummyJSON checking…

dummyjson.com — the modern favourite: much richer datasets (194 products with images, users, carts, posts, quotes, recipes…), plus built-in ?delay=, an /http/ status-code simulator, and a login endpoint that returns a real JWT. Genuinely the best pick for read-heavy demos.

The walls: same for everyone, fixed schema, and writes are response-only — POST /products/add answers with an id, but the record is never retrievable afterwards. Full breakdown →

FakeStoreAPI checking…

fakestoreapi.com — 20 products with real product photographs, carts and users; the default dataset of a thousand React shopping-cart tutorials. The photos are the killer feature for read-only grids.

The walls (all live-verified for our guide): POST /products returns an id whose GET is an HTTP 200 with an empty body (res.json() throws — worse than a 404), ?title= filtering and pagination are silently ignored, and login only works for 10 hardcoded users.

reqres.in checking…

For a decade the go-to for login-flow tutorials (eve.holt@reqres.in is muscle memory for a generation of devs). As of 2026 it requires an x-api-key header on every request — the canonical keyless curl from all those tutorials now returns 401 {"error":"missing_api_key"}. If a course sent you here and you're getting 401s, that's why. What to use instead →

randomuser.me checking…

Not a REST backend but a people generator — and a lovely one: localized names in dozens of nationalities, photo headshots, ?seed= determinism. Use it when you need "give me 10 realistic strangers".

The walls: read-only (writes 404), no single-user endpoint, no filtering (?city= is silently ignored), fixed schema. Full breakdown →

httpbin checking… & Postman Echo checking…

Different job: these don't serve fake data, they echo your request back (/get, /status/503, /delay/3). Essential for testing HTTP clients. httpbin.org has had repeated multi-hour 503 outages in 2026 (it's 503ing at the time of writing — check the badge); if it's down, we host a compatible drop-in surface at https://HOST/m/httpbin/get.

The graveyard ⚰️

Reminders that free tutorial dependencies die: mocky.io (every mock URL in a decade of tutorials now serves a dead TLS certificate), myjson.com (hangs), uinames.com (expired cert), and on the image side via.placeholder.com, placekitten and placeimg are all gone or erroring — see the badges on the status page. When one of these dies, every README that embedded it breaks silently.

When you need writes to persist: make your own fake API

Every service above shares the same three walls: fixed dataset, fixed schema, writes that don't stick. All three exist for a good reason — the data is shared by everyone — and they disappear the moment the fake API is yours. Try the shared Mockbird demo right now (writes persist for anyone until the daily reseed):

curl 'https://HOST/m/demo/products?limit=2&select=name,price'

curl -X POST https://HOST/m/demo/products \
  -H 'content-type: application/json' \
  -d '{"name":"My Widget","price":9.99}'
# → {"name":"My Widget","price":9.99,"id":31}

curl https://HOST/m/demo/products/31        # it's really there

Or get your own private one — one curl, no signup, your schema, 10k requests/day:

curl -X POST https://HOST/api/projects \
  -H 'content-type: application/json' -d '{"preset":"ecommerce"}'
# → live seeded products/orders/customers/reviews API + admin key

You get json-server-style filters and pagination, relations, GraphQL, a login endpoint that issues real JWTs, request inspection, OpenAPI/Postman/TypeScript exports, and CSV in/out — the docs cover everything, or use the dashboard if you'd rather click than curl.

How the badges work

The badges above are fetched live from /status.json. Every 30 minutes we issue a plain keyless GET to each service's canonical URL from Cloudflare's network and record the verbatim result; "up" means an HTTP 2xx/3xx within 8 seconds. Per-service history lives at /status. We run a competing service and say so — which is exactly why the checks are keyless, boring, and inspectable.