JSONPlaceholder website screenshot

JSONPlaceholder

JSONPlaceholder is a free, no-auth fake REST API for prototyping, tutorials, and testing. It exposes six relational resources — posts, comments, albums, photos, todos, and users — over six standard REST routes per resource. All write operations (POST, PUT, PATCH, DELETE) are accepted and respond as if successful, but no changes are persisted. The service is built on the open-source json-server engine (also by typicode) and serves billions of requests per month with no rate limits or authentication.

1 APIs 8 Features
DevelopmentTestingPrototypingFake APIOpen SourceREST

APIs

JSONPlaceholder REST API

Free fake REST API surface exposing six relational resources (posts, comments, albums, photos, todos, users). Supports GET / POST / PUT / PATCH / DELETE plus nested routes (e.g....

Collections

Pricing Plans

Rate Limits

Jsonplaceholder Rate Limits

2 limits

RATE LIMITS

Features

Six Relational Resources

Posts, comments, albums, photos, todos, and users with realistic relationships between them (posts belong to users, comments belong to posts, etc.).

Full REST Surface

GET, POST, PUT, PATCH, and DELETE methods are accepted on every resource — write operations simulate success without persisting changes.

Nested Routes

Single-level nested access such as /posts/1/comments, /albums/1/photos, and /users/1/todos for relational queries.

Query Filtering

Basic query-string filtering on any resource field (e.g. /comments?postId=1, /posts?userId=1).

No Authentication

Open to the public — no API keys, OAuth, or signup required. Use it in tutorials, sandboxes, and frontend demos freely.

No Rate Limits

The service does not publish or enforce documented rate limits and routinely serves about three billion requests per month.

CORS Enabled

All origins are allowed, making the service usable directly from browser-based applications without a proxy.

HTTPS Only

Served exclusively over HTTPS for safe inclusion in modern web tutorials and demos.

Use Cases

Frontend Prototyping

Wire up React, Vue, Angular, or Svelte tutorials against a real HTTP endpoint without standing up a backend.

API Client Testing

Exercise HTTP client libraries (fetch, axios, requests, OkHttp) against a stable public REST surface.

Tutorial and Courseware

Power coding tutorials, bootcamp exercises, and conference workshops that need a deterministic JSON API.

Mobile App Demos

Drive iOS and Android sample apps that demonstrate networking, list rendering, and CRUD flows.

Tooling QA

Smoke-test API generators, codegen tools, SDK builders, and OpenAPI tooling against a stable real-world API.

Workshop Sandboxes

Provide a no-signup HTTP API for hands-on workshops where participants cannot wait for credentials.

Integrations

json-server

The open-source engine that powers JSONPlaceholder — runs the same fake REST API locally with a single command.

lowdb

The tiny local JSON database that json-server uses for storage; ships from the same typicode org.

Postman

Public collections wrap JSONPlaceholder for quick HTTP exploration and learning.

Hoppscotch

Frequently used as the default example endpoint in HTTP clients including Hoppscotch and Insomnia.

MSW (Mock Service Worker)

Often paired with MSW so frontend tests can intercept and stub JSONPlaceholder traffic deterministically.

Solutions

Local Mirror via json-server

For teams that need write persistence or offline development, install json-server, point it at a local db.json, and reproduce JSONPlaceholder routes verbatim.

My JSON Server

typicode operates an additional service (My JSON Server) that turns any GitHub-hosted db.json into a personal hosted fake REST API.

Semantic Vocabularies

Jsonplaceholder Context

9 classes · 26 properties

JSON-LD

API Governance Rules

JSONPlaceholder API Rules

34 rules · 13 errors 18 warnings 3 info

SPECTRAL

JSON Structure

Jsonplaceholder Album Structure

3 properties

JSON STRUCTURE

Jsonplaceholder Comment Structure

5 properties

JSON STRUCTURE

Jsonplaceholder Photo Structure

5 properties

JSON STRUCTURE

Jsonplaceholder Post Structure

4 properties

JSON STRUCTURE

Jsonplaceholder Todo Structure

4 properties

JSON STRUCTURE

Jsonplaceholder User Structure

8 properties

JSON STRUCTURE

Example Payloads

Jsonplaceholder Post Example

4 fields

EXAMPLE

Jsonplaceholder Todo Example

4 fields

EXAMPLE

Jsonplaceholder User Example

8 fields

EXAMPLE

Resources

🔗
Website
Website
🚀
GettingStarted
GettingStarted
👥
JSONPlaceholder Source
GitHubRepository
👥
json-server (Engine)
GitHubRepository
👥
lowdb (Storage)
GitHubRepository
👥
GitHubOrganization
GitHubOrganization
📰
Blog
Blog
🔗
PublicAPIsListing
PublicAPIsListing
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
SpectralRules
SpectralRules
🔗
Vocabulary
Vocabulary

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: JSONPlaceholder REST API
  version: 1.0.0
items:
- info:
    name: Posts
    type: folder
  items:
  - info:
      name: JSONPlaceholder List Posts
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/posts
      params:
      - name: userId
        value: '1'
        type: query
        description: Filter posts by owning user id.
      - name: id
        value: '1'
        type: query
        description: Filter posts by post id.
    docs: Returns all 100 sample posts. Supports filtering by any field via query parameters (e.g. `?userId=1`).
  - info:
      name: JSONPlaceholder Create Post
      type: http
    http:
      method: POST
      url: https://jsonplaceholder.typicode.com/posts
      body:
        type: json
        data: '{}'
    docs: Creates a new post. Returns the created post with a generated id, but no data is actually persisted on the server.
  - info:
      name: JSONPlaceholder Get Post
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/posts/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Post identifier (1-100).
    docs: Returns a single post by id.
  - info:
      name: JSONPlaceholder Replace Post
      type: http
    http:
      method: PUT
      url: https://jsonplaceholder.typicode.com/posts/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Post identifier (1-100).
      body:
        type: json
        data: '{}'
    docs: Replaces a post in full. Returns the updated post but no data is actually persisted on the server.
  - info:
      name: JSONPlaceholder Update Post
      type: http
    http:
      method: PATCH
      url: https://jsonplaceholder.typicode.com/posts/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Post identifier (1-100).
      body:
        type: json
        data: '{}'
    docs: Partially updates a post. Returns the merged post but no data is actually persisted on the server.
  - info:
      name: JSONPlaceholder Delete Post
      type: http
    http:
      method: DELETE
      url: https://jsonplaceholder.typicode.com/posts/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Post identifier (1-100).
    docs: Deletes a post. Returns an empty object but no data is actually deleted on the server.
  - info:
      name: JSONPlaceholder List Post Comments
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/posts/:id/comments
      params:
      - name: id
        value: '1'
        type: path
        description: Post identifier.
    docs: Returns all comments belonging to a single post.
- info:
    name: Comments
    type: folder
  items:
  - info:
      name: JSONPlaceholder List Comments
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/comments
      params:
      - name: postId
        value: '1'
        type: query
        description: Filter comments by post id.
    docs: Returns all 500 sample comments. Supports filtering by any field via query parameters (e.g. `?postId=1`).
  - info:
      name: JSONPlaceholder Create Comment
      type: http
    http:
      method: POST
      url: https://jsonplaceholder.typicode.com/comments
      body:
        type: json
        data: '{}'
    docs: Creates a new comment. Returns the created comment with a generated id but no data is persisted.
  - info:
      name: JSONPlaceholder Get Comment
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/comments/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Comment identifier (1-500).
    docs: Returns a single comment by id.
  - info:
      name: JSONPlaceholder Replace Comment
      type: http
    http:
      method: PUT
      url: https://jsonplaceholder.typicode.com/comments/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Comment identifier (1-500).
      body:
        type: json
        data: '{}'
    docs: Replaces a comment in full (simulated).
  - info:
      name: JSONPlaceholder Update Comment
      type: http
    http:
      method: PATCH
      url: https://jsonplaceholder.typicode.com/comments/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Comment identifier (1-500).
      body:
        type: json
        data: '{}'
    docs: Partially updates a comment (simulated).
  - info:
      name: JSONPlaceholder Delete Comment
      type: http
    http:
      method: DELETE
      url: https://jsonplaceholder.typicode.com/comments/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Comment identifier (1-500).
    docs: Deletes a comment (simulated).
- info:
    name: Albums
    type: folder
  items:
  - info:
      name: JSONPlaceholder List Albums
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/albums
      params:
      - name: userId
        value: '1'
        type: query
        description: Filter albums by owning user id.
    docs: Returns all 100 sample albums. Supports filtering by any field via query parameters (e.g. `?userId=1`).
  - info:
      name: JSONPlaceholder Create Album
      type: http
    http:
      method: POST
      url: https://jsonplaceholder.typicode.com/albums
      body:
        type: json
        data: '{}'
    docs: Creates a new album (simulated).
  - info:
      name: JSONPlaceholder Get Album
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/albums/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Album identifier (1-100).
    docs: Returns a single album by id.
  - info:
      name: JSONPlaceholder Replace Album
      type: http
    http:
      method: PUT
      url: https://jsonplaceholder.typicode.com/albums/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Album identifier (1-100).
      body:
        type: json
        data: '{}'
    docs: Replaces an album in full (simulated).
  - info:
      name: JSONPlaceholder Update Album
      type: http
    http:
      method: PATCH
      url: https://jsonplaceholder.typicode.com/albums/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Album identifier (1-100).
      body:
        type: json
        data: '{}'
    docs: Partially updates an album (simulated).
  - info:
      name: JSONPlaceholder Delete Album
      type: http
    http:
      method: DELETE
      url: https://jsonplaceholder.typicode.com/albums/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Album identifier (1-100).
    docs: Deletes an album (simulated).
  - info:
      name: JSONPlaceholder List Album Photos
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/albums/:id/photos
      params:
      - name: id
        value: '1'
        type: path
        description: Album identifier.
    docs: Returns all photos belonging to a single album.
- info:
    name: Photos
    type: folder
  items:
  - info:
      name: JSONPlaceholder List Photos
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/photos
      params:
      - name: albumId
        value: '1'
        type: query
        description: Filter photos by owning album id.
    docs: Returns all 5000 sample photos. Supports filtering by any field via query parameters (e.g. `?albumId=1`).
  - info:
      name: JSONPlaceholder Create Photo
      type: http
    http:
      method: POST
      url: https://jsonplaceholder.typicode.com/photos
      body:
        type: json
        data: '{}'
    docs: Creates a new photo (simulated).
  - info:
      name: JSONPlaceholder Get Photo
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/photos/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Photo identifier (1-5000).
    docs: Returns a single photo by id.
  - info:
      name: JSONPlaceholder Replace Photo
      type: http
    http:
      method: PUT
      url: https://jsonplaceholder.typicode.com/photos/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Photo identifier (1-5000).
      body:
        type: json
        data: '{}'
    docs: Replaces a photo in full (simulated).
  - info:
      name: JSONPlaceholder Update Photo
      type: http
    http:
      method: PATCH
      url: https://jsonplaceholder.typicode.com/photos/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Photo identifier (1-5000).
      body:
        type: json
        data: '{}'
    docs: Partially updates a photo (simulated).
  - info:
      name: JSONPlaceholder Delete Photo
      type: http
    http:
      method: DELETE
      url: https://jsonplaceholder.typicode.com/photos/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Photo identifier (1-5000).
    docs: Deletes a photo (simulated).
- info:
    name: Todos
    type: folder
  items:
  - info:
      name: JSONPlaceholder List Todos
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/todos
      params:
      - name: userId
        value: '1'
        type: query
        description: Filter todos by owning user id.
      - name: completed
        value: 'false'
        type: query
        description: Filter todos by completion state.
    docs: Returns all 200 sample todos. Supports filtering by any field via query parameters (e.g. `?userId=1&completed=true`).
  - info:
      name: JSONPlaceholder Create Todo
      type: http
    http:
      method: POST
      url: https://jsonplaceholder.typicode.com/todos
      body:
        type: json
        data: '{}'
    docs: Creates a new todo (simulated).
  - info:
      name: JSONPlaceholder Get Todo
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/todos/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Todo identifier (1-200).
    docs: Returns a single todo by id.
  - info:
      name: JSONPlaceholder Replace Todo
      type: http
    http:
      method: PUT
      url: https://jsonplaceholder.typicode.com/todos/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Todo identifier (1-200).
      body:
        type: json
        data: '{}'
    docs: Replaces a todo in full (simulated).
  - info:
      name: JSONPlaceholder Update Todo
      type: http
    http:
      method: PATCH
      url: https://jsonplaceholder.typicode.com/todos/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Todo identifier (1-200).
      body:
        type: json
        data: '{}'
    docs: Partially updates a todo (simulated).
  - info:
      name: JSONPlaceholder Delete Todo
      type: http
    http:
      method: DELETE
      url: https://jsonplaceholder.typicode.com/todos/:id
      params:
      - name: id
        value: '1'
        type: path
        description: Todo identifier (1-200).
    docs: Deletes a todo (simulated).
- info:
    name: Users
    type: folder
  items:
  - info:
      name: JSONPlaceholder List Users
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/users
    docs: Returns all 10 sample users with profile, address, and company metadata.
  - info:
      name: JSONPlaceholder Create User
      type: http
    http:
      method: POST
      url: https://jsonplaceholder.typicode.com/users
      body:
        type: json
        data: '{}'
    docs: Creates a new user (simulated).
  - info:
      name: JSONPlaceholder Get User
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/users/:id
      params:
      - name: id
        value: '1'
        type: path
        description: User identifier (1-10).
    docs: Returns a single user by id.
  - info:
      name: JSONPlaceholder Replace User
      type: http
    http:
      method: PUT
      url: https://jsonplaceholder.typicode.com/users/:id
      params:
      - name: id
        value: '1'
        type: path
        description: User identifier (1-10).
      body:
        type: json
        data: '{}'
    docs: Replaces a user in full (simulated).
  - info:
      name: JSONPlaceholder Update User
      type: http
    http:
      method: PATCH
      url: https://jsonplaceholder.typicode.com/users/:id
      params:
      - name: id
        value: '1'
        type: path
        description: User identifier (1-10).
      body:
        type: json
        data: '{}'
    docs: Partially updates a user (simulated).
  - info:
      name: JSONPlaceholder Delete User
      type: http
    http:
      method: DELETE
      url: https://jsonplaceholder.typicode.com/users/:id
      params:
      - name: id
        value: '1'
        type: path
        description: User identifier (1-10).
    docs: Deletes a user (simulated).
  - info:
      name: JSONPlaceholder List User Posts
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/users/:id/posts
      params:
      - name: id
        value: '1'
        type: path
        description: User identifier.
    docs: Returns all posts authored by a single user.
  - info:
      name: JSONPlaceholder List User Albums
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/users/:id/albums
      params:
      - name: id
        value: '1'
        type: path
        description: User identifier.
    docs: Returns all albums owned by a single user.
  - info:
      name: JSONPlaceholder List User Todos
      type: http
    http:
      method: GET
      url: https://jsonplaceholder.typicode.com/users/:id/todos
      params:
      - name: id
        value: '1'
        type: path
        description: User identifier.
    docs: Returns all todos owned by a single user.
bundled: true