Request
Only call URLs you are authorized to use. Header-only inspection: HTTP header viewer.
Response
Send a request you are allowed to make. CORS may block browser mode.
Free HTTP API Client - Browser Fetch and Public-Host Proxy
Default GET https://jsonplaceholder.typicode.com/todos/1. Browser CORS or a public-host proxy with an 8s timeout. Authorized URLs only. Not a scanner.
What Is This API Tester?
An API tester - also searched as an HTTP client, REST client, or online Postman alternative - is a form that sends a request you are allowed to make and shows the status, headers, and a truncated body. This page offers two modes. Browser mode is ordinary fetch from your tab, so CORS and mixed-content rules apply. Proxy mode posts to /api/api-tester, which only allows public HTTP(S) hosts, strips hop-by-hop headers, uses an 8 second timeout, and does not follow redirects.
The default GET https://jsonplaceholder.typicode.com/todos/1 typically returns status 200 and a todo object with id 1. That is the worked check when the demo host is reachable. JSONPlaceholder is a public demo API. It is not your production backend.
Use this on APIs you own or have permission to call. It is not a port scanner, fuzzer, credential stuffer, or exploit helper. If the request is for unauthorized access, do not send it.
How to Send a Test HTTP Request - Step by Step
A public GET takes a few seconds when the demo host is up:
- Enter an authorized URL - The default GET uses
https://jsonplaceholder.typicode.com/todos/1as a public demo. Only call URLs you own or have permission to test. - Choose method and mode - Pick GET, HEAD, POST, PUT, PATCH, DELETE, or OPTIONS. Browser mode is limited by CORS. Proxy mode only allows public HTTP(S) hosts and refuses private networks.
- Add headers and body - Headers are Name: value per line. The body field is ignored for GET and HEAD. Click Send.
- Read the response - Status, headers, timing, and a truncated body. Do not use this against systems you do not own or have permission to test.
Default Request Example - JSONPlaceholder todos/1
Keep browser mode and the default URL, then click Send. When the demo host is reachable you should see a 200 and a todo object.
Request - GET in browser mode
GET https://jsonplaceholder.typicode.com/todos/1 Accept: application/json
Typical body - 200 OK
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}If browser mode fails with a CORS error, that is the browser enforcing Access-Control-Allow-Origin, not a bug in the form. JSONPlaceholder usually allows this origin. Many production APIs do not. Switch to proxy only for public hosts you are authorized to call - never for localhost or RFC1918.
When an In-Browser HTTP Client Helps
Trying a public demo API without installing Postman
JSONPlaceholder, httpbin-style public hosts, and your own CORS-enabled staging URL are the intended targets. You see status, timing, and a truncated body without leaving the tab.
Understanding CORS as a product constraint
Frontend developers often think an "API tester website" can bypass CORS. Browser mode cannot. That honesty is the feature. If the server does not grant your origin, read the error and fix the server or use a tool you run locally - not a random proxy against a private network.
Checking a public host when CORS blocks the tab
Proxy mode is a locked-down server fetch: public HTTP(S) only, 8s timeout, ~64 KB request and response, redirects not followed, Cookie and hop-by-hop names stripped. It exists so a public JSON API without CORS can still be inspected. It is not an SSRF gadget for 127.0.0.1.
Header-only inspection belongs elsewhere
If you only need response headers and not a body, the HTTP header viewer is the narrower tool. TLS details belong on the SSL checker. DNS belongs on DNS lookup.
Not a scanner, fuzzer, or exploit helper
Do not point this form at a host you do not own or have written permission to test. Do not use it to spray credentials, walk private IPs, or follow a public host onto an internal address. Redirects are manual on the proxy so that bounce cannot happen by accident.
Not WebSockets, gRPC, or file uploads
Multipart file uploads, HTTP/2 server push, WebSockets, and gRPC are out of scope. Methods are GET, HEAD, POST, PUT, PATCH, DELETE, and OPTIONS.
Browser Fetch vs Public-Host Proxy
Pick the mode that matches the constraint you actually have:
| Constraint | Browser (CORS) | Server proxy |
|---|---|---|
| Who sends the request? | Your tab via fetch | POST /api/api-tester |
| CORS required? | Yes | No (server-side) |
| Localhost / RFC1918 | Your browser's rules | Refused |
| Timeout | Browser default | 8 seconds |
| Body cap | Display 64 KB | Request and response ~64 KB |
| Redirects | Browser follow | manual (not followed) |
| Cookies from this origin | credentials omitted | Not forwarded |
The general rule: browser mode for CORS-open public demos, proxy mode for public hosts without CORS, never private networks.
Limits You Should Plan Around
Redirects are not followed by the proxy (manual) so a public host cannot bounce you onto a private IP. Cookie, Cookie2, Host, Connection, and other hop-by-hop names are stripped. Authorization from this form is not a session-riding helper for your logged-in bank tab. Request bodies larger than 64 KB are rejected by the proxy. Responses are truncated at 64 KB in both modes so a huge payload cannot freeze the page.
Draft URL, method, mode, headers, and body are stored under api-tester-data for up to 30 days in this browser. Panel width uses api-tester-panel-width. The split class api-tester-split-track is unique. Do not save live production secrets in a browser origin you share. Click Clear to restore the JSONPlaceholder GET.
CORS Preflight, Methods, and Why Private Networks Are Refused
Browser mode uses fetch with cache: "no-store" and without credentials. A simple GET with Accept: application/json often stays a "simple" request. Custom headers, PUT/PATCH/DELETE, or a JSON content-type can trigger a CORS preflight (OPTIONS). If the target does not answer that OPTIONS with matching Allow-Origin, Allow-Methods, and Allow-Headers, the tab never sees the real response. The form surfaces that as a failed fetch. Switching to proxy does not "fix CORS" in your users' browsers; it only lets this site's server perform a public HTTP call. Your production SPA still needs the API to grant the SPA's origin.
GET and HEAD ignore the body field on purpose. HTTP clients that attach a body to GET confuse caches and some servers. POST, PUT, and PATCH send the textarea as the raw body - not automatically JSON-encoded. If you need Content-Type: application/json, add that header line yourself and paste valid JSON. OPTIONS is available for seeing what a public host returns to a preflight-like call; it is not a port probe. HEAD is for length and headers when you do not want a body.
The proxy calls assertPublicHostname so localhost, RFC1918 (10/8, 172.16/12, 192.168/16), and link-local targets are refused. That is SSRF hygiene: a website that will fetch any URL the visitor types becomes a way to scan internal admin panels. Redirects use manual so a public 302 cannot bounce onto a metadata IP. The User-Agent is set to DevOkk-ApiTester/1.0. Hop-by-hop headers and Cookie are stripped so this form cannot ride your logged-in session on another site. Eight seconds is enough for JSONPlaceholder and not enough for a slow internal crawl.
Drafts remember URL, method, mode, headers, and body because repeating a staging GET is convenient. They are still only on this device. If you pasted a bearer token into the header box, treat Clear as mandatory when you walk away from a shared computer. Authorized URLs only remains the rule even when the proxy would technically allow the host.
Header lines must contain a colon. A line that is only Authorization throws before any network call. Duplicate header names: the last value wins in both modes because Headers.set overwrites. Do not try to smuggle hop-by-hop names through the proxy; they are dropped. Mixed content (HTTPS page calling HTTP) may be blocked in the tab even when the host is public - another reason people reach for the proxy, which is still limited to http and https on public DNS names.
Truncation is a UI safety rail, not a streaming API. If you need the full 2 MB JSON dump from an export endpoint, use curl or a local HTTP client you installed. This page is for status, a handful of headers, and enough body to see whether the JSON shape matches what you expected from JSONPlaceholder's todo. Timing is performance.now around the fetch; it includes download of the truncated body, not a TTFB waterfall. It is a stopwatch, not WebPageTest.
Clear restores GET, browser mode, the JSONPlaceholder URL, Accept: application/json, and an empty body. Send stays disabled while a request is in flight so double-clicks do not pile up. Copy is on the response panel and writes status, timing, headers, and body together so a bug report can paste one block. Fullscreen hides the article and shows only the response, matching the JSON Formatter workbench pattern with a unique api-tester-split-track class.
Privacy & Authorized Use
Browser mode never uploads the request to DevOkk except as your own tab talking to the URL you typed. Proxy mode does send the URL, method, headers, and body to /api/api-tester so the server can fetch a public host. That is the point of the proxy. Do not put customer tokens in that body unless you are authorized and the host is public. Localhost and private ranges are refused on purpose.
This is not a pentest platform. Authorized use only.
Frequently Asked Questions
What is an API tester on this site?
A form that sends an HTTP request and shows the response. Use it on APIs you are authorized to call. It is not a port scanner, fuzzer, or exploit kit.
Why does browser mode fail with CORS?
Browsers block reading responses from another origin unless that server sends matching Access-Control-Allow-Origin. That is a browser rule, not a bug in this page.
What does the proxy allow?
Public HTTP and HTTPS hosts, methods GET HEAD POST PUT PATCH DELETE OPTIONS, 8 second timeout, about 64 KB request body, truncated response. Localhost, RFC1918, and link-local targets are refused.
Does the default request work?
GET https://jsonplaceholder.typicode.com/todos/1 typically returns 200 and {"userId":1,"id":1,"title":"delectus aut autem","completed":false}.
Can I send cookies from my logged-in session?
Browser mode uses ordinary fetch without credentials by default. The proxy does not forward your browser cookies to the target.
Will you help me attack an API?
No. If a request is for unauthorized access, stop. Use official docs and staging keys you control.
Why is the response body truncated?
Both modes cap the displayed body at about 64 KB so a huge payload cannot freeze the tab. The proxy also rejects request bodies larger than 64 KB.
What is the difference between browser fetch and the proxy?
Browser mode is your tab calling fetch, so CORS and mixed-content rules apply. Proxy mode posts to /api/api-tester, which only allows public HTTP(S) hosts, strips hop-by-hop headers, uses an 8s timeout, and does not follow redirects.
Related Networking Tools
These tools sit next to an HTTP client. They are not scanners either:
- HTTP header viewer - Inspect response headers without treating the body as the product.
- SSL certificate checker - Certificate details for a public host.
- DNS record lookup - Resolve names, not ports.
- JSON formatter - Pretty-print a JSON body you already received.
- JSON validator - Syntax-check a payload before you send it (on an API you are allowed to call).
Related Tools
Discover more free developer tools that might interest you.
Reverse IP Lookup
Resolve an IPv4 address to its reverse DNS PTR hostname
Use ToolDNS Record Lookup
Look up DNS records for domains
Use ToolLighthouse Score Simulator
Estimate a Lighthouse-style performance score from page metrics
Use ToolDomain to IP
Convert domain names to IP addresses
Use ToolHTTP Header Viewer
View HTTP headers for websites
Use ToolPing Test
Test network connectivity and latency
Use Tool