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.
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