Skip to content
mc-api.io

Minecraft server status checker

Ping any Java or Bedrock server and read back its MOTD, version, player count and icon. The same request works from your own code with a single GET.

Add :port for a custom port. Defaults to 25565 for Java.

Edition
Try

What a status check returns

A status request performs a real protocol ping and hands back what the server answered: the resolved address and port, the motd with its colour codes plus a plain rawMotd, the version string and numeric protocol, onlinePlayers and maxPlayers, the round trip ping in milliseconds, and the favicon as a data URI.

Note that ping is the latency between the API host and the game server, not between you and either of them, and cachedAt tells you when the check was actually performed.

Java and Bedrock use different protocols

Java servers speak the TCP handshake protocol on port 25565 by default; Bedrock servers answer a RakNet ping on UDP 19132. The edition is a path parameter, so you get both through the same route shape and the same response document.

One consequence worth knowing: a Bedrock ping reports its version as something like MCPE rather than a semantic version, and its protocol number counts on a separate scale from Java's.

Using it from your own code

One GET request, one JSON document. Check online first, then read whatever you need - the fields for a live server are absent when it is offline.

curl -s "https://mc-api.io/server/JAVA/hypixel.net"
const response = await fetch("https://mc-api.io/server/JAVA/hypixel.net");
if (!response.ok) {  const { message } = await response.json();  throw new Error(message);}
const server = await response.json();console.log(server);
import requests
response = requests.get("https://mc-api.io/server/JAVA/hypixel.net", timeout=10)response.raise_for_status()
server = response.json()print(server)
HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder(URI.create("https://mc-api.io/server/JAVA/hypixel.net")).build();
HttpResponse<String> response = client.sendAsync(request, BodyHandlers.ofString()).join();System.out.println(response.body());

Field-by-field documentation is in the server endpoint reference, and the icon endpoint sits next to it under Favicon.

Frequently asked questions

Still stuck? The endpoint reference documents every parameter and status code.

How do I check if a Minecraft server is online?

Enter the address above, or call GET /server/{edition}/{host}. The response contains an online flag together with the MOTD, version, protocol, player counts, ping and the server icon.

What does the API return for an offline server?

HTTP 200 with online set to false, plus the hostname and port that were tried. An unreachable server is a normal result rather than an error, so you do not need to catch an exception for it.

Do I need to specify the port?

Only for non-standard ports. Without one the API derives it, falling back to 25565 for Java and 19132 for Bedrock, and it resolves SRV records the same way the game client does.

Why does the MOTD contain section signs?

Minecraft encodes colours and styles with legacy section sign codes. The API gives you both forms: motd with the codes intact so you can render the colours, and rawMotd stripped to plain text.

Can I get the server icon on its own?

Yes. The server response embeds the favicon as a data URI, and GET /favicon/{host} serves the same icon as a plain PNG you can link to directly.

Does the player list show every online player?

No. Minecraft's status protocol only exposes a small sample of names, and some servers disable the sample entirely or use it for custom text, so treat the list as optional and rely on the online and max counts.