JSONPlaceholder

App · Utilities · 16 actions

Free fake data for testing and prototyping, from JSONPlaceholder: 100 posts, 500 comments, 100 albums, 5,000 photos, 200 to-dos and 10 complete user profiles, all related to each other the way real data is. List or look up any of them, filter by user, album or post, and page through the results. Photos come with placeholder images and users with addresses, coordinates and employers, so a mockup or a test run has something real-shaped to work on. Create, update and delete steps are answered as though they worked without anything being stored, which makes this the safe place to prove a workflow's write path before pointing it at the real thing. No account or API key required.

Actions

ActionWhat it does
Check service statusCheck whether JSONPlaceholder is answering, and how quickly.
Create a post (simulated)Send a post to JSONPlaceholder and get back what a real create would answer, without anything being stored.
Delete a post (simulated)Send a delete for a post and get back what a real delete would answer, without anything being removed.
Get a commentGet one comment by its id, with the commenter's name, email address and text.
Get a photoGet one photo by its id, with its full-size and thumbnail image URLs.
Get a postGet one post by its id, with its title, body and author.
Get a to-doGet one to-do by its id, with whether it is done.
Get a userGet one user by their id: the whole fake profile, including the address, its coordinates and the company.
Get an albumGet one album by its id, with its title and the user it belongs to.
List albumsList fake photo albums, all 100 of them or just one user's. Each album holds 50 photos, so an album id from here is what List photos wants.
List commentsList fake comments, all 500 of them or just the ones on one post, a page at a time.
List photosList fake photos, by album or across all 5,000.
List postsList fake blog posts, all 100 of them or just one user's, a page at a time.
List to-dosList fake to-dos, all 200 of them or just one user's, and keep only the ones that are done or only the ones that are not.
List usersList the ten fake users, each a complete profile: name, handle, email, phone, site, postal address with coordinates, and an employer.
Update a post (simulated)Send a change to a post and get back what a real update would answer, without anything being stored.

Check service status

Check whether JSONPlaceholder is answering, and how quickly. This is the one action that reports a problem as a value instead of failing the step, so a workflow can branch on it, which is most of why anyone points a health check at this service. Being throttled is reported separately from being down. No API key required.

Inputs

None.

Outputs

messagetext
What happened, in a sentence worth posting.
onlinetrue/false
True when the service answered with a record. This is the field to branch on.
rate_limitedtrue/false
True when the answer was a throttle (HTTP 429). Being throttled is not the same as being down.
reachabletrue/false
True when something answered at all, even with an error. False means the request never landed.
response_time_msnumber
How long the request took, in milliseconds, or null when nothing came back.
status_codenumber
The HTTP status that came back, or null when nothing did.
Example output
{
  "message": "JSONPlaceholder is up and serving records.",
  "online": true,
  "rate_limited": false,
  "reachable": true,
  "response_time_ms": 42.7,
  "status_code": 200
}

Create a post (simulated)

Send a post to JSONPlaceholder and get back what a real create would answer, without anything being stored. The way to prove a workflow assembles and sends the right body before you point it at a system that keeps what it is given. The answer carries the next id after the dataset's 100 posts, and fetching that id afterwards finds nothing. No API key required.

Inputs

TitletitletextRequired
The post's title. Sent as given.
BodybodytextRequired
The post's text. Sent as given.
Authoruser_idnumber
Optional. The id of the user to attribute it to, 1 to 10. Left out of the request when blank.At least 1.

Outputs

postobject
One of the 100 posts in the dataset.
simulatedtrue/false
Always true. JSONPlaceholder fakes every write: the post is not stored, and Get a post for this id will not find it.
Example output
{
  "post": {
    "api_url": "https://jsonplaceholder.typicode.com/posts/101",
    "body": "bar",
    "id": 101,
    "title": "foo",
    "user_id": 1
  },
  "simulated": true
}

Delete a post (simulated)

Send a delete for a post and get back what a real delete would answer, without anything being removed. The post is still there afterwards, which is what makes this safe to run on a schedule while a workflow's delete step is being built. No API key required.

Inputs

Postpost_idnumberRequired
The post's id, as it appears in its address. JSONPlaceholder publishes 100 posts, numbered 1 to 100, and the numbering never changes, so an id from an earlier run still means the same post.At least 1.

Outputs

deleted_post_idnumber
The id that was sent to be deleted.
simulatedtrue/false
Always true. JSONPlaceholder fakes every write: the post is still there, and Get a post will still find it.
status_codenumber
The HTTP status the service answered, which is 200 when the delete was accepted.
Example output
{
  "deleted_post_id": 1,
  "simulated": true,
  "status_code": 200
}

Get a comment

Get one comment by its id, with the commenter's name, email address and text. No API key required.

