API Client Guide: Test APIs Online Without Postman
- API Client Guide: Test APIs Online Without Postman
- What Is a REST API?
- The Five Core HTTP Methods
- GET โ Retrieve a Resource
- POST โ Create a Resource
- PUT โ Replace a Resource
- PATCH โ Partially Update a Resource
- DELETE โ Remove a Resource
- Query Parameters
- Request Headers
- Content-Type
- Accept
- Authorization
- Custom Headers
- Authentication
- API Key Authentication
- Bearer Token Authentication
- Basic Authentication
- OAuth 2.0
- Request Bodies
- JSON Body
- Form Data
- Multipart Form Data
- Reading HTTP Responses
- Status Codes
- Response Headers
- Parsing JSON Responses
- CORS: Why Browser-Based API Testing Is Different
- Practical Testing Workflow
- Why a Lightweight Browser-Based API Client Works
- Summary
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 want to see what comes back. For years, Postman has been the default answer โ but it now requires account creation, runs a heavy Electron app, syncs your requests to the cloud, and adds friction at every turn. A lightweight, browser-based API Client gets you from idea to response in seconds with no installation and no account required.
This guide covers everything you need to test REST APIs confidently: HTTP methods, headers, query parameters, request bodies, authentication schemes, response reading, status codes, CORS, and the practical workflow that makes browser-based API clients a genuine Postman alternative.
What Is a REST API?
A REST (Representational State Transfer) API is a web service that exposes resources through URLs and communicates over HTTP. Each resource โ a user, an order, a product โ has a URL (called an endpoint). You interact with resources by sending HTTP requests to those endpoints, and the server responds with data, usually in JSON format.
REST APIs power nearly every modern web application. Social media platforms, payment gateways, weather services, mapping providers, authentication systems โ all of them expose REST APIs. As a developer, you will spend significant time calling APIs: during development to understand how a service behaves, during debugging to isolate problems, and during integration to verify that your code produces the correct requests.
The Five Core HTTP Methods
HTTP defines several methods (also called verbs) that indicate what action you want to perform on a resource. REST APIs map these verbs onto CRUD operations (Create, Read, Update, Delete).
GET โ Retrieve a Resource
GET requests retrieve data. They should be safe (no side effects on the server) and idempotent (calling them multiple times produces the same result). GET requests do not have a request body.
GET /api/users/42
Host: example.comThis retrieves the user with ID 42. The response body will contain the user data.
GET /api/products?category=electronics&limit=20
Host: example.comThis retrieves up to 20 products in the electronics category. Filters and pagination are passed as query parameters.
POST โ Create a Resource
POST requests create a new resource. They include a request body containing the data for the new resource. POST requests are not idempotent โ sending the same POST twice creates two resources.
POST /api/users
Content-Type: application/json
{
"name": "Alice Johnson",
"email": "alice@example.com",
"role": "editor"
}The server creates a new user and typically responds with 201 Created and the created resource, including the server-assigned ID.
PUT โ Replace a Resource
PUT requests replace an entire resource. You send the complete new state of the resource. If any fields are omitted, they are removed or reset. PUT is idempotent โ calling it multiple times with the same body produces the same result.
PUT /api/users/42
Content-Type: application/json
{
"name": "Alice Johnson",
"email": "alice.johnson@example.com",
"role": "admin"
}PATCH โ Partially Update a Resource
PATCH requests update only the specified fields of a resource, leaving unmentioned fields unchanged. This is more efficient than PUT when you only need to change one or two properties.
PATCH /api/users/42
Content-Type: application/json
{
"role": "admin"
}Only the role field changes. All other fields remain as they were.
DELETE โ Remove a Resource
DELETE requests remove a resource. They typically do not include a request body. DELETE is idempotent โ deleting an already-deleted resource should return 404 or 204, not an error that breaks the system.
DELETE /api/users/42A successful delete usually returns 204 No Content (the resource is gone, nothing to return) or 200 OK with a confirmation message.
Query Parameters
Query parameters are appended to the URL after a ?, separated by &. They pass additional instructions to the server without modifying the URL path.
GET /api/articles?page=2&per_page=10&sort=published_at&order=desc&tag=javascriptCommon query parameter patterns:
- Pagination:
page=2&per_page=25oroffset=25&limit=25 - Sorting:
sort=name&order=asc - Filtering:
status=active&category=tools - Search:
q=file+analyzer - Field selection:
fields=id,name,email - Format:
format=jsonorformat=csv
When testing in an API client, you can enter query parameters in a dedicated key-value UI rather than manually constructing the URL string. This avoids encoding errors โ for example, spaces must be %20 or +, special characters need percent-encoding โ and makes it easier to toggle individual parameters on and off.
Request Headers
HTTP headers transmit metadata alongside the request. Every API interaction involves headers, and many APIs depend on specific headers to function correctly.
Content-Type
Tells the server what format the request body is in:
Content-Type: application/json
Content-Type: application/x-www-form-urlencoded
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
Content-Type: text/xmlIf you send JSON without Content-Type: application/json, many servers will either reject the request or fail to parse the body.
Accept
Tells the server what response format you want:
Accept: application/json
Accept: application/xml
Accept: text/csvAPIs that support multiple output formats use this header to decide what to return.
Authorization
Carries authentication credentials. The most common forms are covered in the authentication section below.
Custom Headers
Many APIs define their own headers:
X-API-Version: 2
X-Request-ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890
X-Tenant-ID: acme-corpAlways check the API's documentation for required custom headers. Missing a required header is a common cause of mysterious 400 Bad Request or 403 Forbidden responses.
Authentication
Protected APIs require proof of identity before returning data. There are several common authentication schemes.
API Key Authentication
The simplest form. You are issued a secret key string that you include with every request. API keys can be passed in different ways depending on the API:
As a header:
X-API-Key: sk_live_abc123xyz789As a query parameter:
GET /api/data?api_key=sk_live_abc123xyz789As a header named Authorization:
Authorization: ApiKey sk_live_abc123xyz789API keys are easy to use but must be kept secret. Never embed them in client-side JavaScript or commit them to source control.
Bearer Token Authentication
Bearer tokens are short-lived tokens issued by an authentication server, typically after a login or OAuth flow. They are passed in the Authorization header with the Bearer scheme:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MiIsIm5hbWUiOiJBbGljZSIsImlhdCI6MTcxNzAwMDAwMH0.signatureThe token is often a JWT (JSON Web Token). You can decode the payload portion (the middle section, base64-decoded) to inspect its claims โ user ID, expiry time, roles โ without needing a secret key, since the payload is just base64-encoded JSON.
Bearer tokens expire. When testing, you may need to refresh your token if you get unexpected 401 Unauthorized responses during a session.
Basic Authentication
Basic auth encodes a username and password as username:password, base64-encodes the result, and sends it in the Authorization header:
Authorization: Basic YWxpY2U6c2VjcmV0cGFzc3dvcmQ=Decoding YWxpY2U6c2VjcmV0cGFzc3dvcmQ= gives alice:secretpassword. Basic auth is only safe over HTTPS because the credentials are trivially decodable (base64 is not encryption).
A good API client will have a dedicated Basic Auth section where you enter username and password, and it constructs the header automatically.
OAuth 2.0
OAuth 2.0 is the dominant authorization framework for third-party API access. Rather than sharing your password with a client application, OAuth lets you authorize an application to act on your behalf with a limited scope. The end result is a bearer token that the application uses for API calls.
When testing OAuth-protected APIs manually, you typically:
- Complete the OAuth flow in a browser to get an access token
- Copy the access token into your API client
- Send it as a Bearer token in the
Authorizationheader
Request Bodies
POST, PUT, and PATCH requests include a body containing the data to create or update.
JSON Body
JSON is the universal format for REST API request bodies:
{
"title": "New Blog Post",
"content": "This is the post body.",
"tags": ["api", "testing", "rest"],
"published": false,
"metadata": {
"author_id": 42,
"category": "developer-tools"
}
}Always set Content-Type: application/json when sending JSON. Forgetting this is one of the most common reasons JSON bodies are silently ignored by servers.
Form Data
Form submissions use application/x-www-form-urlencoded encoding:
name=Alice+Johnson&email=alice%40example.com&role=adminThis is equivalent to submitting an HTML form. Many legacy APIs and authentication endpoints (like OAuth token endpoints) accept form-encoded data.
Multipart Form Data
File uploads use multipart/form-data. Each field โ including file contents โ is a separate part with its own headers:
Content-Type: multipart/form-data; boundary=----Boundary123
------Boundary123
Content-Disposition: form-data; name="description"
Profile photo upload
------Boundary123
Content-Disposition: form-data; name="file"; filename="photo.jpg"
Content-Type: image/jpeg
[binary file content]
------Boundary123--API clients handle the multipart encoding automatically when you select form-data mode and attach a file.
Reading HTTP Responses
Status Codes
HTTP status codes tell you what happened with your request. They are grouped into five classes:
2xx โ Success
| Code | Meaning | When you see it |
|---|---|---|
| 200 OK | Request succeeded | GET, PUT, PATCH, DELETE with response body |
| 201 Created | Resource created | Successful POST |
| 204 No Content | Success, no body | Successful DELETE, some PATCHes |
3xx โ Redirection
| Code | Meaning | When you see it |
|---|---|---|
| 301 Moved Permanently | URL has permanently changed | API version migrations |
| 302 Found | Temporary redirect | Authentication flows |
| 304 Not Modified | Cached response is still valid | Conditional GET requests |
4xx โ Client Errors
These mean your request was wrong:
| Code | Meaning | Common cause |
|---|---|---|
| 400 Bad Request | Malformed request | Invalid JSON, missing required fields |
| 401 Unauthorized | Missing or invalid auth | Expired token, wrong API key |
| 403 Forbidden | Valid auth, insufficient permissions | Scope mismatch, wrong role |
| 404 Not Found | Resource does not exist | Wrong ID, wrong endpoint path |
| 405 Method Not Allowed | Wrong HTTP method | POST to a GET-only endpoint |
| 409 Conflict | State conflict | Duplicate creation, version mismatch |
| 422 Unprocessable Entity | Semantic validation failed | Invalid field values, business logic violation |
| 429 Too Many Requests | Rate limit hit | Too many calls per minute/hour |
5xx โ Server Errors
These mean the server failed:
| Code | Meaning | Common cause |
|---|---|---|
| 500 Internal Server Error | Generic server crash | Bug in server code |
| 502 Bad Gateway | Upstream server failure | Proxy or microservice issue |
| 503 Service Unavailable | Server overloaded or down | Maintenance, traffic spike |
| 504 Gateway Timeout | Upstream server too slow | Database query timeout |
Response Headers
Response headers carry important metadata:
Content-Typeโ tells you the format of the response bodyX-RateLimit-Remainingโ how many requests you have left before hitting the rate limitX-RateLimit-Resetโ when the rate limit resets (Unix timestamp)Locationโ the URL of a newly created resource (accompanies201 Created)Retry-Afterโ how many seconds to wait before retrying (accompanies429and503)ETagโ a cache validation token for the responseX-Request-IDโ a unique identifier for the request, useful when reporting bugs to API providers
Parsing JSON Responses
Most REST APIs return JSON. A well-formatted response looks like:
{
"status": "success",
"data": {
"id": 42,
"name": "Alice Johnson",
"email": "alice@example.com",
"role": "admin",
"created_at": "2026-01-15T09:30:00Z"
},
"meta": {
"request_id": "a1b2c3d4",
"version": "2.1"
}
}A paginated list response typically looks like:
{
"data": [
{ "id": 1, "name": "Item One" },
{ "id": 2, "name": "Item Two" }
],
"pagination": {
"page": 1,
"per_page": 25,
"total": 143,
"total_pages": 6,
"next_page": 2
}
}An error response typically looks like:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "The email field must be a valid email address.",
"field": "email"
}
}Good API clients pretty-print the JSON response with syntax highlighting and let you collapse nested objects, making large responses easy to navigate.
CORS: Why Browser-Based API Testing Is Different
CORS (Cross-Origin Resource Sharing) is a browser security mechanism that restricts which web pages can make requests to which API servers. When your browser-based API client tries to call https://api.example.com from a page served at a different origin, the browser performs a CORS check.
The mechanics work like this:
- For non-simple requests (POST with JSON body, any request with custom headers, etc.), the browser first sends a preflight request โ an
OPTIONSrequest โ to the API server. - The server must respond with CORS headers indicating that the requesting origin is allowed:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS
Access-Control-Allow-Headers: Authorization, Content-Type, X-API-Key- If the server responds correctly, the browser proceeds with the actual request. If not, the browser blocks the request and you see a CORS error in the console.
Important: CORS is enforced by the browser, not the server. Native clients (curl, Postman desktop app, server-side code) are never subject to CORS. Only browser-based clients face it. This means:
- If your API Client gets a CORS error but curl works fine, the API does not send the required CORS headers.
- This is a server configuration issue, not a client bug.
- Public APIs intended for browser use should have CORS configured. Internal APIs typically do not.
For testing APIs that do not have CORS configured, native desktop clients (like the Postman app) bypass the restriction entirely. Browser-based clients may use a proxy to route requests server-side, avoiding the browser's CORS enforcement.
Practical Testing Workflow
Here is an efficient workflow for testing an unfamiliar API:
1. Start with a GET request to a list endpoint. List endpoints reveal the data structure and give you real IDs to work with in subsequent requests.
2. Inspect the response shape. Note the field names, data types, and nesting. This tells you what to send in POST and PUT request bodies.
3. Test authentication separately. Fire a simple authenticated GET before trying authenticated writes. If auth is failing, you want to know before layering in request body problems.
4. Read error responses carefully.
A 400 Bad Request often comes with a body explaining exactly what was wrong. A 422 Unprocessable Entity frequently lists specific field validation errors. Do not just look at the status code โ read the body.
5. Check response headers.
Rate limit headers tell you how much headroom you have. Cache headers tell you whether you are getting fresh data. Location headers tell you where newly created resources live.
6. Test edge cases. What happens with an invalid ID? An empty body? A required field set to null? The empty string? Testing boundary conditions reveals how robust the API actually is.
Why a Lightweight Browser-Based API Client Works
Postman is a powerful tool, but it carries overhead that is often unnecessary:
- Account required โ Postman increasingly gates features behind login and workspace sync.
- Cloud sync by default โ your API requests, including authentication headers and tokens, may be synced to Postman's servers.
- Heavy installation โ the Electron app ships a full browser engine and is hundreds of megabytes.
- Slow startup โ launching Postman to fire a quick request takes longer than the request itself.
A browser-based API Client solves all of these:
- Zero installation โ open the URL, start testing immediately.
- No account required โ no login, no sync, no data leaving your browser.
- Instant startup โ it is already loaded if you keep a tab open.
- Privacy by default โ your API keys, tokens, and request/response data stay in your browser's memory.
- Shareable โ send a URL with pre-filled endpoint details to a colleague instead of exporting a Postman collection.
For the majority of day-to-day API testing โ checking an endpoint during development, debugging a webhook, exploring a new API โ a lightweight browser-based client is faster and simpler than any desktop application.
Summary
REST API testing breaks down into a small number of well-understood building blocks: the five HTTP methods, query parameters, request headers, authentication schemes, request bodies, and response parsing. Understanding HTTP status codes โ what 401 versus 403 actually means, why 204 has no body, what to do when you see 429 โ turns cryptic responses into actionable information.
For most testing scenarios, you do not need a heavy desktop application. A well-designed API Client running in your browser gives you everything: method selection, URL construction, header management, authentication presets, JSON body editing, response formatting with syntax highlighting, and status code interpretation โ all without installation, accounts, or your credentials being synced to someone else's server.
Next time you need to test an endpoint, skip the installation and open a browser tab instead.
You might also like
What Is JSON? Complete Guide to JSON Formatting
What Is JSON? Complete Guide to JSON Formatting JSON โ JavaScript Object Notation โ is the lingua frโฆ
Read moreHow to View CSV & Excel Files Online for Free
How to View CSV & Excel Files Online for Free Spreadsheet files are everywhere. Data exports from daโฆ
Read moreHow to Analyze Any File Online: Format & Metadata Guide
How to Analyze Any File Online: Format & Metadata Guide Every file on your computer carries more infโฆ
Read more