← All guides

Turn an OpenAPI spec into a live mock server β€” one request, no install

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 caps free mocks at 10 requests/minute and keeps your spec public. 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://mockbird.mockbird.workers.dev/api/projects/import \
  --data-binary @openapi.yaml

The response is your new backend:

{
  "id": "abc123",
  "name": "Swagger Petstore",
  "adminKey": "…keep this…",
  "baseUrl": "https://mockbird.mockbird.workers.dev/m/abc123",
  "resources": [
    { "name": "pets",   "seeded": 20, "url": "https://mockbird.mockbird.workers.dev/m/abc123/pets" },
    { "name": "owners", "seeded": 20, "url": "https://mockbird.mockbird.workers.dev/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.

What the importer actually understands

Anything it can't model as a record field (nested objects, arrays-of-objects) is skipped and listed in warnings instead of failing the import β€” you still get a working mock of everything else.

Non-CRUD paths round-trip too

Real specs aren't all /things and /things/{id}. Login endpoints, /search, /health, RPC-style verbs like POST /invoices/{id}/send β€” the importer turns every operation that doesn't fit the CRUD surface into a custom route that answers with the spec's own example (verbatim, including non-JSON content types) or, when there's only a schema, a value generated from it (format: uuid β†’ a UUID, date-time β†’ a timestamp, enums β†’ their first value). Param segments map naturally: /invoices/{id}/send is served at /invoices/:id/send for any id. A spec with zero CRUD-shaped paths still imports β€” you get a pure fixed-route mock. Each created route is listed under routes in the import response, and you can edit any of them in the dashboard afterwards (templating, delays, statuses).

Spec-faithful: your examples are served verbatim

If your spec ships explicit response examples, Mockbird doesn't invent data β€” it hosts your example records exactly as written, the behavior Prism users expect. A collection GET with example: [{...}, {...}] (media-level, schema-level, named examples, or Swagger 2.0 response.examples) becomes those records, verbatim, with wrapper shapes like {"data": [...]} unwrapped. The difference from Prism: the records are live β€” POST adds one, DELETE removes one, ?status=pending filters them. Resources without examples still get realistic seeded data, and ?examples=0 turns the behavior off if you'd rather have 20 fake records than your 2 examples.

What you get that a static mock doesn't give you

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.

Options

OptionEffect
?seed=50records per resource (default 20, max 100)
?name=my-mockproject name (default: the spec's info.title)
?examples=0ignore the spec's response examples and seed fake data instead (default: examples are hosted verbatim)

Round trip

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.

vs the usual suspects

PrismMockoonMockbird
Install neededNode CLIdesktop appnone β€” one curl
Hosted URL for previews/CI/teammatesDIY + tunnelDIY deploybuilt in
Stateful CRUD (writes persist)β€”partialβœ”
Seeded realistic dataexamples onlytemplatesβœ” schema-aware, enums kept
Spec examples served verbatimβœ” (static)β€”βœ” and stateful
YAML inputβœ”βœ”βœ”
Price for hosted mockingn/an/afree

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. Full head-to-head: Prism alternative.

Try it right now

No spec handy? Import the demo project's own spec:

curl -s https://mockbird.mockbird.workers.dev/m/demo/openapi.json | \
  curl -X POST https://mockbird.mockbird.workers.dev/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.

⚑ Skip the terminal: paste your file at /app#import β€” an OpenAPI spec, db.json, CSV, Postman collection, or HAR export becomes a live hosted API in seconds, no signup. Or create a seeded example project in one click.