Fake API Playground ๐Ÿงช

Static JSON endpoints for testing an API client. No API key. No auth. No rate limit. Every path is a plain GET that returns application/json, and Access-Control-Allow-Origin is *, so you can call it from a browser.

Start here

curl -s https://this-site/index.json | jq .

/index.json lists every endpoint on this site, with a description. It is the machine-readable version of this page.

Related data

Ids are plain integers, and the collections point at each other. This lets you test more than one request in sequence:

/orders.json     โ†’ user_id ............ /users/{id}.json
                 โ†’ items[].product_id . /products/{id}.json
/posts.json      โ†’ author_id .......... /users/{id}.json
/comments.json   โ†’ post_id ............ /posts/{id}.json
/posts/{id}.json โ†’ includes its own comments

Pagination

The /page/N.json endpoints wrap the records in an envelope, so a client can follow meta.next_page until it is null:

{
  "meta": {
    "page": 1, "per_page": 10, "total": 50, "total_pages": 5,
    "next_page": "/users/page/2.json",
    "prev_page": null
  },
  "data": [ ... ]
}

Collections

/quotes.json 111 famous quotes with author and tags. Real data.
/users.json 50 people with an address, a company and an avatar. Fake data.
/products.json 40 shop items with a price, stock level and image. Fake data.
/orders.json 200 orders. Each order points to a user_id and to product_ids.
/posts.json 60 blog posts. Each post points to an author_id in /users.json.
/comments.json 300 comments. Each comment points to a post_id in /posts.json.
/countries.json 250 countries with capital, currency and population. Real data, refreshed at build time.
/crypto.json The top 20 coins by market cap. Real prices, refreshed at build time.
/news.json 40 headlines from public news feeds. Real data, refreshed at build time.

One record

/users/{id}.json A single record by id. Ids 1 to 50. try /users/1.json
/products/{id}.json A single record by id. Ids 1 to 40. try /products/1.json
/posts/{id}.json A single record by id. Ids 1 to 60. try /posts/1.json

Paginated

/quotes/page/{n}.json /quotes.json in a page envelope, 25 per page. Pages 1 to 5. Page 6 is empty, with has_more false. try /quotes/page/1.json
/users/page/{n}.json /users.json in a page envelope, 25 per page. Pages 1 to 2. Page 3 is empty, with has_more false. try /users/page/1.json
/products/page/{n}.json /products.json in a page envelope, 25 per page. Pages 1 to 2. Page 3 is empty, with has_more false. try /products/page/1.json
/orders/page/{n}.json /orders.json in a page envelope, 25 per page. Pages 1 to 8. Page 9 is empty, with has_more false. try /orders/page/1.json
/posts/page/{n}.json /posts.json in a page envelope, 25 per page. Pages 1 to 3. Page 4 is empty, with has_more false. try /posts/page/1.json
/comments/page/{n}.json /comments.json in a page envelope, 25 per page. Pages 1 to 12. Page 13 is empty, with has_more false. try /comments/page/1.json
/countries/page/{n}.json /countries.json in a page envelope, 25 per page. Pages 1 to 10. Page 11 is empty, with has_more false. try /countries/page/1.json
/crypto/page/{n}.json /crypto.json in a page envelope, 25 per page. Pages 1 to 1. Page 2 is empty, with has_more false. try /crypto/page/1.json
/news/page/{n}.json /news.json in a page envelope, 25 per page. Pages 1 to 2. Page 3 is empty, with has_more false. try /news/page/1.json

Utility

/large.json 5000 flat records, about 1 MB. Use it to test speed and memory.
/status.json A small health-check payload.

Error payloads

/errors/400.json An error-shaped body for HTTP 400. Served with status 200.
/errors/401.json An error-shaped body for HTTP 401. Served with status 200.
/errors/403.json An error-shaped body for HTTP 403. Served with status 200.
/errors/404.json An error-shaped body for HTTP 404. Served with status 200.
/errors/422.json An error-shaped body for HTTP 422. Served with status 200.
/errors/429.json An error-shaped body for HTTP 429. Served with status 200.
/errors/500.json An error-shaped body for HTTP 500. Served with status 200.