API Client
Postman is great when you need collections and team collaboration, but for a quick API check it's overkill. This browser client handles the most common 80% of API testing scenarios with no installation required.
API Client
Send HTTP requests, inspect responses — right in your browser.
Why a lightweight browser-based client?
Full-featured API clients like Postman and Insomnia are excellent engineering tools. They support collections, team workspaces, automated test scripts, CI integration, and a great deal more. But that power comes with friction: a download, an installer, often an account sign-up, and a learning curve for team members who only occasionally need to poke an endpoint.
A browser-based client removes all of that overhead. Open a tab, type a URL, click send. There is nothing to install and nothing to log in to. This makes it the right tool for a specific set of common scenarios: quickly checking that a new endpoint is live, debugging a header value during development, verifying an API key works before wiring it into application code, or walking a new team member through a REST API during onboarding without asking them to install anything first.
Requests are sent using the browser's native Fetch API, which means they originate from your browser directly — there is no proxy server in the middle that could alter headers, cache responses, or log your credentials. What the server receives is exactly what you configured, and what you see in the response panel is exactly what the server returned.
HTTP methods explained
REST APIs are built around the semantics of HTTP methods. Each method conveys intent — it tells the server what kind of operation you want to perform on a resource. Understanding the difference between them matters both for using this client correctly and for designing APIs that are predictable and consistent.
Read a resource or collection. Safe and idempotent — calling it any number of times should produce the same result and must not modify server state.
GET /api/users — returns the user list. GET /api/users/42 — returns the user with ID 42.
Create a new resource. Not idempotent — calling it twice creates two resources. The server usually responds with 201 Created and a Location header pointing to the new resource.
POST /api/users with body { "name": "Alice" } — creates a new user and returns the created object.
Replace a resource entirely. Idempotent — the result of calling it once is the same as calling it ten times with the same body. Send the complete resource representation, not just the changed fields.
PUT /api/users/42 with the complete user object — replaces user 42 entirely.
Partially update a resource. Only send the fields you want to change; the server merges them into the existing record. Less strictly standardised than PUT but widely used.
PATCH /api/users/42 with body { "role": "admin" } — changes only the role field.
Remove a resource. Idempotent — deleting a resource that does not exist should return 404, but the server state is the same either way (the resource is gone).
DELETE /api/users/42 — removes user 42. A successful response is typically 204 No Content.
The client also supports HEAD (like GET but the server omits the response body — useful for checking whether a resource exists or reading headers without downloading a large payload) and OPTIONS (asks the server which methods and headers it accepts on a given URL — the browser sends this automatically for CORS preflight checks).
Request headers and query parameters
Headers are metadata attached to an HTTP request. They communicate information about the client, the expected response format, the authentication credentials, and more. Common headers you will use in day-to-day API testing:
Content-Typeapplication/jsonTells the server the format of the request body. Required for POST/PUT/PATCH with a JSON body.
Acceptapplication/jsonTells the server what format you can handle in the response. Most REST APIs respond with JSON by default.
AuthorizationBearer eyJhbGci...Carries authentication credentials. See the authentication section below for format details.
X-API-Keysk_live_abc123A common pattern for API key auth. The exact header name varies by API provider.
Cache-Controlno-cacheInstructs caches not to serve a stale copy. Useful when debugging an endpoint that may be returning cached data.
Query parameters are key-value pairs appended to the URL after a ? and separated by &. They are used for filtering, sorting, pagination, and search:
# Paginated user list — page 2, 20 items per page GET /api/users?page=2&per_page=20 # Filter active users only, sorted by name ascending GET /api/users?status=active&sort=name&order=asc # Full-text search GET /api/products?q=wireless+headphones&category=electronics
In the client, you can type the full URL with query parameters directly into the URL bar, or use the Params tab to add them as key-value pairs — the client builds the query string for you and URL-encodes special characters automatically.
Request bodies
POST, PUT, and PATCH requests typically carry a body — the data you are sending to the server. The client supports three body formats:
JSON (most common for REST APIs)
Set the body type to JSON and type your payload in the editor. The client automatically adds Content-Type: application/json to the request headers. A valid JSON body for creating a new user:
{
"name": "Alice Chen",
"email": "alice@example.com",
"role": "editor",
"notify_on_signup": true
}Form-encoded (application/x-www-form-urlencoded)
Used when posting to traditional web forms or OAuth token endpoints. Enter key-value pairs and the client encodes them in the body exactly as a browser form submission would. Example — an OAuth2 client credentials token request:
grant_type=client_credentials client_id=my_app_id client_secret=my_app_secret scope=read:users write:users
Raw text or XML
Some APIs — particularly older SOAP or custom REST endpoints — accept XML or plain text. Switch to the Raw body mode and set the Content-Type header manually to application/xml or text/plain.
Authentication
Almost every production API requires some form of authentication. The three schemes you will encounter most often are API key, Bearer token (JWT), and Basic auth. All three work via the Headers tab in the client.
API key
The simplest form of authentication. The API provider gives you a secret key string and specifies a header name to send it in. Common header names are X-API-Key, Api-Key, or occasionally just Authorization without a scheme prefix. Check the API's documentation for the exact header name:
X-API-Key: sk_live_abc123xyz789
Bearer token / JWT
The most widely used authentication pattern for modern REST APIs. You first obtain a token by calling a login or OAuth endpoint (which returns a signed JWT or opaque token), then include it in all subsequent requests using the Authorization header with the Bearer scheme:
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
JWTs are base64url-encoded and can be decoded at jwt.io to inspect their claims (subject, expiry, roles, etc.) without a secret key. This is useful for debugging — if your request returns 401, paste the token into a JWT decoder and check whether it has expired.
Basic authentication
Basic auth encodes a username and password as a base64 string and sends it in the Authorization header. It is less common in modern APIs but still used for internal tooling, webhook receivers, and some legacy systems. The encoding is base64(username:password):
# username: alice, password: s3cur3p@ss Authorization: Basic YWxpY2U6czNjdXJlcEBzcw==
Always use Basic auth over HTTPS only. The base64 encoding is trivially reversible — it provides no security on its own, and sending it over HTTP exposes the credentials in plaintext to anyone on the network.
Reading responses and status codes
Every HTTP response has three components: a status code, response headers, and an optional body. The client displays all three. Understanding what the status code tells you saves significant debugging time.
Status codes are grouped into five classes by their first digit:
200 OKThe request succeeded. The response body contains the resource or result.
201 CreatedA new resource was created (typically after POST). Check the Location header for the new resource URL.
204 No ContentSuccess but no body. Typical for DELETE and some PUT operations.
301 Moved PermanentlyThe resource has moved to a new URL. Update hardcoded URLs in your code.
304 Not ModifiedThe cached copy is still valid. The browser will use its local cache instead of the response body.
400 Bad RequestYour request is malformed — check the body syntax and field types.
401 UnauthorizedMissing or invalid credentials. Add or refresh your auth token.
403 ForbiddenAuthenticated but not allowed. Your account lacks the required role or permission.
404 Not FoundThe resource does not exist — check the URL path and ID.
422 Unprocessable EntityServer-side validation failed. Check the response body for field-level error details.
429 Too Many RequestsRate limit exceeded. Check the Retry-After header for when to try again.
500 Internal Server ErrorAn unexpected error on the server. Check your server logs.
502 Bad GatewayThe proxy or load balancer received an invalid response from an upstream server.
503 Service UnavailableThe server is temporarily unable to handle the request — deploy in progress or overloaded.
The response panel in the client shows the status code, the total round-trip time in milliseconds, and the response body size. JSON responses are automatically pretty-printed with syntax highlighting and can be collapsed and expanded by nesting level. For non-JSON responses (HTML, XML, plain text) the raw response string is shown.
CORS basics
Cross-Origin Resource Sharing (CORS) is a browser security mechanism that controls which websites can make HTTP requests to a given server. If your browser-based API client receives a CORS error, it means the target server did not include the right headers in its response to allow requests from this origin.
When a page at https://sourcecodestack.com tries to fetch from https://api.example.com, the browser first sends a preflight OPTIONS request to api.example.com asking: "Is this origin allowed?" The server must respond with an Access-Control-Allow-Origin header that matches the requesting origin (or * to allow any origin). If it does not, the browser blocks the response and your JavaScript code sees a network error.
CORS response headers your server must include
Access-Control-Allow-Origin: https://sourcecodestack.com Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS Access-Control-Allow-Headers: Content-Type, Authorization, X-API-Key Access-Control-Max-Age: 86400
The fix for a CORS error must be made on the server side. Common solutions:
Note that CORS is a browser restriction only. Command-line tools like curl and server-to-server requests are not subject to CORS at all — they always receive the response regardless of what CORS headers the server includes.
What you can do
The client covers the full set of HTTP methods and request options you need for REST API testing. Requests are made from the browser using the Fetch API — your network traffic goes directly from your browser to the target server (no proxy needed).
HTTP methods
- •GET, POST, PUT, PATCH, DELETE
- •HEAD and OPTIONS
- •Method color-coded in history
Request body
- •JSON editor with syntax highlighting
- •Form-encoded key-value pairs
- •Raw text / XML
Headers
- •Add/remove headers as key-value
- •Common headers autocomplete
- •Authorization: Bearer token shortcut
Response view
- •Syntax-highlighted JSON response
- •Raw response mode
- •Status code, timing, size
Request history and environment variables
Request history
Every request you send is saved to a local history panel. Click any past request to reload it — method, URL, headers, and body all restore. This saves time when iterating on the same endpoint.
History is stored in localStorage. You can pin important requests to prevent them from being pushed out by newer ones, and clear history entirely at any time.
Environment variables
Define variables like {{base_url}} or {{token}} and use them in URLs and headers. Switch between environments (dev, staging, production) without manually editing every request.
Variables are stored locally and can be exported as JSON for sharing or backup.
How to make a request
Choose method and enter URL
Select GET, POST, etc. from the dropdown and type the full URL including query parameters.
Add headers (if needed)
Click the Headers tab and add key-value pairs. For authenticated endpoints, add Authorization: Bearer your_token here.
Set request body (for POST/PUT/PATCH)
Switch to the Body tab. Choose JSON and paste your request payload, or use form-encoded for HTML form-style submissions.
Send
Click Send. The response panel shows the status code, timing, response size, and formatted body.
Inspect response
JSON responses are syntax-highlighted and collapsible. Switch to the Raw tab for the exact response string, or Headers tab to see response headers.
Using the API client with the mock server
This client pairs naturally with the Mock API Server tool. Define your fake endpoints in the mock server, then use the API client to send requests against them and verify that the response body, status code, and headers are exactly what your frontend code expects. Because both tools run in the same browser and the mock server uses a Service Worker scoped to the origin, all requests from the API client are intercepted by the mock automatically — no extra configuration is needed.
This is particularly useful when you want to validate a new mock route before wiring it into your application code. You can iterate on the JSON response body in the mock server and fire requests from the API client to confirm the shape is correct, all without touching your React components or data-fetching logic.
Frequently Asked Questions
Can I send requests to localhost/local APIs?
Yes, as long as the API is running and not blocked by CORS. Local development servers (http://localhost:3000, etc.) work fine. For APIs that block CORS, you'd need to enable it on the server side or use a browser extension.
Are my API keys or request history stored?
Request history is saved to localStorage in your browser — it never leaves your device. API keys in headers or bodies are included in that local history. Clear history any time to remove stored data.
What's the difference between this and Postman?
Postman is a full-featured API development platform with collections, team sync, mock servers, and monitoring. This browser client is for quick, lightweight API testing — no install, no account. Good for one-off checks and debugging.
Which authentication schemes does the client support?
All common schemes work via the Headers tab. For Bearer/JWT auth add Authorization: Bearer your_token. For API keys, add the header name your API expects such as X-API-Key. For Basic auth, Base64-encode 'username:password' and send it as Authorization: Basic encoded_value.
Why does my request fail with a CORS error?
CORS errors occur when the target server does not include the correct Access-Control-Allow-Origin header. The fix must be made server-side — add CORS middleware to your backend or configure your API gateway. For third-party APIs that do not support CORS, proxy the request through your own backend.
Related Articles & Guides
API Client Guide: Test APIs Online Without Postman
Testing an API should be fast and frictionless. You have an endpoint, you want to fire a request, and you…
Read guide →ArticleBrowser API Client: Test REST APIs with No Install — Postman Alternative
Send HTTP requests with custom headers, request body, and history — directly in your browser.
Read guide →BlogMock API Server: Test Your Frontend Without a Backend
There is a scenario that plays out in software teams every single day: the frontend developer is ready to…
Read guide →