JSONPlaceholder is the free fake REST API almost every tutorial reaches for, and deservedly: six resources, no signup, no configuration, and a URL short enough to type from memory. It is close to perfect for the thing it was built for — giving a front-end something to render while the real API does not exist yet.
| JSONPlaceholder | Fun API Playground | |
|---|---|---|
| Writes persist | No — the response looks right, the data does not change | Yes, for the life of your sandbox |
| Resources | 6 fixed collections | 39 APIs, 338 endpoints |
| Auth | None | Bearer roles, signed JWTs, full OAuth 2.0 flows |
| Error codes on demand | 404 only, from unknown ids | Any code from 200 to 599 on request, and 28 from endpoints whose behaviour causes them |
| Concurrency | Not modelled | ETag / If-Match with a real 412 |
| Spec export | None | OpenAPI 3.1 and Postman, per API and merged |
| Works offline | No | Yes — the engine runs in the browser |
| Recognisability | Universal; in every tutorial | New, and has to be explained |
It accepts POST, PUT, PATCH and DELETE and pretends to honour them. The response looks right, complete with a new id, and nothing has changed: fetch the resource afterwards and your write is not there. That is a deliberate design decision for a shared public service, and it is also the point at which it stops being useful for testing rather than prototyping — you cannot verify a create, you cannot test a conflict, and you cannot chain one request into the next.
Here, writes persist. Create a character and it is in the collection; delete it and the next GET returns 404. Callers are isolated from one another — by an X-Sandbox-ID header against the live API, and by running the whole engine locally in the browser — which is what makes persistence safe on a public service. Beyond that the surface is much wider: 39 domains rather than 6 resources, real Bearer and JWT auth with a role that gets a 403, ETag and If-Match concurrency, Idempotency-Key replay, rate limits that really limit, webhooks with verifiable HMAC signatures, and every HTTP status code in the catalog reachable on demand.
Use JSONPlaceholder when you need a body to render and nothing else. Come here when the thing you are testing is the HTTP: the failures, the auth, the concurrency and the retries.
Checked against JSONPlaceholder as of 2026-09.
All 39 mock REST APIs · Getting started guide · About this playground
Last updated