Dummy JSON API
The Dummy JSON API is a free public endpoint at https://mcp.httpstatus.com/dummy/{kind} that returns realistic placeholder JSON for common data shapes: user, users, product, products, todo, and error. For the plural kinds, an optional count query parameter (up to 50) controls how many records come back. It's built for prototyping front-ends, teaching fetch() and async code, and populating demos without standing up a real backend.
Endpoint
https://mcp.httpstatus.com/dummy/{kind}Realistic placeholder JSON, deterministic per index (the same URL always returns the same records), CORS open, no key. Names, emails and addresses are synthetic and use reserved example domains.
| Kind | Returns | Fields |
|---|---|---|
| /dummy/user | object | id, name, username, email, phone, website, address{street, city, zip, country}, company, createdAt |
| /dummy/users?count=3 | array | same as user; count 1–50 (default 5) |
| /dummy/product | object | id, sku, title, description, category, price, currency, rating, stock, tags[], updatedAt |
| /dummy/products?count=10 | array | same as product; count 1–50 |
| /dummy/todo?count=5 | array | id, userId, title, completed, dueDate |
| /dummy/error?status=422 | object (non-2xx) | error{code, message, status, requestId, timestamp, details[]}; status 400–599 (default 500) |
Try each kind
GET https://mcp.httpstatus.com/dummy/userGET https://mcp.httpstatus.com/dummy/users?count=3GET https://mcp.httpstatus.com/dummy/productGET https://mcp.httpstatus.com/dummy/products?count=10GET https://mcp.httpstatus.com/dummy/todo?count=5GET https://mcp.httpstatus.com/dummy/error?status=422
Use it from code
// Populate a prototype list without a backend
const res = await fetch("https://mcp.httpstatus.com/dummy/products?count=12");
const products = await res.json();
render(products.map(p => `<li>${p.title} — $${p.price}</li>`).join(""));
// Exercise your error handling
const bad = await fetch("https://mcp.httpstatus.com/dummy/error?status=429");
if (!bad.ok) {
const { error } = await bad.json();
console.warn(error.code, error.message);
}How it works
Call the endpoint with a GET request to https://mcp.httpstatus.com/dummy/{kind}, where {kind} is one of user, users, product, products, todo, or error. The singular kinds — user, product, todo — return a single realistic JSON object with plausible field values: names, emails, prices, timestamps and the like, generated fresh on each request rather than pulled from a fixed fixture. The error kind returns a JSON object shaped like a typical API error response, useful for testing how your UI renders failure states.
The plural kinds — users and products — accept an optional count query parameter that controls how many records are returned in the array, for example /dummy/users?count=20. Count is capped at 50 per request to keep responses fast and reasonably sized; requesting more than that returns 50. Each record in the array follows the same shape as its singular counterpart, so code written against /dummy/user will handle items from /dummy/users without modification.
Like the status responder, this endpoint needs no authentication, has no rate limit that affects normal use, and sends CORS headers permitting requests from any browser origin, so it can be called directly from client-side fetch() calls during development. It's a convenient way to build and demo a front-end against realistic-looking data before a real backend exists, or to teach fetching and rendering JSON without the overhead of setting up a database.
Frequently asked questions
What kinds of data can I fetch from this API?
Six kinds: user, users, product, products, todo, and error — covering the most common shapes needed to prototype a typical app's front-end.
How many records can I request at once?
Up to 50 per request using the ?count= query parameter on the plural endpoints (users, products). Requesting more than 50 is capped at 50.
Does the data stay the same on every request?
No — each request generates fresh, realistic values rather than replaying a fixed fixture, so you can test how your UI handles varying data without special-casing it.
Can I use this in a production app?
It's meant for prototyping, demos, and teaching — not as a data source for a real production app, since the data is placeholder content regenerated on each call rather than persisted or queryable.
Do I need an API key to use this?
No. It is free, requires no authentication, and sends CORS headers allowing direct calls from browser JavaScript on any origin.