Inputs

Commentcomment_idnumberRequired
The comment's id, as it appears in its address. JSONPlaceholder publishes 500 comments, numbered 1 to 500, and the numbering never changes, so an id from an earlier run still means the same comment.At least 1.

Outputs

commentobject
One of the 500 comments in the dataset.
Example output
{
  "comment": {
    "api_url": "https://jsonplaceholder.typicode.com/comments/1",
    "body": "laudantium enim quasi est quidem magnam voluptate ipsam eos",
    "email": "Eliseo@gardner.biz",
    "id": 1,
    "name": "id labore ex et quam laborum",
    "post_id": 1
  }
}

Get a photo

Get one photo by its id, with its full-size and thumbnail image URLs. No API key required.

Inputs

Photophoto_idnumberRequired
The photo's id, as it appears in its address. JSONPlaceholder publishes 5,000 photos, numbered 1 to 5,000, and the numbering never changes, so an id from an earlier run still means the same photo.At least 1.

Outputs

photoobject
One of the 5,000 photos in the dataset.
Example output
{
  "photo": {
    "album_id": 1,
    "api_url": "https://jsonplaceholder.typicode.com/photos/1",
    "id": 1,
    "thumbnail_url": "https://via.placeholder.com/150/92c952",
    "title": "accusamus beatae ad facilis cum similique qui sunt",
    "url": "https://via.placeholder.com/600/92c952"
  }
}

Get a post

Get one post by its id, with its title, body and author. The single-record fetch to point a step at while the real API is not ready yet. No API key required.

Inputs

Postpost_idnumberRequired
The post's id, as it appears in its address. JSONPlaceholder publishes 100 posts, numbered 1 to 100, and the numbering never changes, so an id from an earlier run still means the same post.At least 1.

Outputs

postobject
One of the 100 posts in the dataset.
Example output
{
  "post": {
    "api_url": "https://jsonplaceholder.typicode.com/posts/1",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum",
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio",
    "user_id": 1
  }
}

Get a to-do

Get one to-do by its id, with whether it is done. This is the record behind the service's own one-line example, and the quickest thing to point a first step at. No API key required.

Inputs

To-dotodo_idnumberRequired
The to-do's id, as it appears in its address. JSONPlaceholder publishes 200 to-dos, numbered 1 to 200, and the numbering never changes, so an id from an earlier run still means the same to-do.At least 1.

Outputs

todoobject
One of the 200 to-dos in the dataset.
Example output
{
  "todo": {
    "api_url": "https://jsonplaceholder.typicode.com/todos/1",
    "completed": false,
    "id": 1,
    "title": "delectus aut autem",
    "user_id": 1
  }
}

Get a user

Get one user by their id: the whole fake profile, including the address, its coordinates and the company. No API key required.

Inputs

Useruser_idnumberRequired
The user's id, as it appears in its address. JSONPlaceholder publishes 10 users, numbered 1 to 10, and the numbering never changes, so an id from an earlier run still means the same user.At least 1.

Outputs

userobject
One of the ten users: a complete fake profile, with a postal address, coordinates and an employer.
Example output
{
  "user": {
    "address": {
      "city": "Gwenborough",
      "latitude": -37.3159,
      "longitude": 81.1496,
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "zipcode": "92998-3874"
    },
    "api_url": "https://jsonplaceholder.typicode.com/users/1",
    "city": "Gwenborough",
    "company": {
      "bs": "harness real-time e-markets",
      "catch_phrase": "Multi-layered client-server neural-net",
      "name": "Romaguera-Crona"
    },
    "company_name": "Romaguera-Crona",
    "email": "Sincere@april.biz",
    "id": 1,
    "name": "Leanne Graham",
    "phone": "1-770-736-8031 x56442",
    "username": "Bret",
    "website": "hildegard.org"
  }
}

Get an album

Get one album by its id, with its title and the user it belongs to. No API key required.

Inputs

Albumalbum_idnumberRequired
The album's id, as it appears in its address. JSONPlaceholder publishes 100 albums, numbered 1 to 100, and the numbering never changes, so an id from an earlier run still means the same album.At least 1.

Outputs

albumobject
One of the 100 albums in the dataset.
Example output
{
  "album": {
    "api_url": "https://jsonplaceholder.typicode.com/albums/1",
    "id": 1,
    "title": "quidem molestiae enim",
    "user_id": 1
  }
}

List albums

List fake photo albums, all 100 of them or just one user's. Each album holds 50 photos, so an album id from here is what List photos wants. No API key required.

Inputs

