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. Use when this capability is needed.4---56# Map & Navigation API (Retail — Patch 12.0.0)78Comprehensive reference for all map, navigation, and location APIs in WoW Retail.910> **Source:** https://warcraft.wiki.gg/wiki/World_of_Warcraft_API11> **Current as of:** Patch 12.0.0 (Build 65655) — January 28, 202612> **Scope:** Retail only.1314---1516## Scope1718- **C_Map** — Map data, coordinates, map IDs, areas19- **C_MapExplorationInfo** — Fog of war / exploration data20- **C_AreaPoiInfo** — Area Points of Interest21- **C_TaxiMap** — Flight master/taxi routes22- **C_Vignette** — Vignettes (rare mobs, treasures)23- **C_SuperTrackManager** — Super tracking (waypoint tracking)24- **C_Navigation** — In-game navigation system25- **C_ZoneAbility** — Zone-specific abilities26- **C_FogOfWar** — Fog of war system27- **Minimap** — Minimap functions28- **C_NamePlateManager** — Nameplate management2930---3132## C_Map — Core Map System3334### Map Info & IDs3536| 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 |7273### Map Types (Enum.UIMapType)7475| 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 |8485---8687## C_MapExplorationInfo — Exploration8889| 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 |9394---9596## C_AreaPoiInfo — Area Points of Interest9798| 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? |105106### POI Info Fields107108- `areaPoiID` — Unique POI ID109- `position` — `{x, y}` on map110- `name` — Display name111- `description` — Description text112- `textureIndex` — POI icon index113- `atlasName` — Atlas for icon114- `uiTextureKit` — Texture kit115- `tooltipWidgetSet` — Tooltip widget set116- `iconWidgetSet` — Icon widget set117- `availableInPlayerChoice` — Available in player choice118119---120121## C_TaxiMap — Flight Paths / Taxi122123| 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? |141142---143144## C_Vignette — Vignettes (Rare Mobs, Treasures, Events)145146| 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 |152153### Vignette Info Fields154155- `vignetteGUID` — Unique identifier156- `objectGUID` — Object GUID (unit, object, etc.)157- `name` — Display name158- `atlasName` — Icon atlas159- `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 set166167---168169## C_SuperTrackManager — Waypoint Super Tracking170171| 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 |185186---187188## C_Navigation — In-Game Navigation189190| 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? |196197---198199## C_ZoneAbility200201| Function | Returns | Description |202|----------|---------|-------------|203| `C_ZoneAbility.GetActiveAbilities()` | `abilities` | Active zone abilities |204205---206207## C_FogOfWar208209| 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 |213214---215216## Minimap Functions217218| 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 |229230---231232## C_NamePlateManager / Nameplates233234| 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 |245246> **12.0.0 Note:** Nameplates in instances are tightly restricted. Enemy nameplate unit tokens may expose only secret values for health, casting, etc.247248---249250## Coordinate Conversion251252### Map Position Object253254`C_Map.GetPlayerMapPosition()` returns a `Vector2DMixin` with:255256```lua257local pos = C_Map.GetPlayerMapPosition(mapID, "player")258if pos then259 local x, y = pos:GetXY()260 -- x, y are 0-1 normalized coordinates on the map261 print(string.format("%.2f, %.2f", x * 100, y * 100))262end263```264265### Convert Between Maps266267```lua268-- Get player position on the current best map269local mapID = C_Map.GetBestMapForUnit("player")270if mapID then271 local pos = C_Map.GetPlayerMapPosition(mapID, "player")272 if pos then273 -- Convert to world coordinates274 local continentID, worldPos = C_Map.GetWorldPosFromMapPos(mapID, pos)275 -- Convert back to a different map276 local otherMapID, otherPos = C_Map.GetMapPosFromWorldPos(continentID, worldPos)277 end278end279```280281### User Waypoint282283```lua284-- Set a waypoint on the map285local mapID = C_Map.GetBestMapForUnit("player")286if C_Map.CanSetUserWaypointOnMap(mapID) then287 local point = UiMapPoint.CreateFromCoordinates(mapID, 0.5, 0.5)288 C_Map.SetUserWaypoint(point)289 C_SuperTrack.SetSuperTrackedUserWaypoint(true)290end291```292293---294295## Key Events296297| 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 |319320---321322## Gotchas & Restrictions3233241. **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.332333---334> Converted and distributed by [TomeVault](https://tomevault.io/claim/jburlison) — claim your Tome and manage your conversions.335<!-- tomevault:4.0:skill_md:2026-04-13 -->