You have the contract before you have the backend. That's the whole point of an OpenAPI spec β but actually running a mock of it usually means installing something: Prism needs Node and a terminal that stays open, Mockoon wants a desktop app, SwaggerHub's hosted mocking sits behind a paid plan. Fine on your machine; useless for a deploy preview, a teammate on Windows, CI, or your phone.
Mockbird turns a spec into a hosted mock in one request. JSON or YAML in, live URL out:
curl -X POST https://HOST/api/projects/import \
--data-binary @openapi.yaml
The response is your new backend:
{
"id": "abc123",
"name": "Swagger Petstore",
"adminKey": "β¦keep thisβ¦",
"baseUrl": "https://HOST/m/abc123",
"resources": [
{ "name": "pets", "seeded": 20, "url": "https://HOST/m/abc123/pets" },
{ "name": "owners", "seeded": 20, "url": "https://HOST/m/abc123/owners" }
],
"warnings": []
}
No signup, no CLI, no YAML-to-JSON conversion step. Paste-into-browser also works: the dashboard has an Import OpenAPI / db.json button with a file picker.
/users + /users/{id} become a users resource; nested /users/{id}/posts contributes posts. Prefixes like /api/v1 are ignored.$ref and allOf are resolved, including refs into components/schemas and Swagger's definitions.{"data": [...]} are unwrapped to the record schema.format: email seeds real-looking emails, uuid β UUIDs, date-time β ISO timestamps, uri β URLs.price gets prices, avatar gets avatar URLs, city gets cities, createdAt gets past dates, authorId gets small integer FKs that line up with seeded parents.enum: [available, pending, sold] seeds exactly those values β and they round-trip into the mock's own exported spec.Anything it can't model (nested objects, arrays-of-objects inside a record) is skipped and listed in warnings instead of failing the import β you still get a working mock of everything else.
Prism replays examples. Mockbird gives you a real stateful CRUD API over seeded data:
GET /m/abc123/pets?status=available&limit=5 # filters + pagination
POST /m/abc123/pets # actually creates β next GET shows it
PUT /m/abc123/pets/3 # updates persist
DELETE /m/abc123/pets/3
GET /m/abc123/pets?mock_delay=2000 # test your spinner
GET /m/abc123/pets?mock_status=500 # test your error state
Plus sorting, substring search, _expand/_embed relations, nested routes, CORS on everything, a live request inspector, and signed webhooks on writes β all free.
| Option | Effect |
|---|---|
?seed=50 | records per resource (default 20, max 100) |
?name=my-mock | project name (default: the spec's info.title) |
Every Mockbird project also exports a live OpenAPI 3.0 document at /m/<project>/openapi.json. Import that into Postman or Swagger UI β or back into Mockbird: the importer honors x-mockbird-type annotations, so export β import reproduces your schema exactly.
| Prism | Mockoon | Mockbird | |
|---|---|---|---|
| Install needed | Node CLI | desktop app | none β one curl |
| Hosted URL for previews/CI/teammates | DIY + tunnel | DIY deploy | built in |
| Stateful CRUD (writes persist) | β | partial | β |
| Seeded realistic data | examples only | templates | β schema-aware, enums kept |
| YAML input | β | β | β |
| Price for hosted mocking | n/a | n/a | free |
To be fair: Prism does spec-validation proxying (checking requests against the contract), which Mockbird doesn't. If you need strict contract enforcement, run Prism in CI β and use Mockbird for the hosted, stateful, shareable part.
No spec handy? Import the demo project's own spec:
curl -s https://HOST/m/demo/openapi.json | \
curl -X POST https://HOST/api/projects/import --data-binary @-
Ten seconds from spec to a live, seeded, CORS-enabled mock of an e-commerce API. Anonymous projects can be claimed into a free account later, so nothing is throwaway.