A real REST API for data
that doesn't exist yet

Define your resources, get a live CRUD API with realistic fake data in seconds. REST + GraphQL, mock auth, request bins, snapshots β€” CORS-enabled and free. No signup wall: you reach for a mock API in the ten minutes you're annoyed enough to look, so your first working endpoint is one curl β€” or one click β€” away.

Open dashboard


  
# live public playground β€” try it right now, no signup:
$ curl "https://mockbird.mockbird.workers.dev/m/demo/products?limit=2"
$ curl "https://mockbird.mockbird.workers.dev/m/demo/orders?status=shipped&_expand=customer"
$ curl "https://mockbird.mockbird.workers.dev/m/demo/products/3/reviews"

The demo project is a shared sandbox (e-commerce preset: products, orders, customers, reviews). Writes welcome β€” it resets every 24 h.

⚑ Instant

One click gives you a live endpoint seeded with realistic data β€” names, emails, prices, images, dates. No LLM, no waiting.

πŸ” Full CRUD

GET, POST, PUT, PATCH, DELETE all work. Pagination, sorting, search and field filters built in β€” exact, range and substring: ?price_gte=100&name_like=chair&sortBy=price&order=desc. Need {"data":[…],"total":n} instead of a bare array? Response envelopes match your real API's shape β€” mockapi.io sells that, here it's free. Testing infinite scroll? ?mock_cursor=1 serves Stripe-style next_cursor pages.

🎁 Actually generous

20 projects, 20 resources each, 1000 records per resource, 10k requests per project per day. Free while in beta.

🌐 CORS everywhere

Call it straight from localhost, CodePen, or your deployed frontend. No proxy needed, no API key required for reads.

πŸ§ͺ Chaos on demand

Test spinners and error states: ?mock_delay=2000, ?mock_status=500 β€” or real chaos injection: ?mock_chaos=0.3 randomly fails 30% of requests, ?mock_jitter=100-1500 adds random latency. Test retry & backoff logic. ?mock_ratelimit=5 simulates a real per-IP rate limit (429 + Retry-After + live x-ratelimit-* countdown headers). Prefer determinism? ?mock_seq=503,503,200 fails exactly twice, then succeeds β€” WireMock's "scenarios", as a query param. WireMock charges Enterprise for this.

πŸ“‘ Streaming mocks

Any list can stream: ?mock_sse=1 serves real Server-Sent Events (one event per record + a done event), ?mock_stream=1 serves NDJSON β€” paced with ?mock_stream_interval=300. Test EventSource clients, fetch-stream readers and progressive rendering against a hosted URL. Docs

πŸ—‘οΈ httpbin, but up

Scripts hardcoding httpbin.org? Swap the host: /m/httpbin/get, /status/503, /delay/3, /anything, /basic-auth… β€” same paths, same response shapes, no signup. Guide β†’

🎲 FakerAPI, but up

fakerapi.it has been 502ing since Aug 2026. Swap the host: /m/fakerapi/api/v2/persons, products, custom?name=firstName… β€” same params (_quantity/_seed/_locale), same envelope, no signup. Guide β†’

πŸ” Request inspector

