Free REST API for live Minecraft server data — status, player counts, version trends, and history. Build Discord bots, status widgets, dashboards, or launcher integrations. JSON everywhere, CORS enabled, no authentication needed to start.
Run a hosting company? There's a separate authenticated endpoint for declaring which servers sit on your infrastructure, so your uptime gets measured independently on our hosting report — see the Fleet API docs.
Paginated list of all tracked servers with status, players, votes, version, tags, banner and description.
?type=?version=?min_players=?max_players=?requires_mods=?language=?online=?page=?per_page= (max 500)Everything about one server: name, IP, port, version, players, votes, types, country, uptime, banner, website, description.
Live online/offline status and current player count. The right endpoint for status widgets and bots.
Player-count history for charts. Needs a free key — we have watched these servers since June, and it is the one thing a live-status API cannot reproduce. Generate one below; it takes a minute.
?period=24h (5-min raw)?period=7d?period=30d (hourly buckets)Top 25 fastest-growing servers by 7-day average player change.
Minecraft version adoption across all tracked servers — server count and total players per version.
curl "https://minecraft-java-servers.com/api/v1/servers?type=Skyblock&per_page=10"
curl https://minecraft-java-servers.com/api/v1/server/245/status
curl "https://minecraft-java-servers.com/api/v1/server/245/history?period=7d"
const res = await fetch('https://minecraft-java-servers.com/api/v1/server/245/status');
const { data } = await res.json();
console.log(`${data.players_online} players online`);
import requests
r = requests.get('https://minecraft-java-servers.com/api/v1/trending')
for s in r.json()['data']:
print(s['name'], s.get('growth_pct', '-'))
Every server object includes vote_url, a direct link to that server's vote form.
If you're building a launcher, server browser or Discord bot, rendering it as a Vote button next to
each server is usually worth doing for your own users: most servers pay out in-game rewards — crate keys, currency,
cosmetics — for a daily vote, and players generally want them. Nothing to register for, and no key required.
const res = await fetch('https://minecraft-java-servers.com/api/v1/servers?per_page=10');
const { data } = await res.json();
for (const server of data) {
console.log(server.name, server.players_online);
// Send the player straight to the vote form for their in-game reward:
// <a href="${server.vote_url}" target="_blank">Vote</a>
}
One vote per player per server per 1 hour. Rewards are delivered by the server's own Votifier plugin, so payout depends on the server having it configured.
Every server object carries what we observed in its status ping. These answer the question a launcher or server browser actually has — can this player connect, and what will they need?
Branch on this, not on mod_loader. Proxies routinely advertise a Forge/FML
handshake while requiring no client mods at all — of 201 servers here that announced one, only 4 needed mods. A loader
claim on its own is not actionable; requires_mods is.
The client range the server accepts. Over half of all listings accept a range rather than one version,
which the single version field cannot express — check a player's client against these before offering a join.
Full required-mod list with versions, from the ping's forgeData/modinfo. Up to several
hundred entries on a modpack server, so it is on the detail endpoint rather than in every list response.
Proxy/server software (Velocity, Paper, BungeeCord…), a best-effort ISO-639-1 guess at the MOTD language, and the chat-report flags players filter on.
Whether a server is busier or quieter than its own normal for this hour of day
— { "state": "hot"|"quiet", "ratio": 1.53, "expected_players": 5510 }, or
null when we have no opinion.
A raw player count cannot tell you this: 50 players is thriving for one server and a collapse for
another, and 4 players at 04:00 is healthy while 4 at peak means the community left. We compare against
a 28-day average for that server at that hour, so the comparison is the server against itself. It is
computed from months of our own snapshots, which is why a live-status API cannot produce it.
null is common and deliberate — shared-count platforms, servers under 5 players, or
no baseline yet. It means "no opinion", never "normal".
null never means "no". It means we have not observed that field — a server we have not reached yet, or one that does not advertise it. Treat null as unknown, not as a negative.
# Servers a vanilla client can join, 10-50 players, online right now
curl "https://minecraft-java-servers.com/api/v1/servers?requires_mods=false&min_players=10&max_players=50&online=true"
# Modpack servers, then the exact mods one requires
curl "https://minecraft-java-servers.com/api/v1/servers?requires_mods=true"
curl https://minecraft-java-servers.com/api/v1/server/259
# Russian-speaking communities
curl "https://minecraft-java-servers.com/api/v1/servers?language=ru"
Successful responses wrap results in data; lists add meta pagination.
Errors return error.code and error.message. Rate-limit headers
(X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After) accompany every response.
Limits are a token bucket, not a fixed window. You hold up to 40 requests anonymously (192 with a key) and earn more back continuously at the hourly rate. So an app that opens, pulls the catalogue and checks twenty servers at once is fine — that is a burst, and bursts are what real clients do. Only sustained hammering hits the limit. If you have been idle, your bucket is full.
{
"data": [
{
"id": 245, "name": "PikaNetwork", "players_online": 8421, "status": "online",
"url": "https://minecraft-java-servers.com/server-pikanetwork.245",
"vote_url": "https://minecraft-java-servers.com/server-pikanetwork.245/vote?src=api",
"activity": { "state": "hot", "ratio": 1.53, "expected_players": 5510 }, ...
}
],
"meta": { "page": 1, "per_page": 25, "total": 283, "total_pages": 12 }
}
/history.
Counted per key and IP, so shipping one key inside an app never pools your users together.Create a free account or log in to generate your key.
curl -H "X-API-Key: mjs_yourkeyhere" https://minecraft-java-servers.com/api/v1/servers
/server/{id}/status./trending./stats/versions on your launcher or hosting site.Building something cool? Tell us — we feature community projects here.