Application Programming Interface (API) Testing Tool
Test an HTTP API from your browser with method, headers, auth, body modes, cURL import, CORS clues, response traces, and saved presets.Request snapshot
Query parameters:
| On | Key | Value | Remove |
|---|---|---|---|
|
|
Headers:
| On | Header | Value | Remove |
|---|---|---|---|
|
|
Form fields:
| On | Key | Value | Remove |
|---|---|---|---|
|
|
Multipart parts:
| On | Key | Type | Value / File | Remove |
|---|---|---|---|---|
|
|
Selected: {{ row.file.name }}
Reattach file: {{ row.savedFileName }}
|
| Metric | Value | Copy |
|---|---|---|
| {{ row.label }} | {{ row.value }} | |
| No response metrics. | ||
{{ formattedBody }}
| Header | Value | Copy |
|---|---|---|
| {{ h.key }} | {{ h.value }} | |
| No headers returned. | ||
Browser-local request history
| Captured | Method | URL | Result | Actions |
|---|---|---|---|---|
| {{ entry.method }} | {{ entry.url }} |
· {{ entry.elapsedMs }} ms
· {{ entry.responseType }}
|
|
|
| No recent runs yet. | ||||
Stored request presets
| Name | Method | URL | Actions |
|---|---|---|---|
| {{ entry.name }} | {{ entry.method }} | {{ entry.url }} |
|
| No saved requests yet. | |||
HTTP API testing means sending a precise request and reading the response as evidence. The request has a method, URL, query values, headers, credentials, body, timeout, redirect behavior, cache choice, and credential policy. The response has a status, exposed headers, a body, a final URL, and timing.
A browser API test answers a narrower question than a terminal request: what can frontend code send and read from this origin? That distinction matters when a request succeeds in a command-line client but fails in the browser because Cross-Origin Resource Sharing (CORS), redirects, credentials, or exposed headers block the response details.
Good API debugging separates server evidence from browser visibility. A 401 response, a JSON validation failure, a timeout, and a CORS block all call for different fixes. Keeping the request settings and the response evidence together makes the next report easier to reproduce.
Authentication needs extra care. Basic credentials are encoded for transport, not encrypted by the scheme itself, and bearer tokens can be used by anyone who holds them until the server rejects them. Use sandbox credentials when possible and keep reusable presets without secrets unless the preset is strictly private to the current browser.
How to Use This Tool:
Build the request from the top down, then read the summary before opening the detailed response tabs.
- Choose a recipe or keep the blank request, then set the method and
Request target. The snapshot should show the intended method and host before anything is sent. - Use
QueryandHeadersfor enabled rows only. Keep filters visible as query rows when you want a clean record of the final URL. - Select
Authonly when the endpoint expects it. UseBasicfor username-and-password style requests andBearerfor access tokens without typing the wordBearerinto the token field. - Choose the correct
Bodymode for non-GETand non-HEADrequests. JSON mode checks the body before sending, form mode sends enabled key-value rows, and multipart mode can include text or file parts. - Open
Transportwhen timeout, redirect mode, credentials, cache behavior, cURL import, or copyable request snippets matter. If a pasted cURL command imports incorrectly, read the request trace before sending. - Send the request and check the response snapshot first. It summarizes status, success, elapsed time, body size, content type, final URL, charset, and body classification.
- Use the result tabs for the job at hand: body text for raw evidence, JSON for parsed data, HTML preview for HTML replies, headers for exposed response metadata, traces for handoff notes, and exchange JSON for a structured record.
Interpreting Results:
Start with the status and failure class, then confirm the body and final URL. A fast response is not automatically correct if the final URL changed or the content type does not match the API contract.
| Cue | What it usually means | What to check next |
|---|---|---|
2xx |
The browser received a successful HTTP response. | Verify the body shape, content type, and final URL before marking the endpoint healthy. |
3xx |
Redirect handling affected the visible result. | Use manual redirect mode when the redirect target itself is the evidence you need. |
4xx |
The server rejected the request for a client-side reason such as auth, validation, or route mismatch. | Compare the request trace against the API docs before changing the response parsing. |
5xx |
The server reported a failure while handling the request. | Keep the method, URL, body, status, and response trace together for server-log review. |
Status 0 |
The browser did not expose a normal HTTP response because of timeout, cancellation, transport failure, or CORS blocking. | Read the failure text and compare with a CORS-enabled endpoint or a terminal request when server reachability is in doubt. |
JSON classification means the content type includes JSON or the body text parses as JSON. HTML preview appears only for HTML-like responses. Binary-looking responses are summarized by size instead of being forced into a text view.
Saved requests and recent runs are browser-local conveniences. Recent runs keep a compact history of request outcome details, while saved presets omit credentials unless Include auth in presets is switched on.
Technical Details:
HTTP semantics separate the request method from the payload. GET and HEAD are retrieval-style methods, so a body is not sent for those methods here. POST, PUT, PATCH, and DELETE can carry payloads, but the server still defines how each endpoint treats them.
Browser Fetch adds policy checks around the HTTP exchange. Credentials, redirects, cache mode, timeout cancellation, and CORS can all change what is visible to page code. A server can receive a request while the browser still refuses to expose the response body or headers to the page.
Formula Core:
The response time shown in the result is an elapsed browser measurement for one attempt. It is not a server-only processing time.
t_start is the browser timestamp just before the request attempt, and t_finish is the timestamp after the response body is read or the run ends with a timeout, cancellation, or transport failure. Body size is measured from the returned body bytes that the browser can read.
Request Construction Rules:
| Part | Rule | Why it matters |
|---|---|---|
| URL and query rows | Enabled query pairs are appended to the target URL, with duplicate pairs skipped when they already exist. | The final URL remains readable while still carrying visible filters such as page, limit, or search terms. |
| Headers | Enabled header rows are sent, then Basic or Bearer auth can add an Authorization header. |
A missing or stale credential usually appears as 401 or 403, not as a JSON parsing problem. |
| JSON body | JSON is validated before sending and normalized when valid. A JSON content type is added when none is already present. | Invalid JSON stops the run before the request is sent. |
| Form body | Enabled key-value rows are encoded as URL-encoded form data. | This matches many token, login, and legacy form endpoints. |
| Multipart body | Enabled text and file parts are sent as multipart form data, with the browser supplying the multipart boundary. | Manual boundary headers should not be forced for browser file-style uploads. |
Browser Visibility Rules:
| Condition | Visible result | Practical consequence |
|---|---|---|
| CORS allows the origin and exposes the needed response details | Status, permitted headers, and body are available to the result views. | The browser result is a good proxy for what frontend code can read. |
| CORS blocks the response | The run fails without a normal exposed HTTP response. | The endpoint may still be reachable from a terminal or server-side client. |
| Timeout expires before a readable response arrives | The request is aborted and marked as timed out. | Raise the timeout only after confirming the URL, method, body, and expected server latency. |
| Manual redirect mode is selected | Redirect evidence can be limited by browser security rules. | Use a terminal comparison when complete redirect headers are required. |
Privacy and Safety Notes:
Requests are sent to the target URL you enter. If you test a private API, the target server can receive the method, URL, headers, credentials, and body you provide. Avoid production tokens in shared examples and remove sensitive headers before copying traces into tickets.
Browser-local presets and recent runs are still local records. Saved auth requires an explicit opt-in, but a private browser profile is still the safer place for credentialed API debugging.
Worked Examples:
Check a JSON list endpoint
Use GET, enter the endpoint URL, add query rows such as limit=10 and active=true, and keep Accept: application/json. A useful result shows 2xx, JSON classification, and a final URL containing the expected query values.
If the body is an error object even though the status is successful, the HTTP exchange completed but the API contract still needs review.
Rebuild a failing POST from cURL
Paste a command that includes a method, URL, content type, bearer token, and JSON body. Confirm the method, auth mode, body mode, and request trace before sending. If the response returns 401, the trace helps separate token validity from request formatting.
If JSON validation fails before sending, fix the body text first. Retrying the same invalid body will not reach the endpoint.
Separate CORS from server failure
A private endpoint can work from a terminal and still fail in the browser with status 0. Retry a known CORS-enabled test endpoint with the same browser, then compare. If the simple endpoint works, the likely issue is browser visibility policy rather than a completely unreachable server.
FAQ:
Why does the request work in cURL but fail here?
The browser applies CORS, credential, redirect, and exposed-header rules. cURL is not bound by those browser visibility policies.
Why is my JSON body rejected before the request is sent?
JSON body mode requires valid JSON. Fix the syntax or switch to raw body mode if the endpoint intentionally expects non-JSON text.
Can I test file uploads?
Yes. Use multipart form data, choose a file part, and let the browser supply the multipart boundary.
Does a success badge mean the API is healthy?
No. It means the status is in the HTTP success range. Check the body, content type, final URL, and expected fields before treating the endpoint as healthy.
What should I save for a bug report?
Save the request trace, response trace, status, final URL, content type, and any response body needed to reproduce the issue. Remove secrets first.
Glossary:
- CORS
- A browser security protocol that controls whether page code can read a cross-origin response.
- Bearer token
- An access token sent with the
Authorization: Bearerscheme. - Content-Type
- The header that names the media type of a request or response body, such as JSON, HTML, or plain text.
- Redirect mode
- The browser setting that decides whether redirects are followed, rejected, or handled manually.
- Response trace
- A readable record of exposed response status, headers, body text, timing, URL, and success state.
References:
- RFC 9110: HTTP Semantics, RFC Editor.
- Fetch Standard, WHATWG.
- Using the Fetch API, MDN Web Docs.
- RFC 7617: The Basic HTTP Authentication Scheme, RFC Editor.
- RFC 6750: OAuth 2.0 Bearer Token Usage, RFC Editor.