HTTP Status Codes for API Developers: Choosing the Right One
The HTTP status codes that matter when you design or debug an API — 200 vs 201 vs 204, 400 vs 422, 401 vs 403, 404 vs 410, 429, and 502 vs 503 vs 504 — with guidance on when to use each.
One API client for fourteen protocols — local-first by default.
Voyager is a modular API development platform for building, organizing, and running requests across fourteen protocols — REST, GraphQL, SOAP, WebSocket, and more. It's local-first by default, so your requests and collections stay on your device, with optional cloud sync when you want it across machines.
Headers
{ "id": 42, "name": "Ada Lovelace", "email": "ada@example.com", "role": "admin", "active": true }
Available in: Web · VS Code
Query
query GetUser($id: ID!) {
user(id: $id) { name email }
}{ "data": { "user": { "name": "Ada Lovelace", "email": "ada@example.com" } } }
Available in: Web · VS Code
Connected to wss://realtime.example.com/orders{"type":"subscribe","channel":"orders"}{"type":"ack","channel":"orders"}{"order":1042,"status":"paid"}Available in: Web · VS Code
{"step":"install","status":"done"}event: build · id: 17{"step":"test","status":"passed"}event: build · id: 18{"step":"deploy","status":"running"}event: build · id: 19Available in: Web · VS Code
Subscribed to sensors/# (QoS 1)21.4sensors/lab/temp48sensors/lab/humidity{"fan":"on"}devices/lab/fanAvailable in: Web · VS Code
Message
{ "id": "42" }
{ "name": "Ada Lovelace", "plan": "PLAN_TEAM" }
Available in: VS Code extension
Why it exists
The problem
A modern backend rarely speaks just REST. Testing one often means a REST client, a separate WebSocket tool, an MQTT client, and a database console — four sets of saved requests, four places for environment variables, and an account wall on most of them.
How Voyager helps
Voyager puts every protocol behind one request builder, with shared collections, environments, history, and scripts. It works without signing up and stores your workspace locally; an optional free account adds sync, sharing, and teams.
Protocols
Every protocol is available in the VS Code extension. The web app runs twelve — seven directly in the browser, and five through Voyager's relay when you're signed in, since browsers can't open raw sockets.
Request / Response
Streaming
IoT
File transfer & email
Raw sockets
Database
Code generation
Once a request works in Voyager, export it as a ready-to-paste snippet for the language your app is written in — cURL, JavaScript, Node.js, Python, or Java.
Paste works the other way too: drop a cURL command into Voyager and it becomes a runnable request.
curl --request POST \ --url 'https://api.example.com/v1/orders' \ --header 'Authorization: Bearer eyJhbGciOi…' \ --header 'Content-Type: application/json' \ --data '{"sku":"VOY-001","quantity":2}'
const response = await fetch("https://api.example.com/v1/orders", { method: "POST", headers: { "Authorization": "Bearer eyJhbGciOi…", "Content-Type": "application/json", }, body: "{\"sku\":\"VOY-001\",\"quantity\":2}", });
import axios from 'axios'; const response = await axios.request({ method: "POST", url: "https://api.example.com/v1/orders", headers: { "Authorization": "Bearer eyJhbGciOi…", "Content-Type": "application/json", }, data: "{\"sku\":\"VOY-001\",\"quantity\":2}", });
import requests response = requests.request( "POST", "https://api.example.com/v1/orders", headers={ "Authorization": "Bearer eyJhbGciOi…", "Content-Type": "application/json", }, data="{\"sku\":\"VOY-001\",\"quantity\":2}", )
HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/v1/orders")) .header("Authorization", "Bearer eyJhbGciOi…") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{\"sku\":\"VOY-001\",\"quantity\":2}")) .build();
Features
Grouped by the job you're doing. Links open that feature in the product, or its documentation.
One interface for request/response, streaming, IoT, file transfer, email, raw sockets, and SQL.
Methods, params, headers, and bodies — raw JSON/XML/HTML/JavaScript/text with beautify, form data, or URL-encoded.
Bearer token, Basic auth, API key (header or query), and OAuth 2.0 client credentials.
Pretty, raw, and preview modes; headers and parsed cookies in their own tabs, with search; status, time, and size on every response.
WebSocket frames, Socket.IO events, SSE messages, and MQTT topics in a live message log.
Structure that mirrors your API, and variables that follow you between environments.
Mirror your API's resource structure, with multiple workspaces for separate projects.
Switch environments from the top bar and use {{variable}} substitution in URLs, headers, bodies, and protocol settings. Secret values stay hidden from viewers when shared.
Every request you send is logged with method, status, and timing — reopen any entry with its original configuration.
Prepare data before a request, assert on what comes back, and stand up an endpoint before the backend exists.
Plain JavaScript in a sandboxed QuickJS runtime, with pass/fail results and console output beside the response.
Routes with path parameters, status codes, headers, bodies, and delays, plus a live request log — in the VS Code extension.
Export any request as cURL, JavaScript (fetch), Node.js (axios), Python (requests), or Java (HttpClient).
Keyboard shortcuts
Who it's for
Built for
Building and debugging endpoints across REST, GraphQL, and real-time protocols from one place.
Exploring an API before wiring it up, and generating a ready-to-paste client snippet.
Watching MQTT topics, WebSocket frames, and event streams in a live timeline.
Importing existing Postman or Insomnia collections without paying per seat to collaborate.
Pricing, platforms & privacy
12 of 14 protocols — 7 run directly in the browser; FTP, SFTP, SMTP, TCP, and UDP go through Voyager's relay when signed in.
The most complete edition: all 14 protocols, mock servers, and requests as native editor tabs.
A lightweight Tauri app for macOS, Windows, and Linux — no public installer yet.
Pricing
Free — no paid tier, no feature gating, no seat limits, and no account required. An optional free account adds cloud sync, sharing, and teams.
Your data
Voyager is local-first: your requests, collections, and environments are stored on your device by default. Signing in is entirely optional — it adds cross-device sync, sharing, and teams, and lets the web app reach FTP, SFTP, SMTP, TCP, and UDP servers through Voyager's relay.
Guides
The HTTP status codes that matter when you design or debug an API — 200 vs 201 vs 204, 400 vs 422, 401 vs 403, 404 vs 410, 429, and 502 vs 503 vs 504 — with guidance on when to use each.
A practical comparison of the major API styles — how each works, where each shines, and the trade-offs in caching, tooling, browser support, and real-time behavior — so you can choose deliberately.
How to unblock frontend and integration work with mock APIs: agreeing on a contract first, choosing realistic responses, simulating errors and latency, and avoiding the mock-drift trap.
FAQ
Free — no paid tier, no feature gating, no seat limits, and no account required. An optional free account adds cloud sync, sharing, and teams.
Voyager is local-first: your requests, collections, and environments are stored on your device by default. Signing in is entirely optional — it adds cross-device sync, sharing, and teams, and lets the web app reach FTP, SFTP, SMTP, TCP, and UDP servers through Voyager's relay.
Voyager is available on: Web, VS Code extension. In development: Desktop.
Related