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 title
description — Section text
headerType — Header type enum
abilityIcon — Icon texture
creatureDisplayID — Display ID
siblingSectionID — Next sibling
firstChildSectionID — First child
filteredByDifficulty — Hidden by difficulty filter?
link — Journal link
startsOpen — 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 name
currentStage — Current stage
numStages — Total stages
flags — Scenario flags
isComplete — Completed?
xp — XP reward
money — Gold reward
type — Scenario type
area — Area name
uiTextureKit — UI texture kit
Step Info Fields
title — Step title
description — Step description
numCriteria — Criteria count
isComplete — 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
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()
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_RECIEVED before 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_INFO before reading saved instances.