JSON Placeholder API
A free, live fake REST API with 20 related resources (users, posts, orders, and more) you can fetch() from your own code.
GET api.jsonforge.app/placeholder/users/1Request
Endpoints
| Resource | Relation | Example |
|---|---|---|
| users | — (root) | api.jsonforge.app/placeholder/users |
| posts | userId → users | api.jsonforge.app/placeholder/posts |
| comments | postId → posts | api.jsonforge.app/placeholder/comments |
| todos | userId → users | api.jsonforge.app/placeholder/todos |
| albums | userId → users | api.jsonforge.app/placeholder/albums |
| photos | albumId → albums | api.jsonforge.app/placeholder/photos |
| categories | — (root) | api.jsonforge.app/placeholder/categories |
| products | categoryId → categories | api.jsonforge.app/placeholder/products |
| carts | userId → users | api.jsonforge.app/placeholder/carts |
| orders | customerId → customers | api.jsonforge.app/placeholder/orders |
| customers | — (root) | api.jsonforge.app/placeholder/customers |
| reviews | productId → products, userId → users | api.jsonforge.app/placeholder/reviews |
| roles | — (root) | api.jsonforge.app/placeholder/roles |
| permissions | — (root) | api.jsonforge.app/placeholder/permissions |
| notifications | userId → users | api.jsonforge.app/placeholder/notifications |
| conversations | — (root) | api.jsonforge.app/placeholder/conversations |
| messages | conversationId → conversations, senderId → users | api.jsonforge.app/placeholder/messages |
| files | ownerId → users | api.jsonforge.app/placeholder/files |
| invoices | customerId → customers | api.jsonforge.app/placeholder/invoices |
| transactions | invoiceId → invoices | api.jsonforge.app/placeholder/transactions |
What is JSON Placeholder API?
JSON Placeholder API is a free, live fake REST API — modeled directly on jsonplaceholder.typicode.com — that you can fetch() from your own code without writing a backend. It's reachable at the short api.jsonforge.app URL (or under /api/placeholder on the main domain — both work identically) and serves 20 realistic, related resources (users, posts, comments, todos, albums, photos, products, categories, carts, orders, customers, reviews, roles, permissions, notifications, conversations, messages, files, invoices, and transactions), each with dozens to hundreds of deterministic records and cross-references between them (a post has a userId, a comment has a postId, and so on), so you get genuinely nested, relational-feeling sample data instead of a handful of flat rows. Every endpoint supports GET, POST, PUT, PATCH, and DELETE, and responses always include permissive CORS headers so you can call it straight from a browser-based project, a CodeSandbox, or a course exercise. Like the original it's inspired by, write operations are simulated: they validate your request and return a realistic response, but nothing is ever actually saved.
How to use JSON Placeholder API
- Open the explorer below, pick a resource (e.g. users or posts) and, optionally, an id.
- Pick an HTTP method — GET works with or without an id; POST/PUT/PATCH/DELETE need one where the API expects it (PUT/PATCH/DELETE need an id, POST doesn't).
- For POST/PUT/PATCH, edit the JSON request body, then click "Try it" to send a real request to this API and see the live response.
- Copy the generated curl or fetch() snippet and drop it straight into your own project — the URL and method are already filled in for whatever you just tried.
Examples
List every post by user 1
Input
GET https://api.jsonforge.app/placeholder/posts?userId=1
Output
[ { "id": 3, "userId": 1, "title": "...", "body": "..." }, { "id": 17, "userId": 1, "title": "...", "body": "..." } ]
Nested route: comments on a specific post
Input
GET https://api.jsonforge.app/placeholder/posts/1/comments
Output
[ { "id": 5, "postId": 1, "name": "...", "email": "...", "body": "..." } ]
Simulated create (not persisted)
Input
POST https://api.jsonforge.app/placeholder/posts Body: {"title": "Hello", "userId": 1}
Output
{ "id": 151, "title": "Hello", "userId": 1 }
Common mistakes
- Assuming a POST/PUT/PATCH/DELETE persists — checking with a follow-up GET and being confused when it doesn't reflect the change. Nothing here is stored; see the FAQ.
- Trying /orders/1/items or /carts/1/items expecting a nested-route response — items on carts and orders are embedded fields on the record itself, not separate resources, so there's no such endpoint (it 404s).
- Assuming users and customers are the same identity — they're intentionally separate: users is the identity behind posts/comments/todos/messages/notifications/files, while customers is the commerce-side identity behind orders/invoices.
Why use this tool
- 20 realistic, cross-referenced resources with real foreign keys and nested routes — not just a handful of flat, disconnected arrays.
- Fully deterministic: the same id always returns the same record, so you can build a demo around specific ids and it'll keep working.
- No sign-up, no API key, no rate-limit headaches to configure — CORS is open by default so it works from any browser-based project immediately.