1---2name: wow-api-map-navigation3description: Complete reference for WoW Retail Map, Navigation, Area POI, Taxi, Vignette, Minimap, Nameplate, Waypoint, Zone Ability, Fog of War, and Exploration APIs. Covers C_Map (50+ functions for map data, coordinates, map IDs, area info), C_MapExplorationInfo, C_AreaPoiInfo, C_TaxiMap (flight paths), C_Vignette, C_SuperTrackManager, C_Navigation (in-game navigation), C_ZoneAbility, C_FogOfWar, Minimap functions, C_NamePlateManager, and coordinate conversion. Use when working with maps, coordinates, waypoints, flight paths, minimap, nameplates, vignettes, exploration, zone abilities, or in-game navigation.4---5
6# Map & Navigation API (Retail — Patch 12.0.0)
7
8Comprehensive reference for all map, navigation, and location APIs in WoW Retail.
9
10> **Source:** https://warcraft.wiki.gg/wiki/World_of_Warcraft_API
11> **Current as of:** Patch 12.0.0 (Build 65655) — January 28, 2026
12> **Scope:** Retail only.
13
14---
15
16## Scope
17
18- **C_Map** — Map data, coordinates, map IDs, areas
19- **C_MapExplorationInfo** — Fog of war / exploration data
20- **C_AreaPoiInfo** — Area Points of Interest
21- **C_TaxiMap** — Flight master/taxi routes
22- **C_Vignette** — Vignettes (rare mobs, treasures)
23- **C_SuperTrackManager** — Super tracking (waypoint tracking)
24- **C_Navigation** — In-game navigation system
25- **C_ZoneAbility** — Zone-specific abilities
26- **C_FogOfWar** — Fog of war system
27- **Minimap** — Minimap functions
28- **C_NamePlateManager** — Nameplate management
29
30---
31
32## C_Map — Core Map System
33
34### Map Info & IDs
35
36| Function | Returns | Description |
37|----------|---------|-------------|
38| `C_Map.GetBestMapForUnit(unitToken)` | `uiMapID` | Best map for unit's location |
39| `C_Map.GetMapInfo(uiMapID)` | `mapInfo` | Map name, type, parent |
40| `C_Map.GetMapInfoAtPosition(uiMapID, x, y)` | `mapInfo` | Map info at coordinate |
41| `C_Map.GetMapChildrenInfo(uiMapID [, mapType [, allDescendants]])` | `childrenInfo` | Child maps |
42| `C_Map.GetMapGroupID(uiMapID)` | `mapGroupID` | Map group (floor group) |
43| `C_Map.GetMapGroupMembersInfo(mapGroupID)` | `membersInfo` | Maps in group (floors) |
44| `C_Map.GetMapLinksForMap(uiMapID)` | `mapLinks` | Map links (transitions) |
45| `C_Map.GetMapRectOnMap(uiMapID, parentMapID)` | `minX, maxX, minY, maxY` | Map rect on parent |
46| `C_Map.GetPlayerMapPosition(uiMapID, unitToken)` | `position` | Player position on map |
47| `C_Map.GetWorldPosFromMapPos(uiMapID, mapPosition)` | `continentID, worldPosition` | Map → world coords |
48| `C_Map.GetMapPosFromWorldPos(continentID, worldPosition [, overrideUiMapID])` | `uiMapID, mapPosition` | World → map coords |
49| `C_Map.GetFallbackWorldMapID()` | `uiMapID` | Default world map |
50| `C_Map.GetBountySetMaps(bountySetID)` | `mapIDs` | Maps for bounty set |
51| `C_Map.GetAreaInfo(areaID)` | `areaName` | Area name by ID |
52| `C_Map.GetMapArtID(uiMapID)` | `mapArtID` | Art asset ID |
53| `C_Map.GetMapArtBackgroundAtlas(uiMapID)` | `atlasName` | Background atlas |
54| `C_Map.GetMapArtHelpTextPosition(uiMapID)` | `position` | Help text position |
55| `C_Map.GetMapArtLayerTextures(uiMapID, layerIndex)` | `textures` | Layer texture files |
56| `C_Map.GetNumMapArtLayers(uiMapID)` | `numLayers` | Number of art layers |
57| `C_Map.GetMapArtLayers(uiMapID)` | `layers` | All art layer info |
58| `C_Map.GetMapDisplayInfo(uiMapID)` | `hideIcons` | Display flags |
59| `C_Map.GetMapHighlightInfoAtPosition(uiMapID, x, y)` | `fileDataID, atlasID, texturePercentageX, texturePercentageY, textureX, textureY, scrollChildX, scrollChildY` | Highlight at position |
60| `C_Map.HasArt(uiMapID)` | `hasArt` | Has map art? |
61| `C_Map.IsMapValidForNavBarDropdown(uiMapID)` | `isValid` | Valid for navbar? |
62| `C_Map.MapHasArt(uiMapID)` | `hasArt` | Alias for HasArt |
63| `C_Map.RequestPreloadMap(uiMapID)` | — | Preload map data |
64| `C_Map.SetUserWaypoint(uiMapID, position)` | — | Set user waypoint |
65| `C_Map.GetUserWaypoint()` | `point` | Get user waypoint |
66| `C_Map.HasUserWaypoint()` | `hasWaypoint` | Has user waypoint? |
67| `C_Map.ClearUserWaypoint()` | — | Clear user waypoint |
68| `C_Map.CanSetUserWaypointOnMap(uiMapID)` | `canSet` | Can set waypoint? |
69| `C_Map.GetUserWaypointHyperlink()` | `hyperlink` | Waypoint hyperlink |
70| `C_Map.GetUserWaypointFromHyperlink(hyperlink)` | `point` | Parse waypoint link |
71| `C_Map.GetUserWaypointPositionForMap(uiMapID)` | `mapPosition` | Waypoint on map |
72
73### Map Types (Enum.UIMapType)
74
75| Value | Type | Description |
76|-------|------|-------------|
77| 0 | Cosmic | All continents |
78| 1 | World | Shows continents |
79| 2 | Continent | Single continent |
80| 3 | Zone | Zone (e.g., Durotar) |
81| 4 | Dungeon | Dungeon floors |
82| 5 | Micro | Subzone |
83| 6 | Orphan | Standalone map |
84
85---
86
87## C_MapExplorationInfo — Exploration
88
89| Function | Returns | Description |
90|----------|---------|-------------|
91| `C_MapExplorationInfo.GetExploredMapTextures(uiMapID)` | `textures` | Explored area textures |
92| `C_MapExplorationInfo.GetExploredAreaIDsAtPosition(uiMapID, position)` | `areaIDs` | Explored area IDs at pos |
93
94---
95
96## C_AreaPoiInfo — Area Points of Interest
97
98| Function | Returns | Description |
99|----------|---------|-------------|
100| `C_AreaPoiInfo.GetAreaPOIForMap(uiMapID)` | `poiIDs` | All POIs on map |
101| `C_AreaPoiInfo.GetAreaPOIInfo(uiMapID, poiID)` | `poiInfo` | POI details |
102| `C_AreaPoiInfo.GetAreaPOISecondsLeft(poiID)` | `secondsLeft` | Time-limited POI timer |
103| `C_AreaPoiInfo.GetAreaPOITimeOfDay()` | `hours, minutes` | POI time context |
104| `C_AreaPoiInfo.IsAreaPOITimed(poiID)` | `isTimed` | Is POI time-limited? |
105
106### POI Info Fields
107
108- `areaPoiID` — Unique POI ID
109- `position` — `{x, y}` on map
110- `name` — Display name
111- `description` — Description text
112- `textureIndex` — POI icon index
113- `atlasName` — Atlas for icon
114- `uiTextureKit` — Texture kit
115- `tooltipWidgetSet` — Tooltip widget set
116- `iconWidgetSet` — Icon widget set
117- `availableInPlayerChoice` — Available in player choice
118
119---
120
121## C_TaxiMap — Flight Paths / Taxi
122
123| Function | Returns | Description |
124|----------|---------|-------------|
125| `C_TaxiMap.GetAllTaxiNodes(uiMapID)` | `nodes` | All flight nodes on map |
126| `C_TaxiMap.GetTaxiNodesForMap(uiMapID)` | `nodes` | Available taxi nodes |
127| `C_TaxiMap.ShouldMapShowTaxiNodes(uiMapID)` | `shouldShow` | Show taxi nodes on map? |
128| `NumTaxiNodes()` | `numNodes` | Available nodes at taxi NPC |
129| `TaxiNodeName(index)` | `name` | Node name |
130| `TaxiNodePosition(index)` | `x, y` | Node position |
131| `TaxiNodeGetType(index)` | `nodeType` | REACHABLE, UNREACHABLE, CURRENT |
132| `TaxiGetDestX(index, i)` | `x` | Route destination X |
133| `TaxiGetDestY(index, i)` | `y` | Route destination Y |
134| `TaxiGetSrcX(index, i)` | `x` | Route source X |
135| `TaxiGetSrcY(index, i)` | `y` | Route source Y |
136| `GetNumRoutes(index)` | `numRoutes` | Route segments count |
137| `TakeTaxiNode(index)` | — | Take flight to node |
138| `CloseTaxiMap()` | — | Close taxi map |
139| `TaxiRequestEarlyLanding()` | — | Request early landing |
140| `UnitOnTaxi(unit)` | `onTaxi` | Is unit on a taxi? |
141
142---
143
144## C_Vignette — Vignettes (Rare Mobs, Treasures, Events)
145
146| Function | Returns | Description |
147|----------|---------|-------------|
148| `C_VignetteInfo.GetVignetteInfo(vignetteGUID)` | `info` | Vignette details |
149| `C_VignetteInfo.GetVignettes()` | `vignetteGUIDs` | All active vignettes |
150| `C_VignetteInfo.GetVignettePosition(vignetteGUID, uiMapID)` | `position` | Vignette position on map |
151| `C_VignetteInfo.FindBestUniqueVignette(vignetteID)` | `bestGUID` | Best unique vignette |
152
153### Vignette Info Fields
154
155- `vignetteGUID` — Unique identifier
156- `objectGUID` — Object GUID (unit, object, etc.)
157- `name` — Display name
158- `atlasName` — Icon atlas
159- `type` — Vignette type (Normal, PvPBounty, Torghast, etc.)
160- `isDead` — Is the linked unit dead?
161- `onWorldMap` — Shows on world map?
162- `onMinimap` — Shows on minimap?
163- `hasTooltip` — Has mouseover tooltip?
164- `inFogOfWar` — In unexplored area?
165- `widgetSetID` — UI widget set
166
167---
168
169## C_SuperTrackManager — Waypoint Super Tracking
170
171| Function | Returns | Description |
172|----------|---------|-------------|
173| `C_SuperTrack.GetSuperTrackedContent()` | `trackableType, trackableID` | Currently tracked content |
174| `C_SuperTrack.GetSuperTrackedMapPin()` | `type, typeID` | Tracked map pin |
175| `C_SuperTrack.GetSuperTrackedQuestID()` | `questID` | Super tracked quest |
176| `C_SuperTrack.SetSuperTrackedContent(trackableType, trackableID)` | — | Set tracked content |
177| `C_SuperTrack.SetSuperTrackedMapPin(type, typeID)` | — | Set tracked map pin |
178| `C_SuperTrack.SetSuperTrackedQuestID(questID)` | — | Track quest |
179| `C_SuperTrack.SetSuperTrackedUserWaypoint(superTracked)` | — | Track user waypoint |
180| `C_SuperTrack.IsSuperTrackingAnything()` | `isTracking` | Is tracking anything? |
181| `C_SuperTrack.IsSuperTrackingCorpse()` | `isTrackingCorpse` | Tracking corpse? |
182| `C_SuperTrack.IsSuperTrackingQuest()` | `isTracking` | Tracking a quest? |
183| `C_SuperTrack.IsSuperTrackingUserWaypoint()` | `isTracking` | Tracking user waypoint? |
184| `C_SuperTrack.ClearAllSuperTracked()` | — | Clear all tracking |
185
186---
187
188## C_Navigation — In-Game Navigation
189
190| Function | Returns | Description |
191|----------|---------|-------------|
192| `C_Navigation.GetDistance()` | `distance` | Distance to tracked target |
193| `C_Navigation.GetFrame()` | `frame` | Navigation frame |
194| `C_Navigation.HasValidScreenPosition()` | `hasValidPos` | Is nav arrow valid? |
195| `C_Navigation.WasClampedToScreen()` | `wasClamped` | Was arrow clamped? |
196
197---
198
199## C_ZoneAbility
200
201| Function | Returns | Description |
202|----------|---------|-------------|
203| `C_ZoneAbility.GetActiveAbilities()` | `abilities` | Active zone abilities |
204
205---
206
207## C_FogOfWar
208
209| Function | Returns | Description |
210|----------|---------|-------------|
211| `C_FogOfWar.GetFogOfWarForMap(uiMapID)` | `fogOfWarID` | Fog of war ID for map |
212| `C_FogOfWar.GetFogOfWarInfo(fogOfWarID)` | `info` | Fog of war info |
213
214---
215
216## Minimap Functions
217
218| Function | Returns | Description |
219|----------|---------|-------------|
220| `GetMinimapZoneText()` | `zoneText` | Minimap zone text |
221| `GetZoneText()` | `zoneText` | Current zone name |
222| `GetSubZoneText()` | `subZoneText` | Current subzone |
223| `GetRealZoneText()` | `zoneText` | Real zone text |
224| `GetMinimapShape()` | `shape` | ROUND or SQUARE |
225| `Minimap:SetZoom(zoomLevel)` | — | Set minimap zoom |
226| `Minimap:GetZoom()` | `zoomLevel` | Get minimap zoom |
227| `Minimap:GetZoomLevels()` | `numLevels` | Max zoom levels |
228| `ToggleMinimap()` | — | Toggle minimap visibility |
229
230---
231
232## C_NamePlateManager / Nameplates
233
234| Function | Returns | Description |
235|----------|---------|-------------|
236| `C_NamePlate.GetNamePlates([includeForbidden])` | `nameplates` | All activated nameplates |
237| `C_NamePlate.GetNamePlateForUnit(unitToken [, includeForbidden])` | `nameplate` | Nameplate for unit |
238| `C_NamePlate.GetNumNamePlates()` | `numActive` | Active nameplates count |
239| `C_NamePlate.SetNamePlateFriendlySize(width, height)` | — | Set friendly plate size |
240| `C_NamePlate.SetNamePlateEnemySize(width, height)` | — | Set enemy plate size |
241| `C_NamePlate.SetNamePlateSelfSize(width, height)` | — | Set personal plate size |
242| `C_NamePlate.SetNamePlateFriendlyClickThrough(clickThrough)` | — | Click through friendly |
243| `C_NamePlate.SetNamePlateEnemyClickThrough(clickThrough)` | — | Click through enemy |
244| `C_NamePlate.SetNamePlateSelfClickThrough(clickThrough)` | — | Click through personal |
245
246> **12.0.0 Note:** Nameplates in instances are tightly restricted. Enemy nameplate unit tokens may expose only secret values for health, casting, etc.
247
248---
249
250## Coordinate Conversion
251
252### Map Position Object
253
254`C_Map.GetPlayerMapPosition()` returns a `Vector2DMixin` with:
255
256```lua
257local pos = C_Map.GetPlayerMapPosition(mapID, "player")
258if pos then
259 local x, y = pos:GetXY()
260 -- x, y are 0-1 normalized coordinates on the map
261 print(string.format("%.2f, %.2f", x * 100, y * 100))
262end
263```
264
265### Convert Between Maps
266
267```lua
268-- Get player position on the current best map
269local mapID = C_Map.GetBestMapForUnit("player")
270if mapID then
271 local pos = C_Map.GetPlayerMapPosition(mapID, "player")
272 if pos then
273 -- Convert to world coordinates
274 local continentID, worldPos = C_Map.GetWorldPosFromMapPos(mapID, pos)
275 -- Convert back to a different map
276 local otherMapID, otherPos = C_Map.GetMapPosFromWorldPos(continentID, worldPos)
277 end
278end
279```
280
281### User Waypoint
282
283```lua
284-- Set a waypoint on the map
285local mapID = C_Map.GetBestMapForUnit("player")
286if C_Map.CanSetUserWaypointOnMap(mapID) then
287 local point = UiMapPoint.CreateFromCoordinates(mapID, 0.5, 0.5)
288 C_Map.SetUserWaypoint(point)
289 C_SuperTrack.SetSuperTrackedUserWaypoint(true)
290end
291```
292
293---
294
295## Key Events
296
297| Event | Payload | Description |
298|-------|---------|-------------|
299| `ZONE_CHANGED` | — | Subzone changed |
300| `ZONE_CHANGED_INDOORS` | — | Indoor zone changed |
301| `ZONE_CHANGED_NEW_AREA` | — | Major zone change |
302| `NEW_WMO_CHUNK` | — | New world map object |
303| `MAP_EXPLORATION_UPDATED` | — | Exploration updated |
304| `WORLD_MAP_UPDATE` | — | World map data changed |
305| `USER_WAYPOINT_UPDATED` | — | User waypoint changed |
306| `SUPER_TRACKING_CHANGED` | — | Super tracking changed |
307| `VIGNETTE_MINIMAP_UPDATED` | vignetteGUID, onMinimap | Vignette on minimap changed |
308| `VIGNETTES_UPDATED` | — | Vignettes updated |
309| `AREA_POIS_UPDATED` | — | Area POIs changed |
310| `NAME_PLATE_CREATED` | namePlateFrame | Nameplate created |
311| `NAME_PLATE_UNIT_ADDED` | unitToken | Unit added to nameplate |
312| `NAME_PLATE_UNIT_REMOVED` | unitToken | Unit removed from nameplate |
313| `PLAYER_STARTED_MOVING` | — | Player started moving |
314| `PLAYER_STOPPED_MOVING` | — | Player stopped moving |
315| `TAXIMAP_OPENED` | systemID | Taxi map opened |
316| `TAXIMAP_CLOSED` | — | Taxi map closed |
317| `NAVIGATION_FRAME_CREATED` | — | Nav frame created |
318| `NAVIGATION_FRAME_DESTROYED` | — | Nav frame destroyed |
319
320---
321
322## Gotchas & Restrictions
323
3241. **GetPlayerMapPosition returns nil** — Returns nil for units in instances where position tracking is restricted or for invalid map IDs.
3252. **Map coordinates are 0-1 normalized** — Not world coordinates. Use `GetWorldPosFromMapPos()` to convert.
3263. **uiMapID vs areaID** — These are different ID systems. `C_Map.GetAreaInfo()` takes areaID, not uiMapID.
3274. **Nameplate secrets in 12.0.0** — In instances, enemy nameplate unit data (health, casting, name) may be secret values.
3285. **TakeTaxiNode hardware event** — Requires a hardware event to execute (must be called from a click handler).
3296. **Vignette GUIDs are transient** — Vignette GUIDs change when you zone or reload. Don't persist them.
3307. **Map group = floors** — Dungeon maps with multiple floors use map groups. Each floor is a separate uiMapID in the group.
3318. **Waypoint limit** — Only one user waypoint can exist at a time. Setting a new one replaces the old.