Skip to content
Bundle multiple Minecraft APIs into a single GET request.
CoffeeScript JavaScript
Branch: master
Clone or download

Latest commit

Electroid Use more aggresive caching
Signed-off-by: Ashcon Partovi <ashcon@partovi.net>
Latest commit 3d1ac53 May 1, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
dist Use more aggresive caching May 1, 2020
src Use more aggresive caching May 1, 2020
.gitignore Add automated deployment for v1 Nov 3, 2018
LICENSE Initial commit Jun 26, 2018
README.md Add documentation for v2 May 11, 2019
metadata.json Refactor avatars into workers May 14, 2019
package-lock.json
package.json Use more aggresive caching May 1, 2020
webpack.config.js Refactor avatars into workers May 14, 2019

README.md

mojang-api

Javascript microservice that bundles multiple Mojang APIs into a single GET request.

Purpose

Mojang, the developers of Minecraft, provides multiple APIs for websites and servers to fetch identity information about users. Requests do not accept authentication tokens, however they are heavily rate limited and fragmented among several endpoints. The purpose of this project is to package several of the most commonly used APIs into a single GET request with no rate limiting and no need for client-side caching.

I have deployed this on my personal domain ashcon.app and am opening it up for the internet to use for free. It runs using Cloudflare Workers, which are Javascript functions that live in the closest datacenter to your request. The API is currently handling 1M+ requests per day with an average response time of 200ms and a < 0.0001% error rate.

Single Request (now)

Username or UUID -> Everything
https://api.ashcon.app/mojang/v2/user/[username|uuid] (click for example)

{
  "uuid": <uuid>,
  "username": <username>,
  "username_history": [
    {
      "username": <username>,
      "changed_at": <date|null>
    }
  ],
  "textures": {
    "slim": <boolean>,
    "custom": <boolean>,
    "skin": {
      "url": <url>,
      "data": <base64>
    },
    "cape": {
      "url": <url|null>,
      "data": <base64|null>
    },
    "raw": {
      "value": <base64>,
      "signature": <base64>
    }
  },
  "created_at": <date|null>
}

Multiple Requests (before)

Username -> UUID
https://api.mojang.com/users/profiles/minecraft/[username]

{
  "id": <uuid>,
  "name": <username>
}

UUID -> Username History
https://api.mojang.com/user/profiles/[uuid]/names

[
  {
    "name": <username>
  },
  {
    "name": <username>,
    "changedToAt": <integer>
  }
]

UUID -> Profile + Textures
https://sessionserver.mojang.com/session/minecraft/profile/[uuid]

{
  "id": <uuid>,
  "name": <username>,
  "properties": [
    {
      "name": "textures",
      "value": <base64> // Then decode the base64 string and make http requests to fetch the textures...
    }
  ]
}

Build

npm i
npm run build
npm run preview -- \
  --preview-url https://localhost/mojang/v2/user/Notch
You can’t perform that action at this time.