On | Key | Value | Remove |
---|---|---|---|
|
On | Header | Value | Remove |
---|---|---|---|
|
{{ formattedBody }}
Header | Value | Copy |
---|---|---|
{{ h.key }} | {{ h.value }} |
{{ rawRequest }}
{{ JSON.stringify({ url: responseURL, status: responseStatus, statusText: responseStatusText, ok: responseOk, type: responseType, sizeBytes: responseSizeBytes, elapsedMs }, null, 2) }}
Name | Method | URL | Actions |
---|---|---|---|
{{ s.name }} | {{ s.method }} | {{ s.url }} |
|
No saved requests yet. |
HTTP requests are structured messages that let software interact with resources on the web. When people say API calls, they mean the same client–server exchange using a method, a Uniform Resource Locator (URL) and optional headers or body data. Use this browser‑based API request tester to explore how an endpoint responds without installing anything today.
You provide a URL and method and can add query parameters, headers or a body. The request runs in your browser and returns the status code, headers and body, with a formatted JSON view when possible. It also reports elapsed time and total bytes to help you compare responses during iteration. You can paste a cURL command to populate fields instantly.
For example, a users endpoint might return 200 with a JSON list after a GET to a URL that includes limit and page parameters. Inspect the fields, confirm the content type, and verify that the host and path match your expectations before sharing a link. Be mindful of secrets in headers or bodies, and open HTML previews only when you trust the source.
Set a timeout that matches the environment you are targeting and choose how redirects are handled when tracing sign‑in flows. Save frequently used requests for repeat runs and consider omitting tokens from saved entries. When building query parameters, prefer distinct keys over duplicates so values stay predictable, and use explicit Accept and Content‑Type headers to avoid ambiguity.
The utility assembles an HTTP request from your inputs and executes it in the browser. It builds the final address using the URL interface when possible, or by percent‑encoding keys and values as a fallback. Body data is sent only for non‑GET and non‑HEAD methods, and JSON payloads trigger an automatic Content‑Type header when that header is absent. Authorization supports Basic and Bearer forms. A timeout uses an abort signal, redirect handling follows your selection, and the app records elapsed milliseconds and response size. Responses are decoded with a declared charset when present, parsed as JSON when recognized, previewed as HTML for HTML types, and can be saved locally for reuse.
charset
value; fallback is UTF‑8.Field | Type | Min | Max | Step/Pattern | Error Text | Placeholder |
---|---|---|---|---|---|---|
Name | text | — | — | — | — | Untitled request |
Method | select (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS) | — | — | enum | — | — |
URL | text | — | — | — | No URL provided. | https://api.example.com/users?limit=10 |
CORS proxy | switch (boolean) | — | — | — | — | — |
Timeout (ms) | number | 0 | — | step 100 | — | 9000 |
Redirects | select (follow, error, manual) | — | — | enum | — | — |
Param key | text | — | — | — | — | limit |
Param value | text | — | — | — | — | 10 |
Header key | text | — | — | — | — | Accept |
Header value | text | — | — | — | — | application/json |
Body | textarea (sent for non‑GET/HEAD) | — | — | — | — | {"name":"Alice","email":"alice@example.com"} |
Auth type | select (None, Basic, Bearer) | — | — | enum | — | — |
Username | text | — | — | — | — | user |
Password | password | — | — | — | — | •••••••• |
Token | text | — | — | — | — | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9… |
cURL | text | — | — | — | — | curl -X POST https://api.example.com … |
Runtime | n/a | — | — | — | Network error or CORS blocked. / Network error (proxy) or upstream blocked. | — |
Input | Accepted Families | Output | Encoding/Precision | Rounding |
---|---|---|---|---|
URL & query | URL string plus optional key–value pairs | Final address | URL API when parsable; else keys/values encoded with encodeURIComponent |
n/a |
Headers | List of key–value rows | Request headers map | Case‑insensitive matching for existing header names | n/a |
Body | Text (JSON or other) | Sent as provided | JSON detection sets Content‑Type: application/json when absent |
n/a |
Response body | Textual or binary | Pretty JSON, raw text or binary notice | Charset from content type; fallback UTF‑8; HTML preview via iframe | n/a |
Response headers | Structured pairs | CSV copy or download | Key and value preserved as received | n/a |
Payload export | Combined request and response | JSON file | Includes status, headers, body and metrics | n/a |
localStorage
under the key api_tool_saved_v1
.limit=10
returns a 200 status and a JSON array. The request sets Accept: application/json
and omits a body.{ "status": 200, "headers": {"content-type":"application/json"}, "sizeBytes": 532, "elapsedMs": 128 }
{
or [
.Saved items stay in your browser’s storage. Requests are sent directly from your device to target servers, or through a proxy when enabled. Do not include secrets you are not prepared to expose.
Follow this quick path to send and inspect a request.
You now have a repeatable way to probe endpoints and capture exact responses.
Saved requests are kept in your browser’s local storage. The app does not upload saved entries. Requests and responses travel directly between your browser and the destination or proxy.
Avoid saving secrets on shared devices.GET, POST, PUT, PATCH, DELETE, HEAD, and OPTIONS.
No. Body content is only sent for non‑GET and non‑HEAD methods.
If the body starts with {
or [
and parses correctly, the tool treats it as JSON and adds a Content‑Type header when missing.
Timing uses wall‑clock differences in milliseconds. It includes network latency and client processing overhead, so use it for comparisons, not performance certification.
If the response is not valid JSON, the JSON tab displays a helpful message and you can inspect the raw body or headers instead.
Choose Bearer under Auth and paste the token. The Authorization header will be added automatically.
Direct requests require the server to allow browser access. When blocked, you can relay through the optional proxy if your data handling policies permit it.
No sign‑in is required and no license keys are needed. Everything runs in your browser.
You can open the interface without a network, but requests obviously need connectivity.
user:pass
with Base64.