Useruser_idnumber
Optional. Return only this user's albums. Users are numbered 1 to 10; leave blank for everyone's.At least 1.
Search textsearchtext
Optional. Keep only the records whose title contains this text. Ignores capitals and matches anywhere in the field. The dataset is lorem ipsum, so this is for testing a search step rather than for finding anything in particular.
Number of recordslimitnumber
Optional. How many albums to return. Between 1 and 100; 10 by default.From 1 to 100. Default: 10.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

albumslist
The albums in this page.
countnumber
How many records are in this page.
has_moretrue/false
True when more records matched than this page holds.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
total_countnumber
How many records matched in total, across every page.
Example output
{
  "albums": [
    {
      "api_url": "https://jsonplaceholder.typicode.com/albums/1",
      "id": 1,
      "title": "quidem molestiae enim",
      "user_id": 1
    }
  ],
  "count": 1,
  "has_more": true,
  "next_offset": 10,
  "total_count": 100
}

List comments

List fake comments, all 500 of them or just the ones on one post, a page at a time. Each carries a name, an email address and a body, which makes it stand-in data for a moderation queue or a notification digest. No API key required.

Inputs

Postpost_idnumber
Optional. Return only the comments on this post. Posts are numbered 1 to 100; leave blank for comments on every post.At least 1.
Commenter's emailemailtext
Optional. Return only the comments left from this address. Matched in full but ignoring capitals, because the addresses in this dataset are mixed-case.
Search textsearchtext
Optional. Keep only the records whose subject, email or body contains this text. Ignores capitals and matches anywhere in the field. The dataset is lorem ipsum, so this is for testing a search step rather than for finding anything in particular.
Number of recordslimitnumber
Optional. How many comments to return. Between 1 and 100; 10 by default.From 1 to 100. Default: 10.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

commentslist
The comments in this page.
countnumber
How many records are in this page.
has_moretrue/false
True when more records matched than this page holds.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
total_countnumber
How many records matched in total, across every page.
Example output
{
  "comments": [
    {
      "api_url": "https://jsonplaceholder.typicode.com/comments/1",
      "body": "laudantium enim quasi est quidem magnam voluptate ipsam eos",
      "email": "Eliseo@gardner.biz",
      "id": 1,
      "name": "id labore ex et quam laborum",
      "post_id": 1
    }
  ],
  "count": 1,
  "has_more": true,
  "next_offset": 10,
  "total_count": 500
}

List photos

List fake photos, by album or across all 5,000. Every record carries a placeholder image URL and a thumbnail, so this is the step that fills a gallery mockup with pictures. Naming an album keeps it to that album's 50. No API key required.

Inputs

Albumalbum_idnumber
Optional. Return only the photos in this album. Albums are numbered 1 to 100 and hold 50 photos each; leave blank to page through all 5,000.At least 1.
Search textsearchtext
Optional. Keep only the records whose title contains this text. Ignores capitals and matches anywhere in the field. The dataset is lorem ipsum, so this is for testing a search step rather than for finding anything in particular.
Number of recordslimitnumber
Optional. How many photos to return. Between 1 and 100; 10 by default.From 1 to 100. Default: 10.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

countnumber
How many records are in this page.
has_moretrue/false
True when more records matched than this page holds.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
photoslist
The photos in this page.
total_countnumber
How many records matched in total, across every page.
Example output
{
  "count": 1,
  "has_more": true,
  "next_offset": 10,
  "photos": [
    {
      "album_id": 1,
      "api_url": "https://jsonplaceholder.typicode.com/photos/1",
      "id": 1,
      "thumbnail_url": "https://via.placeholder.com/150/92c952",
      "title": "accusamus beatae ad facilis cum similique qui sunt",
      "url": "https://via.placeholder.com/600/92c952"
    }
  ],
  "total_count": 50
}

List posts

List fake blog posts, all 100 of them or just one user's, a page at a time. The stand-in content for a feed, a digest or a batch loop while the real source is still being built. No API key required.

Inputs

Useruser_idnumber
Optional. Return only this user's posts. Users are numbered 1 to 10; leave blank for everyone's.At least 1.
Search textsearchtext
Optional. Keep only the records whose title or body contains this text. Ignores capitals and matches anywhere in the field. The dataset is lorem ipsum, so this is for testing a search step rather than for finding anything in particular.
Number of recordslimitnumber
Optional. How many posts to return. Between 1 and 100; 10 by default.From 1 to 100. Default: 10.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

countnumber
How many records are in this page.
has_moretrue/false
True when more records matched than this page holds.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
postslist
The posts in this page.
total_countnumber
How many records matched in total, across every page.
Example output
{
  "count": 1,
  "has_more": true,
  "next_offset": 10,
  "posts": [
    {
      "api_url": "https://jsonplaceholder.typicode.com/posts/1",
      "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum",
      "id": 1,
      "title": "sunt aut facere repellat provident occaecati excepturi optio",
      "user_id": 1
    }
  ],
  "total_count": 100
}

