REST API Tester
Send GET/POST requests and inspect the JSON response and headers.
This tool sends your query through our server to look up live data. We don't store it, and no files are ever uploaded — though the upstream service answering the lookup sees the query too.
Send a GET, POST, PUT, PATCH, DELETE or HEAD request to any public endpoint and inspect what comes back — status code, round-trip time, response size, every response header, and the body pretty-printed if it is JSON.
How to use it
- 1Choose a method and enter the endpoint URL.
- 2Add headers one 'Key: Value' per line; for the methods that take a payload, a Request Body box appears.
- 3Press Send, then switch between the Body and Headers tabs on the response.
Example
- Input
- GET https://api.github.com/zen
- Output
- 200 OK, a single short line of plain text, with the elapsed milliseconds and the byte count shown beside the status
Point it at http://127.0.0.1:3000 instead and it refuses: this URL points to a private or local network address and cannot be fetched.
What happens to your data
This is one of the few tools here that does not run in your browser: the form is posted to our /api/proxy route, which re-issues the request from our host, so the endpoint sees our server's address rather than yours. That route resolves the hostname first and rejects anything landing on a loopback, link-local or RFC1918 address, drops header names that are not plain letters, digits, hyphens or underscores along with Host and Cookie, follows no redirects, aborts at 10 seconds and truncates the body at 200,000 characters before handing it straight back in the same reply without keeping a copy. An Authorization header you type is forwarded to the target verbatim, so treat any token you paste as used.
Last updated August 2026
Something between two systems is failing and you need to know which one to blame. Your app gets a 500 from an endpoint and the log tells you nothing about whether the request that went out was malformed or the API was already broken. Taking your own code out of the loop and sending the request by hand is how that gets settled, and a form with a method, a URL and a headers box is quicker to read an answer from than a curl line carrying six flags.
Before you paste anything, work out where the endpoint lives. The request is sent from a server rather than from your machine, so it reaches anything on the public internet and nothing else. An API on localhost, a staging box on a 10.x or 192.168.x address, a service that only answers inside a private network — all refused by design, with no setting that changes it. Those need a client running on the same network as the thing being tested.
The second thing to settle is that every request here stands alone. Nothing carries over between sends: no saved collections, no environment variables, no cookie jar holding a session from a login call into the next one. If an endpoint needs a token, you obtain it elsewhere and type it into the headers box yourself.
The mistake that costs the most time is assuming a green status here means your front end will get the same answer. It will not, if the API returns no CORS headers — the call succeeds from a server and is blocked in a browser — and the Headers tab is where you check for the one header that decides it.
How it works
Toolvore posts the form to a route on this site instead of fetching from your browser, which is what lets it reach APIs that would refuse a cross-origin call. That route accepts only http and https, adds https:// when you leave the scheme off, then resolves the hostname and checks every address it maps to before connecting. Header names are limited to letters, digits, hyphens and underscores, values are cut at 2,000 characters, and Host and Cookie are dropped. Redirects are not followed. The response body is read as text and truncated at 200,000 characters, so a binary payload — an image, a PDF, a compiled protobuf — arrives as unreadable characters rather than being decoded or offered as a download. The size figure counts that text after truncation rather than the bytes that crossed the wire, so a compressed response reads larger here than it travelled. Indentation is attempted on the body and silently skipped when it is not JSON, and the Copy button hands you the raw body rather than the tidied version shown on screen.
Common use cases
- Checking whether a failing call is your code or the API
- Confirming which CORS headers an endpoint actually returns
- Firing a test POST at a webhook receiver before wiring it up
- Reading the exact JSON shape a third-party API returns before writing a parser
- Verifying that a newly issued API key works at all
- Seeing where an endpoint redirects to, and with which status
- Reproducing a request from a bug report to check it still fails
Frequently asked questions
What is the difference between GET, POST, PUT, PATCH and DELETE?+
GET asks for something and should change nothing, which is why the same GET can be repeated safely. POST creates or triggers, and repeating it usually creates a second thing. PUT replaces a resource with what you send, so anything left out is gone. PATCH changes only the fields you include. DELETE removes. HEAD is a GET that returns headers with no body, handy for checking a large file's size or type without downloading it. The request body box only appears for the four methods that carry a payload, since GET and HEAD send none — an API expecting data inside a GET is unusual enough to be worth checking twice.
Why does my API call work in a tester but fail from my browser JavaScript?+
Cross-origin rules are enforced by the browser, not by the server. A request issued from a server has no origin to check, so it goes through whatever the API permits; your front-end code is checked against the Access-Control-Allow-Origin header the API returns and blocked when it does not match. That is why an endpoint can answer perfectly in a tester and fail in your page with a console error and no readable response at all. Open the Headers tab and look for the allow-origin header. If it is missing, the fix belongs on the API side or in a proxy you control, not in your JavaScript.
Where does my request actually go, and is the API key I paste safe?+
The form is posted to a route on this site, and the request is re-issued from that server, so the endpoint sees the server's address rather than yours. The reply comes straight back in the same response and no copy is kept — there is no request history here and nothing to return to later. The headers box is what deserves care: an Authorization header you type is forwarded to the target exactly as written, which is the only way it could work, and that token has then been used from outside your own machine. Prefer a short-lived or read-only credential, and rotate anything sensitive afterwards.
Can I test an API running on localhost or an internal address?+
No, and the refusal is deliberate. The hostname is resolved before anything is sent and every address it returns is inspected; loopback, link-local and private ranges such as 10.x, 172.16 to 172.31.x and 192.168.x are rejected with a message saying the URL points to a private or local network address. Every address is checked rather than only the first, so a hostname holding both a public and a private record is refused as well. A server that will fetch any URL handed to it is otherwise a route into whatever sits behind it. For a local API, use a client running on that same machine.
What is the difference between a 401 and a 403?+
A 401 means the server did not accept your identity: no credential, an expired token, a malformed Authorization header. A 403 means it knows who you are and refuses anyway — the key is valid but lacks the scope, the plan does not cover the endpoint, or the account cannot touch that record. Repeating a 401 with the same token is pointless, while a 403 is a permissions or billing question rather than a login one. Two details catch people out: the header value is Bearer followed by a single space, and a newline picked up while copying a token breaks it. A 404 on an authenticated endpoint is sometimes a 403 in disguise.
Why does my POST return 400 or 415 when the JSON looks fine?+
Because the body and the headers are separate. Only the headers you type are forwarded, and nothing is inferred from what sits in the body box, so a JSON payload arrives without a Content-Type of application/json unless you add that line yourself. Plenty of APIs answer 400 or 415 to that, and the message rarely names the real cause. Add Accept: application/json on the same principle when you want JSON back. The other common cause is that the payload is not valid JSON at all: a trailing comma, a curly quotation mark pasted out of a document, or single quotes around keys will each be rejected by a strict parser.
What does it mean when an endpoint returns a 301 or 302?+
Redirects are not followed here, so a 301 or 302 arrives as itself with a body that usually looks empty, and the Location header in the Headers tab tells you where it wanted to send you. Paste that value into the URL box to carry on. Seeing the hop rather than skipping it is often the useful part: an http address quietly upgraded to https, a URL missing its trailing slash, or an old API version pointing at a newer one are all things a client that follows redirects hides from you. Method matters too — a 302 makes many clients turn a POST into a GET, while 307 and 308 preserve it.
Why did my request time out, and how much does the timing number tell me?+
A request is abandoned after ten seconds and reported as a timeout, so anything slower than that cannot be measured here whether or not it would eventually have answered. A timeout usually means one of three things: the host is not accepting connections, the endpoint is genuinely slow, or the API is holding the connection open on purpose, as long-polling and streaming endpoints do. The millisecond figure beside the status is a round trip measured from the server with connection setup included, not what someone on a mobile connection would experience. Treat it as a rough comparison between calls rather than a performance measurement.
Used in these workflows
Related tools
JSON Formatter & Validator
Format, validate, and minify JSON documents.
Cron Expression Parser & Builder
Build cron expressions and see their next run times explained.
QR Code Generator
Generate a downloadable QR code from any text or URL.
URL Parser
Break a URL into protocol, host, path, and query parameters.