Skins system¶
On this page you’ll find information about available endpoints of Ely.by’s skins system service. You can use any of them as an secondary or primary source of skins for your project.
Ely.by’s skins system service provides proxying of textures from Minecraft premium users, which means that using this service, your players will see both premium Minecraft users’ skins and Ely.by users’ skins.
We strive to comply with the official skins system and do not support ears and HD-skins. The system supports capes, but doesn’t allow players to wear them on their own.
If you have suggestions for improving the existing functionality, please create a new Issue at the Chrly project repository.
Note
You can find more detailed information about the implementation of the skins system server in the Chrly project repository.
Requests URLs¶
The skins system is located at the http://skinsystem.ely.by domain.
In all queries, the nickname
param must be replaced by the player’s name. The value is case-insensitive.
-
/skins/{nickname}.png
URL for downloading a skin texture. The
.png
extension can be omitted. If textures aren’t found, the server will return a404
status response.
-
/cloaks/{nickname}.png
URL for downloading a cape texture. The
.png
extension can be omitted. If textures aren’t found, the server will return a404
status response.
-
/textures/{nickname}
Via this URL you can get textures in the format specified in the
textures
field of JSON property with the same name in response to a request for signed textures:{ "SKIN": { "url": "http://example.com/skin.png", "metadata": { "model": "slim" } }, "CAPE": { "url": "http://example.com/cape.png" } }
Depending on the availability of textures for the player, fields
SKIN
orCAPE
may be absent. Unless the skin model isslim
, themetadata
field will be omitted.The server will return an empty response with
204
status, if textures aren’t found.
-
/profile/{nickname}
This endpoint is an analog of the player profile query in the Mojang’s API, but instead of UUID user is queried by his nickname. Just like in the Mojang’s API, you can append
?unsigned=false
to the URL to get textures with a signature. The response will also include an additional property withname
ely.If the user has no textures, they’ll be requested through the Mojang’s API, but the Mojang’s signature will be discarded and textures will be re-signed using our signature key.
{ "id": "ffc8fdc95824509e8a57c99b940fb996", "name": "ErickSkrauch", "properties": [ { "name": "textures", "signature": "eks3dLJWzod92dLfWH6Z8uc6l3+IvrZtTj3zjwnj0AdVt44ODKoL50N+RabYxf7zF3C7tlJwT1oAtydONrxXUarqUlpVeQzLlfsuqUKBLi0L+/Y9yQLG3AciNqzEWq3hYaOsJrsaJday/hQmKFnpXEFCThTMpSuZhoAZIiH4VG48NhP70U93ejyXF9b1nPYnXP6k7BVB8LYSzcjZfdqY88jQJbbvRzOyX14ZSD0Ma92jceLNKmkTVc2UfRLUNXtQKtVSFUzlAjCXPJW89IIOZTRqLg65qstWwBvn6VuikyUB5EIxM8vuCh7zTkrMOx1v2Q0xIj8YSFcbnBH2bo87SYOIe1bOK57ZEeUJqY6uSgMlWs7dI5D3nmhFptErm72hg55Axdo1xbG4mvnmLYF7SA4yMDSytPPL+kA+sw3pafnvU2IZo38gqJSDOOpkOpdhUoHx85fzRJL8AcLSJiFlCZDl4pSi3cVuKy/xY5ohT/fJ6GEqpbZp3gACymn47zzI42VSh6j1DQnx2wnhqalTv0kE3qpAFpK/htSboQkFCW/bULO3b+vgU87XPlReT7UtH4yGLtixgs5GC8AzBraN8vOMv8TZCX9ab6mBBjOoDJjXa8Tq637TC75GxRHlpAN2jRHYvyp2zJwjUrML3u4eD4osHW+VBfl8D2l3nLJuemQ=", "value": "eyJ0aW1lc3RhbXAiOjE2MTQ5MzczMjc0MzcsInByb2ZpbGVJZCI6ImZmYzhmZGM5NTgyNDUwOWU4YTU3Yzk5Yjk0MGZiOTk2IiwicHJvZmlsZU5hbWUiOiJFcmlja1NrcmF1Y2giLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly9lbHkuYnkvc3RvcmFnZS9za2lucy82OWM2NzQwZDI5OTNlNWQ2ZjZhN2ZjOTI0MjBlZmMyOS5wbmcifX19" }, { "name": "ely", "value": "but why are you asking?" } ] }
The server will return an empty response with
204
status if the nickname wasn’t found locally nor via the Mojang’s API.
-
/signature-verification-key.der
This endpoint returns a public key that can be used to verify a texture’s signature. The key is provided in
DER
format, so it can be used directly in the Authlib, without modifying the signature checking algorithm.
-
/signature-verification-key.pem
The same endpoint as the previous one, except that it returns the key in
PEM
format.
-
/textures/signed/{nickname}
This request is used in our server skins system plugin to load textures with the original Mojang’s signature. The textures received this way can be transferred to an unmodified game client without any changes. The answer will also include additional property with
name
equal to ely.{ "id": "ffc8fdc95824509e8a57c99b940fb996", "name": "ErickSkrauch", "properties": [ { "name": "textures", "signature": "QH+1rlQJYk8tW+8WlSJnzxZZUL5RIkeOO33dq84cgNoxwCkzL95Zy5pbPMFhoiMXXablqXeqyNRZDQa+OewgDBSZxm0BmkNmwdTLzCPHgnlNYhwbO4sirg3hKjCZ82ORZ2q7VP2NQIwNvc3befiCakhDlMWUuhjxe7p/HKNtmKA7a/JjzmzwW7BWMv8b88ZaQaMaAc7puFQcu2E54G2Zk2kyv3T1Bm7bV4m7ymbL8McOmQc6Ph7C95/EyqIK1a5gRBUHPEFIEj0I06YKTHsCRFU1U/hJpk98xXHzHuULJobpajqYXuVJ8QEVgF8k8dn9VkS8BMbXcjzfbb6JJ36v7YIV6Rlt75wwTk2wr3C3P0ij55y0iXth1HjwcEKsg54n83d9w8yQbkUCiTpMbOqxTEOOS7G2O0ZDBJDXAKQ4n5qCiCXKZ4febv4+dWVQtgfZHnpGJUD3KdduDKslMePnECOXMjGSAOQou//yze2EkL2rBpJtAAiOtvBlm/aWnDZpij5cQk+pWmeHWZIf0LSSlsYRUWRDk/VKBvUTEAO9fqOxWqmSgQRUY2Ea56u0ZsBb4vEa1UY6mlJj3+PNZaWu5aP2E9Unh0DIawV96eW8eFQgenlNXHMmXd4aOra4sz2eeOnY53JnJP+eVE4cB1hlq8RA2mnwTtcy3lahzZonOWc=", "value": "eyJ0aW1lc3RhbXAiOjE0ODYzMzcyNTQ4NzIsInByb2ZpbGVJZCI6ImM0ZjFlNTZmNjFkMTQwYTc4YzMyOGQ5MTY2ZWVmOWU3IiwicHJvZmlsZU5hbWUiOiJXaHlZb3VSZWFkVGhpcyIsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83Mzk1NmE4ZTY0ZWU2ZDhlYzY1NmFkYmI0NDA0ZjhlYmZmMzQxMWIwY2I5MGIzMWNiNDc2ZWNiOTk2ZDNiOCJ9fX0=" }, { "name": "ely", "value": "but why are you asking?" } ] }
By default textures proxying isn’t used for this query. To enable it, add an additional GET parameter
?proxy=true
.The server will return an empty response with
204
status, if textures aren’t found.
You can also pass a range of additional GET parameters while making any of the above requests. They will be used to analyze the usage of the service by different versions of the game.
- version
The version of the protocol by which skins will be requested. The current version is
2
, i.e. you need to specifyversion=2
.- minecraft_version
The version of Minecraft that the request is made from.
- authlib_version
The version of the Authlib used. This option is relevant for Minecraft versions 1.7.6+, where a separate library is used to load skins instead of in-game code.
Here is an example of a textures request with parameters described above:
http://skinsystem.ely.by/textures/erickskrauch?version=2&minecraft_version=1.14.0&authlib_version=1.5.25
Additional URLs¶
You can also perform a skin and cape request by passing the nickname through the GET parameter. This feature is used to pass analytical parameters of game versions up to 1.5.2, where the nickname is simply appended to the end of the line. To do this, the entire string is arranged in such a way that the last parameter is name
, after appending a nickname to which you get a full request string for textures.
-
/skins?name={nickname}.png
See the skin request.
-
/cloaks?name={nickname}.png
See the cape request.
Examples of requests for textures with parameters from above:
http://skinsystem.ely.by/skins?version=2&minecraft_version=1.5.2&name=erickskrauch.png
http://skinsystem.ely.by/cloaks?version=2&minecraft_version=1.4.7&name=notch
Textures proxying¶
Ely.by’s skins system service obtains textures from the official skin system in a case where no information about textures for the requested username was found in the database. The request will also be proxied if a skin entry is found, but it’s default.
To improve the throughput of the proxying algorithm, information about textures is cached in 2 stages:
Player’s names and UUIDs matches are stored for 30 days.
Information about textures isn’t updated more often than once a minute.
If you own a Minecraft premium account, but your nickname is busy, please contact our support team and after a short check we’ll pass the nickname on to you.
Ready-made implementations¶
Ready-made patch implementations and installation instructions can be found at the download section of the main Ely.by website.