โ† All guides

A fake user API you can actually write to (randomuser.me alternative)

randomuser.me is a lovely tool, and this guide starts by saying so: for a one-off "give me a realistic person" call it's hard to beat โ€” localized names in dozens of nationalities, photo headshots, per-request ?seed= determinism, even CSV/XML output. If that's all you need, keep using it.

The wall you eventually hit is that randomuser.me is a generator, not a backend. We verified all of this against the live API in July 2026:

So the moment your prototype needs "the user list plus sign-up, edit, delete, search" โ€” the moment fake users need to behave like a users table โ€” you want a different tool.

Option 0: keep your randomuser.me code, swap the host

If all you want is the same JSON without the third-party dependency, Mockbird serves a randomuser.me-compatible endpoint โ€” same response shape (name.title, location.street.number, login.uuid, dob.date, picture.largeโ€ฆ), same query params. Change the base URL and existing code keeps working:

- https://randomuser.me/api/?results=5&seed=demo
+ https://mockbird.mockbird.workers.dev/m/randomuser/api/?results=5&seed=demo

results, seed, page, gender, nat, inc/exc and noinfo=1 all work, and the output is fully deterministic: the same seed + page returns identical users forever (results=10&page=1 is exactly pages 1+2 of results=5, like their seeded pagination):

curl 'https://mockbird.mockbird.workers.dev/m/randomuser/api/?results=3&seed=demo&nat=us,gb&gender=female'
curl 'https://mockbird.mockbird.workers.dev/m/randomuser/api/?inc=name,email,picture&noinfo=1'

Honest differences, stated plainly: names and cities come from an international pool (not localized per nat the way theirs are), the login.md5/sha1/sha256 fields are stable dummy hex of the right shape (not real digests), the pictures are deterministic SVG initials avatars served by us (not photographs), results cap at 100 per request (theirs allows 5,000), and output is JSON only. GET /m/randomuser lists everything the surface serves, including the /api/portraits/women/42.svg paths the picture URLs point at.

Try it in 10 seconds (no signup)

Mockbird's public demo has a seeded people collection right now:

curl 'https://mockbird.mockbird.workers.dev/m/demo/customers?limit=3&select=firstName,lastName,email'
curl 'https://mockbird.mockbird.workers.dev/m/demo/customers/1'          # a single person, by id
curl 'https://mockbird.mockbird.workers.dev/m/demo/customers?_page=2&_limit=2'

Your own user API in two curls

curl -X POST https://mockbird.mockbird.workers.dev/api/projects \
  -H 'content-type: application/json' -d '{"name":"user-api"}'
# โ†’ {"id":"abc123","adminKey":"KEY","baseUrl":"https://mockbird.mockbird.workers.dev/m/abc123", ...}

curl -X POST https://mockbird.mockbird.workers.dev/api/projects/abc123/resources \
  -H 'X-Admin-Key: KEY' -H 'content-type: application/json' \
  -d '{"name":"users","template":"users","seed":25}'

That's 25 realistic users โ€” names, emails, cities, join dates, and avatar URLs served by your own project (initials in a colored circle, generated SVG โ€” no third-party image service to go down, and no real person's photograph standing in for "Jane User"):

curl 'https://mockbird.mockbird.workers.dev/m/abc123/users?limit=1'
# [{ "id": 1,
#    "firstName": "Aria", "lastName": "Johnson",
#    "email": "aria.johnson88@example.com",
#    "avatar": "https://mockbird.mockbird.workers.dev/m/abc123/img/128x128?seed=aria9133&round=1&text=AJ",
#    "city": "Kyoto",
#    "createdAt": "2026-05-22T15:12:54.772Z" }]

Want different fields? Skip template and pass your own fields array โ€” role, plan, isAdmin, whatever your UI needs (field types).

randomuser.me โ†’ Mockbird translation

randomuser.meMockbird
?results=20?limit=20 (or _limit)
?page=3&results=10&seed=x?_page=3&_limit=10 โ€” stable without a seed, because the data persists
?inc=name,email?select=firstName,lastName,email (projection)
?seed=foo (same strangers every call)not needed โ€” your 25 users are records in a real collection; same list until you change it
no single-user URL/users/7
?city=โ€ฆ ignored?city=Kyoto, ?lastName_like=jack, ?q=aria, ?_sort=firstName all work
writes: 404POST / PATCH / DELETE persist (and show up in the inspector)
login.uuid/password/sha256 (inert strings)POST /auth/login with any seeded user's email โ†’ a real signed JWT; protected mode makes every endpoint require it

That last row deserves a sentence: because your fake users are a real collection, the mock auth endpoints treat them as the user roster. POST /m/abc123/auth/login with {"email":"aria.johnson88@example.com","password":"anything"} returns a JWT plus that user's record; /auth/register inserts a new one. Your login screen, session handling and token-expiry logic all become testable against the same data your user list renders.

Also in the box

GraphQL over the same records ({ users(limit: 2, sortBy: "firstName") { id firstName email } }), named snapshots for deterministic tests, types.ts/Zod/OpenAPI/Postman exports, webhooks on writes, and db.json export so you can eject to json-server any time.

Honest comparison

randomuser.meMockbird
Setupnone at allnone for the demo; two curls for your own
Localized identities (?nat=)โœ” dozens of nationalities, localized names/addresses/phonesโœ˜ one international-ish pool
Photo headshotsโœ” real photographsinitials avatars (SVG, self-hosted)
Output formatsโœ” JSON, CSV, XML, YAMLJSON, CSV (?mock_format=csv) + GraphQL
Add / edit / delete usersโœ˜ read-onlyโœ” full CRUD, persisted
Filter / search / sortgender + nationality onlyโœ” any field, ranges, substring, full-text, sort
Custom fieldsโœ˜โœ”
Login / auth simulationโœ˜ (inert credential strings)โœ” real signed JWTs against your roster
Failure/latency simulationโœ˜?mock_status=500, ?mock_delay=2000, chaos

Fair is fair: if you need a French user with a French address and a photo, use randomuser.me โ€” we don't do localized identity generation, and their headshots look better in a demo than initials do. Use us when the user list has to act like part of your app instead of a slideshow of strangers.

What this is (and isn't): Mockbird is a mock-API/prototyping service, not a production user store โ€” don't put real personal data in it. All seeded people are fake (names from a word list, emails on example.com). Projects are unlisted; anonymous creation has a per-IP daily cap โ€” sign up (free) to keep projects tied to an account.

This page is written by the Mockbird maker โ€” bias disclosed. randomuser.me behavior (writes 404, /api/5 404, ?city= ignored, inc/nat/seed/format working) verified with live requests in July 2026; uinames.com checked the same day.

Prefer a UI? The dashboard has a one-click /users starter on every new project. More guides: reqres.in alternative ยท mock JWT auth ยท placeholder images & avatars ยท FakerAPI alternative. Create your API โ†’

โšก Skip the terminal: this link creates a live, seeded SaaS backend (users, teams, events, todos) with a working /auth/login in the dashboard โ€” real URL, data browser already open, no signup. Or import your own OpenAPI spec, db.json, CSV, Postman collection, or HAR and mock your exact shapes.