BYTETOOLS

PlayerDB API

Free player lookup API with no key: resolve a Minecraft username to a UUID and skin, or query Steam and Xbox accounts, from one consistent endpoint shape. Live example.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the PlayerDB API?

PlayerDB is a free, key-free lookup API that resolves player identities across Minecraft, Steam and Xbox. A Minecraft lookup returns the UUID in both dashed and undashed form, the current username, a skin texture URL and the signed Mojang profile properties.

Three platforms behind one URL shape is the selling point: `/api/player/minecraft/{name}`, `/api/player/steam/{id}`, `/api/player/xbox/{gamertag}`. For a cross-platform community that removes three separate integrations, each with its own authentication story — Mojang's own endpoints in particular have grown more restrictive over the years, and PlayerDB absorbs that churn on your behalf.

Read the `code` field rather than the HTTP status. A player who does not exist still comes back as a structured document with `code` set to an error value, which is friendlier than a bare 404 but only if you actually check it. Worth knowing too: `properties[0].value` is base64-encoded JSON, and decoding it yields the textures object with the real skin URL and a timestamp. The convenience `skin_texture` field saves you that step for the common case, but the signed property is what you need if you intend to verify anything.

Quick facts

Base URL
https://playerdb.co/api
Authentication
No key or account. PlayerDB caches upstream lookups and reports when it last did so through `meta.cached_at`.
Rate limit
No rate-limit headers are returned. Results are cached server-side, so repeated lookups of the same player are cheap; cache locally as well for anything high traffic.
Pricing
Free.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the PlayerDB API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Resolve a Minecraft username to a UUID and skin

GET https://playerdb.co/api/player/minecraft/Notch

