JSONPlaceholder at https://jsonplaceholder.typicode.com is a fake REST API with posts, comments, users, and todos. It answers every method like a real API, which makes it the standard sandbox for trying out HTTP clients. Every example below runs as-is.
None. Writes are faked: POST, PATCH, and DELETE return what a real API would, but nothing is saved — fetch the same resource again and it's unchanged.
Full reference: https://jsonplaceholder.typicode.com/guide/
Resources: /posts, /comments, /albums, /photos, /todos, /users.
curl https://jsonplaceholder.typicode.com/posts/1
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
Any field works as a query filter; _limit, _page, and _sort are built in.
curl "https://jsonplaceholder.typicode.com/posts?userId=1&_limit=2"
[
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
},
{
"userId": 1,
"id": 2,
"title": "qui est esse",
"body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
}
]
Child resources hang off their parent: a post's comments, a user's todos.
curl "https://jsonplaceholder.typicode.com/posts/1/comments?_limit=2"
[
{
"postId": 1,
"id": 1,
"name": "id labore ex et quam laborum",
"email": "[email protected]",
"body": "laudantium enim quasi est quidem magnam voluptate ipsam eos\ntempora quo necessitatibus\ndolor quam autem quasi\nreiciendis et nam sapiente accusantium"
},
{
"postId": 1,
"id": 2,
"name": "quo vero reiciendis velit similique earum",
"email": "[email protected]",
"body": "est natus enim nihil est dolore omnis voluptatem numquam\net omnis occaecati quod ullam at\nvoluptatem error expedita pariatur\nnihil sint nostrum voluptatem reiciendis et"
}
]
Returns 201 with your object and a new id. Always 101 — nothing is actually stored.
curl -X POST https://jsonplaceholder.typicode.com/posts \
-H "Content-Type: application/json" \
-d '{"title": "Hello", "body": "From PostTaco", "userId": 1}'
{
"title": "Hello",
"body": "From PostTaco",
"userId": 1,
"id": 101
}
Send only the fields that change; the response is the merged object.
curl -X PATCH https://jsonplaceholder.typicode.com/posts/1 \
-H "Content-Type: application/json" \
-d '{"title": "Updated title"}'
{
"userId": 1,
"id": 1,
"title": "Updated title",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
Returns 200 with an empty object.
curl -X DELETE https://jsonplaceholder.typicode.com/posts/1
{}