โ† All guides

A free DummyAPI (dummyapi.io) alternative โ€” no app-id header, no 500/day cap

Name check: this page is about DummyAPI at dummyapi.io โ€” the one with the app-id header. If you're after DummyJSON (dummyjson.com), that's a different service: we compare it here.

Credit first: DummyAPI earned its place in tutorials. Its dataset is genuinely rich โ€” over 100 fake users, 800+ posts with real photographs, 1,000+ comments, tags, and varied field types including images, links, datetimes and map location data โ€” connected by real relations. It speaks both REST and GraphQL, and it does something most fake APIs fake: with your app-id, writes actually persist in your own environment (there's even a created=1 parameter to list only what you created). That's more than JSONPlaceholder, FakeStoreAPI or DummyJSON give you, and it's free.

The friction is at the front door. Three things to know, all from DummyAPI's own site or verified hands-on (September 2026):

  1. You can't curl anything without an account. The docs are upfront: "It is required to set app-id Header for each request", and the app-id comes from your account page. Hands-on: a keyless GET /data/v1/user answers HTTP 403 {"error":"APP_ID_MISSING"} โ€” reads included โ€” and an invented app-id answers {"error":"APP_ID_NOT_EXIST"}. For a service whose job is "try things instantly", the first step is a signup form.
  2. 500 requests per day, then Patreon. The homepage says free use is capped at 500 requests/day "on a beta phase", with unlimited access via Patreon support. A React list that re-fetches on every keystroke can spend that before lunch.
  3. The models and page sizes are fixed. You get user, post, comment, tag โ€” no way to add an invoices collection or reshape a model. Pagination is capped at limit=50 per page (docs: limit range 5โ€“50, page 0โ€“999), and there are no failure-simulation controls (no delay, no forced 500s) for testing error paths.

The same backend, yours, in three curls

Rebuild DummyAPI's shape as your own project โ€” every command below ran against production before this page was published. No signup, no header:

P=$(curl -s -X POST https://mockbird.mockbird.workers.dev/api/projects \
  -H 'content-type: application/json' -d '{"name":"my-dummy","blank":true}')
ID=$(echo "$P" | grep -o '"id": *"[^"]*"' | head -1 | cut -d'"' -f4)
KEY=$(echo "$P" | grep -o '"adminKey": *"[^"]*"' | cut -d'"' -f4)

curl -s -X POST "https://mockbird.mockbird.workers.dev/api/projects/$ID/resources" \
  -H "x-admin-key: $KEY" -H 'content-type: application/json' -d '{
  "name":"users","seed":12,"fields":[
    {"name":"title","type":"oneOf","values":["mr","ms","mrs","miss","dr"]},
    {"name":"firstName","type":"firstName"},{"name":"lastName","type":"lastName"},
    {"name":"email","type":"email"},{"name":"picture","type":"avatar"}]}'

curl -s -X POST "https://mockbird.mockbird.workers.dev/api/projects/$ID/resources" \
  -H "x-admin-key: $KEY" -H 'content-type: application/json' -d '{
  "name":"posts","seed":20,"fields":[
    {"name":"text","type":"sentence"},{"name":"image","type":"image"},
    {"name":"likes","type":"number"},{"name":"userId","type":"refId"}]}'

curl -s -X POST "https://mockbird.mockbird.workers.dev/api/projects/$ID/resources" \
  -H "x-admin-key: $KEY" -H 'content-type: application/json' -d '{
  "name":"comments","seed":15,"fields":[
    {"name":"message","type":"sentence"},
    {"name":"userId","type":"refId"},{"name":"postId","type":"refId"}]}'

