> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.wynncraft.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.wynncraft.com/_mcp/server.

# Get player profile

GET https://api.wynncraft.com/v3/player/{username}

This endpoint is cached for 2 minutes in the USER cache source.   See [Caching](/welcome#caching).  This endpoint belongs to the PLAYER rate-limit bucket. See [Throttling and Rate Limits](/welcome#throttling-and-rate-limits).

Player stats are subject to [Access Rules](/privacy), which can hide some of the stats. Check the `restrictions` object to see which access rules affected the response.

It is recommended to request players by UUID. Username lookups can return `300 MultipleObjectsReturned` with a multi-selector response when more than one player matches the query.

`previousRanking` is stored daily based on player activity. Subtracting `previousRanking` from the current ranking gives the player's leaderboard progression.

Use `fullResult` to include full character data. The `characters` object uses the same structure as [GET /player/\{username}/characters/\{uuid}](https://docs.wynncraft.com/modules/player/get-player-character).

Reference: https://docs.wynncraft.com/modules/player/get-player

## Request

### Path parameters

- `username` (string, required) — Username or UUID accepted by the player route.

### Query parameters

- `fullResult` (enum, optional) — Presence-based flag that expands responses. Send it without a value as `?fullResult`. Using `?fullResult=true` or `?fullResult=false` is not accepted.
  - Allowed values: ``

## Response

### 200

Player profile.

- `username` (string, required)
- `online` (boolean, required)
- `server` (string, required, nullable)
- `activeCharacter` (string, required, nullable)
- `nickname` (string, required, nullable)
- `uuid` (string, required)
- `rank` (string, required)
- `rankBadge` (string, required)
- `legacyRankColour` (LegacyRankColour, required)
- `shortenedRank` (string, required)
- `supportRank` (string, required, nullable)
- `veteran` (boolean, required)
- `lastJoin` (datetime, required)
- `guild` (GuildReference, required, nullable)
- `ranking` (map from string to integer, required) — Map of leaderboard type/name to rank position. See [GET /leaderboards/types](https://docs.wynncraft.com/modules/leaderboards/list-leaderboard-types) for possible types.
- `previousRanking` (map from string to integer, required) — Map of leaderboard type/name to rank position. See [GET /leaderboards/types](https://docs.wynncraft.com/modules/leaderboards/list-leaderboard-types) for possible types.
- `firstJoin` (datetime, required)
- `playtime` (double, required)
- `globalData` (PlayerGlobalData, required)
- `featuredStats` (FeaturedStats, required)
- `wallpaper` (string, required)
- `avatar` (string, required)
- `restrictions` (map from string to boolean, required)
- `characters` (map from string to Character, optional) — Only present when `fullResult` is enabled.

## Errors

### 404 Not Found Error

No matching player was found.

- `error` (string, required)
- `detail` (string, required)
- `code` (integer, required)

### 500 Internal Server Error

Player payload construction failed.

- `error` (string, required)
- `detail` (string, required)
- `code` (integer, required)

## Types

### LegacyRankColour

- `main` (string, required)
- `sub` (string, required)

### GuildReference

- `uuid` (string, required)
- `name` (string, required)
- `prefix` (string, required)
- `rank` (string, optional, nullable)
- `rankStars` (string, optional, nullable)

### PlayerGlobalData

- `contentCompletion` (integer, required)
- `wars` (integer, required)
- `totalLevel` (integer, required)
- `mobsKilled` (integer, required)
- `chestsFound` (integer, required)
- `dungeons` (DungeonCountList, required)
- `raids` (RaidCountList, required)
- `worldEvents` (integer, required)
- `lootruns` (integer, required)
- `caves` (integer, required)
- `completedQuests` (integer, required)
- `guildRaids` (RaidCountList, required, nullable)
- `raidStats` (RaidStats, required, nullable)
- `pvp` (PvpStats, required)

### FeaturedStats

### Character

- `type` (string, required)
- `reskin` (string, required, nullable)
- `nickname` (string, required, nullable)
- `level` (integer, required)
- `xp` (integer, required)
- `xpPercent` (integer, required)
- `totalLevel` (integer, required)
- `preEconomy` (boolean, required, nullable)
- `gamemode` (list of string, required)
- `contentCompletion` (integer, required)
- `wars` (integer, required)
- `playtime` (double, required)
- `mobsKilled` (integer, required)
- `chestsFound` (integer, required)
- `itemsIdentified` (integer, required)
- `blocksWalked` (integer, required)
- `logins` (integer, required)
- `deaths` (integer, required)
- `discoveries` (integer, required)
- `pvp` (PvpStats, required)
- `skillPoints` (map from string to integer, required, nullable)
- `professions` (Professions, required)
- `dungeons` (DungeonCountList, required, nullable)
- `raids` (RaidCountList, required, nullable)
- `worldEvents` (integer, required)
- `lootruns` (integer, required)
- `caves` (integer, required)
- `quests` (list of string, required)
- `restrictions` (map from string to boolean, required)
- `removedStat` (list of string, required)

### DungeonCountList

- `total` (integer, required)
- `list` (DungeonList, required)

### RaidCountList

- `total` (integer, required)
- `list` (RaidList, required)

### RaidStats

- `damageTaken` (integer, required)
- `damageDealt` (integer, required)
- `healthHealed` (integer, required)
- `deaths` (integer, required)
- `buffsTaken` (integer, required)
- `gambitsUsed` (integer, required)

### PvpStats

- `kills` (integer, optional)
- `deaths` (integer, optional)

### Professions

- `fishing` (ProfessionProgress, optional)
- `woodcutting` (ProfessionProgress, optional)
- `mining` (ProfessionProgress, optional)
- `farming` (ProfessionProgress, optional)
- `scribing` (ProfessionProgress, optional)
- `jeweling` (ProfessionProgress, optional)
- `alchemism` (ProfessionProgress, optional)
- `cooking` (ProfessionProgress, optional)
- `weaponsmithing` (ProfessionProgress, optional)
- `tailoring` (ProfessionProgress, optional)
- `woodworking` (ProfessionProgress, optional)
- `armouring` (ProfessionProgress, optional)

### DungeonList

- `Skeleton` (integer, optional)
- `Decrepit Sewers` (integer, optional)
- `Corrupted Decrepit Sewers` (integer, optional)
- `Spider` (integer, optional)
- `Infested Pit` (integer, optional)
- `Zombie` (integer, optional)
- `Timelost Sanctum` (integer, optional)
- `Underworld Crypt` (integer, optional)
- `Corrupted Underworld Crypt` (integer, optional)
- `Animal` (integer, optional)
- `Lost Sanctuary` (integer, optional)
- `Corrupted Lost Sanctuary` (integer, optional)
- `Silverfish` (integer, optional)
- `Sand-Swept Tomb` (integer, optional)
- `Corrupted Sand-Swept Tomb` (integer, optional)
- `Ice` (integer, optional)
- `Ice Barrows` (integer, optional)
- `Corrupted Ice Barrows` (integer, optional)
- `Jungle` (integer, optional)
- `Undergrowth Ruins` (integer, optional)
- `Corrupted Undergrowth Ruins` (integer, optional)
- `Ocean` (integer, optional)
- `Galleon's Graveyard` (integer, optional)
- `Corrupted Galleon's Graveyard` (integer, optional)
- `Fallen Factory` (integer, optional)
- `Eldritch Outlook` (integer, optional)

### RaidList

- `Nest of the Grootslangs` (integer, optional)
- `Orphion's Nexus of Light` (integer, optional)
- `The Canyon Colossus` (integer, optional)
- `The Nameless Anomaly` (integer, optional)
- `The Wartorn Palace` (integer, optional)

### ProfessionProgress

- `level` (integer, required)
- `xpPercent` (integer, required)

## Examples

**Response**

```json
{
  "username": "Nepmia",
  "online": false,
  "server": null,
  "activeCharacter": "5b6ab8a0-8f7c-4f50-bd2c-bfabe22d74bc",
  "nickname": "Neplicopter",
  "uuid": "98bc2236-ada5-4039-b560-8aaa4cc50384",
  "rank": "WebDev",
  "rankBadge": "nextgen/badges/rank_webdev.svg",
  "legacyRankColour": {
    "main": "#aa0000",
    "sub": "#ff5555"
  },
  "shortenedRank": "WebDev",
  "supportRank": "champion",
  "veteran": false,
  "lastJoin": "2026-03-19T23:45:48.667000Z",
  "guild": {
    "uuid": "adb5f0b5-5289-439c-9293-a29d220e7152",
    "name": "Spectral Cabbage",
    "prefix": "SPC",
    "rank": "OWNER",
    "rankStars": "*****"
  },
  "ranking": {
    "playerContent": 67
  },
  "previousRanking": {
    "playerContent": 42
  },
  "firstJoin": "2015-04-29T17:22:00.000000Z",
  "playtime": 2485.42,
  "globalData": {
    "contentCompletion": 1860,
    "wars": 6,
    "totalLevel": 3278,
    "mobsKilled": 470208,
    "chestsFound": 3033,
    "dungeons": {
      "total": 2,
      "list": {
        "Decrepit Sewers": 1,
        "Corrupted Decrepit Sewers": 1
      }
    },
    "raids": {
      "total": 1,
      "list": {
        "Nest of the Grootslangs": 1
      }
    },
    "worldEvents": 2,
    "lootruns": 1,
    "caves": 43,
    "completedQuests": 313,
    "guildRaids": {
      "total": 1,
      "list": {
        "Nest of the Grootslangs": 1
      }
    },
    "raidStats": {
      "damageTaken": 180569,
      "damageDealt": 186268752,
      "healthHealed": 251434,
      "deaths": 11,
      "buffsTaken": 63,
      "gambitsUsed": 0
    },
    "pvp": {
      "kills": 443,
      "deaths": 666
    }
  },
  "featuredStats": {
    "globalData.chestsFound": 3067,
    "globalData.mobsKilled": 479814,
    "globalData.totalLevel": 4677,
    "firstJoin": "2013-10-23T20:02:38Z",
    "playtime": 2537.67
  },
  "wallpaper": "default",
  "avatar": "default",
  "restrictions": {
    "mainAccess": false,
    "characterDataAccess": false
  },
  "characters": {
    "5b6ab8a0-8f7c-4f50-bd2c-bfabe22d74bc": {
      "type": "ASSASSIN",
      "reskin": "NINJA",
      "nickname": "Neplicopter",
      "level": 106,
      "xp": 53307528,
      "xpPercent": 100,
      "totalLevel": 369,
      "preEconomy": null,
      "gamemode": [],
      "contentCompletion": 1860,
      "wars": 6,
      "playtime": 2485.42,
      "mobsKilled": 470208,
      "chestsFound": 3033,
      "itemsIdentified": 42,
      "blocksWalked": 123456,
      "logins": 128,
      "deaths": 666,
      "discoveries": 120,
      "pvp": {
        "kills": 443,
        "deaths": 666
      },
      "skillPoints": {
        "strength": 0,
        "dexterity": 0,
        "intelligence": 0,
        "defence": 0,
        "agility": 0
      },
      "professions": {
        "fishing": {
          "level": 73,
          "xpPercent": 41
        },
        "woodcutting": {
          "level": 52,
          "xpPercent": 88
        },
        "mining": {
          "level": 68,
          "xpPercent": 17
        },
        "farming": {
          "level": 91,
          "xpPercent": 64
        },
        "scribing": {
          "level": 39,
          "xpPercent": 22
        },
        "jeweling": {
          "level": 57,
          "xpPercent": 79
        },
        "alchemism": {
          "level": 44,
          "xpPercent": 35
        },
        "cooking": {
          "level": 28,
          "xpPercent": 93
        },
        "weaponsmithing": {
          "level": 11,
          "xpPercent": 55
        },
        "tailoring": {
          "level": 6,
          "xpPercent": 44
        },
        "woodworking": {
          "level": 17,
          "xpPercent": 8
        },
        "armouring": {
          "level": 9,
          "xpPercent": 13
        }
      },
      "dungeons": {
        "total": 2,
        "list": {
          "Decrepit Sewers": 1,
          "Corrupted Decrepit Sewers": 1
        }
      },
      "raids": {
        "total": 1,
        "list": {
          "Nest of the Grootslangs": 1
        }
      },
      "worldEvents": 2,
      "lootruns": 1,
      "caves": 43,
      "quests": [
        "King's Recruit",
        "The Canary Calls"
      ],
      "restrictions": {
        "characterDataAccess": false
      },
      "removedStat": []
    }
  }
}
```

**SDK Code**

```python Player profile with fullResult characters
import requests

url = "https://api.wynncraft.com/v3/player/username"

response = requests.get(url)

print(response.json())
```

```javascript Player profile with fullResult characters
const url = 'https://api.wynncraft.com/v3/player/username';
const options = {method: 'GET'};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Player profile with fullResult characters
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.wynncraft.com/v3/player/username"

	req, _ := http.NewRequest("GET", url, nil)

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Player profile with fullResult characters
require 'uri'
require 'net/http'

url = URI("https://api.wynncraft.com/v3/player/username")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
```

```java Player profile with fullResult characters
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.wynncraft.com/v3/player/username")
  .asString();
```

```php Player profile with fullResult characters
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.wynncraft.com/v3/player/username');

echo $response->getBody();
```

```csharp Player profile with fullResult characters
using RestSharp;

var client = new RestClient("https://api.wynncraft.com/v3/player/username");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
```

```swift Player profile with fullResult characters
import Foundation

let request = NSMutableURLRequest(url: NSURL(string: "https://api.wynncraft.com/v3/player/username")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```