Free REST API for Minecraft server and player data. Ping Java (TCP) and Bedrock (RakNet UDP) servers, look up player profiles and skin URLs by username or UUID, embed live status badges, and generate OpenGraph preview images. No authentication required. Rate limit: 20 req / min per IP.
https://www.mcstate.net/api/server?host={host}&port={port}&edition={edition}host*porteditionjava)* required
Java — default port (25565)
GET /api/server?host=mc.hypixel.net
Java — custom port
GET /api/server?host=play.example.com&port=25566
Bedrock — default port (19132)
GET /api/server?host=play.nethergames.org&edition=bedrock
Bedrock — custom port
GET /api/server?host=play.example.com&port=19133&edition=bedrock
Using fetch (JavaScript)
// Java
const res = await fetch("https://www.mcstate.net/api/server?host=mc.hypixel.net");
const data = await res.json();
console.log(data.online, data.players.online);
// Bedrock
const res = await fetch("https://www.mcstate.net/api/server?host=play.nethergames.org&edition=bedrock");
const data = await res.json();
console.log(data.online, data.gamemode);onlinehostporteditionlatencyversionprotocolmotdsubMotdBEDROCKfaviconplayersgamemodeBEDROCKerrorplayers.onlineplayers.maxplayers.sampleBEDROCKfield is only present in Bedrock Edition responses.
{
"online": true,
"host": "mc.hypixel.net",
"port": 25565,
"edition": "java",
"latency": 42,
"version": "Hypixel BungeeCord",
"protocol": 769,
"motd": "Hypixel Network [1.8-1.21]",
"favicon": "data:image/png;base64,iVBORw0KGgoAAAA...",
"players": {
"online": 31847,
"max": 200000,
"sample": [
{ "id": "069a79f4-44e9-4726-a5be-fca90e38aaf5", "name": "Notch" }
]
}
}{
"online": true,
"host": "play.nethergames.org",
"port": 19132,
"edition": "bedrock",
"latency": 38,
"version": "1.21.50",
"protocol": 800,
"motd": "NetherGames Network",
"subMotd": "Play.NetherGames.org",
"favicon": null,
"players": { "online": 4821, "max": 30000, "sample": [] },
"gamemode": "Survival"
}{
"online": false,
"host": "offline.example.com",
"port": 25565,
"edition": "java",
"error": "Server refused the connection — it may be offline or the port is closed."
}{ "error": "Parameter 'host' is required." }{ "error": "Rate limit exceeded. Try again later." }Embed a live status badge into your website or README. Returns an SVG image, cached for 30 seconds.
GET /api/badge/{host}
GET /api/badge/{host}/{port}host*port25565)* required
Java (default port)
https://www.mcstate.net/api/badge/mc.hypixel.net
Custom port
https://www.mcstate.net/api/badge/mc.hypixel.net/25566
Bedrock
https://www.mcstate.net/api/badge/play.nethergames.org/19132
<!-- Markdown -->  <!-- HTML --> <img src="https://www.mcstate.net/api/badge/mc.hypixel.net" alt="Server Status"/>
Left side shows the hostname; right side shows status — online · 35k/200k or offline.
Generates a 1200 × 630 PNG OpenGraph preview image for a given server. Used automatically for link previews when sharing a server URL. Shows status, player count, version, latency, MOTD and server favicon.
https://www.mcstate.net/api/og?host={host}&port={port}host*port25565)* required
Java server
GET /api/og?host=mc.hypixel.net
Bedrock server
GET /api/og?host=play.nethergames.org&port=19132
Embed as Open Graph meta tag
<meta property="og:image"
content="https://www.mcstate.net/api/og?host=mc.hypixel.net" />Response is a PNG image — not JSON. The image is generated server-side on every request (no cache). The left accent stripe is green when the server is online, red when offline. The edition badge is blue for Java, yellow for Bedrock.
Look up a Minecraft Java Edition player by username. Returns the canonical name, UUID, skin texture URL and cape URL (if any). Data is sourced from the official Mojang API and cached for 5 minutes.
https://www.mcstate.net/api/player/{username}username** required
Lookup by username
GET /api/player/Notch
Lookup by UUID (with dashes)
GET /api/player/069a79f4-44e9-4726-a5be-fca90e38aaf5
Lookup by UUID (no dashes)
GET /api/player/069a79f444e94726a5befca90e38aaf5
Using fetch (JavaScript)
// by username
const res = await fetch("https://www.mcstate.net/api/player/Notch");
const data = await res.json();
console.log(data.uuid, data.skinUrl);
// by UUID
const res2 = await fetch("https://www.mcstate.net/api/player/069a79f444e94726a5befca90e38aaf5");
const data2 = await res2.json();
console.log(data2.name);nameuuidrawUuidskinUrlcapeUrl{
"name": "Notch",
"uuid": "069a79f4-44e9-4726-a5be-fca90e38aaf5",
"rawUuid": "069a79f444e94726a5befca90e38aaf5",
"skinUrl": "http://textures.minecraft.net/texture/292009a4925b58f02c77dadc3ecef07ea4c7472f9b5b90da98a88a94535b0f9",
"capeUrl": null
}{ "error": "Player 'unknown_player' not found." }{ "error": "Invalid username. Must be 3–16 characters (letters, numbers, underscore)." }Returns the real-time status of Mojang and Minecraft backend services — session server, API, textures, accounts and Microsoft auth. Useful for detecting outages that affect login, skins or multiplayer.
https://www.mcstate.net/api/mojang-status
No parameters required. Results are not cached — each request performs a live check.
servicescheckedAtservices[].idservices[].labelservices[].descservices[].status{
"services": [
{ "id": "session", "label": "Session Server", "desc": "Multiplayer authentication", "status": "up" },
{ "id": "api", "label": "Mojang API", "desc": "Player & name lookup", "status": "up" },
{ "id": "textures", "label": "Textures", "desc": "Skins & capes", "status": "up" },
{ "id": "website", "label": "Minecraft.net", "desc": "Main website", "status": "up" },
{ "id": "accounts", "label": "Accounts", "desc": "Account management", "status": "up" },
{ "id": "microsoft", "label": "Microsoft Auth", "desc": "Microsoft login (new auth)", "status": "up" }
],
"checkedAt": "2025-01-15T12:34:56.789Z"
}{ "error": "Rate limit exceeded. Try again later." }MCState.NET is free and open to everyone. If it saves you time, consider buying me a coffee ☕ or check out our server monitor.