API Request Tester
Send REST API requests from your browser with custom headers, auth and a JSON body, and inspect the status, headers and response. Includes a guide to reading status codes and diagnosing CORS.

Test any REST endpoint without installing Postman or writing a line of code. Set the method, headers, auth and body, send the request, and inspect the status, response headers and payload straight away.
What this is for
You have an endpoint and a question: does it work, does my token authenticate, what shape does the response actually take? Set it up above and send it. You get the status code, the response headers and the body, which is everything you need before you commit to a mapping in code or in an automation platform.
For saved collections, environments and team sharing, a desktop client is the better tool. For the single call you need to understand right now, opening a browser tab beats configuring a workspace.

A worked example: verifying a webhook receiver
Say you have built a receiver at https://api.example.com/hooks/lead and you want to know it behaves before pointing a live form at it.
Send the happy path first. POST, header Content-Type: application/json, body:
{ "name": "Sam Doe", "email": "sam@example.com", "source": "site-form" }You want a 200 or 201 back quickly. Anything over about two seconds and the sending platform may time out and retry, which means duplicates.
Then send it wrong on purpose. Remove email and send again. A 400 with a message naming the missing field is a receiver you can trust. A 200 means it accepted a lead with no email address, and you have just found the bug before it found you. Send the same body twice with the same identifier — if you get two records, the endpoint is not idempotent and any retry from the sender will duplicate data.
Then send it with no token. A 401 is correct. A 200 means the endpoint is open to the internet.
Three requests, perhaps four minutes, and you know more about that endpoint than most integrations ever establish about the ones they depend on.
Reading the response
The status code is defined in RFC 9110, which is the current HTTP semantics specification.
| Code | Means | What to do |
|---|---|---|
| 200 / 201 | Success; 201 created something | Check the body matches what you expected, not just the code |
| 202 | Accepted, not yet processed | The work happens later — do not treat it as done |
| 204 | Success, deliberately no body | Correct for a delete; a bug if you needed data back |
| 301 / 302 | Moved | Update the URL. Many clients drop the Authorization header across a redirect |
| 400 | Your payload is wrong | Read the body; good APIs name the field |
| 401 | Not authenticated | Token missing, expired or malformed |
| 403 | Authenticated, not permitted | The token is real but lacks the scope |
| 404 | No such route or record | Check for a trailing slash or a wrong environment |
| 405 | Wrong method for that route | The path exists; you sent GET where POST was expected |
| 409 | Conflict | Usually a duplicate — often what you want on a retry |
| 422 | Understood but semantically invalid | Validation failure rather than malformed syntax |
| 429 | Rate limited | Read Retry-After and back off; do not loop |
| 500 / 502 / 503 | Their fault | Retry with exponential backoff, and only for these |
The distinction that matters when you build the retry logic: retry the 5xx range and 429, never the 4xx range. A 400 will fail identically a thousand times.
The failure that confuses everyone: CORS
A request that works from the command line and fails from a browser is almost never an authentication problem. Browsers enforce cross-origin resource sharing: unless the server returns Access-Control-Allow-Origin covering the calling page, the browser blocks your code from reading the response — even though the request was sent and the server answered.
Two consequences worth internalising. First, a "non-simple" request such as a POST carrying Content-Type: application/json triggers a preflight OPTIONS call first, so an API that rejects OPTIONS breaks in the browser and nowhere else. Second, and this is the important one, CORS is not a security control for your credentials. It stops other websites reading a response in a user's browser. It does nothing to protect an API key you put in front-end code — anyone can read that in devtools and call your endpoint from a server, where CORS does not apply. Keys belong on a backend.
Mistakes worth avoiding
Testing against production. Use the sandbox. A DELETE sent to the wrong environment is a bad way to learn this.
Pasting a live token into a hosted tester. Use a scoped, short-lived test token. Rotate anything you have pasted anywhere you do not control.
Assuming an empty response body means failure. A 204 is a success with no content by design.
Trusting one call. Endpoints behave differently under a rate limit, on the second identical request, and when a field is missing. Test all three, not just the one that works.
Ignoring the response headers. Retry-After, X-RateLimit-Remaining and the pagination links live there, and every one of them changes how your integration should be written.
Frequently Asked Questions
Do my requests and tokens go through your server?
Requests are sent from your browser. Treat any credential you paste into any online tester as exposed regardless, and use a test key with the narrowest scope you can — that is sound practice whoever built the tool.
Why does the same request work in my terminal but fail here?
CORS, almost always. curl is not a browser and does not enforce it. See the section above. The request reached the server either way; the browser simply will not let the page read the answer.
Can I test a webhook that my own machine receives?
Not directly — this sends requests, it does not receive them. Point a tunnel such as ngrok at your local server to get a public URL, then send requests to that. The n8n Webhook Tutorial covers the full loop, including why the test URL and the production URL behave differently.
How do I test an API with OAuth?
Get an access token through your OAuth flow first, then send it here as Authorization: Bearer <token>. This tool is for the authenticated call, not for the token dance. Remember that access tokens usually expire in an hour, so a request that worked earlier and now returns 401 may need nothing more than a fresh token.
What should I check before wiring an endpoint into an automation?
Four things: the success response shape, the error response shape, the rate limit headers, and whether repeating a request creates a duplicate. Get those wrong and the workflow will look fine in testing and misbehave in production. The Make.com HTTP Module Tutorial walks through wiring an API with no native connector once you have those answers.
Next steps
If the response you are inspecting is deeply nested, the JSON Formatter makes the paths obvious, and API Automation for Businesses covers what a production-grade integration needs beyond the happy path.
If you would rather have the integration built properly the first time — retries, backoff, idempotency, the lot — I take this on as a freelancer: start a project on Fiverr or hire me on Upwork.

Want this built against your real numbers?
A 30-minute call to scope the workflow, agent, or automation you actually need.
More developer tools
All tools
.env Manager
Validate, compare, and generate templates for your .env files — without exposing secrets

.gitignore Generator
Build a .gitignore for your stack in seconds. Covers dependencies, build output, IDE files and the .env patterns that keep secrets out of a public repository.

API Mock Server
Create a live mock REST endpoint with your own path, method, status code, headers, delay and JSON body — so you can build and test a frontend or automation before the real API is ready.

Base64 Encoder/Decoder
Encode or decode any Base64 string instantly — no install, no login

Cron Expression Generator
Build cron expressions visually and get the correct string for crontab, GitHub Actions, EventBridge, Kubernetes, Make or n8n — with a field reference and the common gotchas explained.

Cron Timezone Converter
Convert a cron expression between timezones and see the next run times in both. Handles daylight saving properly, so a schedule set in London does not silently drift by an hour on a UTC server.
Have a workflow that's burning hours every week?
Bring me one real bottleneck. I'll tell you whether it's worth automating, and what it would take.