List to-dos

List fake to-dos, all 200 of them or just one user's, and keep only the ones that are done or only the ones that are not. Stand-in tasks for a reminder digest or a progress report while the real task system is still being wired up. No API key required.

Inputs

Useruser_idnumber
Optional. Return only this user's to-dos. Users are numbered 1 to 10; leave blank for everyone's.At least 1.
Completed?completiontext
Optional. Which to-dos to keep. Both by default, which is how the service returns them.One of: any (Both, completed or not), completed (Completed only), outstanding (Not completed only). Default: any.
Search textsearchtext
Optional. Keep only the records whose title contains this text. Ignores capitals and matches anywhere in the field. The dataset is lorem ipsum, so this is for testing a search step rather than for finding anything in particular.
Number of recordslimitnumber
Optional. How many to-dos to return. Between 1 and 100; 10 by default.From 1 to 100. Default: 10.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

countnumber
How many records are in this page.
has_moretrue/false
True when more records matched than this page holds.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
todoslist
The to-dos in this page.
total_countnumber
How many records matched in total, across every page.
Example output
{
  "count": 1,
  "has_more": true,
  "next_offset": 10,
  "todos": [
    {
      "api_url": "https://jsonplaceholder.typicode.com/todos/1",
      "completed": false,
      "id": 1,
      "title": "delectus aut autem",
      "user_id": 1
    }
  ],
  "total_count": 200
}

List users

List the ten fake users, each a complete profile: name, handle, email, phone, site, postal address with coordinates, and an employer. The contact records to test a CRM sync, a mail merge or an address parser against. No API key required.

Inputs

Search textsearchtext
Optional. Keep only the records whose name, handle, email, city or company contains this text. Ignores capitals and matches anywhere in the field. The dataset is lorem ipsum, so this is for testing a search step rather than for finding anything in particular.
Number of recordslimitnumber
Optional. How many users to return. Between 1 and 100; 10 by default.From 1 to 100. Default: 10.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

countnumber
How many records are in this page.
has_moretrue/false
True when more records matched than this page holds.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
total_countnumber
How many records matched in total, across every page.
userslist
The users in this page.
Example output
{
  "count": 1,
  "has_more": false,
  "next_offset": null,
  "total_count": 10,
  "users": [
    {
      "address": {
        "city": "Gwenborough",
        "latitude": -37.3159,
        "longitude": 81.1496,
        "street": "Kulas Light",
        "suite": "Apt. 556",
        "zipcode": "92998-3874"
      },
      "api_url": "https://jsonplaceholder.typicode.com/users/1",
      "city": "Gwenborough",
      "company": {
        "bs": "harness real-time e-markets",
        "catch_phrase": "Multi-layered client-server neural-net",
        "name": "Romaguera-Crona"
      },
      "company_name": "Romaguera-Crona",
      "email": "Sincere@april.biz",
      "id": 1,
      "name": "Leanne Graham",
      "phone": "1-770-736-8031 x56442",
      "username": "Bret",
      "website": "hildegard.org"
    }
  ]
}

Update a post (simulated)

Send a change to a post and get back what a real update would answer, without anything being stored. Change only the fields you set and the answer is the stored post with your changes applied; replace the whole post and the answer is exactly what you sent, so a field you leave out is gone from it. The difference is the point: it is how a workflow's update step gets tested both ways. No API key required.

Inputs

Postpost_idnumberRequired
The post's id, as it appears in its address. JSONPlaceholder publishes 100 posts, numbered 1 to 100, and the numbering never changes, so an id from an earlier run still means the same post.At least 1.
How to updateupdate_modetext
Whether to change only the fields you set or replace the whole post. Changing is the default. Replacing needs a title and a body, because a replace drops whatever it is not given.One of: change (Change only the fields I set (PATCH)), replace (Replace the whole post (PUT)). Default: change.
Titletitletext
The post's new title. Required when replacing; when changing, leave blank to keep the current one.
Bodybodytext
The post's new text. Required when replacing; when changing, leave blank to keep the current one.
Authoruser_idnumber
Optional. The id of the user to attribute the post to, 1 to 10. Left out of the request when blank.At least 1.

Outputs

methodtext
The HTTP method the choice sent: PATCH for a change, PUT for a replace.
postobject
One of the 100 posts in the dataset.
simulatedtrue/false
Always true. JSONPlaceholder fakes every write: the post is unchanged on the server, and reading it back returns the original.
Example output
{
  "method": "PATCH",
  "post": {
    "api_url": "https://jsonplaceholder.typicode.com/posts/1",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum",
    "id": 1,
    "title": "foo",
    "user_id": 1
  },
  "simulated": true
}

On this page