curl
curl 'https://playerdb.co/api/player/minecraft/Notch'
JavaScript (fetch)
const res = await fetch("https://playerdb.co/api/player/minecraft/Notch");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://playerdb.co/api/player/minecraft/Notch", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "code": "player.found",
  "message": "Successfully found player by given ID.",
  "data": {
    "player": {
      "meta": {
        "cached_at": 1786904853
      },
      "username": "Notch",
      "id": "069a79f4-44e9-4726-a5be-fca90e38aaf5",
      "raw_id": "069a79f444e94726a5befca90e38aaf5",
      "avatar": "https://crafthead.net/avatar/069a79f444e94726a5befca90e38aaf5",
      "skin_texture": "https://textures.minecraft.net/texture/292009a4925b58f02c77dadc3ecef07ea4c7472f64e0fdc32ce5522489362680",
      "properties": [
        {
          "name": "textures",
          "value": "ewogICJ0aW1lc3RhbXAiIDogMTc4NjQxMjExNTQwMywKICAicHJvZmlsZUlkIiA6ICIwNjlhNzlmNDQ0ZTk0NzI2YTViZWZjYTkwZTM4YWFmNSIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb3RjaCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yOTIwMDlhNDkyNWI1OGYwMmM3N2RhZGMzZWNlZjA3ZWE0Yzc0NzJmNjRlMGZkYzMyY2U1NTIyNDg5MzYyNjgwIgogICAgfQogIH0KfQ==",
          "signature": "c295Y1f9jwQVZujLBktlXx+wo9kFV2V9gcTtUI2yLOi2utrvanmVHpNzuJYCTSmcJUQKWlpgXzdIxiJLPz3wtLIq6UHFEGrbwvZcmwf1je6WFmZeA65CmxEKp5pqN1bokJnJCSxod8Pj7qxFMc9cxnL4WZLuJns3r05Lue3m+llzNYdIz9ndTKVL/s7aUZ/5leq1QeHAqzFrEK6pyCcsgE8nx4hgIHVN5ISQDf9ZbmMNf+avDynSdD6PEz7MZFMPCo95WxvmAz18s8KhHCmP5WjxbQtarhaO8W3kyBH8mMwFTqwh8t61Gp3WxHqedAnQgEXXUv27Bwir/VcYk+htIYM2TP9/sMdbEkrAIDjd/nzcsb+XcKPJ9k+SBUwLNW2BBpXeLEdyuWJnzXgKui+TMm2tpXO3AOHt15Wjk0lEjZtImHsPxqaF6a3JwB4Ml+0JdLKKOJsG1A02vAJnjTgx/e+kGNLKL3YaFJ16Q2jwafgu2C8l7XQim0zJE2oVDQvgzYjfODUw5tQqXBKWAsVs+7zZmff4yUgUUWNk7iIDhHdoACWpAiPI6nZwmOhkg+

Parameters

ParameterTypeRequiredDescription
platformpath segmentRequired`minecraft`, `steam` or `xbox`. The shape under `data.player` differs per platform. minecraft
identifierpath segmentRequiredUsername, UUID, SteamID or gamertag depending on the platform. Minecraft accepts either a name or a UUID. Notch

Response fields

codestring
Application-level result such as `player.found`. Check this rather than relying on the HTTP status, which stays 200 for misses.
messagestring
Human-readable explanation of `code`, safe to log but not to show users verbatim.
data.player.usernamestring
The player's current name. Minecraft names change, so store the UUID as your key, not this.
data.player.idstring
UUID in dashed form.
data.player.raw_idstring
The same UUID without dashes — the form most Mojang and Crafatar endpoints expect.
data.player.avatarstring
Ready-made avatar URL on a third-party render service.
data.player.skin_texturestring
Direct link to the skin PNG on Mojang's texture CDN, saving you from decoding the properties blob.
data.player.properties[]array
Mojang's signed profile properties. `value` is base64-encoded JSON containing the textures object; `signature` is Mojang's signature over it.
data.player.meta.cached_atinteger
Unix timestamp in SECONDS of when PlayerDB last refreshed this record. Results can be hours old.

What you can build with the PlayerDB API

  • Convert Minecraft usernames to UUIDs for a whitelist or ban list
  • Show a player's current name and skin on a server website
  • Link Steam and Minecraft identities in a cross-platform community
  • Validate that a submitted username actually exists before saving it
  • Feed UUIDs to an avatar renderer for a leaderboard

Common errors and how to fix them

A 200 response with an error code

The player was not found, but the response is still a well-formed document.

Fix: Test `code` for `player.found` before reading `data`. Treating 200 as success will hand you an undefined player object.

A stale username

`meta.cached_at` shows the record predates a recent name change.

Fix: Read `cached_at` and set your own tolerance; for anything identity-critical, key on the UUID and treat names as display-only.

Confusion between id and raw_id

The dashed UUID was passed to an endpoint expecting the undashed form.

Fix: Mojang's and Crafatar's endpoints generally accept both, but some tooling does not — `raw_id` is the safe default.

An unreadable properties value

It is base64-encoded JSON, not a URL.

Fix: Base64-decode it, then parse the result to reach `textures.SKIN.url`. Or read `skin_texture`, which is that same URL pre-extracted.

PlayerDB API — frequently asked questions

Does PlayerDB need an API key?

No. Minecraft, Steam and Xbox lookups all work with no key, no account and no headers, and the response shape is consistent enough that one client function can serve all three platforms.

How do I convert a Minecraft username to a UUID?

Call `/api/player/minecraft/{username}` and read `data.player.id` for the dashed UUID or `data.player.raw_id` for the undashed one. Store the UUID, since usernames change and UUIDs do not.

Why does a missing player return HTTP 200?

PlayerDB always returns a structured document and reports the outcome in the `code` field — `player.found` on success, an error code otherwise. Branch on `code`, not on the status code.

What is inside the properties array?

Mojang's signed profile properties. The `value` field is base64-encoded JSON holding the textures object, and `signature` is Mojang's signature over it. If you only want the skin image, `skin_texture` already contains the decoded URL.

Tools that pair with this API

PlayerDB is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.