What's inside
Everything a real backend's API surface has, minus the backend.
Pure mock, nothing stored
Reads return fixed sample data. Writes look real (status + body) but nothing is saved, so there's no shared state to break and no reason to send real data.
Simulated JWT auth
Register, log in, refresh, and a protected /me route with genuine signed JWTs. Any non-empty username/password logs in โ no account is stored.
Five response formats
JSON, XML, HTML, CSV and plain text from the same endpoint โ pick with ?format= or an Accept header.
Placeholder images
Real SVG images at any size for avatars, skeletons and <img> testing.
Rate limited
Per-IP request caps, stricter on auth routes, keep the service usable for everyone.
Filterable & sortable
Pagination, sorting and field filters work the same way across every resource.
Browser Workspace
A browser-based tool that goes beyond the read-only mock API โ no signup, nothing leaves your device.
Browser Workspace
Design custom endpoints, simulate errors, delays and flaky networks, mock WebSocket/SSE channels, and import/export OpenAPI โ all locally.
Open Workspace โOpenAPI Viewer
Browse an OpenAPI/Swagger document's endpoints and schemas in your browser โ no signup, nothing leaves your device.
OpenAPI Viewer
Browse every endpoint, schema and example in a readable viewer โ paste, import or export JSON, YAML or XML, entirely offline.
Open Viewer โResources
Every resource below supports the same CRUD shape. Replace :id with a record id. Writes are simulated โ they return a realistic response but change nothing.
/api/<resource> โ list (paginated, filterable, sortable) /api/<resource>/:id โ single record /api/<resource> โ create (simulated, 201) /api/<resource>/:id โ replace (simulated) /api/<resource>/:id โ partial update (simulated) /api/<resource>/:id โ delete (simulated) Available resources
List query params
Total row count (before pagination) is returned in the X-Total-Count response header.
Advanced features
Opt-in query parameters that work on every resource above โ useful for testing error handling, loading states, and realistic data volumes without any setup.
Pick fields with ?fields=, drop them with ?exclude=, or attach relations with ?include=.
?require_api_key=true gates on an X-API-Key header โ 401 missing, 403 wrong, 200 correct.
POST /api/schema/mock returns fake data matching a JSON Schema โ fully offline.
Reproduce timeouts, offline, 5xx, empty and truncated bodies with ?timeout, ?offline, ?malformed and more.
Mock real-time channels: GET /api/sse/:channel or wss://โฆ/api/ws/:channel โ generated events, no setup.
Simulated auth (register/login/refresh/me/logout, GET /api/profile) and webhooks already exist under Auth and Webhooks below. For designing whole custom endpoints, scenario presets, and OpenAPI export, see the Browser Workspace.
Auth
JWT access + refresh tokens, plus HTTP Basic auth for login. Stateless โ no session store, tokens are self-contained and verified by signature.
/api/auth/register โ { username, password, email? }/api/auth/login โ JSON body { username, password } or Authorization: Basic/api/auth/refresh โ { refreshToken }/api/auth/me โ requires Authorization: Bearer <accessToken>/api/auth/logout
curl -X POST https://tools.example.com/api/auth/register \ -H "Content-Type: application/json" \ -d '{"username":"ada","password":"secret123","email":"ada@example.com"}'Placeholder images
Real, renderable images at any size โ served as SVG so there's no native image library dependency. Great for <img> src testing, skeleton screens, avatars.
/api/images/:width/:height โ e.g. /api/images/300/200/api/images โ list of sample sizes Optional query params: bg, fg (hex, no #), text, seed.
Webhooks
Grab a signed sample payload for events like payment.succeeded or order.shipped, or POST your own sender's payload to /api/webhooks/receive and get an instant delivery receipt back. Nothing is stored and no outbound request is ever made.
/api/webhooks โ catalogue of supported event types /api/webhooks/:event โ a signed sample payload for that event /api/webhooks/receive โ echoes back what it received, plus a delivery receipt Every sample response includes X-Webhook-Id, X-Webhook-Timestamp and X-Webhook-Signature headers (HMAC-SHA256, t=<timestamp>,v1=<signature>) so you can test signature verification the same way a real provider would.
Example โ fetch a sample and verify it:
curl -i https://tools.example.com/api/webhooks/payment.succeeded # โ 200 OK
# X-Webhook-Id: evt_9f2a1c...
# X-Webhook-Timestamp: 1767225600
# X-Webhook-Signature: t=1767225600,v1=6c1e4f...
# {
# "id": "evt_9f2a1c...",
# "type": "payment.succeeded",
# "data": { "payment": { "id": 1, "amount": 4999, "status": "succeeded" } }
# } curl -X POST https://tools.example.com/api/webhooks/receive \ -H "Content-Type: application/json" \ -d '{"id":"evt_9f2a1c...","type":"payment.succeeded"}' # โ 200 OK { "received": true, "deliveryId": "whd_...", "echo": { ... } }Response formats
Every GET endpoint honors ?format= or the Accept header โ the same data, four ways.
Try it yourself
Build a request without leaving this page โ anything left as "Default" is simply omitted from the URL.
/api/usersClick "Run" to see a live response here.
Create a custom mock endpoint
Paste any JSON response you want, generate a one-off URL, and hit it like a real endpoint. Each generated URL expires automatically after 12 hours.