Check what HTTP status code any URL returns. See the response code and response time instantly.
HTTP status codes are three-digit numbers returned by a web server in response to every HTTP request. They tell the client (browser, API consumer, monitoring tool) whether the request succeeded, was redirected, or encountered an error. Understanding these codes is fundamental for web development, API integration, and debugging production issues.
Status codes are grouped into five classes based on their first digit. 1xx codes are informational (rarely seen in practice). 2xx codes indicate success -- the request was received, understood, and processed. 3xx codes mean the client must take additional action, usually following a redirect. 4xx codes signal client errors -- the request was malformed, unauthorized, or targeted a non-existent resource. 5xx codes indicate server-side failures where the server could not fulfill a valid request.
This tool checks the HTTP status code of any URL in real time. Enter a URL above and we will send a request from our servers, reporting the exact status code, status text, and response time. This is useful for debugging API endpoints, verifying redirects, or confirming that a health check endpoint returns the expected response.
/health or /ping endpoints return 200 OK as expected by load balancers and monitoring toolsLearn more about specific error codes: 500, 502, 503, 504 | Full reference: HTTP Status Codes
https://api.example.com/health). We add https:// automatically if omitted.# Get just the status code
curl -o /dev/null -s -w "%{http_code}" https://example.com
# Get status code with headers
curl -I -s https://example.com | head -1
# Get status code, response time, and redirect URL
curl -o /dev/null -s -w "Code: %{http_code}\nTime: %{time_total}s\nRedirect: %{redirect_url}\n" https://example.com
import requests
response = requests.get('https://example.com')
print(f'Status: {response.status_code}') # 200
print(f'Reason: {response.reason}') # OK
print(f'OK: {response.ok}') # True (2xx)
# Check without following redirects
response = requests.get('https://example.com',
allow_redirects=False)
if response.status_code == 301:
print(f'Redirects to: {response.headers["Location"]}')
// Browser / Node.js (fetch)
const response = await fetch('https://example.com');
console.log(response.status); // 200
console.log(response.statusText); // "OK"
console.log(response.ok); // true (2xx)
// Check without following redirects
const res = await fetch('https://example.com', {
redirect: 'manual'
});
if (res.status === 301) {
console.log('Redirects to:', res.headers.get('Location'));
}
package main
import (
"fmt"
"net/http"
)
func main() {
resp, err := http.Get("https://example.com")
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
fmt.Println("Status:", resp.StatusCode) // 200
fmt.Println("Text:", resp.Status) // "200 OK"
}
401 Unauthorized means the request lacks valid authentication credentials -- the client needs to log in or provide an API key. 403 Forbidden means the server knows who the client is but the client does not have permission to access the resource. Think of 401 as "who are you?" and 403 as "I know who you are, but you are not allowed."
301 Moved Permanently tells browsers and search engines that the resource has permanently moved to a new URL. Browsers cache this redirect and search engines transfer SEO value to the new URL. 302 Found (temporary redirect) indicates the resource is temporarily at a different URL. Browsers do not cache it and search engines keep the original URL indexed. Use 301 for permanent URL changes and 302 for temporary situations like maintenance pages.
Get alerted if the status code changes or the endpoint goes down.
Start monitoring free →25 monitors free. No credit card required.