See the last 50 requests hitting your endpoints β€” method, path, status, origin, body and headers (webhook signatures included) β€” live in the dashboard. Add a catch-all /* route and it's a free request bin: a webhook.site alternative with no 100-request cap.

✏️ Data browser

Inspect and edit your mock records right in the dashboard β€” table view, JSON editor, add and delete rows without leaving the page.

πŸ“‹ Copy-paste ready

Every resource comes with ready-made fetch, axios and curl snippets, plus one-click JSON export of all your data.

πŸ“œ OpenAPI + Postman + .http built in

Every project serves a live OpenAPI 3.0 spec at /openapi.json, a ready-to-import Postman collection at /postman.json β€” Import β†’ Link in Postman (Insomnia and Hoppscotch too) β€” and a ready-to-run /requests.http file for the VS Code REST Client, JetBrains HTTP Client and Thunder Client: save it, click Send Request. Docs β†’

🧬 TypeScript & Zod export

curl -o api.ts .../types.ts β€” ready-to-paste TypeScript interfaces for every resource, or Zod schemas with ?format=zod (.email(), .uuid(), literal unions for enums). No codegen tooling, always in sync with your mock. Docs β†’

πŸ—οΈ One-click backends

Project presets spin up an entire fake backend at once: Blog, E-commerce or SaaS β€” multiple linked resources, seeded and live in seconds.

πŸ”Œ WebSocket + SSE live feeds

Every project has wss://…/ws (an echo server β€” goodbye, dead echo.websocket.events β€” that also streams your own records as a mock realtime feed) and /sse for browser EventSource, reconnect-aware via Last-Event-ID. ?subscribe=products&interval=500&repeat=1 and your ticker UI has live data. Docs β†’

πŸ–ΌοΈ Placeholder images

Every project serves its own placeholder images: /img/300x200?text=Product β€” SVG or PNG (.png), any size, colors, avatar circles + identicons, even dynamic Open Graph social cards (/og?title=… β€” a paste-able og:image URL), scannable QR codes (/qr?data=…) and chart images from numbers in the URL (/chart?data=3,7,4,9 β€” line/bar/sparkline, no chart library). Seeded image and avatar fields point at them automatically, so your product grid renders pictures with zero setup and no third-party image service. Playground β†’ Docs β†’

πŸͺ Webhooks

Fire signed webhooks (HMAC-SHA256) at your own endpoint on every create, update or delete β€” build and debug your webhook consumer before the real event source exists. Delivery log included.

πŸ“₯ OpenAPI, db.json, Postman, HAR, VCR cassette + CSV import

Paste your real API's OpenAPI/Swagger spec (JSON or YAML) and get a live mock of it in one request β€” schema-aware fake data, enums kept, $refs resolved. POST your json-server db.json and we host your exact data. Import a Postman collection: saved example responses become the hosted records. POST a DevTools HAR export and the JSON responses your app really received become the records β€” record real traffic, replay it as a mock. POST a VCR / vcrpy cassette and the recorded responses become the records too (headers β€” including any recorded credentials β€” are discarded, with a warning so you know to rotate them). Or POST a CSV β€” every row becomes a record, header row becomes the fields: a spreadsheet turns into a REST+GraphQL API in one curl. Even a bare JSON array works β€” host any JSON file as a queryable API, no signup, no API key. And it round-trips β€” GET /m/<id>/db.json exports everything back, and any list GET returns CSV with ?mock_format=csv, so there's no lock-in in either format β€” GET /m/<id>/msw.js even ejects to a ready-made MSW v2 handlers module with your data baked in. Docs β†’

⬑ GraphQL too

Every project is also a GraphQL API at /graphql β€” typed schema generated from your resources, relations, filters, mutations, full introspection. Open it in a browser for a built-in GraphiQL IDE. Try it on the demo β†’

πŸ” Mock auth & JWT

A fake login flow that behaves like a real one: /auth/login accepts any email+password and returns a signed JWT that actually expires. Flip on protected mode and every endpoint 401s without a token β€” test auth guards, interceptors and expiry logic with zero backend. Docs β†’

πŸ“Έ Scenario snapshots

Save the entire data state under a name, let your tests trash it, restore in one call β€” or serve any snapshot per-request with the X-Mockbird-Snapshot header, so parallel test workers each pin their own scenario on one project. Docs β†’

πŸ›£οΈ Custom routes

Beyond CRUD: define your own endpoints β€” /health, /config/:key, a 418 /teapot β€” with templated responses that echo {{query.x}}, {{body.x}} and path params back. Custom routes even override generated ones, and a trailing * makes a catch-all that accepts any path. Beeceptor's paid rules engine, free. Docs β†’

πŸ€– MCP server for coding agents

Point Claude Code, Cursor or VS Code at /mcp and your agent gets mock backends as tools: β€œspin up an ecommerce mock and wire my frontend to it” is one tool call. Hosted MCP (Streamable HTTP), no signup, no OAuth dance β€” and the resulting API is plain HTTP your generated code can ship with. Docs β†’

πŸ”€ Proxy fallback

Mock some endpoints, pass the rest through to your real API: set proxyBase and any path you haven't mocked is forwarded upstream β€” auth header, body and all β€” while your defined resources keep serving mock data. Mirage's passthrough, hosted; and ?mock_chaos works on proxied paths without touching the real API. Flip on recording and proxied responses are saved as routes and replayed locally β€” record & replay, free. Docs β†’

πŸ”— Real relations

Join resources like json-server: ?_expand=customer pulls in the parent, ?_embed=comments attaches the children β€” or go path-style with /posts/1/comments. One request, nested data.

πŸ“Ÿ Uptime monitors & heartbeats

Not just mocks: POST any public URL + a webhook and we check it every 30 min from the edge β€” one alert on down, one on recovery, plus a public status page, README badge and Atom feed. Cron jobs flip the direction: a heartbeat gives your job a secret ping URL and alerts when check-ins stop. One curl each, no account. Guide β†’

Why not the alternatives?

Mockbirdmockapi.ioBeeceptorJSONPlaceholder
Try without signupβœ”βœ˜βœ”βœ”
Custom schemaβœ”βœ”~✘
Free projects201limitedβ€”
Free requests10k/day/projectok50/dayβœ”
Realistic seeded dataβœ”βœ”βœ˜fixed
Request inspectorβœ” freeβœ˜βœ” (their paid core)✘
Outbound webhooksβœ” free, signed✘paid✘
Import OpenAPI specβœ” JSON+YAML✘✘✘
Import json-server db.json (your data)βœ”βœ˜βœ˜βœ˜
Import Postman collection (examples become records)βœ”βœ˜βœ˜βœ˜
CSV β†’ hosted API (rows become records)βœ”βœ˜βœ˜βœ˜
CSV export of any list (?mock_format=csv)βœ”βœ˜βœ˜βœ˜
HAR import (record traffic β†’ replay as mock)βœ”βœ˜βœ˜βœ˜
VCR / vcrpy cassette import (cassette β†’ hosted mock)βœ”βœ˜βœ˜βœ˜
GraphQL endpoint + GraphiQLβœ” REST & GraphQL, same data✘✘✘
Mock JWT auth / protected modeβœ” real signed tokens✘✘✘
Custom routes + response templatingβœ” free✘paid✘
Save / restore data snapshotsβœ” 10 per project✘✘✘
Request bin (catch-all /* + header capture)βœ” 10k/day, no expiry✘~✘
TypeScript types + Zod schemas exportβœ” /types.ts✘✘✘
Postman collection exportβœ” /postman.json✘✘✘
.http file export (VS Code / JetBrains)βœ” /requests.http✘✘✘
Response envelope reshapingβœ” free β€” ?mock_envelope= or project defaultpaid✘✘
Cursor pagination (Stripe-style next_cursor)βœ” ?mock_cursor=1✘✘✘
Write validation (real 422 field errors)βœ” ?mock_validate=1 or project default✘✘✘
Placeholder images (self-hosted, no third-party)βœ” /img/300x200, seeded fields use them✘✘✘
MCP server (agents create & drive mocks as tools)βœ” hosted, no auth✘✘✘
WebSocket + SSE endpoints (echo + your records as a live feed)βœ” wss://…/ws + /sse✘✘✘
Streaming mocks (SSE + NDJSON)βœ” ?mock_sse=1 / ?mock_stream=1✘✘✘
Proxy fallback (unmatched paths β†’ your real API)βœ” free, 10k/day✘~ 50 req/day✘
Record proxied traffic β†’ replayable stubsβœ” free✘~ 50 req/day✘