← All guides

A DummyJSON alternative where the data is yours

DummyJSON deserves its popularity: a free fake REST API with rich datasets (products with images, users, carts, todos), pagination, sorting, search, delay simulation, even working JWT auth β€” no signup, no key. But everyone building anything that isn't a phone shop hits the same wall twice. The dataset is fixed β€” 194 products, someone else's users, and if your app has invoices or listings there's no endpoint for them (GET /invoices is a 404). And writes are faked: POST /products/add returns {"id":195}, but GET /products/195 is a 404, and a PUT changes only the response, never the data β€” so create-then-list flows, optimistic-update rollbacks, and delete confirmations can't be tested for real. (Both behaviors verified live, July 2026. The same two walls apply to FakeStoreAPI β€” covered in its own guide.)

Mockbird keeps the parts that made DummyJSON great β€” free, keyless, CORS on, familiar query params, simulation flags, JWT auth β€” and removes the walls: your own resources, realistic seeded data, and full CRUD that actually persists.

See it in 5 seconds β€” same params you already use

The shared demo project is live right now, and sortBy/order work exactly like DummyJSON's:

curl "https://HOST/m/demo/products?sortBy=price&order=asc&limit=3"

Realistic product names, prices, image URLs, categories. (The demo is shared and resets daily; make your own project below.)

The shop starter kit: products, orders, customers, reviews β€” but yours

One request creates a whole seeded store backend (the ecommerce preset: 30 products, 25 orders, 20 customers, 40 reviews with foreign keys):

curl -X POST https://HOST/api/projects \
  -H 'content-type: application/json' \
  -d '{"name":"my-shop","preset":"ecommerce"}'
# β†’ {"id":"abc123","adminKey":"KEY","baseUrl":"https://HOST/m/abc123", ...}

Translation table

DummyJSONMockbird
/products?limit=10&skip=20/products?limit=10&page=3 (page-based; _page/_limit also work)
?sortBy=price&order=asc?sortBy=price&order=asc β€” identical
?select=title,price?select=title,price β€” identical (id always included; works on single records and joined fields too)
/products/search?q=phone/products?q=phone
/products/category/beauty/products?category=beauty (filter by any field)
?delay=2000?mock_delay=2000
/http/503 (bare status endpoint)/products?mock_status=503 β€” error simulation on your real routes, so your error handling is tested where it actually runs
/auth/login (fixed usernames like emilys)/auth/login β€” any email works, or use a seeded users resource as the roster; real signed JWTs, configurable expiry
/users/1/carts (fixed relations)/customers/1/orders β€” nested routes from your own <singular>Id foreign keys, plus ?_expand/?_embed joins

Writes that persist

curl -X POST "https://HOST/m/abc123/products" \
  -H 'content-type: application/json' \
  -d '{"name":"My Actual Product","price":19.99}'
# β†’ 201 {"id":31, ...}

curl "https://HOST/m/abc123/products/31"
# β†’ 200 β€” it's really there. PUT/PATCH/DELETE stick too.

Broke the data experimenting? Save a snapshot and restore it in one call (great in a test beforeEach), or reseed the resource fresh.

Not a shop? Define any schema

curl -X POST https://HOST/api/projects/abc123/resources \
  -H 'X-Admin-Key: KEY' -H 'content-type: application/json' \
  -d '{"name":"invoices","fields":[
        {"name":"number","type":"uuid"},
        {"name":"customer","type":"fullName"},
        {"name":"amount","type":"price"},
        {"name":"status","type":"status"},
        {"name":"dueDate","type":"futureDate"}
      ],"seed":25}'

Or import an OpenAPI spec or a json-server db.json and your exact data is hosted.

Things DummyJSON doesn't do

Honest comparison

DummyJSONMockbird
Signup needednono (optional, to keep projects)
Resources~10, fixed (products, carts, users, posts, todos…)your own, any schema, or presets
Datarich but fixed (194 products, with images)realistic seeded, reseedable, or your imported records
Writessimulated β€” response only, nothing storedpersist (snapshot/reseed to reset)
Authreal JWTs, fixed user rosterreal JWTs, any email or your users resource; register persists; protected mode
Simulation?delay=, /http/:code?mock_delay=, ?mock_status= on your real routes
GraphQL / snapshots / webhooks / exportsβ€”included, free
Limitsinformal fair use10,000 requests/day per project, generous free caps

Where DummyJSON still wins: its fixed datasets are hand-crafted and deep β€” product photos on a CDN, users with addresses and crypto wallets, recipes, quotes β€” and Mockbird's generated seed data won't match that richness (no hosted product photos here, just placeholder image URLs). If someone else's rich catalog is exactly what you want, keep using it. Reach for Mockbird when the schema needs to be yours or writes need to stick. Written by the Mockbird maker β€” bias disclosed; DummyJSON behavior re-verified July 2026.

Full API reference in the docs. More guides: JSONPlaceholder alternative Β· fake e-commerce API Β· 5 free mock-API tools compared. Create your API β†’