(DummyAPI's owner relation becomes a userId field โ€” that naming convention is what powers the nested routes and joins below. Prefer clicking? One-click blog preset gives you posts/comments/authors instantly.)

Use it โ€” their greatest hits, keyless

curl 'https://mockbird.mockbird.workers.dev/m/<ID>/users?page=1&limit=10'   # same page/limit params (ours is 1-based)
curl 'https://mockbird.mockbird.workers.dev/m/<ID>/users/2'                # single user by id
curl 'https://mockbird.mockbird.workers.dev/m/<ID>/users/2/posts'          # their /post/user/:id
curl 'https://mockbird.mockbird.workers.dev/m/<ID>/posts/1/comments'       # their /comment/post/:id
curl 'https://mockbird.mockbird.workers.dev/m/<ID>/posts?_expand=user&likes_gte=500&sortBy=likes&order=desc'
curl -X POST 'https://mockbird.mockbird.workers.dev/m/<ID>/users' \
  -H 'content-type: application/json' \
  -d '{"title":"dr","firstName":"Grace","lastName":"Hopper","email":"grace@example.com"}'
# โ†’ {"id":13} โ€” and GET /users/13 returns it: writes persist here too, no app-id needed

GraphQL rides along on the same data โ€” queries and mutations both (DummyAPI's own site describes its GraphQL as access to static fake data):

curl -X POST 'https://mockbird.mockbird.workers.dev/m/<ID>/graphql' \
  -H 'content-type: application/json' \
  -d '{"query":"{ posts(limit:2, sortBy:\"likes\", order:\"desc\") { id likes user { firstName } } }"}'

DummyAPI โ†’ Mockbird translation

On dummyapi.ioOn Mockbird
Sign up โ†’ copy app-id โ†’ -H 'app-id: โ€ฆ' on every requestno header, no signup โ€” the project URL is the whole story
GET /data/v1/user?page=0&limit=10GET /m/<id>/users?page=1&limit=10 (same params; ours starts at 1, no 50 cap)
GET /data/v1/user/:idGET /m/<id>/users/:id
GET /data/v1/post/user/:idGET /m/<id>/users/:id/posts (nested route)
GET /data/v1/comment/post/:idGET /m/<id>/posts/:id/comments
POST /data/v1/user/create (persists in your env โ€” credit where due)POST /m/<id>/users โ€” persists, and it's your whole project
created=1 to see only your itemseverything is your environment โ€” no flag needed
Fixed models: user / post / comment / tagany collections, any typed fields (oneOf enums, refId relations, 35+ types)
GraphQL ("static fake data", per their site)GraphQL queries and mutations, same data as REST
Error testing: none?mock_status=503, ?mock_delay=2000, chaos injection
500 requests/day free10,000 requests per project per day

Honest comparison

DummyAPIMockbird
First requestsignup + app-id headerkeyless curl
Free cap500 requests/day (beta; Patreon for unlimited)10,000/day per project
Writesreal, in your app-id environment โ€” better than most fake APIsreal, full CRUD
Dataset out of the box100+ users, 800+ posts with real photos, map data โ€” richer than our generated seedsfaker-style seeds; your schema, your sizes
Own schemano โ€” 4 fixed modelsyes โ€” any collections + custom routes
Page sizelimit 5โ€“50your call
Failure simulationโ€”status/delay/chaos per request
Exportsโ€”OpenAPI, Postman, TypeScript/Zod, db.json eject
Multiple environmentsyes โ€” parallel app-ids (nice touch)parallel projects, plus snapshots per project

Where DummyAPI wins, plainly: if what you want is a large, ready-made, realistic social dataset โ€” real photographs with metadata, map locations, a populated comment graph โ€” and you don't mind the signup, its seeded content is more lifelike than generated data. This page is for the moment the app-id header, the 500/day meter, or the fixed models get in the way of just building.

Try it with zero setup

curl 'https://mockbird.mockbird.workers.dev/m/demo/products?limit=2&sortBy=price&order=desc'
curl -X POST https://mockbird.mockbird.workers.dev/m/demo/products \
  -H 'content-type: application/json' -d '{"name":"Test product","price":9.99}'
# โ†’ it persists โ€” GET it back by the id you received. No app-id, no account.

This page is written by the Mockbird maker โ€” bias disclosed. DummyAPI facts verified September 4, 2026: the required app-id header, limit 5โ€“50 / page 0โ€“999 ranges, and the created=1 parameter are from dummyapi.io's own documentation; the 100 users / 800+ posts / 1k+ comments dataset sizes, the 500 requests/day beta cap and Patreon upsell are from its homepage; the keyless-GET โ†’ 403 APP_ID_MISSING and bogus-key โ†’ APP_ID_NOT_EXIST responses were verified hands-on with curl (read-only requests; we touched no one's data). Every Mockbird command on this page was run against production before publishing (scratch project deleted after). Anonymous projects have a per-IP daily creation cap; sign up (free) to keep projects permanently.

Full API reference in the docs. More guides: DummyJSON alternative ยท JSONPlaceholder alternative ยท FakeStoreAPI alternative ยท GoRest alternative. Create your API โ†’

โšก Skip the terminal: this link creates a seeded blog backend in one click โ€” posts, comments, authors, live URL, no signup. Or import your own OpenAPI/db.json/CSV.