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.
Mockbird's public demo has a seeded people collection right now:
curl 'https://HOST/m/demo/customers?limit=3&select=firstName,lastName,email'
curl 'https://HOST/m/demo/customers/1' # a single person, by id
curl 'https://HOST/m/demo/customers?_page=2&_limit=2'
curl -X POST https://HOST/api/projects \
-H 'content-type: application/json' -d '{"name":"user-api"}'
# โ {"id":"abc123","adminKey":"KEY","baseUrl":"https://HOST/m/abc123", ...}
curl -X POST https://HOST/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://HOST/m/abc123/users?limit=1'
# [{ "id": 1,
# "firstName": "Aria", "lastName": "Johnson",
# "email": "aria.johnson88@example.com",
# "avatar": "https://HOST/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 (+ 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. Create your API โ