Realms API

From wiki.vg
Jump to navigation Jump to search

The Minecraft Realms API is the API endpoint used to control worlds hosted by Mojang's Minecraft Realms service. This is a paid service provided to abstract managing a Minecraft server. More information on this can be found at https://minecraft.net/realms.

The API endpoint for the Desktop Edition is located at https://mcoapi.minecraft.net. This is where all requests, as listed on this page, should be sent to.

There is also an endpoint for Pocket Edition in development, located at https://peoapi.minecraft.net. It is being documented at Pocket Realms

Sessions

Session identification is stored in a pair of cookies sent with the header of every request. The only required header within a request is having this cookie set.

Key Value
sid This is the current session ID of the logged in user. This follows the format of:
token:<accessToken>:<player UUID>
user This is the username of the logged in user. This value is case sensitive.
version The version of the Minecraft instance running.

An example request:

GET /mco/available HTTP/1.1
Cookie: sid=<token>;user=Herobrine;version=1.7.9
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.6.0_27
Host: mcoapi.minecraft.net
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

Notes

As per standard HTTP, a GET request has no parameters, and a POST request can potentially contain content (Note, several POST requests below has empty content).

Defining a server

For most endpoints requiring a server, it is returned in a JSON object format, containing the following values:

Key Value Value Type
id The ID of the server. Must be unique Integer
remoteSubscriptionId Unknown, perhaps linked to transaction? Seems to work if same as 'id' String
name The name of the server String
motd The MOTD of the server. Doesn't support color. String
state The status of the server. Can be one of the following: ADMIN_LOCK, CLOSED, OPEN, UNINITIALIZED String
owner The owner of the server. If this is equal to the previewing players username, the configure button will be accessible. String
players A array of currently connected players? JSON Array, with string values
daysLeft The amount of days left for the subscription Integer
ip The IP address of the Realms server. In the format of [IP]:[Port] String
expired Whether the subscription has expired Boolean
minigame Whether the server is a minigame server Boolean
difficulty The difficulty of the server. 0 is peaceful, 1 is easy, and so on. Integer
gameMode The gamemode of the server. 0 is survival, 1 is creative, and 2 is adventure Integer

Endpoints

GET requests

GET /mco/available

Returns whether the user can access the Minecraft Realms service. This request does not require a Cookie token to be sent.

Returns: plain text; only observed value is

true

Prior to Realms release, this returned false.

GET /mco/client/outdated

Returns whether the clients version is up to date with Realms. This is checked against the Cookie token.

Returns: Boolean value, if the client is outdated, it returns true, else, it returns false.

GET /worlds

Return a list of servers that the user is invited to or owns.

Returns: a JSON object with one array. Each element within the array represents a server.

Key Value Value Type
servers A array of servers JSON array of Servers

Example:

{"worlds": [
   {"id": 1,
   "remoteSubscriptionId": "1",
   "name": "A Test Server",
   "players": ["Notch"],
   "motd": "This is a testing server!",
   "state": "OPEN",
   "owner": "j_selby",
   "daysLeft": 30,
   "ip": "localhost:25565",
   "expired": false,
   "minigame": false}, ...
]}

GET /worlds/$ID

Returns a single server listing about a server. If a server doesn't exist/you do not have currently have access to it, the server will return a 403 error, with no content.

Returns: a JSON encoded Server, as above.

GET /worlds/$ID/join

Requires TOS to be agreed to (as below).

Used to get the IP address for a server.

If a server doesn't exist/you do not have currently have access to it, the server will return a 404 error, with no content.

Returns:

Key Value Value Type
address The address of a server, encoded as [IP]:[Port] String

GET /worlds/$ID/backups

Returns a list of backups for the world.

If a server doesn't exist/you do not have currently have access to it, the server will return a 403 error, with no content.

Returns: a JSON encoded list of backups for the specified world ID

GET /worlds/$ID/backups/download

Get the download URL of the latest backup.

Returns: an S3 link like http://eu-mcr-worlds.s3.amazonaws.com/abcdef/mcr_world_1.tar.gz?AWSAccessKeyId=AKIAJV3ELJDUWQCNERXQ&Expires=1443580650&Signature=foobar (that should be valid for ~30 minutes)

GET /ops/$ID

Returns a list of operators for this server. You must own this server to view this.

Returns:

Key Value Value Type
ops A array of player names JSON array of Strings

GET /subscriptions/$ID

Returns the current life of a server subscription.

Returns:

Key Value Value Type
startDate A millisecond value. This is measured from January 1, 1970. Long
daysLeft The amount of days left within this subscription Integer
subscriptionType The kind of subscription this user has. This has been seen to be NORMAL or RECURRING. String

GET /mco/buy

Displays a status message to the user, along with a link to the Mojang website.

Returns:

Key Value Value Type
statusMessage The message displayed to the user String
buyLink A URL to the purchase website. Optional. If not provided, no link is shown String

GET /invites/count/pending

Returns the amount of invites the player currently has waiting.

Returns: Integer value

POST requests

POST /mco/tos/agreed

To join Realms servers, you must agree to the TOS. Sending a blank POST request to this endpoint will set this flag.