Data Validation — entry 003 of 7

Postman Echo

Verified Jul 2026

Postman Echo is a keyless sandbox that mirrors whatever you send it back as JSON — headers, query args, form body, cookies, and basic/digest auth attempts — across GET, POST, PUT, DELETE, and PATCH endpoints, plus helpers for testing redirects, delays, streaming, and gzip/deflate encoding. It's built and maintained by the Postman team as the reference backend for their own client tutorials and public collections, so its request/response shapes double as worked examples. There's no signup or key: every route is open, making it a quick target for scripting HTTP-client tests without standing up your own server.

Postman Echo is a keyless sandbox that mirrors whatever you send it back as JSON — query args, headers, form/JSON body, and Basic/Digest auth attempts — across GET, POST, PUT, DELETE, and PATCH, plus helper routes for testing specific status codes, delays, redirects, and CORS-style response headers. Every route is open with no signup or key required.

http-testingecho-servermock-serverdebuggingpostman
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSDisabledBrowser calls need a server-side proxy.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score88out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs14/20Documentation URL provided
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 88 on greatapis.com
<a href="https://greatapis.com/api/postman-echo/"><img src="https://greatapis.com/badge/postman-echo.svg" alt="Scored 88 on greatapis.com"></a>

Auth quickstart

  1. No API key required — every route is open. The service also ships a Basic Auth test route (/basic-auth, username postman / password password) purely for exercising a client's own auth-handling code, not for gating access to the API itself.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Echo a GET request back as JSON

GEThttps://postman-echo.com/get?foo1=bar1&foo2=bar2

200 application/json; charset=utf-8

{"args":{"foo1":"bar1","foo2":"bar2"},"headers":{"host":"postman-echo.com","user-agent":"curl/7.88.1","accept":"*/*","x-forwarded-proto":"https","accept-encoding":"gzip, br"},"url":"https://postman-echo.com/get?foo1=bar1&foo2=bar2"}

Developer reference

Base URLhttps://postman-echo.com

Gotchas & limits

  • No Access-Control-Allow-Origin header is sent by default: a live GET to /get and a separate OPTIONS preflight to /post, both sent with an Origin header, returned neither header at all. The one exception is its own /response-headers helper, which turns query parameters straight into real response headers — a live GET /response-headers?Access-Control-Allow-Origin=* came back with a genuine access-control-allow-origin: * header (and the same pair echoed again in the JSON body), so that's the one route that can simulate any CORS policy on demand.
  • GET /status/{code} sets the real HTTP status to match, not just the body: a live GET /status/404 returned an actual HTTP 404 with body {"status":404} — useful for testing an HTTP client's status-code branching without needing a broken endpoint.
  • /basic-auth responds in two different shapes depending on the result: correct credentials (postman/password) return HTTP 200 with JSON {"authenticated":true}, but wrong credentials return HTTP 401 with a plain-text Unauthorized body and no Content-Type header at all — code that assumes every response is JSON will fail to parse the failure case.
  • A JSON POST body populates two different fields at once: a live POST /post with {"hello":"world"} and Content-Type: application/json came back with the same object under both data and json (with form and files left empty) — send Content-Type: application/x-www-form-urlencoded instead to populate form.