π‘ Is mocky.io still dead? We check it (and 14 other classic public mock/placeholder APIs) with a plain GET every 30 minutes β see the live status page.
For years, Mocky (mocky.io) was the fastest way to get a fake HTTP endpoint: paste a JSON body, pick a status code, get a permanent run.mocky.io URL. It's embedded in a decade of tutorials, Stack Overflow answers, and demo code β the ant-design upload examples famously pointed at it.
Mocky has been discontinued. As of July 2026, mocky.io, designer.mocky.io and run.mocky.io serve a broken self-signed certificate and return 404 for every mock URL:
curl https://run.mocky.io/v3/9a2a80b9-8ac6-4b16-b241-1a1ad4b0d861
# β curl: (60) SSL certificate problem: self-signed certificate
curl -k https://run.mocky.io/v3/9a2a80b9-8ac6-4b16-b241-1a1ad4b0d861
# β 404
Every mocky URL in every codebase is dead. Here's how to do the same job on Mockbird β no signup, permanent URL, CORS on, free β plus the things mocky never did.
Mocky's whole product was "design a response, get a URL". On Mockbird that's a custom route. Two curls:
# 1. create a project (anonymous β no signup)
curl -X POST https://HOST/api/projects \
-H 'content-type: application/json' -d '{"name":"my mocks"}'
# β {"id":"abc123","adminKey":"KEY", ...} β save both
# 2. design your response β exact body, status, headers
curl -X POST https://HOST/api/projects/abc123/routes \
-H 'X-Admin-Key: KEY' -H 'content-type: application/json' \
-d '{"method":"GET","path":"/v3/my-mock","status":200,
"body":"{\"status\":\"ok\",\"plan\":\"pro\",\"features\":[\"a\",\"b\"]}",
"headers":{"X-Custom":"hello"}}'
Your mock is live immediately:
curl -i https://HOST/m/abc123/v3/my-mock
# β HTTP/2 200
# β x-custom: hello
# β {"status":"ok","plan":"pro","features":["a","b"]}
Unlike mocky's random UUID paths, you pick the path β so you can mirror whatever URL shape your app expects (yes, even /v3/whatever). Up to 20 routes per project, one project per API you're faking.
| In mocky | On Mockbird |
|---|---|
| Response body (JSON, XML, textβ¦) | "body" on the route β any content |
| HTTP status picker | "status": 418 (100β599) |
| Content-Type picker | "contentType": "application/xml" |
| Custom response headers | "headers": {"X-Custom":"hello"} |
| Secret random URL | project ids are random slugs; paths are yours |
| Permanent link | routes don't expire (sign up free to keep the project forever) |
| Simulated delay | "delayMs": 2000 per route, or ?mock_delay= ad-hoc |
Example β an XML error with a teapot status and a 2-second delay:
curl -X POST https://HOST/api/projects/abc123/routes \
-H 'X-Admin-Key: KEY' -H 'content-type: application/json' \
-d '{"method":"GET","path":"/teapot","status":418,
"contentType":"application/xml","body":"<error>teapot</error>","delayMs":2000}'
curl -i https://HOST/m/abc123/teapot
# β HTTP/2 418, content-type: application/xml, ~2s later
# β <error>teapot</error>
The shared demo project has live custom routes you can hit before creating anything:
curl https://HOST/m/demo/health
# β {"status":"ok","service":"mockbird-demo","time":"β¦"}
curl https://HOST/m/demo/config/theme
# β {"key":"theme","value":"β¦","fetchedAt":"β¦"}
Dynamic responses. Mocky responses were frozen strings. Mockbird routes are templates β echo back query params, URL params, request body fields, or generate values per request:
curl -X POST https://HOST/api/projects/abc123/routes \
-H 'X-Admin-Key: KEY' -H 'content-type: application/json' \
-d '{"method":"GET","path":"/greet/:name",
"body":"{\"hello\":\"{{params.name}}\",\"at\":\"{{now}}\"}"}'
curl https://HOST/m/abc123/greet/ada
# β {"hello":"ada","at":"2026-07-26T17:48:01.186Z"}
Placeholders include {{query.x}}, {{params.x}}, {{body.x}}, {{headers.x}}, {{uuid}}, {{now}}, {{rand}}, and {{{body}}} to echo the whole request β full list in the custom endpoints guide.
A whole fake backend, not just one URL. The same project can host seeded CRUD resources (writes persist), GraphQL, mock JWT auth, request bins with an inspector, and exports (OpenAPI, Postman, TypeScript/Zod). Your mocky-style fixtures and your fake REST API live at one base URL.
| Mocky.io | Mockbird | |
|---|---|---|
| Status | discontinued β URLs 404 | live, free while in beta |
| Signup required | no | no (anonymous projects; free signup to keep them) |
| Custom body/status/headers/content-type | yes | yes |
| Choose your own path | no (random UUID) | yes, incl. :params and /* wildcards |
| Dynamic templating | no | yes |
| CRUD / stateful data | no | yes |
| Request inspector | no | last 50 requests w/ headers |
| Free limits | β | 10,000 req/project/day, 20 routes/project |
This page is written by the Mockbird maker β bias disclosed. Mocky's shutdown verified live in July 2026 (self-signed cert, 404s on designer and run hosts); its open-source "Lockdown Edition" can still be self-hosted from GitHub if you prefer that route. Other hosted options: Beeceptor (50 req/day free), webhook.site (100 requests, 7-day URLs free). Anonymous Mockbird projects have a per-IP daily creation cap; sign up (free) to keep projects permanently.
Full API reference in the docs. More guides: mock any endpoint Β· httpbin alternative Β· testing loading & error states. Create your API β