{"name": "Forever News data API", "version": 1, "build": "1.60.1.70630", "read": "2026-10-27", "license": "CC BY 4.0", "license_url": "https://creativecommons.org/licenses/by/4.0/", "license_covers": "The licence covers Forever News's compilation and classification. World of Warcraft names and texts belong to Blizzard Entertainment.", "terms": "Licensed under CC BY 4.0: free to use and share, as long as you credit Forever News with a link to https://wowforever.news.", "credit": "Forever News (https://wowforever.news)", "product": "wowf", "build_name": "WOW-70630patch1.60.1_Retail", "counts": {"talents": 465, "spells": 2293, "racials": 40, "items": 17618, "zones": 1329, "achievements": 421}, "internal": {"talents": 0, "spells": 1, "racials": 0, "items": 1613, "zones": 46, "achievements": 20}, "changes_recorded": 627, "limits": {"requests_per_minute": 120, "counted_by": "address", "records_per_answer": 50, "most_records_per_answer": 100, "cache_seconds": 3600}, "addresses": ["/api/v1/talents", "/api/v1/spells", "/api/v1/racials", "/api/v1/items", "/api/v1/zones", "/api/v1/achievements", "/api/v1/talents/<id>", "/api/v1/spells/<id>", "/api/v1/racials/<id>", "/api/v1/items/<id>", "/api/v1/zones/<id>", "/api/v1/achievements/<id>", "/api/v1/changes", "/api/v1/raid-buffs", "/api/v1/class-tools", "/api/v1/ability-notes", "/api/v1/openapi.json", "/api/v1/examples", "/api/v1/how-we-know"], "about": {"/api/v1/raid-buffs": "The buffs and debuffs a class, a spec or a hunter's pet brings to a raid: how far each reaches, whom it helps, what it does not stack with, and the game records it rests on. Written by hand, each with its source and how sure it is.", "/api/v1/class-tools": "Who can do the jobs a raid needs covered (remove magic, curses, poison or disease, interrupt, purge, remove a Frenzy, bring back a dead player), and who has a healing cooldown or a defensive of their own: by class, spec, talent and pet, each with the words of its tooltip that show it.", "/api/v1/ability-notes": "For each talent and class spell: what it changes, what it takes from others and gives them, what it does not stack with, its numbers, what it does for a raid and what is still open, with the shared rules the notes cite. Written by hand from the tooltips, each claim saying how sure it is; every note is a draft, not confirmed in the game.", "/api/v1/openapi.json": "The API as an OpenAPI 3.1 document: every address, what it can be asked with the values allowed, what it answers and how it refuses. A record's fields each have their line; the parts of the other answers are named with the kind of value each holds.", "/api/v1/examples": "Real records chosen by rule, one for each case a reader needs to see, each with the address that returns it.", "/api/v1/how-we-know": "What our copy of the data can say of each kind by itself: how many records, how many of Blizzard's working records, how many texts hold a ?, where the records were first made, and which version of our reading rules read which build, and when."}, "filters": {"every listing": {"q": "part of a name: 60 characters at most, none of them a control character", "internal": "true to include Blizzard's own working records", "sort": "name, the order every listing but the talents comes in; talents come by tree (class, then the tree as the game orders its tabs, then row, then column) unless name is asked for; items also level or -level (highest first)", "limit": "1 to 100, 50 when left out", "offset": "records to skip"}, "talents": {"class": ["druid", "hunter", "mage", "paladin", "priest", "rogue", "shaman", "warlock", "warrior"], "origin": ["classic", "sod", "forever"], "tree": ["Affliction", "Arcane", "Arms", "Assassination", "Balance", "Beast Mastery", "Combat", "Demonology", "Destruction", "Discipline", "Elemental", "Enhancement", "Feral Combat", "Fire", "Frost", "Fury", "Holy", "Marksmanship", "Protection", "Restoration", "Retribution", "Shadow", "Subtlety", "Survival"]}, "spells": {"class": ["druid", "hunter", "mage", "paladin", "priest", "rogue", "shaman", "warlock", "warrior"], "origin": ["classic", "later", "sod", "forever"]}, "racials": {"race": ["Dwarf", "Gnome", "High Order Skyborne", "Human", "Night Elf", "Orc", "Tauren", "Troll", "Undead", "Windshaper Skyborne"]}, "items": {"class": ["druid", "hunter", "mage", "paladin", "priest", "rogue", "shaman", "warlock", "warrior"], "origin": ["classic", "later", "sod", "forever"], "slot": ["Ammo", "Back", "Bag", "Chest", "Feet", "Finger", "Hands", "Head", "Held In Off-hand", "Legs", "Main Hand", "Neck", "Off Hand", "One-Hand", "Ranged", "Relic", "Shield", "Shirt", "Shoulder", "Tabard", "Thrown", "Trinket", "Two-Hand", "Waist", "Wrist"], "quality": ["Artifact", "Common", "Epic", "Heirloom", "Legendary", "Poor", "Rare", "Uncommon"], "type": ["Armor / Cloth", "Armor / Cosmetic", "Armor / Idol", "Armor / Leather", "Armor / Libram", "Armor / Mail", "Armor / Miscellaneous", "Armor / Plate", "Armor / Shield", "Armor / Totem", "Consumable / Bandages", "Consumable / Device", "Consumable / Elixirs", "Consumable / Explosives", "Consumable / Flasks", "Consumable / Food & Drink", "Consumable / Other", "Consumable / Permanent", "Consumable / Potions", "Consumable / Scrolls", "Consumable / Temporary", "Container / Bag", "Container / Enchanting Bag", "Container / Herb Bag", "Container / Leatherworking Bag", "Container / Mining Bag", "Container / Reagent Bag", "Container / Soul Bag", "Key / Key", "Miscellaneous / Holiday", "Miscellaneous / Junk", "Miscellaneous / Mount", "Miscellaneous / Other", "Miscellaneous / Pet", "Miscellaneous / Reagent", "Projectile / Arrow", "Projectile / Bullet", "Quest / Quest", "Quiver / Ammo Pouch", "Quiver / Quiver", "Reagent / Reagent", "Recipe / Alchemy", "Recipe / Blacksmithing", "Recipe / Book", "Recipe / Cooking", "Recipe / Enchanting", "Recipe / Engineering", "Recipe / First Aid", "Recipe / Fishing", "Recipe / Leatherworking", "Recipe / Tailoring", "Trade Goods / Cloth", "Trade Goods / Cooking", "Trade Goods / Elemental", "Trade Goods / Enchanting", "Trade Goods / Explosives (OBSOLETE)", "Trade Goods / Herb", "Trade Goods / Leather", "Trade Goods / Metal & Stone", "Trade Goods / Other", "Trade Goods / Parts", "Trade Goods / Trade Goods (OBSOLETE)", "Weapon / Axe", "Weapon / Bow", "Weapon / Crossbow", "Weapon / Dagger", "Weapon / Fishing Pole", "Weapon / Fist Weapon", "Weapon / Gun", "Weapon / Mace", "Weapon / Miscellaneous", "Weapon / Polearm", "Weapon / Staff", "Weapon / Sword", "Weapon / Thrown", "Weapon / Wand", "WoW Token"], "min_level": "lowest item level", "max_level": "highest item level"}, "zones": {"map": ["Ahn'Qiraj Temple", "Alliance PVP Barracks", "Alterac Valley", "Arathi Basin", "Azshara Crater", "Battle for Gilneas", "Blackfathom Deeps", "Blackrock Depths", "Blackrock Spire", "Blackwing Lair", "Burning of Andorhal", "Caverns of Time", "City of Dalaran", "Darkspear Islands", "Deadmines", "Deadwind Pass", "Deeprun Tram", "Demon Fall Canyon", "Dire Maul", "Eastern Kingdoms", "Emerald Dream", "Excavation Site: Wetlands", "Gnomeregan", "Horde PVP Barracks", "Hyjal Crater", "Kalimdor", "Karazhan Crypts", "Manor Mistmantle", "Maraudon", "Molten Core", "Naxxramas", "Nightmare Grove", "Ragefire Chasm", "Razorfen Downs", "Razorfen Kraul", "Ruins of Ahn'Qiraj", "Ruins of Lordaeron", "Scarlet Enclave", "Scarlet Monastery", "Scholomance", "Shadow Hold", "Shadowfang Keep", "Starfall Barrow Den", "Storm Cliffs", "Stormwind Stockade", "Stratholme", "Sunken Temple", "The Crystal Vale", "The Hall of Thanes", "The Scarab Dais", "The Tainted Scar", "Uldaman", "Wailing Caverns", "Warsong Gulch", "Warsong Gulch (Winter)", "Zephras Isle", "Zul'Farrak", "Zul'Gurub"]}, "achievements": {"category": ["Adventure", "Alchemy", "Battlegrounds", "Blacksmithing", "Boss Kills", "Character", "Combat", "Consumables", "Creatures", "Deaths", "Do Not Display", "Druid", "Dungeons", "Dungeons & Raids", "Dungeons and Raids", "Eastern Kingdoms", "Enchanting", "Engineering", "Explorer", "Gear", "Honorable Kills", "Hunter", "Kalimdor", "Killing Blows", "Kills", "Leatherworking", "Mage", "Paladin", "Player vs. Player", "Priest", "Professions", "Quests", "Raids", "Ranks", "Reputation", "Reputations", "Resurrection", "Rogue", "Season Journey", "Secondary Skills", "Shaman", "Skills", "Social", "Statistics", "Tailoring", "Tier 1 Gear", "Travel", "Warlock", "Warrior", "Wealth", "World"]}, "changes": {"kind": ["talent", "spell", "racial", "item", "zone", "achievement"], "build": "the build a change was first seen in", "limit": "1 to 100, 50 when left out", "offset": "records to skip"}}, "fields": {"every record": {"kind": "What the record is: talent, spell, racial, item, zone or achievement.", "id": "What this API calls it, always text. An item's, a zone's and an achievement's is its number in the game (19019); a talent's and a spell's is its class and its spell's number (mage-11366); a racial's is its race and its name (orc-blood-fury).", "name": "Its name as the game shows it.", "class": "The one class it belongs to, in small letters. null for a racial, and for an item that is not for one class alone (see classes).", "origin": "Where it was first made, told by its number in the game: classic (original Classic), later (a later expansion), sod (Season of Discovery) or forever (made for WoW Forever). null for a racial: the files give it no number to tell it by.", "url": "Where this one record is read.", "icon": "The name of its icon's file in the game, without folder or ending. Its picture, read from that file, is at https://wowforever.news/icons/<icon>.png (a name with a space has none). null when the files name none.", "internal": "true for one of Blizzard's own working records, not meant for players: its name carries a note of theirs such as Deprecated, Test or [PH]. Listings leave these out unless internal=true is asked for; each can still be read by its id.", "text": "Its description as the game's tooltip words it, for a level 60 character before gear. A ? stands for a number the files do not hold. A talent's is its first rank's; an item's is its own line of description in the tooltip. null when it has none."}, "talents": {"mechanics": "Versioned raw client mechanic evidence for the base spell, or null; see spells.mechanics. Do not infer cross-player ownership, stacking or server behavior from these records.", "rank_mechanics": "Point allocations for each talent rank, or null. Effects expose level-60 before-gear points_min/points_max calculated by our tooltip reader, with curve_id and operation_type from TraitDefinitionEffectPoints. These are effect points, not player damage, healing or proc uptime; ranks share the base spell ID.", "headers": "Base-client headers for the talent's spell ID, or null when unavailable. These are decoded client records, not player-effective values or an in-game verification. Rank descriptions do not imply matching headers for every rank. See spells.headers.", "tooltip": "The lines of its spell's tooltip between the name and the description, as the game lays them out and words them: see spells.tooltip. [] for a passive talent.", "tree": "The talent tree it is in, by the name on the tree's tab (Arcane, Fire, Frost).", "row": "Its row in the tree, counted from the top: 1 is the top row.", "col": "Its place in that row, counted from the left: 1 is the leftmost column.", "ranks": "How many points can be put into it.", "rank_texts": "Its description at each rank, the first rank first: as many as ranks. text is the first of them.", "open": "true when one of its texts holds a ?: a number the game's files do not hold, left open rather than guessed.", "points": "How many points must be spent in its tree before it can be taken, as the tree's own condition says (10 for Pyroblast's row); null for none.", "requires": "The talent it needs first, as the tree's edges say (Presence of Mind before Arcane Power): a list of {spell, name}, [] for none. An edge drawn both ways between two talents says no order and names none.", "spell": "The number the game gives the talent's spell.", "level": "The level a character learns it at, as the game's spell level table gives it (Requires level 1 on Shadow Bolt's first rank); null when the table gives none.", "teaches": "The numbers of the spells this one teaches when learned (a book's or a trainer's spell teaches the ability), from the game's own table of what teaches what. [] for none; null when the build read did not hold that table.", "learned_from": "The numbers of the spells that teach this one, the same table the other way. [] for none; null when the table was not read.", "mechanic": "The game's own word for what its category does to a target (Stunned, Rooted, Disarmed), or null for none or when the table was not read.", "dispel": "The game's own word for what removes it (Magic, Curse, Poison, Disease), or null for none or when the table was not read.", "affects": "The spells of its own class family that its effects change, each {spell, name}: the effects' class masks matched against the family masks of the class's spells, so a talent that says \"your Fireball and Pyroblast\" names them here from the files, not the text. [] for none; null when the table was not read.", "affected_by": "The talents and spells whose effects change this one, the same match the other way, each {spell, name}. [] for none; null when the table was not read.", "ppm": "Its procs per minute when the files give one, or null.", "summons": "For each summon effect, what it brings: {creature, name, kind}: the creature's number, its name when the client holds it (the client holds few creatures, so mostly null) and what the game calls the summoned (pet, guardian, totem, companion). [] for none; null when the tables were not read.", "enchants": "For each effect that puts an enchantment on an item (a shaman's weapon imbue, a rogue's poison, a rune): {id, name, duration_s, charges, effects}, the enchantment as the game's table has it, each effect {kind, amount, spell, name}: what it does in words (while equipped, chance on hit to cast, a stat or a resistance by name), its points, and the spell it casts with its name when it casts one. [] for none; null when the table was not read.", "interrupted_by": "What stops its cast, in words by the game's flags (moving, being pushed back, an interrupt, taking damage); a flag without a word is kept as its bit. [] for none; null when the table was not read.", "breaks_on": "What ends the aura it applies, in words by the game's flags (taking damage, moving, casting, attacking, mounting …); a flag without a word is kept as its bit. [] for none; null when the table was not read."}, "spells": {"mechanics": "Version 2 base-client-record evidence, or null: source.build/reader describe the actual decoded tables; missing_tables lists unavailable inputs. effects retains numeric effect_type/aura_type/mechanic, implicit_targets as [A,B], four spell_class_mask words, trigger_spell_id, base_points, radius_yards (the effect's area from its radius index, null for none) and the raw SpellEffect row. misc, aura_options, target_restrictions and duration retain raw base rows or null. related_spells bundles triggered records (maximum 64); related_spells_truncated declares incomplete closure. Zero remains zero; unknown enums are not named. unsupported explicitly lists server behavior, ownership, stacking exclusivity and aura-state prerequisites. No in-game verification or automatic synergy guarantee.", "headers": "Base-client spell headers, or null. Sections costs, cast, range, cooldown and reagents may each be null when unknown. Costs retain all resource rows and flat, percentage, per-level, recurring and conditional amounts; they are not a calculated player cost. Cast base_ms/minimum_ms/static_ms and cooldown ability_ms/category_ms/gcd_ms are milliseconds; GCD is separate from ability cooldown. Range keeps friendly and hostile min/max yards plus melee flags. Reagents are exact item IDs/counts without inferred names. Passive, channeled, next_melee (it strikes with the next melee swing) and drains_all_power flags qualify display. This is client evidence, not confirmed gameplay or an in-game tooltip receipt.", "tooltip": "The lines of its tooltip between the name and the description, as the game lays them out and words them: rows of [left, right], cost and range first (3,400 Mana | 40 yd range), then cast time and cooldown (Instant | 30 sec cooldown), then one row for each thing it needs (Requires Battle Stance; Requires Shields; Tools: Air Totem; Reagents: Sacred Candle); null for an empty side. Read from the files, so before talents and gear. A part we cannot read for certain is left out rather than guessed. [] for a passive spell, which shows none; null when the spell's details are not known.", "top": "true for the highest rank of the spell its class has (Rank 6 of Power Word: Fortitude), for a spell without ranks, and for a variant the game names apart under the same name (Polymorph: Turtle, Sunfire: Cat). false for every lower rank, for a part of a ranked spell that carries no rank, and for Blizzard's working records.", "spell": "The number the game gives this spell. Each rank of a spell has a number of its own.", "rank": "The word the game writes under the name: mostly its rank (Rank 3), sometimes another (Passive, Summon). null when none.", "taught_by": "For a hunter pet's ability: the number of the spell the hunter learns in order to teach it. null for every other spell.", "pet": "For an ability of a warlock's demon: the demon that casts it (Imp, Voidwalker, Succubus, Felhunter). Its class is the warlock's. null for every other spell.", "level": "The level a character learns it at, as the game's spell level table gives it (Requires level 1 on Shadow Bolt's first rank); null when the table gives none.", "teaches": "The numbers of the spells this one teaches when learned (a book's or a trainer's spell teaches the ability), from the game's own table of what teaches what. [] for none; null when the build read did not hold that table.", "learned_from": "The numbers of the spells that teach this one, the same table the other way. [] for none; null when the table was not read.", "mechanic": "The game's own word for what its category does to a target (Stunned, Rooted, Disarmed), or null for none or when the table was not read.", "dispel": "The game's own word for what removes it (Magic, Curse, Poison, Disease), or null for none or when the table was not read.", "affects": "The spells of its own class family that its effects change, each {spell, name}: the effects' class masks matched against the family masks of the class's spells, so a talent that says \"your Fireball and Pyroblast\" names them here from the files, not the text. [] for none; null when the table was not read.", "affected_by": "The talents and spells whose effects change this one, the same match the other way, each {spell, name}. [] for none; null when the table was not read.", "ppm": "Its procs per minute when the files give one, or null.", "summons": "For each summon effect, what it brings: {creature, name, kind}: the creature's number, its name when the client holds it (the client holds few creatures, so mostly null) and what the game calls the summoned (pet, guardian, totem, companion). [] for none; null when the tables were not read.", "enchants": "For each effect that puts an enchantment on an item (a shaman's weapon imbue, a rogue's poison, a rune): {id, name, duration_s, charges, effects}, the enchantment as the game's table has it, each effect {kind, amount, spell, name}: what it does in words (while equipped, chance on hit to cast, a stat or a resistance by name), its points, and the spell it casts with its name when it casts one. [] for none; null when the table was not read.", "interrupted_by": "What stops its cast, in words by the game's flags (moving, being pushed back, an interrupt, taking damage); a flag without a word is kept as its bit. [] for none; null when the table was not read.", "breaks_on": "What ends the aura it applies, in words by the game's flags (taking damage, moving, casting, attacking, mounting …); a flag without a word is kept as its bit. [] for none; null when the table was not read."}, "racials": {"race": "The race that has it.", "spell": "The number of the spell behind it, found on the race's own racial skill line by the racial's name; null when that line holds no spell of the name, or several (Expansive Mind is one spell per resource).", "spell_text": "That spell's description with its numbers filled in, the text the game shows in its tooltip; text is the shorter line of the character screen. null without a spell.", "headers": "That spell's headers, as a spell's; null without a spell.", "tooltip": "That spell's tooltip lines, as a spell's (Instant | 3 min cooldown); null without a spell."}, "items": {"type": "What sort of thing it is, as the game files it (Weapon / Sword, Armor / Cloth, Consumable / Potions).", "slot": "Where it is worn or held (Head, Trinket, Two-Hand). null for what cannot be equipped.", "quality": "Its colour in the game: Poor (grey), Common (white), Uncommon (green), Rare (blue), Epic (purple), Legendary (orange), Artifact or Heirloom.", "level": "Its item level: how strong the game counts it. Not the level a character needs (see requires).", "requires": "The level a character needs to use it. null when any level will do.", "binds": "How it is tied to a character: Binds when picked up, Binds when equipped, Binds when used, or Quest Item. null when it is not.", "classes": "The classes that may use it, when the game names them. An empty list when every class may.", "speed": "Its attack speed as the game stores it: a weapon's seconds between two attacks. null when it has none.", "stats": "What it adds while worn, each stat with its amount, in the order the item lists them (its tooltip's order). The amounts are worked out from the item level as the game does, not stored. Armor here is bonus armor on top of the item's own (see armor). A stat we have no name for yet shows as Stat and its number.", "effects": "What else it does, one entry each: on (Equip, Use, Chance on hit or Learn), name and spell (the spell behind it and that spell's number), text (what the tooltip says; for Learn, the description of the spell taught) and teaches (the number of the spell it teaches, or null).", "set": "The name of the set it belongs to. null when it is of no set.", "armor": "Its own armor, worked out as the game works it out from its tables: the row of its item level, the column of its quality and the slot's share (a shield from the shield table). Computed, not stored. null for an item without armor, or when a table the build did not hold would be needed.", "damage": "A weapon's damage, worked out as the game works it out: {min, max, per_second}, from its table's damage per second at its item level and quality, its speed and its variance. Computed, not stored. null for what is not a weapon or ammunition.", "unique": "What limits how many a character may carry or wear: {name, count}: the limit's name when it is shared by several items (Trinket of the Dawn), else null, and how many. null when there is no limit.", "name_line": "The grey line the game shows under the name (Raid Unique, a colour, a title), or null.", "sell": "What a vendor pays for it, in copper (100 copper is a silver, 100 silver a gold). null when it cannot be sold.", "buy": "What a vendor charges for it, in copper, when the files give a price. null otherwise."}, "zones": {"map": "The map it is on (Eastern Kingdoms, Kalimdor, or an instance's own map), or null when the files name none.", "parent": "The number of the area it lies in (a subzone's zone), or null for a zone of its own.", "zone": "The name of the zone it lies in, up the chain of parents, or null for a zone of its own.", "level": "The level the game counts it explored at, as the files give it; null when they give none (most zones' level ranges are not in these files).", "faction": "Whose side the game counts it on: Alliance, Horde, Both, or null for contested or neither."}, "achievements": {"points": "The achievement points it gives; 0 for a statistic and for most of this client's rows.", "category": "The category the game files it under (Dungeons and Raids, Quests, Statistics' Deaths …), or null.", "faction": "Alliance or Horde when only one side can earn it; null for both.", "reward": "What the game says it rewards (a title, an item), or null.", "statistic": "true for a counter the game keeps (kills, deaths, quests completed), not an achievement to earn; the client's table holds both."}}, "notes": ["Read from the game's own files for a level 60 character before gear; server-side hotfixes are not in the files.", "Every record starts with kind, id, name, class, origin and url, then its kind's own fields. null means the record does not have one. What each field means is under fields.", "The API describes itself at three more addresses, each made from the data and from the code that answers, never typed apart: /api/v1/openapi.json (every address, parameter, allowed value and answer, for a machine or a documentation page), /api/v1/examples (real records chosen by rule) and /api/v1/how-we-know (what our copy of the data can say of each kind).", "Talents are listed as a player reads them: class by class, a class's trees in the order of the game's own tabs, each tree row by row from the top and left to right. sort=name lists them A to Z as the other kinds are.", "origin is where a record was first made, told by its number: classic (original Classic), later (a later expansion), sod (Season of Discovery), forever (made for WoW Forever). A racial has no origin: the files give it no number to tell it by.", "In the highest band of numbers (a spell from 1,000,000, an item from 250,000) the number does not say whether a record was made for Season of Discovery or for WoW Forever: three class spells known to be Season of Discovery's are sod, every other record there is forever, and a record added there later is called forever too.", "text is the description. A talent's text is its first rank's; every rank is in rank_texts.", "A record is in the game's client; that alone does not mean a player can get it.", "internal: the name carries one of Blizzard's own notes (Deprecated, Test, OLD, [PH], DNT, Unused, \"Monster - \"; an item's name also when it starts with Internal or ends with Testing): a working record, not for players. Listings leave these out unless internal=true is asked for; each can still be read by its id.", "Parts of the game's files are encrypted and left out: a missing record is not proof that something was removed.", "A parameter the address does not take, one given twice and one given with no value are refused (400) with what is wrong: a question is never answered as if part of it were not there. Leave out what you do not ask for.", "Every answer carries an ETag. Send it back as If-None-Match: an answer that has not changed comes back as 304 with no body. It changes when the data is read again and when this API's code changes.", "While our copy of the game's data is being rebuilt every address answers 503 with Retry-After (60 seconds): for a few minutes after an update of ours that changes how the records are kept. Such an answer is not to be kept.", "Under filters the index offers, for each listing, the values that list something as asked: not a class or an origin no record of the kind has, and not a value that only Blizzard's working records have. Such a value is not offered and is taken all the same; with internal=true it lists them.", "Items: stat amounts are worked out from the item level as the game does; armor and weapon damage are not read yet (the Armor stat is bonus armor).", "Items: an effect's name is its spell's, and teaches is the number of the spell it teaches, if any. A Learn effect's text is the description of the spell taught, not of the item.", "Spells: a hunter pet's ability is the record, with the ability's own number and text. taught_by is the number of the spell a hunter learns to teach it; /api/v1/spells/<that number> answers with the ability. null for every other spell. An ability of a warlock's demon is a warlock's spell, and pet names the demon (Imp).", "A ? in a text stands for a number the files do not hold.", "A sum the game works out for a text (the damage of a bleed for each combo point, the range of a weapon imbue) is printed to the nearest whole number, unless the text asks for decimal places (0.5 sec). That rests on another, independent reading of the same files and is not confirmed against the game's own tooltips: where the game cuts instead, such a number is one too high.", "We read the game's data tables with the table definitions of the open WoWDBDefs project (https://github.com/wowdev/WoWDBDefs, licensed CC BY-SA 4.0); the names of the fields and the classification of the records are Forever News's own.", "The licence covers Forever News's compilation and classification. World of Warcraft names and texts belong to Blizzard Entertainment.", "Forever News is not affiliated with Blizzard Entertainment."]}