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.
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 'https://playerdb.co/api/player/minecraft/Notch'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);import requests
res = requests.get("https://playerdb.co/api/player/minecraft/Notch", timeout=20)
res.raise_for_status()
print(res.json()){
"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
| Parameter | Type | Required | Description |
|---|---|---|---|
platform | path segment | Required | `minecraft`, `steam` or `xbox`. The shape under `data.player` differs per platform. minecraft |
identifier | path segment | Required | Username, 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
UUID Decoder
Decode any UUID or GUID. Read its version and variant, and pull the creation timestamp out of version 1, 6 and 7 UUIDs instantly.
Base64 Decoder
Decode Base64 to readable text or download it as a file. Handles URL-safe base64url and missing padding automatically. Free, private, in-browser decoder.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
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.