We have moved to Warcraft Wiki. Click here for information and the new URL.



Generate a talent loadout string for a given loadout

importString = C_Traits.GenerateImportString(configID)


number a talent loadout, e.g. from C_ClassTalents.GetConfigIDsBySpecID.


string a talent loadout string, which can be used to import the loadout, can be sent to a friend, or used on external websites. An empty string is returned if the client can't find data for the loadout.


No data is available until the first TRAIT_CONFIG_LIST_UPDATED. When reloading UI, data is available immediately.

This API works only for talent loadouts for the current character, but it does work for other specs. The returned string, can be used in the Talent Tree UI to import the loadout, and its format has been documented by Blizzard in Blizzard_ClassTalentImportExport.lua.

It's important to note, that if you use this API with a loadout outside your current spec, the Specialization ID in the header will be incorrect, since that will always reflect your current spec instead. So you may want to change the header with code like this:

-- note: this example is made for Serialization Version 1 specifically, and if blizzard updates the format, this may no longer work
local bitWidthHeaderVersion = 8;
local bitWidthHeaderSpecID = 16;
local function fixLoadoutString(loadoutString, specID)
   local exportStream = ExportUtil.MakeExportDataStream();
   local importStream = ExportUtil.MakeImportDataStream(loadoutString);
   if importStream:ExtractValue(bitWidthHeaderVersion) ~= 1 then
      return nil; -- only version 1 is supported
   local headerSpecID = importStream:ExtractValue(bitWidthHeaderSpecID);
   if headerSpecID == specID then
      return loadoutString; -- no update needed
   exportStream:AddValue(bitWidthHeaderVersion, 1);
   exportStream:AddValue(bitWidthHeaderSpecID, specID);
   local remainingBits = importStream:GetNumberOfBits() - bitWidthHeaderVersion - bitWidthHeaderSpecID;
   -- copy the remaining bits in batches of 16
   while remainingBits > 0 do
      local bitsToCopy = math.min(remainingBits, 16);
      exportStream:AddValue(bitsToCopy, importStream:ExtractValue(bitsToCopy));
      remainingBits = remainingBits - bitsToCopy;
   return exportStream:GetExportString();

local spec = 62; -- assuming you're playing mage
local configID = C_ClassTalents.GetConfigIDsBySpecID(specID)[1]; -- assuming you have an arcane loadout
print(fixLoadoutString(C_Traits.GenerateImportString(configID), specID))