Map & Navigation API (Retail — Patch 12.0.0)
Comprehensive reference for all map, navigation, and location APIs in WoW Retail.
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
- C_Map — Map data, coordinates, map IDs, areas
- C_MapExplorationInfo — Fog of war / exploration data
- C_AreaPoiInfo — Area Points of Interest
- C_TaxiMap — Flight master/taxi routes
- C_Vignette — Vignettes (rare mobs, treasures)
- C_SuperTrackManager — Super tracking (waypoint tracking)
- C_Navigation — In-game navigation system
- C_ZoneAbility — Zone-specific abilities
- C_FogOfWar — Fog of war system
- Minimap — Minimap functions
- C_NamePlateManager — Nameplate management
C_Map — Core Map System
Map Info & IDs
| Function |
Returns |
Description |
C_Map.GetBestMapForUnit(unitToken) |
uiMapID |
Best map for unit's location |
C_Map.GetMapInfo(uiMapID) |
mapInfo |
Map name, type, parent |
C_Map.GetMapInfoAtPosition(uiMapID, x, y) |
mapInfo |
Map info at coordinate |
C_Map.GetMapChildrenInfo(uiMapID [, mapType [, allDescendants]]) |
childrenInfo |
Child maps |
C_Map.GetMapGroupID(uiMapID) |
mapGroupID |
Map group (floor group) |
C_Map.GetMapGroupMembersInfo(mapGroupID) |
membersInfo |
Maps in group (floors) |
C_Map.GetMapLinksForMap(uiMapID) |
mapLinks |
Map links (transitions) |
C_Map.GetMapRectOnMap(uiMapID, parentMapID) |
minX, maxX, minY, maxY |
Map rect on parent |
C_Map.GetPlayerMapPosition(uiMapID, unitToken) |
position |
Player position on map |
C_Map.GetWorldPosFromMapPos(uiMapID, mapPosition) |
continentID, worldPosition |
Map → world coords |
C_Map.GetMapPosFromWorldPos(continentID, worldPosition [, overrideUiMapID]) |
uiMapID, mapPosition |
World → map coords |
C_Map.GetFallbackWorldMapID() |
uiMapID |
Default world map |
C_Map.GetBountySetMaps(bountySetID) |
mapIDs |
Maps for bounty set |
C_Map.GetAreaInfo(areaID) |
areaName |
Area name by ID |
C_Map.GetMapArtID(uiMapID) |
mapArtID |
Art asset ID |
C_Map.GetMapArtBackgroundAtlas(uiMapID) |
atlasName |
Background atlas |
C_Map.GetMapArtHelpTextPosition(uiMapID) |
position |
Help text position |
C_Map.GetMapArtLayerTextures(uiMapID, layerIndex) |
textures |
Layer texture files |
C_Map.GetNumMapArtLayers(uiMapID) |
numLayers |
Number of art layers |
C_Map.GetMapArtLayers(uiMapID) |
layers |
All art layer info |
C_Map.GetMapDisplayInfo(uiMapID) |
hideIcons |
Display flags |
C_Map.GetMapHighlightInfoAtPosition(uiMapID, x, y) |
fileDataID, atlasID, texturePercentageX, texturePercentageY, textureX, textureY, scrollChildX, scrollChildY |
Highlight at position |
C_Map.HasArt(uiMapID) |
hasArt |
Has map art? |
C_Map.IsMapValidForNavBarDropdown(uiMapID) |
isValid |
Valid for navbar? |
C_Map.MapHasArt(uiMapID) |
hasArt |
Alias for HasArt |
C_Map.RequestPreloadMap(uiMapID) |
— |
Preload map data |
C_Map.SetUserWaypoint(uiMapID, position) |
— |
Set user waypoint |
C_Map.GetUserWaypoint() |
point |
Get user waypoint |
C_Map.HasUserWaypoint() |
hasWaypoint |
Has user waypoint? |
C_Map.ClearUserWaypoint() |
— |
Clear user waypoint |
C_Map.CanSetUserWaypointOnMap(uiMapID) |
canSet |
Can set waypoint? |
C_Map.GetUserWaypointHyperlink() |
hyperlink |
Waypoint hyperlink |
C_Map.GetUserWaypointFromHyperlink(hyperlink) |
point |
Parse waypoint link |
C_Map.GetUserWaypointPositionForMap(uiMapID) |
mapPosition |
Waypoint on map |
Map Types (Enum.UIMapType)
| Value |
Type |
Description |
| 0 |
Cosmic |
All continents |
| 1 |
World |
Shows continents |
| 2 |
Continent |
Single continent |
| 3 |
Zone |
Zone (e.g., Durotar) |
| 4 |
Dungeon |
Dungeon floors |
| 5 |
Micro |
Subzone |
| 6 |
Orphan |
Standalone map |
C_MapExplorationInfo — Exploration
| Function |
Returns |
Description |
C_MapExplorationInfo.GetExploredMapTextures(uiMapID) |
textures |
Explored area textures |
C_MapExplorationInfo.GetExploredAreaIDsAtPosition(uiMapID, position) |
areaIDs |
Explored area IDs at pos |
C_AreaPoiInfo — Area Points of Interest
| Function |
Returns |
Description |
C_AreaPoiInfo.GetAreaPOIForMap(uiMapID) |
poiIDs |
All POIs on map |
C_AreaPoiInfo.GetAreaPOIInfo(uiMapID, poiID) |
poiInfo |
POI details |
C_AreaPoiInfo.GetAreaPOISecondsLeft(poiID) |
secondsLeft |
Time-limited POI timer |
C_AreaPoiInfo.GetAreaPOITimeOfDay() |
hours, minutes |
POI time context |
C_AreaPoiInfo.IsAreaPOITimed(poiID) |
isTimed |
Is POI time-limited? |
POI Info Fields
areaPoiID — Unique POI ID
position — {x, y} on map
name — Display name
description — Description text
textureIndex — POI icon index
atlasName — Atlas for icon
uiTextureKit — Texture kit
tooltipWidgetSet — Tooltip widget set
iconWidgetSet — Icon widget set
availableInPlayerChoice — Available in player choice
C_TaxiMap — Flight Paths / Taxi
| Function |
Returns |
Description |
C_TaxiMap.GetAllTaxiNodes(uiMapID) |
nodes |
All flight nodes on map |
C_TaxiMap.GetTaxiNodesForMap(uiMapID) |
nodes |
Available taxi nodes |
C_TaxiMap.ShouldMapShowTaxiNodes(uiMapID) |
shouldShow |
Show taxi nodes on map? |
NumTaxiNodes() |
numNodes |
Available nodes at taxi NPC |
TaxiNodeName(index) |
name |
Node name |
TaxiNodePosition(index) |
x, y |
Node position |
TaxiNodeGetType(index) |
nodeType |
REACHABLE, UNREACHABLE, CURRENT |
TaxiGetDestX(index, i) |
x |
Route destination X |
TaxiGetDestY(index, i) |
y |
Route destination Y |
TaxiGetSrcX(index, i) |
x |
Route source X |
TaxiGetSrcY(index, i) |
y |
Route source Y |
GetNumRoutes(index) |
numRoutes |
Route segments count |
TakeTaxiNode(index) |
— |
Take flight to node |
CloseTaxiMap() |
— |
Close taxi map |
TaxiRequestEarlyLanding() |
— |
Request early landing |
UnitOnTaxi(unit) |
onTaxi |
Is unit on a taxi? |
C_Vignette — Vignettes (Rare Mobs, Treasures, Events)
| Function |
Returns |
Description |
C_VignetteInfo.GetVignetteInfo(vignetteGUID) |
info |
Vignette details |
C_VignetteInfo.GetVignettes() |
vignetteGUIDs |
All active vignettes |
C_VignetteInfo.GetVignettePosition(vignetteGUID, uiMapID) |
position |
Vignette position on map |
C_VignetteInfo.FindBestUniqueVignette(vignetteID) |
bestGUID |
Best unique vignette |
Vignette Info Fields
vignetteGUID — Unique identifier
objectGUID — Object GUID (unit, object, etc.)
name — Display name
atlasName — Icon atlas
type — Vignette type (Normal, PvPBounty, Torghast, etc.)
isDead — Is the linked unit dead?
onWorldMap — Shows on world map?
onMinimap — Shows on minimap?
hasTooltip — Has mouseover tooltip?
inFogOfWar — In unexplored area?
widgetSetID — UI widget set
C_SuperTrackManager — Waypoint Super Tracking
| Function |
Returns |
Description |
C_SuperTrack.GetSuperTrackedContent() |
trackableType, trackableID |
Currently tracked content |
C_SuperTrack.GetSuperTrackedMapPin() |
type, typeID |
Tracked map pin |
C_SuperTrack.GetSuperTrackedQuestID() |
questID |
Super tracked quest |
C_SuperTrack.SetSuperTrackedContent(trackableType, trackableID) |
— |
Set tracked content |
C_SuperTrack.SetSuperTrackedMapPin(type, typeID) |
— |
Set tracked map pin |
C_SuperTrack.SetSuperTrackedQuestID(questID) |
— |
Track quest |
C_SuperTrack.SetSuperTrackedUserWaypoint(superTracked) |
— |
Track user waypoint |
C_SuperTrack.IsSuperTrackingAnything() |
isTracking |
Is tracking anything? |
C_SuperTrack.IsSuperTrackingCorpse() |
isTrackingCorpse |
Tracking corpse? |
C_SuperTrack.IsSuperTrackingQuest() |
isTracking |
Tracking a quest? |
C_SuperTrack.IsSuperTrackingUserWaypoint() |
isTracking |
Tracking user waypoint? |
C_SuperTrack.ClearAllSuperTracked() |
— |
Clear all tracking |
C_Navigation — In-Game Navigation
| Function |
Returns |
Description |
C_Navigation.GetDistance() |
distance |
Distance to tracked target |
C_Navigation.GetFrame() |
frame |
Navigation frame |
C_Navigation.HasValidScreenPosition() |
hasValidPos |
Is nav arrow valid? |
C_Navigation.WasClampedToScreen() |
wasClamped |
Was arrow clamped? |
C_ZoneAbility
| Function |
Returns |
Description |
C_ZoneAbility.GetActiveAbilities() |
abilities |
Active zone abilities |
C_FogOfWar
| Function |
Returns |
Description |
C_FogOfWar.GetFogOfWarForMap(uiMapID) |
fogOfWarID |
Fog of war ID for map |
C_FogOfWar.GetFogOfWarInfo(fogOfWarID) |
info |
Fog of war info |
Minimap Functions
| Function |
Returns |
Description |
GetMinimapZoneText() |
zoneText |
Minimap zone text |
GetZoneText() |
zoneText |
Current zone name |
GetSubZoneText() |
subZoneText |
Current subzone |
GetRealZoneText() |
zoneText |
Real zone text |
GetMinimapShape() |
shape |
ROUND or SQUARE |
Minimap:SetZoom(zoomLevel) |
— |
Set minimap zoom |
Minimap:GetZoom() |
zoomLevel |
Get minimap zoom |
Minimap:GetZoomLevels() |
numLevels |
Max zoom levels |
ToggleMinimap() |
— |
Toggle minimap visibility |
C_NamePlateManager / Nameplates
| Function |
Returns |
Description |
C_NamePlate.GetNamePlates([includeForbidden]) |
nameplates |
All activated nameplates |
C_NamePlate.GetNamePlateForUnit(unitToken [, includeForbidden]) |
nameplate |
Nameplate for unit |
C_NamePlate.GetNumNamePlates() |
numActive |
Active nameplates count |
C_NamePlate.SetNamePlateFriendlySize(width, height) |
— |
Set friendly plate size |
C_NamePlate.SetNamePlateEnemySize(width, height) |
— |
Set enemy plate size |
C_NamePlate.SetNamePlateSelfSize(width, height) |
— |
Set personal plate size |
C_NamePlate.SetNamePlateFriendlyClickThrough(clickThrough) |
— |
Click through friendly |
C_NamePlate.SetNamePlateEnemyClickThrough(clickThrough) |
— |
Click through enemy |
C_NamePlate.SetNamePlateSelfClickThrough(clickThrough) |
— |
Click through personal |
12.0.0 Note: Nameplates in instances are tightly restricted. Enemy nameplate unit tokens may expose only secret values for health, casting, etc.
Coordinate Conversion
Map Position Object
C_Map.GetPlayerMapPosition() returns a Vector2DMixin with:
local pos = C_Map.GetPlayerMapPosition(mapID, "player")
if pos then
local x, y = pos:GetXY()
print(string.format("%.2f, %.2f", x * 100, y * 100))
end
Convert Between Maps
local mapID = C_Map.GetBestMapForUnit("player")
if mapID then
local pos = C_Map.GetPlayerMapPosition(mapID, "player")
if pos then
local continentID, worldPos = C_Map.GetWorldPosFromMapPos(mapID, pos)
local otherMapID, otherPos = C_Map.GetMapPosFromWorldPos(continentID, worldPos)
end
end
User Waypoint
local mapID = C_Map.GetBestMapForUnit("player")
if C_Map.CanSetUserWaypointOnMap(mapID) then
local point = UiMapPoint.CreateFromCoordinates(mapID, 0.5, 0.5)
C_Map.SetUserWaypoint(point)
C_SuperTrack.SetSuperTrackedUserWaypoint(true)
end
Key Events
| Event |
Payload |
Description |
ZONE_CHANGED |
— |
Subzone changed |
ZONE_CHANGED_INDOORS |
— |
Indoor zone changed |
ZONE_CHANGED_NEW_AREA |
— |
Major zone change |
NEW_WMO_CHUNK |
— |
New world map object |
MAP_EXPLORATION_UPDATED |
— |
Exploration updated |
WORLD_MAP_UPDATE |
— |
World map data changed |
USER_WAYPOINT_UPDATED |
— |
User waypoint changed |
SUPER_TRACKING_CHANGED |
— |
Super tracking changed |
VIGNETTE_MINIMAP_UPDATED |
vignetteGUID, onMinimap |
Vignette on minimap changed |
VIGNETTES_UPDATED |
— |
Vignettes updated |
AREA_POIS_UPDATED |
— |
Area POIs changed |
NAME_PLATE_CREATED |
namePlateFrame |
Nameplate created |
NAME_PLATE_UNIT_ADDED |
unitToken |
Unit added to nameplate |
NAME_PLATE_UNIT_REMOVED |
unitToken |
Unit removed from nameplate |
PLAYER_STARTED_MOVING |
— |
Player started moving |
PLAYER_STOPPED_MOVING |
— |
Player stopped moving |
TAXIMAP_OPENED |
systemID |
Taxi map opened |
TAXIMAP_CLOSED |
— |
Taxi map closed |
NAVIGATION_FRAME_CREATED |
— |
Nav frame created |
NAVIGATION_FRAME_DESTROYED |
— |
Nav frame destroyed |
Gotchas & Restrictions
- GetPlayerMapPosition returns nil — Returns nil for units in instances where position tracking is restricted or for invalid map IDs.
- Map coordinates are 0-1 normalized — Not world coordinates. Use
GetWorldPosFromMapPos() to convert.
- uiMapID vs areaID — These are different ID systems.
C_Map.GetAreaInfo() takes areaID, not uiMapID.
- Nameplate secrets in 12.0.0 — In instances, enemy nameplate unit data (health, casting, name) may be secret values.
- TakeTaxiNode hardware event — Requires a hardware event to execute (must be called from a click handler).
- Vignette GUIDs are transient — Vignette GUIDs change when you zone or reload. Don't persist them.
- Map group = floors — Dungeon maps with multiple floors use map groups. Each floor is a separate uiMapID in the group.
- Waypoint limit — Only one user waypoint can exist at a time. Setting a new one replaces the old.