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:
POST and DELETE to the API return 404. You can't add the user your signup form just created, edit one, or remove one./api/5 is a 404 โ there is no "user 5". Every response is a fresh batch of strangers (unless you pin ?seed=, and even then you can only page through the same shuffle).?city=Paris is silently ignored โ you get random cities back. You can pick gender and nationality, and that's it.inc=/exc= their fields but never add your own (role, plan, lastSeenโฆ).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.
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.
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'
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 |
|---|---|
?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: 404 | POST / 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.
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.
| randomuser.me | Mockbird | |
|---|---|---|
| Setup | none at all | none 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 photographs | initials avatars (SVG, self-hosted) |
| Output formats | โ JSON, CSV, XML, YAML | JSON, CSV (?mock_format=csv) + GraphQL |
| Add / edit / delete users | โ read-only | โ full CRUD, persisted |
| Filter / search / sort | gender + 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 โ
/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.