Skip to content

Player

client.player — profiles, characters, and online status.

Official docs: Player module.

When to use which

GoalMethod
Who is online right nowlistOnlinePlayers
Authenticated account identitywhoAmI (auth required)
Public profile by username / UUIDgetPlayer
Character list for a playerlistCharacters
Ability loadout for one charactergetCharacterAbilities

listOnlinePlayers(options?)

GET /player

OptionTypeDescription
identifier?stringFilter by username or UUID
server?string | numberFilter by server name or number
ts
const { data } = await client.player.listOnlinePlayers();
// { total: number, players: Record<username, serverName> }

whoAmI()

GET /player/whoamiauth required

Returns a single-entry Record<uuid, PlayerIdentity>. Grab the profile with Object.values(data)[0].

ts
const client = new WynnClient({
  auth: { type: "token", token: process.env.WYNN_API_TOKEN! },
});

const { data } = await client.player.whoAmI();
const me = Object.values(data)[0];
console.log(me?.username, me?.online, me?.rank);

getPlayer(username, options?)

GET /player/:username

username may be a username or UUID. Ambiguous names throw MultipleObjectsReturned.

OptionTypeDescription
fullResult?booleanPresence ?fullResult — includes characters map

Result shape (abridged)

ts
type GetPlayerResult = {
  username: string;
  uuid: string;
  online: boolean;
  server: string | null;
  activeCharacter: string | null;
  rank: string;
  rankBadge: string;
  supportRank: string | null;
  veteran: boolean;
  firstJoin: string;
  lastJoin: string;
  playtime: number;
  guild: {
    uuid: string;
    name: string;
    prefix: string;
    rank?: string | null;
  } | null;
  globalData: {
    totalLevel: number;
    mobsKilled: number;
    chestsFound: number;
    completedQuests: number;
    // …dungeons, raids, pvp, …
  };
  characters?: Record<
    string,
    {
      type: string;
      nickname: string | null;
      level: number;
      totalLevel: number;
      playtime: number;
      // …
    }
  >;
};
ts
const { data } = await client.player.getPlayer("Salted", { fullResult: true });

console.log(data.username, data.guild?.prefix);
for (const [uuid, character] of Object.entries(data.characters ?? {})) {
  console.log(uuid, character.type, character.level);
}

Private profiles throw WynnApiError.Forbidden. Missing players throw NotFound.

listCharacters(username)

GET /player/:username/characters

Lighter than getPlayer({ fullResult: true }) when you only need character UUIDs / types.

ts
const { data } = await client.player.listCharacters("Salted");
// Record<characterUuid, LightCharacter>

getCharacterAbilities(username, characterUuid)

GET /player/:username/characters/:characterUuid/abilities

ts
const { data: characters } = await client.player.listCharacters("Salted");
const uuid = Object.keys(characters)[0]!;
const { data } = await client.player.getCharacterAbilities("Salted", uuid);

Unofficial TypeScript tooling for the Wynncraft API