wow-api-achievements
SKILL.md
Achievements API (Retail — Patch 12.0.0)
Comprehensive reference for achievements, statistics, and criteria APIs.
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
- Achievement Functions — GetAchievementInfo, criteria, categories
- Statistics — GetStatistic, comparison
- Tracking — Tracked achievements
- Guild Achievements — Guild-specific achievements
Achievement Info
Core Functions
| Function | Returns | Description |
|---|---|---|
GetAchievementInfo(achievementID) |
id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuild, wasEarnedByMe, earnedBy, isStatistic |
Achievement details |
GetAchievementInfoFromCriteria(criteriaID) |
id, name, points, completed, ... |
Achievement from criteria |
GetAchievementLink(achievementID) |
link |
Achievement hyperlink |
GetAchievementNumRewards(achievementID) |
numRewards |
Reward count |
GetAchievementReward(achievementID, rewardIndex) |
text, type, ... |
Reward info |
GetPreviousAchievement(achievementID) |
prevAchievementID |
Achievement chain prev |
GetNextAchievement(achievementID) |
nextAchievementID |
Achievement chain next |
GetTotalAchievementPoints([isGuild]) |
points |
Total achievement points |
GetComparisonAchievementPoints() |
points |
Compared player's points |
SetAchievementSearchString(searchText) |
numResults |
Search achievements |
GetAchievementSearchSize() |
numResults |
Search result count |
GetAchievementSearchProgress() |
progress |
Search progress |
GetFilteredAchievementID(index) |
achievementID |
Filtered result at index |
Achievement Criteria
| Function | Returns | Description |
|---|---|---|
GetAchievementNumCriteria(achievementID) |
numCriteria |
Number of criteria |
GetAchievementCriteriaInfo(achievementID, criteriaIndex) |
criteriaString, criteriaType, completed, quantity, reqQuantity, charName, flags, assetID, quantityString, criteriaID, eligible, duration, elapsed |
Criteria details |
GetAchievementCriteriaInfoByID(achievementID, criteriaID) |
criteriaString, criteriaType, completed, quantity, reqQuantity, charName, flags, assetID, quantityString, criteriaID, eligible |
Criteria by ID |
Achievement Categories
| Function | Returns | Description |
|---|---|---|
GetCategoryList() |
categoryIDs |
All achievement categories |
GetCategoryInfo(categoryID) |
title, parentCategoryID, flags |
Category info |
GetCategoryNumAchievements(categoryID [, includeAll]) |
numAchievements, numCompleted, numIncomplete |
Category stats |
GetAchievementCategory(achievementID) |
categoryID |
Achievement's category |
Achievement Comparison (Inspect)
| Function | Returns | Description |
|---|---|---|
GetComparisonStatistic(achievementID) |
value |
Compared player's statistic |
ClearAchievementComparisonUnit() |
— | Clear comparison |
SetAchievementComparisonUnit(unit) |
success |
Set comparison target |
Statistics
| Function | Returns | Description |
|---|---|---|
GetStatistic(achievementID) |
value |
Statistic value (string) |
GetStatisticsCategoryList() |
categoryIDs |
Statistic categories |
GetCategoryAchievementPoints(categoryID, includeAll) |
points, completedPoints |
Category points |
Achievement Tracking
| Function | Returns | Description |
|---|---|---|
GetTrackedAchievements() |
... (achievementIDs) |
All tracked achievements |
GetNumTrackedAchievements() |
numTracked |
Tracked count |
AddTrackedAchievement(achievementID) |
— | Track achievement |
RemoveTrackedAchievement(achievementID) |
— | Untrack achievement |
IsTrackedAchievement(achievementID) |
isTracked |
Is tracked? |
Common Patterns
Check Achievement Completion
local function IsAchievementDone(achievementID)
local _, _, _, completed = GetAchievementInfo(achievementID)
return completed
end
Display Achievement Criteria Progress
local function PrintCriteriaProgress(achievementID)
local _, name = GetAchievementInfo(achievementID)
print("Achievement:", name)
local numCriteria = GetAchievementNumCriteria(achievementID)
for i = 1, numCriteria do
local criteriaString, _, completed, quantity, reqQuantity =
GetAchievementCriteriaInfo(achievementID, i)
local status = completed and "DONE" or (quantity .. "/" .. reqQuantity)
print(" ", criteriaString, status)
end
end
Search Achievements
local function SearchAchievements(text)
local numResults = SetAchievementSearchString(text)
local results = {}
for i = 1, GetAchievementSearchSize() do
local achievementID = GetFilteredAchievementID(i)
local _, name, points, completed = GetAchievementInfo(achievementID)
table.insert(results, {id = achievementID, name = name, points = points, done = completed})
end
return results
end
Key Events
| Event | Payload | Description |
|---|---|---|
ACHIEVEMENT_EARNED |
achievementID, alreadyEarned | Achievement completed |
CRITERIA_EARNED |
achievementID, criteriaString | Criteria completed |
CRITERIA_UPDATE |
— | Criteria progress updated |
CRITERIA_COMPLETE |
— | All criteria complete |
TRACKED_ACHIEVEMENT_LIST_CHANGED |
achievementID, added | Tracking changed |
TRACKED_ACHIEVEMENT_UPDATE |
achievementID | Tracked achievement updated |
ACHIEVEMENT_SEARCH_UPDATED |
— | Search results ready |
INSPECT_ACHIEVEMENT_READY |
guid | Inspect achievement data ready |
RECEIVED_ACHIEVEMENT_MEMBER_LIST |
achievementID | Member list received |
Gotchas & Restrictions
- GetAchievementInfo returns 15 values — Destructure carefully. The
completedboolean is the 4th return. - Guild vs personal — Pass
trueasisGuildtoGetCategoryNumAchievements()for guild achievements. - Statistics are strings —
GetStatistic()returns a formatted string, not a number. Parse withtonumber()if needed. - Criteria index is 1-based — Criteria indices start at 1, up to
GetAchievementNumCriteria(). - Achievement chains — Some achievements are chained (10/25/50 kills etc.). Use
GetPreviousAchievement()/GetNextAchievement(). - Search is async —
SetAchievementSearchString()may not return all results immediately. Wait forACHIEVEMENT_SEARCH_UPDATED. - Tracking limit — There's a maximum number of tracked achievements.
- Inspect data — Achievement comparison requires
SetAchievementComparisonUnit()and waiting forINSPECT_ACHIEVEMENT_READY.
Weekly Installs
4
Repository
jburlison/wowad…piagentsGitHub Stars
8
First Seen
9 days ago
Security Audits
Installed on
cline4
gemini-cli4
github-copilot4
codex4
cursor4
opencode4