Declare your fleet, get a measured uptime figure
We check every Minecraft server in our catalogue around the clock and publish uptime by hosting provider on the hosting report. If you run a hosting company, tell us which servers are yours and your reliability gets measured by a third party instead of quoted from your own marketing.
Why you need to tell us
We identify a server's host from reverse DNS and who owns its IP range. That works for companies on their own hardware, but a host renting from a datacenter shows up under the datacenter's name, so we can't see your customers unless you tell us which servers they are.
Getting access
Email contact@minecraft-java-servers.com and we'll issue an API key tied to your company. It's free, and the key can only change your own list.
The list
A plain text file, one server per line, using the address players type into Minecraft to join.
play.example.com pvp.example.net:25566 # port only if it isn't 25565 198.51.100.42 bigsmp.example.org, USA East # anything after the address is ignored
Blank lines are ignored, and so is anything after a #.
If players join with just a hostname, leave the port off and we'll follow the SRV record
like the game does.
Optional: listing details
We already read each server's name, description, version and game modes from its own status response, so you don't need to send these. If you want to, add a header row naming the columns:
address,name,description,website,discord,country,types play.example.com,Example SMP,"Vanilla survival since 2019 with weekly build events, an active staff team, player shops and a friendly community.",https://example.com,https://discord.gg/example,DE,"Survival,SMP"
Column order doesn't matter and unknown columns are ignored. The header is required for this; without one, everything after the address is ignored so a note like "USA East" can't end up as a server's name.
| Field | Rules (same as adding a server by hand) |
|---|---|
name | 2–40 characters |
description | 100–1500 characters |
short_description | 20–300 characters, plain text |
website | A full URL |
discord | A Discord invite link |
youtube, twitter | Channel or profile URLs |
country | 2-letter code, e.g. DE |
version | 2–20 characters, e.g. 1.21.4 |
types | Up to 5 of our server types |
banner | 468×60 GIF, JPEG or PNG, up to 512 KB (JSON only) |
icon | 64×64 GIF, JPEG or PNG, up to 256 KB (JSON only) |
These only fill in blanks. They're applied to unclaimed listings where that detail is empty or a default MOTD, and never overwrite anything a customer has set on a listing they've claimed. A value that breaks a rule is skipped and reported, without failing the rest of the list. Vote-reward (Votifier) settings aren't accepted, since those belong to the server owner.
JSON
Works for everything, and is the only way to send banners and icons (as base64):
{"servers": [
"pvp.example.net:25566",
{"host": "play.example.com", "name": "Example SMP",
"types": ["Survival", "SMP"],
"banner": "iVBORw0KGgo...", "icon": "data:image/png;base64,iVBORw0KGgo..."}
]}
Sending it
| Route | How |
|---|---|
| Send us the file. Fine for a first batch or a one-off. | |
| A URL we fetch | Host the file and send us the link; we fetch it daily. It can be password protected (basic auth or a bearer token, over https). Send the login separately. |
| The API | POST the file yourself whenever your list changes. |
curl -X POST -H "X-API-Key: YOUR_KEY" \
--data-binary @fleet.txt https://minecraft-java-servers.com/api/v1/fleet
A GET to the same URL with your key shows what we have
under your name without changing anything. There's no need to sync more than once a day.
Each list replaces the last
Send your full current list every time. Servers missing from it are removed from your name, which is how we know a customer has left; otherwise old servers would keep counting toward your figure.
| If | Then |
|---|---|
| The list is empty | Rejected, so a broken export can't wipe your list. |
| It would remove more than half your servers | Rejected with 409, in case an export got cut off. Add
?confirm_shrink=1 if it's intentional. |
| A new server isn't responding | Not added yet, and listed in not_responding, so it can't count as
downtime against you. A later sync adds it once it's up. Servers already under
your name stay there through an outage. |
| A server isn't in our catalogue yet | Checked and added by a background job within a day. |
Public or private
Chosen when your key is issued.
| Mode | What happens |
|---|---|
| Public | Each server gets a normal directory listing. Listings are unclaimed, so customers can claim theirs and edit it for free. |
| Private | Servers count toward your uptime figure but aren't listed anywhere public. |
The servers belong to your customers, so if any of them would rather not be listed, tell us and we'll remove them.
Response
{
"provider": "Example Host",
"submitted": 42,
"newly_tagged": 7,
"already_tagged": 33,
"released": 2,
"queued_for_add": 0,
"not_responding": ["old.example.com"],
"fields_applied": 3,
"field_warnings": [{"address": "play.example.com",
"field": "website", "reason": "not a valid URL"}],
"total_attributed": 40,
"total_online": 38,
"visibility": "public — listed in the directory"
}
If released is ever higher than you expect, your export
has probably changed.
When figures appear
| Milestone | Timing |
|---|---|
| New servers start being checked | Within a day |
| A server's uptime counts | After about a week of checks |
| The 30-day average settles | About a month |
| You appear on the hosting report | Once at least 3 of your servers have their first week |
We publish what we measure, good or bad. Servers that are switched off or abandoned aren't counted against you; the report explains how.
Errors
| Code | Meaning |
|---|---|
400 empty_list | No usable addresses in the body |
401 key_required | No key sent |
401 invalid_key | Key not recognised or revoked |
403 not_authorised | Valid key, but not set up for a fleet |
405 method_not_allowed | Use GET or POST |
409 unexpected_shrink | Would remove more than half your servers |
413 payload_too_large | Body over 8 MB |
429 rate_limit | Too many requests; wait for the Retry-After header |
Questions
Email contact@minecraft-java-servers.com. If you're building something with our data rather than submitting servers, see the public API docs.