Difference between revisions of "Mojang API"
(→Response: added note about player model) |
(→Username -> Profile at time: uses milliseconds) |
||
Line 10: | Line 10: | ||
This will return the uuid of the name at the timestamp provided. | This will return the uuid of the name at the timestamp provided. | ||
− | * The timestamp is a unix timestamp | + | |
+ | * The timestamp is a unix timestamp with milliseconds | ||
* When the <code>at</code> parameter is not sent, the current time is used | * When the <code>at</code> parameter is not sent, the current time is used | ||
=== Response === | === Response === | ||
+ | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
{ | { | ||
Line 25: | Line 27: | ||
* <code>demo</code> only appears when true (account unpaid) | * <code>demo</code> only appears when true (account unpaid) | ||
− | If there is no player with the given username an HTTP status code 204 (No Content) is sent without any HTTP body.<br> | + | If there is no player with the given username an HTTP status code 204 (No Content) is sent without any HTTP body.<br /> |
If the timestamp is not a number, too big or too small the HTTP status code 400 (Bad Request) is sent with an error message looking like this: | If the timestamp is not a number, too big or too small the HTTP status code 400 (Bad Request) is sent with an error message looking like this: | ||
+ | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
{ | { |
Revision as of 23:33, 4 February 2015
Contents
Notes
- All public APIs are rate limited so you are expected to cache the results. This is currently set at 600 requests per 10 minutes but this may change.
- For some parts of the API, demo accounts are sometimes included, sometimes not. Mojang keeps changing this.
Username -> Profile at time
GET https://api.mojang.com/users/profiles/minecraft/<username>?at=<timestamp>
This will return the uuid of the name at the timestamp provided.
- The timestamp is a unix timestamp with milliseconds
- When the
at
parameter is not sent, the current time is used
Response
{
"id": "7125ba8b1c864508b92bb5c042ccfe2b",
"name": "KrisJelbring"
}
name
is case-correctedlegacy
only appears when true (not migrated to mojang account)demo
only appears when true (account unpaid)
If there is no player with the given username an HTTP status code 204 (No Content) is sent without any HTTP body.
If the timestamp is not a number, too big or too small the HTTP status code 400 (Bad Request) is sent with an error message looking like this:
{
"error": "IllegalArgumentException",
"errorMessage": "Invalid timestamp."
}
UUID -> Name history
https://api.mojang.com/user/profiles/<uuid>/names
Returns all the usernames this user has used in the past and the one they are using currently
Response
[
{
"name": "Gold"
},
{
"name": "Diamond",
"changedToAt": 1414059749000
}
]
The changedToAt field is a UNIX timestamp in milliseconds.
Playernames -> UUIDs
POST https://api.mojang.com/profiles/minecraft
Where 'minecraft' - agent name
This will return player UUIDS and some extras.
Payload
[
"maksimkurb",
"nonExistingPlayer" //Test for non-existing player
]
Response
[
{
"id": "0d252b7218b648bfb86c2ae476954d32",
"name": "maksimkurb",
"legacy": true,
"demo": true
}
]
- name is case-corrected
- legacy only appears when true (profile not migrated to mojang.com)
- demo only appears when true (account unpaid)
- IllegalArgumentException is returned when any of the usernames is null or ""
- The
Content-Type
HTTP header must beapplication/json
- You cannot request more than 100 names per request
UUID -> Profile + Skin/Cape
https://sessionserver.mojang.com/session/minecraft/profile/<uuid>
This will return the player's username plus any additional information about them (e.g. skins). Example: https://sessionserver.mojang.com/session/minecraft/profile/4566e69fc90748ee8d71d7ba5aa00d20
This has a much stricter rate limit: You can request the same profile once per minute.
Response
{
"id": "<profile identifier>",
"name": "<player name>",
"properties": [
{
"name": "textures",
"value": "<base64 string>",
"signature": "<base64 string; signed data using Yggdrasil's private key>" // Only provided if ?unsigned=false is appended to url
}
]
}
The "value" base64 string for the "textures" object decoded:
{
"timestamp": "<unix time in ms>",
"profileId": "<profile uuid>",
"profileName": "<player name>",
"isPublic": "<true or false>",
"textures": {
"SKIN": {
"url": "<player skin URL>"
},
"CAPE": {
"url": "<player cape URL>"
}
}
}
- The timestamp is sometimes in the past (probably due to cached results?)
- The
"SKIN"
object will have"metadata": {"model": "slim"}
if the player model has slim arms (“Alex?” style). For square arms (“Steve?” style),"metadata"
will be missing
Examples
Python | uuids or names to profiles
Python | names file to uuids+names file
PHP | uuids to names
PHP uuids to names, names to uuids