openapi: 3.0.3 info: title: JSONPlaceholder REST API description: >- JSONPlaceholder is a free, no-auth fake REST API for prototyping, testing, and teaching. It exposes six relational resources — posts, comments, albums, photos, todos, and users — over standard REST routes (GET, POST, PUT, PATCH, DELETE). Write operations are simulated: the service responds as though the change succeeded, but no data is persisted on the server. The service is powered by the open-source json-server engine, also by typicode. version: '1.0.0' contact: name: typicode url: https://github.com/typicode/jsonplaceholder license: name: MIT url: https://github.com/typicode/jsonplaceholder/blob/master/LICENSE x-generated-from: documentation x-last-validated: '2026-05-29' servers: - url: https://jsonplaceholder.typicode.com description: Public production endpoint (no authentication required) tags: - name: Posts description: 100 sample blog posts owned by users - name: Comments description: 500 sample comments belonging to posts - name: Albums description: 100 sample photo albums owned by users - name: Photos description: 5000 sample photos belonging to albums - name: Todos description: 200 sample todo items owned by users - name: Users description: 10 sample users with profile, address, and company metadata paths: /posts: get: operationId: listPosts summary: JSONPlaceholder List Posts description: >- Returns all 100 sample posts. Supports filtering by any field via query parameters (e.g. `?userId=1`). tags: - Posts parameters: - name: userId in: query description: Filter posts by owning user id. required: false schema: type: integer example: 1 - name: id in: query description: Filter posts by post id. required: false schema: type: integer example: 1 responses: '200': description: Array of posts. content: application/json: schema: type: array items: $ref: '#/components/schemas/Post' x-microcks-operation: delay: 0 dispatcher: FALLBACK post: operationId: createPost summary: JSONPlaceholder Create Post description: >- Creates a new post. Returns the created post with a generated id, but no data is actually persisted on the server. tags: - Posts requestBody: required: true description: New post payload. content: application/json: schema: $ref: '#/components/schemas/PostInput' responses: '201': description: Created post (simulated, not persisted). content: application/json: schema: $ref: '#/components/schemas/Post' x-microcks-operation: delay: 0 dispatcher: FALLBACK /posts/{id}: parameters: - name: id in: path required: true description: Post identifier (1-100). schema: type: integer example: 1 get: operationId: getPost summary: JSONPlaceholder Get Post description: Returns a single post by id. tags: - Posts responses: '200': description: A single post. content: application/json: schema: $ref: '#/components/schemas/Post' '404': description: Post not found. x-microcks-operation: delay: 0 dispatcher: FALLBACK put: operationId: replacePost summary: JSONPlaceholder Replace Post description: >- Replaces a post in full. Returns the updated post but no data is actually persisted on the server. tags: - Posts requestBody: required: true description: Full replacement payload. content: application/json: schema: $ref: '#/components/schemas/Post' responses: '200': description: Updated post (simulated, not persisted). content: application/json: schema: $ref: '#/components/schemas/Post' x-microcks-operation: delay: 0 dispatcher: FALLBACK patch: operationId: updatePost summary: JSONPlaceholder Update Post description: >- Partially updates a post. Returns the merged post but no data is actually persisted on the server. tags: - Posts requestBody: required: true description: Partial update payload. content: application/json: schema: $ref: '#/components/schemas/PostInput' responses: '200': description: Updated post (simulated, not persisted). content: application/json: schema: $ref: '#/components/schemas/Post' x-microcks-operation: delay: 0 dispatcher: FALLBACK delete: operationId: deletePost summary: JSONPlaceholder Delete Post description: >- Deletes a post. Returns an empty object but no data is actually deleted on the server. tags: - Posts responses: '200': description: Deletion accepted (simulated, not persisted). content: application/json: schema: type: object x-microcks-operation: delay: 0 dispatcher: FALLBACK /posts/{id}/comments: parameters: - name: id in: path required: true description: Post identifier. schema: type: integer example: 1 get: operationId: listPostComments summary: JSONPlaceholder List Post Comments description: Returns all comments belonging to a single post. tags: - Posts - Comments responses: '200': description: Array of comments for the post. content: application/json: schema: type: array items: $ref: '#/components/schemas/Comment' x-microcks-operation: delay: 0 dispatcher: FALLBACK /comments: get: operationId: listComments summary: JSONPlaceholder List Comments description: >- Returns all 500 sample comments. Supports filtering by any field via query parameters (e.g. `?postId=1`). tags: - Comments parameters: - name: postId in: query description: Filter comments by post id. required: false schema: type: integer example: 1 responses: '200': description: Array of comments. content: application/json: schema: type: array items: $ref: '#/components/schemas/Comment' x-microcks-operation: delay: 0 dispatcher: FALLBACK post: operationId: createComment summary: JSONPlaceholder Create Comment description: >- Creates a new comment. Returns the created comment with a generated id but no data is persisted. tags: - Comments requestBody: required: true description: New comment payload. content: application/json: schema: $ref: '#/components/schemas/CommentInput' responses: '201': description: Created comment (simulated). content: application/json: schema: $ref: '#/components/schemas/Comment' x-microcks-operation: delay: 0 dispatcher: FALLBACK /comments/{id}: parameters: - name: id in: path required: true description: Comment identifier (1-500). schema: type: integer example: 1 get: operationId: getComment summary: JSONPlaceholder Get Comment description: Returns a single comment by id. tags: - Comments responses: '200': description: A single comment. content: application/json: schema: $ref: '#/components/schemas/Comment' x-microcks-operation: delay: 0 dispatcher: FALLBACK put: operationId: replaceComment summary: JSONPlaceholder Replace Comment description: Replaces a comment in full (simulated). tags: - Comments requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Comment' responses: '200': description: Updated comment (simulated). content: application/json: schema: $ref: '#/components/schemas/Comment' x-microcks-operation: delay: 0 dispatcher: FALLBACK patch: operationId: updateComment summary: JSONPlaceholder Update Comment description: Partially updates a comment (simulated). tags: - Comments requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CommentInput' responses: '200': description: Updated comment (simulated). content: application/json: schema: $ref: '#/components/schemas/Comment' x-microcks-operation: delay: 0 dispatcher: FALLBACK delete: operationId: deleteComment summary: JSONPlaceholder Delete Comment description: Deletes a comment (simulated). tags: - Comments responses: '200': description: Deletion accepted (simulated). content: application/json: schema: type: object x-microcks-operation: delay: 0 dispatcher: FALLBACK /albums: get: operationId: listAlbums summary: JSONPlaceholder List Albums description: >- Returns all 100 sample albums. Supports filtering by any field via query parameters (e.g. `?userId=1`). tags: - Albums parameters: - name: userId in: query description: Filter albums by owning user id. required: false schema: type: integer example: 1 responses: '200': description: Array of albums. content: application/json: schema: type: array items: $ref: '#/components/schemas/Album' x-microcks-operation: delay: 0 dispatcher: FALLBACK post: operationId: createAlbum summary: JSONPlaceholder Create Album description: Creates a new album (simulated). tags: - Albums requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AlbumInput' responses: '201': description: Created album (simulated). content: application/json: schema: $ref: '#/components/schemas/Album' x-microcks-operation: delay: 0 dispatcher: FALLBACK /albums/{id}: parameters: - name: id in: path required: true description: Album identifier (1-100). schema: type: integer example: 1 get: operationId: getAlbum summary: JSONPlaceholder Get Album description: Returns a single album by id. tags: - Albums responses: '200': description: A single album. content: application/json: schema: $ref: '#/components/schemas/Album' x-microcks-operation: delay: 0 dispatcher: FALLBACK put: operationId: replaceAlbum summary: JSONPlaceholder Replace Album description: Replaces an album in full (simulated). tags: - Albums requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Album' responses: '200': description: Updated album (simulated). content: application/json: schema: $ref: '#/components/schemas/Album' x-microcks-operation: delay: 0 dispatcher: FALLBACK patch: operationId: updateAlbum summary: JSONPlaceholder Update Album description: Partially updates an album (simulated). tags: - Albums requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AlbumInput' responses: '200': description: Updated album (simulated). content: application/json: schema: $ref: '#/components/schemas/Album' x-microcks-operation: delay: 0 dispatcher: FALLBACK delete: operationId: deleteAlbum summary: JSONPlaceholder Delete Album description: Deletes an album (simulated). tags: - Albums responses: '200': description: Deletion accepted (simulated). content: application/json: schema: type: object x-microcks-operation: delay: 0 dispatcher: FALLBACK /albums/{id}/photos: parameters: - name: id in: path required: true description: Album identifier. schema: type: integer example: 1 get: operationId: listAlbumPhotos summary: JSONPlaceholder List Album Photos description: Returns all photos belonging to a single album. tags: - Albums - Photos responses: '200': description: Array of photos for the album. content: application/json: schema: type: array items: $ref: '#/components/schemas/Photo' x-microcks-operation: delay: 0 dispatcher: FALLBACK /photos: get: operationId: listPhotos summary: JSONPlaceholder List Photos description: >- Returns all 5000 sample photos. Supports filtering by any field via query parameters (e.g. `?albumId=1`). tags: - Photos parameters: - name: albumId in: query description: Filter photos by owning album id. required: false schema: type: integer example: 1 responses: '200': description: Array of photos. content: application/json: schema: type: array items: $ref: '#/components/schemas/Photo' x-microcks-operation: delay: 0 dispatcher: FALLBACK post: operationId: createPhoto summary: JSONPlaceholder Create Photo description: Creates a new photo (simulated). tags: - Photos requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PhotoInput' responses: '201': description: Created photo (simulated). content: application/json: schema: $ref: '#/components/schemas/Photo' x-microcks-operation: delay: 0 dispatcher: FALLBACK /photos/{id}: parameters: - name: id in: path required: true description: Photo identifier (1-5000). schema: type: integer example: 1 get: operationId: getPhoto summary: JSONPlaceholder Get Photo description: Returns a single photo by id. tags: - Photos responses: '200': description: A single photo. content: application/json: schema: $ref: '#/components/schemas/Photo' x-microcks-operation: delay: 0 dispatcher: FALLBACK put: operationId: replacePhoto summary: JSONPlaceholder Replace Photo description: Replaces a photo in full (simulated). tags: - Photos requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Photo' responses: '200': description: Updated photo (simulated). content: application/json: schema: $ref: '#/components/schemas/Photo' x-microcks-operation: delay: 0 dispatcher: FALLBACK patch: operationId: updatePhoto summary: JSONPlaceholder Update Photo description: Partially updates a photo (simulated). tags: - Photos requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PhotoInput' responses: '200': description: Updated photo (simulated). content: application/json: schema: $ref: '#/components/schemas/Photo' x-microcks-operation: delay: 0 dispatcher: FALLBACK delete: operationId: deletePhoto summary: JSONPlaceholder Delete Photo description: Deletes a photo (simulated). tags: - Photos responses: '200': description: Deletion accepted (simulated). content: application/json: schema: type: object x-microcks-operation: delay: 0 dispatcher: FALLBACK /todos: get: operationId: listTodos summary: JSONPlaceholder List Todos description: >- Returns all 200 sample todos. Supports filtering by any field via query parameters (e.g. `?userId=1&completed=true`). tags: - Todos parameters: - name: userId in: query description: Filter todos by owning user id. required: false schema: type: integer example: 1 - name: completed in: query description: Filter todos by completion state. required: false schema: type: boolean example: false responses: '200': description: Array of todos. content: application/json: schema: type: array items: $ref: '#/components/schemas/Todo' x-microcks-operation: delay: 0 dispatcher: FALLBACK post: operationId: createTodo summary: JSONPlaceholder Create Todo description: Creates a new todo (simulated). tags: - Todos requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TodoInput' responses: '201': description: Created todo (simulated). content: application/json: schema: $ref: '#/components/schemas/Todo' x-microcks-operation: delay: 0 dispatcher: FALLBACK /todos/{id}: parameters: - name: id in: path required: true description: Todo identifier (1-200). schema: type: integer example: 1 get: operationId: getTodo summary: JSONPlaceholder Get Todo description: Returns a single todo by id. tags: - Todos responses: '200': description: A single todo. content: application/json: schema: $ref: '#/components/schemas/Todo' x-microcks-operation: delay: 0 dispatcher: FALLBACK put: operationId: replaceTodo summary: JSONPlaceholder Replace Todo description: Replaces a todo in full (simulated). tags: - Todos requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Todo' responses: '200': description: Updated todo (simulated). content: application/json: schema: $ref: '#/components/schemas/Todo' x-microcks-operation: delay: 0 dispatcher: FALLBACK patch: operationId: updateTodo summary: JSONPlaceholder Update Todo description: Partially updates a todo (simulated). tags: - Todos requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TodoInput' responses: '200': description: Updated todo (simulated). content: application/json: schema: $ref: '#/components/schemas/Todo' x-microcks-operation: delay: 0 dispatcher: FALLBACK delete: operationId: deleteTodo summary: JSONPlaceholder Delete Todo description: Deletes a todo (simulated). tags: - Todos responses: '200': description: Deletion accepted (simulated). content: application/json: schema: type: object x-microcks-operation: delay: 0 dispatcher: FALLBACK /users: get: operationId: listUsers summary: JSONPlaceholder List Users description: Returns all 10 sample users with profile, address, and company metadata. tags: - Users responses: '200': description: Array of users. content: application/json: schema: type: array items: $ref: '#/components/schemas/User' x-microcks-operation: delay: 0 dispatcher: FALLBACK post: operationId: createUser summary: JSONPlaceholder Create User description: Creates a new user (simulated). tags: - Users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserInput' responses: '201': description: Created user (simulated). content: application/json: schema: $ref: '#/components/schemas/User' x-microcks-operation: delay: 0 dispatcher: FALLBACK /users/{id}: parameters: - name: id in: path required: true description: User identifier (1-10). schema: type: integer example: 1 get: operationId: getUser summary: JSONPlaceholder Get User description: Returns a single user by id. tags: - Users responses: '200': description: A single user. content: application/json: schema: $ref: '#/components/schemas/User' x-microcks-operation: delay: 0 dispatcher: FALLBACK put: operationId: replaceUser summary: JSONPlaceholder Replace User description: Replaces a user in full (simulated). tags: - Users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/User' responses: '200': description: Updated user (simulated). content: application/json: schema: $ref: '#/components/schemas/User' x-microcks-operation: delay: 0 dispatcher: FALLBACK patch: operationId: updateUser summary: JSONPlaceholder Update User description: Partially updates a user (simulated). tags: - Users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserInput' responses: '200': description: Updated user (simulated). content: application/json: schema: $ref: '#/components/schemas/User' x-microcks-operation: delay: 0 dispatcher: FALLBACK delete: operationId: deleteUser summary: JSONPlaceholder Delete User description: Deletes a user (simulated). tags: - Users responses: '200': description: Deletion accepted (simulated). content: application/json: schema: type: object x-microcks-operation: delay: 0 dispatcher: FALLBACK /users/{id}/posts: parameters: - name: id in: path required: true description: User identifier. schema: type: integer example: 1 get: operationId: listUserPosts summary: JSONPlaceholder List User Posts description: Returns all posts authored by a single user. tags: - Users - Posts responses: '200': description: Array of posts for the user. content: application/json: schema: type: array items: $ref: '#/components/schemas/Post' x-microcks-operation: delay: 0 dispatcher: FALLBACK /users/{id}/albums: parameters: - name: id in: path required: true description: User identifier. schema: type: integer example: 1 get: operationId: listUserAlbums summary: JSONPlaceholder List User Albums description: Returns all albums owned by a single user. tags: - Users - Albums responses: '200': description: Array of albums for the user. content: application/json: schema: type: array items: $ref: '#/components/schemas/Album' x-microcks-operation: delay: 0 dispatcher: FALLBACK /users/{id}/todos: parameters: - name: id in: path required: true description: User identifier. schema: type: integer example: 1 get: operationId: listUserTodos summary: JSONPlaceholder List User Todos description: Returns all todos owned by a single user. tags: - Users - Todos responses: '200': description: Array of todos for the user. content: application/json: schema: type: array items: $ref: '#/components/schemas/Todo' x-microcks-operation: delay: 0 dispatcher: FALLBACK components: schemas: Post: type: object description: A sample blog post owned by a user. required: - id - userId - title - body properties: id: type: integer description: Unique post identifier (1-100). example: 1 userId: type: integer description: Identifier of the user who authored the post (1-10). example: 1 title: type: string description: Post title. example: sunt aut facere repellat provident occaecati excepturi optio reprehenderit body: type: string description: Post body / content. example: quia et suscipit suscipit recusandae consequuntur expedita et cum PostInput: type: object description: Payload for creating or partially updating a post. properties: userId: type: integer description: Identifier of the user who authored the post. example: 1 title: type: string description: Post title. example: My New Post body: type: string description: Post body / content. example: This is the body of my new post. Comment: type: object description: A sample comment attached to a post. required: - id - postId - name - email - body properties: id: type: integer description: Unique comment identifier (1-500). example: 1 postId: type: integer description: Identifier of the post this comment belongs to. example: 1 name: type: string description: Display name / subject of the comment. example: id labore ex et quam laborum email: type: string format: email description: Email address of the commenter. example: Eliseo@gardner.biz body: type: string description: Comment body text. example: laudantium enim quasi est quidem magnam voluptate ipsam eos tempora quo necessitatibus CommentInput: type: object description: Payload for creating or partially updating a comment. properties: postId: type: integer description: Identifier of the post being commented on. example: 1 name: type: string description: Display name / subject of the comment. example: Great post email: type: string format: email description: Email address of the commenter. example: reader@example.com body: type: string description: Comment body text. example: Thanks for writing this. Album: type: object description: A sample photo album owned by a user. required: - id - userId - title properties: id: type: integer description: Unique album identifier (1-100). example: 1 userId: type: integer description: Identifier of the user who owns the album. example: 1 title: type: string description: Album title. example: quidem molestiae enim AlbumInput: type: object description: Payload for creating or partially updating an album. properties: userId: type: integer description: Identifier of the user who owns the album. example: 1 title: type: string description: Album title. example: Holiday Album Photo: type: object description: A sample photo belonging to an album. required: - id - albumId - title - url - thumbnailUrl properties: id: type: integer description: Unique photo identifier (1-5000). example: 1 albumId: type: integer description: Identifier of the album this photo belongs to. example: 1 title: type: string description: Photo title / caption. example: accusamus beatae ad facilis cum similique qui sunt url: type: string format: uri description: Full-size image URL (placeholder service). example: https://via.placeholder.com/600/92c952 thumbnailUrl: type: string format: uri description: Thumbnail image URL (placeholder service). example: https://via.placeholder.com/150/92c952 PhotoInput: type: object description: Payload for creating or partially updating a photo. properties: albumId: type: integer description: Identifier of the album this photo belongs to. example: 1 title: type: string description: Photo title / caption. example: A new photo url: type: string format: uri description: Full-size image URL. example: https://via.placeholder.com/600/abcdef thumbnailUrl: type: string format: uri description: Thumbnail image URL. example: https://via.placeholder.com/150/abcdef Todo: type: object description: A sample todo item owned by a user. required: - id - userId - title - completed properties: id: type: integer description: Unique todo identifier (1-200). example: 1 userId: type: integer description: Identifier of the user who owns the todo. example: 1 title: type: string description: Todo title. example: delectus aut autem completed: type: boolean description: Whether the todo is completed. example: false TodoInput: type: object description: Payload for creating or partially updating a todo. properties: userId: type: integer description: Identifier of the user who owns the todo. example: 1 title: type: string description: Todo title. example: Write integration tests completed: type: boolean description: Whether the todo is completed. example: false User: type: object description: A sample user with profile, address, and company metadata. required: - id - name - username - email properties: id: type: integer description: Unique user identifier (1-10). example: 1 name: type: string description: Full display name of the user. example: Leanne Graham username: type: string description: Username / handle. example: Bret email: type: string format: email description: Email address. example: Sincere@april.biz phone: type: string description: Phone number (free-form string). example: 1-770-736-8031 x56442 website: type: string description: Personal website (hostname or URL). example: hildegard.org address: $ref: '#/components/schemas/Address' company: $ref: '#/components/schemas/Company' UserInput: type: object description: Payload for creating or partially updating a user. properties: name: type: string example: Ada Lovelace username: type: string example: alovelace email: type: string format: email example: ada@example.com phone: type: string example: 555-0100 website: type: string example: example.com address: $ref: '#/components/schemas/Address' company: $ref: '#/components/schemas/Company' Address: type: object description: Street, city, postal code, and geo coordinates. properties: street: type: string example: Kulas Light suite: type: string example: Apt. 556 city: type: string example: Gwenborough zipcode: type: string example: 92998-3874 geo: $ref: '#/components/schemas/Geo' Geo: type: object description: Latitude and longitude (strings in the JSONPlaceholder dataset). properties: lat: type: string example: '-37.3159' lng: type: string example: '81.1496' Company: type: object description: User's company affiliation. properties: name: type: string example: Romaguera-Crona catchPhrase: type: string example: Multi-layered client-server neural-net bs: type: string example: harness real-time e-markets