Skip to content
mc-api.io

Minecraft API for player, skin and server data

One REST API for Java and Bedrock Edition. Resolve a profile, UUID or XUID, render a skin, or ping a server - try it right here, then copy the request into your code.

Look up a player profile, UUID and XUID

Names, dashed or plain UUIDs and Bedrock XUIDs all work.

Edition
Try

API requests served

Java & Bedrock

Both editions, one set of endpoints

12 endpoints

Profiles, renders, server status

What the API gives you

One HTTP call replaces the Mojang session server, the Xbox Live lookup and a server pinger.

High availability

Every document is cached and timestamped. Cached lookups keep answering while Mojang or Xbox Live is slow, and the API reports upstream trouble as 503 instead of guessing.

Java and Bedrock in one API

The same routes serve both editions - edition is a path parameter, not a second product. Bedrock results carry the XUID next to the UUID.

Callable from anywhere

Plain GET endpoints with open CORS, so a Discord bot, a server plugin and a browser page can all read from the same URL.

Skin renders as PNG

Face, head, bust and full-body renders straight from a URL. Drop it into an img tag, size it from 8 to 1024 pixels, done.

Server status and favicons

Ping any Java or Bedrock address for MOTD, version, protocol, player counts and the server icon. Offline hosts answer with a result, not an error.

Described by OpenAPI

The whole surface is published as an OpenAPI 3.1 document. This site's reference is generated from that file, so it cannot drift.

Two minutes to your first request

No client library to install. Point any HTTP client at the base URL and read the JSON. Every endpoint in the reference ships the same four samples.

Browse all 12 endpoints or grab the OpenAPI document.

curl -s "https://mc-api.io/profile/bef1d0a8-e281-4f69-9200-64e07c235c96"
const response = await fetch("https://mc-api.io/profile/bef1d0a8-e281-4f69-9200-64e07c235c96");
if (!response.ok) {  const { message } = await response.json();  throw new Error(message);}
const profile = await response.json();console.log(profile);
import requests
response = requests.get("https://mc-api.io/profile/bef1d0a8-e281-4f69-9200-64e07c235c96", timeout=10)response.raise_for_status()
profile = response.json()print(profile)
HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder(URI.create("https://mc-api.io/profile/bef1d0a8-e281-4f69-9200-64e07c235c96")).build();
HttpResponse<String> response = client.sendAsync(request, BodyHandlers.ofString()).join();System.out.println(response.body());

Every endpoint at a glance

Generated from the live OpenAPI document. Base URL https://mc-api.io.

Open the full reference →

Profile

Get profile information for a player by their uuid, xuid or name.

Render

Render a player's skin by their uuid, xuid or name. A player without a usable skin is served the fallback render of the requested type, so these endpoints always answer with an image.

Name

Get the name of a player by their uuid or xuid.

UUID

Get the uuid of a player by their name.

Favicon

Get the favicon of a Java Minecraft server.

Server

Get information about a server by host and port.

Frequently asked questions

Still stuck? The endpoint reference documents every parameter and status code.

Can I call the API from the browser?

Yes. Every endpoint is a plain GET request and CORS is open, so browser code can read from it directly. The render endpoints answer with an image, which means a URL can go straight into an img tag.

Does it work for Bedrock players?

Yes. Pass BEDROCK as the edition path parameter, or look a player up by their XUID. Bedrock results include both the XUID and the UUID derived from it, and skin renders work for Bedrock players too.

What is an XUID and how does it relate to a UUID?

An XUID is the numeric Xbox Live account id every Bedrock player has. The API also derives a Minecraft-style UUID from it, which always starts with a long run of zeros - that is how you tell a Bedrock UUID from a Java one.

How fresh is the data?

Every JSON document carries a cachedAt timestamp in epoch milliseconds telling you exactly when the API last fetched it upstream. Renders are served with a one day cache header.

What happens when a Minecraft server is offline?

The server endpoint answers with HTTP 200 and online set to false, together with the hostname and port it tried. An offline server is a result, not an error, so you do not need to treat it as a failed request.

What do the error responses look like?

Failures return a JSON body with error set to true, a human readable message and, where available, a cause such as ProfileNotFoundException. A 503 means an upstream service such as Mojang or Xbox Live is unavailable, not that your request was wrong.