wow-api-encounters
SKILL.md
Encounters API (Retail — Patch 12.0.0)
Comprehensive reference for encounter journal, mythic+, instances, scenarios, raid locks, and seasons.
Source: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API Current as of: Patch 12.0.0 (Build 65655) — January 28, 2026 Scope: Retail only.
Scope
- Encounter Journal — Boss database, loot tables, abilities
- C_ChallengeMode — M+ keystones, affixes, timers
- C_MythicPlus — Weekly M+ runs, rating, seasonal
- ScenarioInfo — Scenarios, delves, stages
- InstanceLeaverInfo — Deserter/leaver info
- Raid Locks — Saved instance lockouts
- C_SeasonInfo — Seasonal content
Encounter Journal
Instance Navigation
| Function | Returns | Description |
|---|---|---|
EJ_GetNumTiers() |
numTiers |
Number of expansion tiers |
EJ_GetTierInfo(tierIndex) |
name, link |
Tier name and link |
EJ_SelectTier(tierIndex) |
— | Select expansion tier |
EJ_GetCurrentTier() |
tierIndex |
Current selected tier |
EJ_GetInstanceByIndex(index, isRaid) |
instanceID, name, description, bgImage, buttonImage1, loreImage, buttonImage2, dungeonAreaMapID, link, shouldDisplayDifficulty |
Instance at index |
EJ_GetNumInstances() |
— | Not a function; iterate EJ_GetInstanceByIndex until nil |
EJ_SelectInstance(instanceID) |
— | Select instance |
EJ_GetInstanceInfo(instanceID) |
name, description, bgImage, ... |
Instance info |
EJ_InstanceIsRaid() |
isRaid |
Selected is raid? |
Encounter (Boss) Data
| Function | Returns | Description |
|---|---|---|
EJ_GetEncounterInfoByIndex(index) |
name, description, journalEncounterID, rootSectionID, link, journalInstanceID, dungeonEncounterID, instanceID |
Boss at index |
EJ_GetEncounterInfo(encounterID) |
name, description, journalEncounterID, rootSectionID, link, journalInstanceID, dungeonEncounterID, instanceID |
Boss info |
EJ_SelectEncounter(encounterID) |
— | Select encounter |
EJ_GetNumEncountersForLootByIndex(index) |
numEncounters |
Bosses with loot |
EJ_GetCreatureInfo(index, encounterID) |
id, name, description, displayInfo, iconImage, ... |
Creature info |
Section (Ability) Data
| Function | Returns | Description |
|---|---|---|
EJ_GetSectionInfo(sectionID) |
info |
Section/ability info |
EJ_GetNumSectionsForEncounter(encounterID) |
numSections |
Number of sections |
Section Info Fields
title— Section titledescription— Section textheaderType— Header type enumabilityIcon— Icon texturecreatureDisplayID— Display IDsiblingSectionID— Next siblingfirstChildSectionID— First childfilteredByDifficulty— Hidden by difficulty filter?link— Journal linkstartsOpen— Default expanded?
Loot
| Function | Returns | Description |
|---|---|---|
EJ_GetLootInfoByIndex(index) |
name, icon, slotFilter, armorType, itemID, link, encounterID |
Loot at index |
EJ_GetNumLoot() |
numLoot |
Number of loot items |
EJ_SetLootFilter(classID, specID) |
— | Filter by class/spec |
EJ_GetLootFilter() |
classID, specID |
Current filter |
EJ_SetSlotFilter(slotFilter) |
— | Filter by slot |
EJ_GetSlotFilter() |
slotFilter |
Current slot filter |
EJ_ResetLootFilter() |
— | Clear all filters |
EJ_IsLootListOutOfDate() |
isOutOfDate |
Needs refresh? |
Difficulty
| Function | Returns | Description |
|---|---|---|
EJ_SetDifficulty(difficultyID) |
— | Set EJ difficulty |
EJ_GetDifficulty() |
difficultyID |
Current EJ difficulty |
EJ_GetNumEncountersByDifficulty(difficultyID) |
numEncounters |
Bosses at difficulty |
Search
| Function | Returns | Description |
|---|---|---|
EJ_SetSearch(text) |
— | Set search text |
EJ_GetSearchResult(index) |
resultInfo |
Search result |
EJ_GetNumSearchResults() |
numResults |
Num results |
EJ_IsSearchFinished() |
isFinished |
Search done? |
EJ_ClearSearch() |
— | Clear search |
C_ChallengeMode — Mythic+ Keystones
Keystone Info
| Function | Returns | Description |
|---|---|---|
C_ChallengeMode.GetActiveKeystoneInfo() |
activeKeystoneLevel, activeAffixIDs, wasActiveKeystoneCharged |
Active keystone |
C_ChallengeMode.GetActiveChallengeMapID() |
mapID |
Active M+ map |
C_ChallengeMode.GetActiveKeystoneLink() |
link |
Keystone hyperlink |
C_ChallengeMode.GetSlottedKeystoneInfo() |
mapID, affixIDs, keystoneLevel |
Slotted keystone |
C_ChallengeMode.HasSlottedKeystone() |
hasKeystone |
Keystone slotted? |
C_ChallengeMode.SlotKeystone() |
slotted |
Slot keystone |
C_ChallengeMode.RemoveKeystone() |
removed |
Remove keystone |
Map & Affix Data
| Function | Returns | Description |
|---|---|---|
C_ChallengeMode.GetMapTable() |
mapIDs |
All M+ maps |
C_ChallengeMode.GetMapUIInfo(mapID) |
name, id, timeLimit, texture, backgroundTexture |
Map info |
C_ChallengeMode.GetAffixInfo(affixID) |
name, description, filedataid |
Affix info |
C_ChallengeMode.GetCurrentAffixes() |
affixes |
This week's affixes |
Completion & Records
| Function | Returns | Description |
|---|---|---|
C_ChallengeMode.GetMapPlayerStats(mapID) |
durationSec, ... |
Personal best |
C_ChallengeMode.GetGuildLeaders() |
guildLeaders |
Guild best runs |
C_ChallengeMode.GetCompletionInfo() |
mapID, level, time, onTime, keystoneUpgradeLevels, practiceRun, oldOverallDungeonScore, newOverallDungeonScore, IsMapRecord, IsAffixRecord, PrimaryAffix, isEligibleForScore, members |
Run completion data |
C_ChallengeMode.IsChallengeModeActive() |
isActive |
In active M+? |
C_ChallengeMode.GetDeathCount() |
numDeaths, timeLost |
Deaths and penalty |
C_ChallengeMode.GetActiveChallengeModeLevel() |
level |
Current key level |
Rewards
| Function | Returns | Description |
|---|---|---|
C_ChallengeMode.GetChallengeMapInfo(mapID, keystoneLevel) |
rewardInfo |
Rewards for key level |
C_MythicPlus — Seasonal M+ Data
| Function | Returns | Description |
|---|---|---|
C_MythicPlus.GetCurrentSeason() |
seasonID |
Current season |
C_MythicPlus.GetRunHistory(includePreviousWeeks, includeIncompleteRuns) |
runs |
Run history |
C_MythicPlus.GetRewardLevelFromKeystoneLevel(keystoneLevel) |
rewardLevel |
Reward item level |
C_MythicPlus.GetOwnedKeystoneLevel() |
level |
Owned key level |
C_MythicPlus.GetOwnedKeystoneChallengeMapID() |
mapID |
Owned key dungeon |
C_MythicPlus.GetOwnedKeystoneMapID() |
mapID |
Owned key map |
C_MythicPlus.GetCurrentAffixes() |
affixIDs |
Current affixes |
C_MythicPlus.GetWeeklyChestRewardLevel() |
rewardLevel |
Vault reward level |
C_MythicPlus.GetSeasonBestAffixScoreInfoForMap(mapID) |
bestScoreInfo |
Best scores by affix |
C_MythicPlus.GetSeasonBestForMap(mapID) |
intimeInfo, overtimeInfo |
Season best runs |
C_MythicPlus.GetOverallDungeonScore() |
score |
Overall M+ rating |
C_MythicPlus.RequestCurrentAffixes() |
— | Request affix data |
C_MythicPlus.RequestMapInfo() |
— | Request map data |
C_MythicPlus.RequestRewards() |
— | Request reward data |
C_MythicPlus.IsDungeonScorable(mapID) |
isScorable |
Awards score? |
ScenarioInfo — Scenarios & Delves
| Function | Returns | Description |
|---|---|---|
C_ScenarioInfo.GetScenarioInfo() |
scenarioInfo |
Current scenario |
C_ScenarioInfo.GetScenarioStepInfo() |
stepInfo |
Current step |
C_ScenarioInfo.GetCriteriaInfo(criteriaIndex) |
criteriaInfo |
Criteria at index |
C_ScenarioInfo.GetCriteriaInfoByStep(stepIndex, criteriaIndex) |
criteriaInfo |
Step criteria |
C_ScenarioInfo.GetScenarioStepByIndex(index) |
stepInfo |
Step at index |
Scenario Info Fields
name— Scenario namecurrentStage— Current stagenumStages— Total stagesflags— Scenario flagsisComplete— Completed?xp— XP rewardmoney— Gold rewardtype— Scenario typearea— Area nameuiTextureKit— UI texture kit
Step Info Fields
title— Step titledescription— Step descriptionnumCriteria— Criteria countisComplete— Step complete?isBonusObjective— Bonus objective?isFinal— Final step?weightedProgress— Progress percentage
Raid Locks (Saved Instances)
| Function | Returns | Description |
|---|---|---|
GetNumSavedInstances() |
numInstances |
Saved instance count |
GetSavedInstanceInfo(index) |
name, id, reset, difficulty, locked, extended, instanceIDMostSig, isRaid, maxPlayers, difficultyName, numEncounters, encounterProgress, extendDisabled |
Saved instance info |
GetSavedInstanceEncounterInfo(index, encounterIndex) |
bossName, fileDataID, isKilled, isIneligible |
Boss kill status |
SetSavedInstanceExtend(index, extend) |
— | Extend lockout |
GetNumSavedWorldBosses() |
count |
World boss locks |
GetSavedWorldBossInfo(index) |
name, id, reset |
World boss info |
RequestRaidInfo() |
— | Request lock data |
InstanceLeaverInfo — Deserter
| Function | Returns | Description |
|---|---|---|
C_InstanceLeaverInfo.GetLeaverInfo() |
leaverInfo |
Leaver/deserter info |
C_InstanceLeaverInfo.HasLeaverPenalty() |
hasPenalty |
Has deserter? |
C_InstanceLeaverInfo.GetLeaverPenaltyTimeRemaining() |
seconds |
Time remaining |
C_SeasonInfo — Seasonal Content
| Function | Returns | Description |
|---|---|---|
C_SeasonInfo.GetCurrentDisplaySeasonID() |
seasonID |
Current display season |
C_SeasonInfo.GetCurrentSeason() |
seasonID |
Current season |
C_SeasonInfo.GetSeasonInfo(seasonID) |
seasonInfo |
Season data |
Common Patterns
List Encounter Journal Bosses
-- Select an instance and list its bosses
EJ_SelectTier(EJ_GetCurrentTier())
EJ_SelectInstance(instanceID)
local index = 1
while true do
local name, description, encounterID, rootSectionID = EJ_GetEncounterInfoByIndex(index)
if not name then break end
print(index, name, "- EncounterID:", encounterID)
index = index + 1
end
Show M+ Keystone Info
local function ShowKeystoneInfo()
local level = C_MythicPlus.GetOwnedKeystoneLevel()
local mapID = C_MythicPlus.GetOwnedKeystoneChallengeMapID()
if level and mapID then
local name = C_ChallengeMode.GetMapUIInfo(mapID)
print("Keystone:", name, "+", level)
else
print("No keystone")
end
local score = C_MythicPlus.GetOverallDungeonScore()
print("M+ Rating:", score or 0)
end
Check Active M+ Progress
local function ShowMythicPlusProgress()
if not C_ChallengeMode.IsChallengeModeActive() then
print("Not in an active M+")
return
end
local level = C_ChallengeMode.GetActiveChallengeModeLevel()
local mapID = C_ChallengeMode.GetActiveChallengeMapID()
local name = C_ChallengeMode.GetMapUIInfo(mapID)
local deaths, timeLost = C_ChallengeMode.GetDeathCount()
print(name, "+", level)
print("Deaths:", deaths, "Time lost:", timeLost, "sec")
end
List Saved Instances
RequestRaidInfo()
-- Wait for UPDATE_INSTANCE_INFO event, then:
local numSaved = GetNumSavedInstances()
for i = 1, numSaved do
local name, id, reset, difficulty, locked, extended,
_, isRaid, maxPlayers, diffName, numEncounters, progress =
GetSavedInstanceInfo(i)
if locked then
print(name, diffName, progress .. "/" .. numEncounters,
"Reset:", SecondsToTime(reset))
end
end
Key Events
| Event | Payload | Description |
|---|---|---|
EJ_LOOT_DATA_RECIEVED |
itemID | Loot data loaded |
EJ_DIFFICULTY_UPDATE |
difficultyID | EJ difficulty changed |
CHALLENGE_MODE_START |
mapID | M+ started |
CHALLENGE_MODE_COMPLETED |
mapID | M+ completed |
CHALLENGE_MODE_RESET |
mapID | M+ reset |
CHALLENGE_MODE_DEATH_COUNT_UPDATED |
— | Death count changed |
CHALLENGE_MODE_KEYSTONE_RECEPTABLE_OPEN |
— | Font of Power opened |
CHALLENGE_MODE_KEYSTONE_SLOTTED |
— | Keystone slotted |
MYTHIC_PLUS_CURRENT_AFFIX_UPDATE |
— | Affixes updated |
MYTHIC_PLUS_NEW_WEEKLY_RECORD |
mapID | New weekly best |
MYTHIC_PLUS_NEW_SEASON_RECORD |
mapID | New season best |
SCENARIO_UPDATE |
— | Scenario state changed |
SCENARIO_CRITERIA_UPDATE |
— | Criteria updated |
SCENARIO_COMPLETED |
— | Scenario completed |
UPDATE_INSTANCE_INFO |
— | Saved instance data |
INSTANCE_LOCK_START |
— | Lockout acquired |
INSTANCE_LOCK_STOP |
— | Lockout released |
INSTANCE_LOCK_WARNING |
— | Lockout warning |
Gotchas & Restrictions
- EJ data is async — Loot data loads asynchronously. Wait for
EJ_LOOT_DATA_RECIEVEDbefore reading loot. - Tier selection matters — EJ functions operate on the currently selected tier. Always set tier first.
- M+ completion data is temporary —
GetCompletionInfo()only returns data immediately after a run. - Keystone slotting requires hardware event — Players must manually interact with the Font of Power.
- Raid lock extensions —
SetSavedInstanceExtend()must be called during the lock's active period. - Scenario types vary — Delves, island expeditions, and scenarios all use ScenarioInfo with different type flags.
- M+ rating is per-season —
GetOverallDungeonScore()resets each season. - RequestRaidInfo() is async — Wait for
UPDATE_INSTANCE_INFObefore reading saved instances.
Weekly Installs
3
Repository
jburlison/wowad…piagentsGitHub Stars
8
First Seen
11 days ago
Security Audits
Installed on
cline3
github-copilot3
codex3
gemini-cli3
cursor3
opencode3