Decoy

Create a mock server
on your Mac

Decoy lets developers create mock services locally: Send it API requests, webhook requests, test your code against failures. All in a beautiful native app.

Decoy app showing the three-column interface: endpoints sidebar, request list, and response editor
No Docker No cloud tunnels No config files Instant startup

Endpoints, requests, responses.

That's the whole interface.

Set up endpoints

Define method + path pairs, group them into projects. Point any service at decoy.my:8998 and go.

Watch requests

Every incoming request shows up as it arrives. Headers, body, source IP, timestamps. JSON is auto-formatted.

Mock responses

Pick a status code, choose a body type, set headers, add a delay if you want. Changes take effect on the next request.

RESPONSES

Return whatever
you need

  • 7 body types — plain text, JSON, HTML, XML, file, empty, or redirect
  • Any status code — pick from common presets or type your own
  • Custom headers — add, remove, toggle individually
  • Simulated latency — add a delay to test timeout handling
  • Syntax highlighting — with built-in formatting (no Node required)
Response editor showing JSON body configuration with syntax highlighting
URL bar with code snippet export menu showing cURL, JavaScript fetch, and Ruby options
Settings showing domain picker with decoy.my, lvh.me, and custom options
Appearance settings with editor theme picker
AND ALSO

Thoughtful
extras

  • Copy as code — export any request as cURL, JavaScript fetch, or Ruby
  • Parameterized paths/users/:id matches /users/42
  • Projects — group endpoints under subdomains like api.decoy.my
  • Response snapshots — see what was actually sent back for each request
  • Custom domainsdecoy.my, lvh.me, or your own

Request details

Headers, body, source IP, timestamp, UUID. JSON is pretty-printed. Binary data gets a hex dump.

CORS handled

CORS headers are added automatically. Browser-based requests just work.

Redirects

301, 302, 307, 308. Location header is set automatically.

File responses

Serve images, PDFs, or any file directly. Set the body type to File and pick one.

Saved to disk

Requests are written to SQLite immediately. Nothing lost if the app quits unexpectedly.

Truly native

Built with SwiftUI. Launches instantly. Uses barely any memory.

Changes apply instantly

Edit the JSON, tweak a header, change the status code. The next request gets the new response.

Even serve whole webpages

Set the body type to HTML, paste your markup, open decoy.my:8998 in a browser. That's it.

Decoy

Try Decoy

Free on the Mac App Store.

Requires macOS 14 Sonoma or later

Mac App Store
SwiftUI Network.framework SQLite Native macOS