Data API
Read WoW Forever game data in your own tools. Talents, spells, racials and items as JSON, with a first request, field reference and examples from the game.
How we know: every record here is read from the game’s own files: build 1.60.1.70630, read on 27 Oct 2026 by reader 24. 347 records have a ? in a text we fill in from the game’s templates, mostly a number the files do not hold, left open rather than guessed. A record in the files does not prove it is live in the game. How we know.
Make your first request
No API key or account is needed. With curl installed, request a class’s talents:
curl --fail 'https://wowforever.news/api/v1/talents?class=mage&limit=5'Open this request in your browser. Check build and read, then read the results list. total counts every matching record. An empty list is a successful request with no matches.
How to filter records
Combine a listing’s filters with &. Use the values in the reference below; class and origin labels ignore capitalization. URL-encode spaces and punctuation.
To find items with “staff” in their name, highest item level first:
curl --fail 'https://wowforever.news/api/v1/items?q=staff&sort=-level&limit=5'Open the item search. For one record, request its url without query parameters. A single-record response uses result, singular.
What the data holds
4,894 of the 21,990 numbered records are numbered as made for WoW Forever. Most of the rest are numbered as original Classic.
Show as a table
| Original Classic | A later expansion | Season of Discovery | Made for WoW Forever | Total | |
|---|---|---|---|---|---|
| Talents | 350 | 0 | 38 | 77 | 465 |
| Class spells | 1715 | 4 | 406 | 169 | 2294 |
| Items | 12587 | 82 | 1914 | 4648 | 19231 |
Origin is our reading of the number the game gives each record, not proof of where a record can be found in play. Racials, Zones and Achievements carry no such number.
Endpoint and field reference
All endpoints use GET and return JSON. Each record listing takes the shared parameters below, plus its own filters.
Parameters on every record listing
qstring- part of a name: 60 characters at most, none of them a control character
At most 60 characters
internalstring- true to include Blizzard's own working records
false,true sortstring- 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)
limitinteger- 1 to 100, 50 when left out
1–100 · Default: 50
offsetinteger- records to skip
0–1,000,000 · Default: 0
The filter values shown for a reading list player records. Values held only by Blizzard’s working records are accepted too; use internal=true to include those records. class accepts druid, hunter, mage, paladin, priest, rogue, shaman, warlock, warrior; origin accepts classic, later, sod, forever. Each listing’s sort values and default appear with that listing.
Field types describe values found in this reading; another build may also use null. Every listed record field is present. Examples are selected from the store by rule and can change with the next reading.
Fields on every record
kindstring- What the record is: talent, spell, racial, item, zone or achievement.
idstring- 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).
namestring- Its name as the game shows it.
classnull / string- 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).
originnull / string- 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.
urlstring- Where this one record is read.
iconnull / string- 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.
internalboolean- 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.
textnull / string- 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
Trees, positions, point limits and descriptions at every rank.
GET /api/v1/talents List records
GET /api/v1/talents/{id} Read one record
Filters for this listing
classstring9 values in this reading
druid,hunter,mage,paladin,priest,rogue,shaman,warlock,warriororiginstringclassic,sod,foreversortstringDefault: tree
tree,nametreestring24 values in this reading
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
25 talent fields
mechanicsobject- 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_mechanicsarray- 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.
headersobject- 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.
tooltiparray- 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.
treestring- The talent tree it is in, by the name on the tree's tab (Arcane, Fire, Frost).
rowinteger- Its row in the tree, counted from the top: 1 is the top row.
colinteger- Its place in that row, counted from the left: 1 is the leftmost column.
ranksinteger- How many points can be put into it.
rank_textsarray- Its description at each rank, the first rank first: as many as ranks. text is the first of them.
openboolean- true when one of its texts holds a ?: a number the game's files do not hold, left open rather than guessed.
pointsinteger / null- 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.
requiresarray- 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.
spellinteger- The number the game gives the talent's spell.
levelinteger / null- 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.
teachesarray- 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_fromarray- The numbers of the spells that teach this one, the same table the other way. [] for none; null when the table was not read.
mechanicnull / string- 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.
dispelnull / string- The game's own word for what removes it (Magic, Curse, Poison, Disease), or null for none or when the table was not read.
affectsarray- 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_byarray- 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.
ppmnull- Its procs per minute when the files give one, or null.
summonsarray- 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.
enchantsarray- 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_byarray- 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_onarray- 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.
Examples from this reading
Nature's SplendorA talent with one rank.
GET /api/v1/talents/druid-1223083
Increases the duration of your Moonfire and Rejuvenation spells by 3 sec, your Regrowth spell by 6 sec, and your Insect Swarm spell by 2 sec.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "talent",
"id": "druid-1223083",
"name": "Nature's Splendor",
"class": "druid",
"origin": "forever",
"url": "/api/v1/talents/druid-1223083",
"internal": false,
"spell": 1223083,
"tree": "Balance",
"row": 3,
"col": 3,
"ranks": 1,
"points": 10,
"requires": [],
"icon": "spell_nature_natureresistancetotem",
"text": "Increases the duration of your Moonfire and Rejuvenation spells by 3 sec, your Regrowth spell by 6 sec, and your Insect Swarm spell by 2 sec.",
"rank_texts": [
"Increases the duration of your Moonfire and Rejuvenation spells by 3 sec, your Regrowth spell by 6 sec, and your Insect Swarm spell by 2 sec."
],
"open": false,
"rank_mechanics": [
{
"rank": 1,
"spell_id": 1223083,
"trait_definition_id": 134389,
"context": "tooltip-reader-level-60-before-gear",
"verified_in_game": false,
"effects": [
{
"index": 0,
"points_min": 3000.0,
"points_max": 3000.0,
"curve_id": null,
"operation_type": null
},
{
"index": 1,
"points_min": 6000.0,
"points_max": 6000.0,
"curve_id": null,
"operation_type": null
},
{
"index": 2,
"points_min": 2000.0,
"points_max": 2000.0,
"curve_id": null,
"operation_type": null
}
]
}
],
"mechanics": {
"version": 2,
"context": "base-client-record",
"spell_id": 1223083,
"effects": [
{
"id": 1210797,
"index": 0,
"effect_type": 6,
"aura_type": 107,
"mechanic": 0,
"implicit_targets": [
1,
0
],
"spell_class_mask": [
18,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": 3000.0,
"radius_yards": null,
"raw": {
"ID": 1210797,
"EffectAura": 107,
"DifficultyID": 0,
"EffectIndex": 0,
"Effect": 6,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 0.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 3000.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
1,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
18,
0,
0,
0
],
"ImplicitTarget": [
1,
0
],
"SpellID": 1223083
}
},
{
"id": 1210798,
"index": 1,
"effect_type": 6,
"aura_type": 107,
"mechanic": 0,
"implicit_targets": [
1,
0
],
"spell_class_mask": [
64,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": 6000.0,
"radius_yards": null,
"raw": {
"ID": 1210798,
"EffectAura": 107,
"DifficultyID": 0,
"EffectIndex": 1,
"Effect": 6,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 0.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 6000.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
1,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
64,
0,
0,
0
],
"ImplicitTarget": [
1,
0
],
"SpellID": 1223083
}
},
{
"id": 1210799,
"index": 2,
"effect_type": 6,
"aura_type": 107,
"mechanic": 0,
"implicit_targets": [
1,
0
],
"spell_class_mask": [
2097152,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": 2000.0,
"radius_yards": null,
"raw": {
"ID": 1210799,
"EffectAura": 107,
"DifficultyID": 0,
"EffectIndex": 2,
"Effect": 6,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 0.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 2000.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
1,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
2097152,
0,
0,
0
],
"ImplicitTarget": [
1,
0
],
"SpellID": 1223083
}
}
],
"misc": {
"ID": 777597,
"Attributes": [
192,
0,
256,
0,
0,
0,
0,
0,
4096,
0,
0,
0,
0,
0,
0,
8192,
0
],
"DifficultyID": 0,
"CastingTimeIndex": 1,
"DurationIndex": 0,
"PvPDurationIndex": 0,
"RangeIndex": 1,
"SchoolMask": 1,
"Speed": 0.0,
"LaunchDelay": 0.0,
"MinDuration": 0.0,
"SpellIconFileDataID": 136061,
"ActiveIconFileDataID": 0,
"ContentTuningID": 0,
"ShowFutureSpellPlayerConditionID": 0,
"SpellVisualScript": 0,
"ActiveSpellVisualScript": 0,
"SpellID": 1223083
},
"duration": null,
"aura_options": null,
"target_restrictions": null,
"source": {
"build": "1.60.1.70630",
"reader": 24,
"tables": [
"SpellEffect",
"SpellAuraOptions",
"SpellTargetRestrictions",
"SpellMisc",
"SpellDuration",
"SpellName",
"SpellRadius"
],
"missing_tables": []
},
"related_spells": [],
"related_spells_truncated": false,
"unsupported": [
"server-side-behavior",
"aura-ownership",
"stacking-exclusivity",
"aura-state-prerequisites"
]
},
"headers": {
"context": "base-client-record",
"costs": null,
"cast": {
"base_ms": 0,
"minimum_ms": 0,
"per_level_ms": 0,
"static_ms": 0
},
"range": {
"flags": 0,
"label": "Self Only",
"hostile": {
"min_yards": 0.0,
"max_yards": 0.0
},
"friendly": {
"min_yards": 0.0,
"max_yards": 0.0
}
},
"cooldown": null,
"reagents": null,
"passive": true,
"channeled": false,
"drains_all_power": false,
"next_melee": false,
"hide_range": false
},
"tooltip": [],
"level": 1,
"teaches": [],
"learned_from": [],
"mechanic": null,
"dispel": null,
"affects": [
{
"spell": 774,
"name": "Rejuvenation"
},
{
"spell": 1058,
"name": "Rejuvenation"
},
{
"spell": 1430,
"name": "Rejuvenation"
},
{
"spell": 2090,
"name": "Rejuvenation"
},
{
"spell": 2091,
"name": "Rejuvenation"
},
{
"spell": 3627,
"name": "Rejuvenation"
},
{
"spell": 5570,
"name": "Insect Swarm"
},
{
"spell": 8910,
"name": "Rejuvenation"
},
{
"spell": 8921,
"name": "Moonfire"
},
{
"spell": 8924,
"name": "Moonfire"
},
{
"spell": 8925,
"name": "Moonfire"
},
{
"spell": 8926,
"name": "Moonfire"
},
{
"spell": 8927,
"name": "Moonfire"
},
{
"spell": 8928,
"name": "Moonfire"
},
{
"spell": 8929,
"name": "Moonfire"
},
{
"spell": 8936,
"name": "Regrowth"
},
{
"spell": 8938,
"name": "Regrowth"
},
{
"spell": 8939,
"name": "Regrowth"
},
{
"spell": 8940,
"name": "Regrowth"
},
{
"spell": 8941,
"name": "Regrowth"
},
{
"spell": 9750,
"name": "Regrowth"
},
{
"spell": 9833,
"name": "Moonfire"
},
{
"spell": 9834,
"name": "Moonfire"
},
{
"spell": 9835,
"name": "Moonfire"
},
{
"spell": 9839,
"name": "Rejuvenation"
},
{
"spell": 9840,
"name": "Rejuvenation"
},
{
"spell": 9841,
"name": "Rejuvenation"
},
{
"spell": 9856,
"name": "Regrowth"
},
{
"spell": 9857,
"name": "Regrowth"
},
{
"spell": 9858,
"name": "Regrowth"
},
{
"spell": 24974,
"name": "Insect Swarm"
},
{
"spell": 24975,
"name": "Insect Swarm"
},
{
"spell": 24976,
"name": "Insect Swarm"
},
{
"spell": 24977,
"name": "Insect Swarm"
},
{
"spell": 25299,
"name": "Rejuvenation"
}
],
"affected_by": [],
"ppm": null,
"summons": [],
"enchants": [],
"interrupted_by": [],
"breaks_on": []
}
}Improved WrathA talent with several ranks: rank_texts has the text of each.
GET /api/v1/talents/druid-16814
Reduces the cast time of your Wrath spell by 0.1 sec and its Mana cost by 10%.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "talent",
"id": "druid-16814",
"name": "Improved Wrath",
"class": "druid",
"origin": "classic",
"url": "/api/v1/talents/druid-16814",
"internal": false,
"spell": 16814,
"tree": "Balance",
"row": 1,
"col": 2,
"ranks": 5,
"points": null,
"requires": [],
"icon": "spell_nature_abolishmagic",
"text": "Reduces the cast time of your Wrath spell by 0.1 sec and its Mana cost by 10%.",
"rank_texts": [
"Reduces the cast time of your Wrath spell by 0.1 sec and its Mana cost by 10%.",
"Reduces the cast time of your Wrath spell by 0.2 sec and its Mana cost by 20%.",
"Reduces the cast time of your Wrath spell by 0.3 sec and its Mana cost by 30%.",
"Reduces the cast time of your Wrath spell by 0.4 sec and its Mana cost by 40%.",
"Reduces the cast time of your Wrath spell by 0.5 sec and its Mana cost by 50%."
],
"open": false,
"rank_mechanics": [
{
"rank": 1,
"spell_id": 16814,
"trait_definition_id": 134384,
"context": "tooltip-reader-level-60-before-gear",
"verified_in_game": false,
"effects": [
{
"index": 0,
"points_min": -100.0,
"points_max": -100.0,
"curve_id": 85324,
"operation_type": 0
},
{
"index": 1,
"points_min": -10.0,
"points_max": -10.0,
"curve_id": 108163,
"operation_type": 0
}
]
},
{
"rank": 2,
"spell_id": 16814,
"trait_definition_id": 134384,
"context": "tooltip-reader-level-60-before-gear",
"verified_in_game": false,
"effects": [
{
"index": 0,
"points_min": -200.0,
"points_max": -200.0,
"curve_id": 85324,
"operation_type": 0
},
{
"index": 1,
"points_min": -20.0,
"points_max": -20.0,
"curve_id": 108163,
"operation_type": 0
}
]
},
{
"rank": 3,
"spell_id": 16814,
"trait_definition_id": 134384,
"context": "tooltip-reader-level-60-before-gear",
"verified_in_game": false,
"effects": [
{
"index": 0,
"points_min": -300.0,
"points_max": -300.0,
"curve_id": 85324,
"operation_type": 0
},
{
"index": 1,
"points_min": -30.0,
"points_max": -30.0,
"curve_id": 108163,
"operation_type": 0
}
]
},
{
"rank": 4,
"spell_id": 16814,
"trait_definition_id": 134384,
"context": "tooltip-reader-level-60-before-gear",
"verified_in_game": false,
"effects": [
{
"index": 0,
"points_min": -400.0,
"points_max": -400.0,
"curve_id": 85324,
"operation_type": 0
},
{
"index": 1,
"points_min": -40.0,
"points_max": -40.0,
"curve_id": 108163,
"operation_type": 0
}
]
},
{
"rank": 5,
"spell_id": 16814,
"trait_definition_id": 134384,
"context": "tooltip-reader-level-60-before-gear",
"verified_in_game": false,
"effects": [
{
"index": 0,
"points_min": -500.0,
"points_max": -500.0,
"curve_id": 85324,
"operation_type": 0
},
{
"index": 1,
"points_min": -50.0,
"points_max": -50.0,
"curve_id": 108163,
"operation_type": 0
}
]
}
],
"mechanics": {
"version": 2,
"context": "base-client-record",
"spell_id": 16814,
"effects": [
{
"id": 695185,
"index": 0,
"effect_type": 6,
"aura_type": 107,
"mechanic": 0,
"implicit_targets": [
1,
0
],
"spell_class_mask": [
1,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": -100.0,
"radius_yards": null,
"raw": {
"ID": 695185,
"EffectAura": 107,
"DifficultyID": 0,
"EffectIndex": 0,
"Effect": 6,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 1.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": -100.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
10,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
1,
0,
0,
0
],
"ImplicitTarget": [
1,
0
],
"SpellID": 16814
}
},
{
"id": 1338352,
"index": 1,
"effect_type": 6,
"aura_type": 108,
"mechanic": 0,
"implicit_targets": [
1,
0
],
"spell_class_mask": [
1,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": -50.0,
"radius_yards": null,
"raw": {
"ID": 1338352,
"EffectAura": 108,
"DifficultyID": 0,
"EffectIndex": 1,
"Effect": 6,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 1.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": -50.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
14,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
1,
0,
0,
0
],
"ImplicitTarget": [
1,
0
],
"SpellID": 16814
}
}
],
"misc": {
"ID": 327839,
"Attributes": [
464,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8192,
0
],
"DifficultyID": 0,
"CastingTimeIndex": 1,
"DurationIndex": 0,
"PvPDurationIndex": 0,
"RangeIndex": 1,
"SchoolMask": 1,
"Speed": 0.0,
"LaunchDelay": 0.0,
"MinDuration": 0.0,
"SpellIconFileDataID": 136006,
"ActiveIconFileDataID": 0,
"ContentTuningID": 0,
"ShowFutureSpellPlayerConditionID": 0,
"SpellVisualScript": 0,
"ActiveSpellVisualScript": 0,
"SpellID": 16814
},
"duration": null,
"aura_options": null,
"target_restrictions": null,
"source": {
"build": "1.60.1.70630",
"reader": 24,
"tables": [
"SpellEffect",
"SpellAuraOptions",
"SpellTargetRestrictions",
"SpellMisc",
"SpellDuration",
"SpellName",
"SpellRadius"
],
"missing_tables": []
},
"related_spells": [],
"related_spells_truncated": false,
"unsupported": [
"server-side-behavior",
"aura-ownership",
"stacking-exclusivity",
"aura-state-prerequisites"
]
},
"headers": {
"context": "base-client-record",
"costs": null,
"cast": {
"base_ms": 0,
"minimum_ms": 0,
"per_level_ms": 0,
"static_ms": 0
},
"range": {
"flags": 0,
"label": "Self Only",
"hostile": {
"min_yards": 0.0,
"max_yards": 0.0
},
"friendly": {
"min_yards": 0.0,
"max_yards": 0.0
}
},
"cooldown": null,
"reagents": null,
"passive": true,
"channeled": false,
"drains_all_power": false,
"next_melee": false,
"hide_range": false
},
"tooltip": [],
"level": null,
"teaches": [],
"learned_from": [],
"mechanic": null,
"dispel": null,
"affects": [
{
"spell": 5176,
"name": "Wrath"
},
{
"spell": 5177,
"name": "Wrath"
},
{
"spell": 5178,
"name": "Wrath"
},
{
"spell": 5179,
"name": "Wrath"
},
{
"spell": 5180,
"name": "Wrath"
},
{
"spell": 6780,
"name": "Wrath"
},
{
"spell": 8905,
"name": "Wrath"
},
{
"spell": 9912,
"name": "Wrath"
}
],
"affected_by": [],
"ppm": null,
"summons": [],
"enchants": [],
"interrupted_by": [],
"breaks_on": []
}
}Ice BarrierA talent with a ? in its text: a number the files do not hold, so open is true.
GET /api/v1/talents/mage-11426
Shield yourself, absorbing ? damage and increasing your Frost damage by 3% for 1 min. While shielded, your Frost damage is increased by an additional 3% and you do not lose casting time when you take damage.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "talent",
"id": "mage-11426",
"name": "Ice Barrier",
"class": "mage",
"origin": "classic",
"url": "/api/v1/talents/mage-11426",
"internal": false,
"spell": 11426,
"tree": "Frost",
"row": 7,
"col": 2,
"ranks": 1,
"points": 30,
"requires": [
{
"spell": 12472,
"name": "Cold Snap"
}
],
"icon": "spell_ice_lament",
"text": "Shield yourself, absorbing ? damage and increasing your Frost damage by 3% for 1 min. While shielded, your Frost damage is increased by an additional 3% and you do not lose casting time when you take damage.",
"rank_texts": [
"Shield yourself, absorbing ? damage and increasing your Frost damage by 3% for 1 min. While shielded, your Frost damage is increased by an additional 3% and you do not lose casting time when you take damage."
],
"open": true,
"rank_mechanics": [
{
"rank": 1,
"spell_id": 11426,
"trait_definition_id": 135292,
"context": "tooltip-reader-level-60-before-gear",
"verified_in_game": false,
"effects": [
{
"index": 0,
"points_min": 447.0,
"points_max": 447.0,
"curve_id": null,
"operation_type": null
},
{
"index": 1,
"points_min": 3.0,
"points_max": 3.0,
"curve_id": null,
"operation_type": null
},
{
"index": 2,
"points_min": 3.0,
"points_max": 3.0,
"curve_id": null,
"operation_type": null
}
]
}
],
"mechanics": {
"version": 2,
"context": "base-client-record",
"spell_id": 11426,
"effects": [
{
"id": 688591,
"index": 0,
"effect_type": 6,
"aura_type": 69,
"mechanic": 0,
"implicit_targets": [
1,
0
],
"spell_class_mask": [
0,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": 431.0,
"radius_yards": null,
"raw": {
"ID": 688591,
"EffectAura": 69,
"DifficultyID": 0,
"EffectIndex": 0,
"Effect": 6,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 0.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 2.8,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 431.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
127,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
0,
0,
0,
0
],
"ImplicitTarget": [
1,
0
],
"SpellID": 11426
}
},
{
"id": 1364979,
"index": 1,
"effect_type": 6,
"aura_type": 108,
"mechanic": 0,
"implicit_targets": [
1,
0
],
"spell_class_mask": [
131808,
4096,
0,
0
],
"trigger_spell_id": 0,
"base_points": 3.0,
"radius_yards": null,
"raw": {
"ID": 1364979,
"EffectAura": 108,
"DifficultyID": 0,
"EffectIndex": 1,
"Effect": 6,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 0.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 3.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
0,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
131808,
4096,
0,
0
],
"ImplicitTarget": [
1,
0
],
"SpellID": 11426
}
},
{
"id": 1364980,
"index": 2,
"effect_type": 6,
"aura_type": 108,
"mechanic": 0,
"implicit_targets": [
1,
0
],
"spell_class_mask": [
128,
4096,
0,
0
],
"trigger_spell_id": 0,
"base_points": 3.0,
"radius_yards": null,
"raw": {
"ID": 1364980,
"EffectAura": 108,
"DifficultyID": 0,
"EffectIndex": 2,
"Effect": 6,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 1.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 3.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
22,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
128,
4096,
0,
0
],
"ImplicitTarget": [
1,
0
],
"SpellID": 11426
}
}
],
"misc": {
"ID": 322398,
"Attributes": [
327680,
0,
0,
0,
0,
0,
0,
0,
4096,
0,
0,
0,
0,
0,
0,
8192,
0
],
"DifficultyID": 0,
"CastingTimeIndex": 1,
"DurationIndex": 3,
"PvPDurationIndex": 0,
"RangeIndex": 1,
"SchoolMask": 16,
"Speed": 0.0,
"LaunchDelay": 0.0,
"MinDuration": 0.0,
"SpellIconFileDataID": 135988,
"ActiveIconFileDataID": 0,
"ContentTuningID": 0,
"ShowFutureSpellPlayerConditionID": 0,
"SpellVisualScript": 0,
"ActiveSpellVisualScript": 0,
"SpellID": 11426
},
"duration": {
"ID": 3,
"Duration": 60000,
"MaxDuration": 60000,
"DurationPerResource": 0
},
"aura_options": null,
"target_restrictions": null,
"source": {
"build": "1.60.1.70630",
"reader": 24,
"tables": [
"SpellEffect",
"SpellAuraOptions",
"SpellTargetRestrictions",
"SpellMisc",
"SpellDuration",
"SpellName",
"SpellRadius"
],
"missing_tables": []
},
"related_spells": [],
"related_spells_truncated": false,
"unsupported": [
"server-side-behavior",
"aura-ownership",
"stacking-exclusivity",
"aura-state-prerequisites"
]
},
"headers": {
"context": "base-client-record",
"costs": [
{
"order": 0,
"power_type": 0,
"flat": 305,
"per_level": 0,
"per_second": 0,
"percent": 0.0,
"max_percent": 0.0,
"optional_flat": 0,
"optional_percent": 0.0,
"percent_per_second": 0.0,
"required_aura_spell": 0,
"display_id": 0,
"alternate_bar_id": 0,
"resource": "Mana"
}
],
"cast": {
"base_ms": 0,
"minimum_ms": 0,
"per_level_ms": 0,
"static_ms": 0
},
"range": {
"flags": 0,
"label": "Self Only",
"hostile": {
"min_yards": 0.0,
"max_yards": 0.0
},
"friendly": {
"min_yards": 0.0,
"max_yards": 0.0
}
},
"cooldown": {
"ability_ms": 0,
"category_ms": 30000,
"gcd_ms": 1500,
"category_id": 471,
"gcd_category_id": 133,
"aura_spell": 0
},
"reagents": null,
"passive": false,
"channeled": false,
"drains_all_power": false,
"next_melee": false,
"hide_range": false
},
"tooltip": [
[
"305 Mana",
null
],
[
"Instant",
"30 sec cooldown"
]
],
"level": 40,
"teaches": [],
"learned_from": [],
"mechanic": null,
"dispel": "Magic",
"affects": [
{
"spell": 10,
"name": "Blizzard"
},
{
"spell": 116,
"name": "Frostbolt"
},
{
"spell": 120,
"name": "Cone of Cold"
},
{
"spell": 122,
"name": "Frost Nova"
},
{
"spell": 205,
"name": "Frostbolt"
},
{
"spell": 837,
"name": "Frostbolt"
},
{
"spell": 865,
"name": "Frost Nova"
},
{
"spell": 6131,
"name": "Frost Nova"
},
{
"spell": 6141,
"name": "Blizzard"
},
{
"spell": 7322,
"name": "Frostbolt"
},
{
"spell": 8406,
"name": "Frostbolt"
},
{
"spell": 8407,
"name": "Frostbolt"
},
{
"spell": 8408,
"name": "Frostbolt"
},
{
"spell": 8427,
"name": "Blizzard"
},
{
"spell": 8492,
"name": "Cone of Cold"
},
{
"spell": 10159,
"name": "Cone of Cold"
},
{
"spell": 10160,
"name": "Cone of Cold"
},
{
"spell": 10161,
"name": "Cone of Cold"
},
{
"spell": 10179,
"name": "Frostbolt"
},
{
"spell": 10180,
"name": "Frostbolt"
},
{
"spell": 10181,
"name": "Frostbolt"
},
{
"spell": 10185,
"name": "Blizzard"
},
{
"spell": 10186,
"name": "Blizzard"
},
{
"spell": 10187,
"name": "Blizzard"
},
{
"spell": 10230,
"name": "Frost Nova"
},
{
"spell": 24530,
"name": "Felfire"
},
{
"spell": 25304,
"name": "Frostbolt"
},
{
"spell": 400640,
"name": "Ice Lance"
},
{
"spell": 401502,
"name": "Frostfire Bolt"
},
{
"spell": 1237312,
"name": "Frostfire Bolt"
},
{
"spell": 1237313,
"name": "Frostfire Bolt"
},
{
"spell": 1240044,
"name": "Ice Lance"
},
{
"spell": 1240045,
"name": "Ice Lance"
},
{
"spell": 1240046,
"name": "Ice Lance"
},
{
"spell": 1240047,
"name": "Ice Lance"
},
{
"spell": 1312002,
"name": "Ice Lance"
},
{
"spell": 1326053,
"name": "Frost Blast"
},
{
"spell": 1326054,
"name": "Frost Blast"
},
{
"spell": 1326055,
"name": "Frost Blast"
}
],
"affected_by": [
{
"spell": 11160,
"name": "Frost Channeling"
},
{
"spell": 11189,
"name": "Frost Warding"
}
],
"ppm": null,
"summons": [],
"enchants": [],
"interrupted_by": [
"being pushed back",
"bit 4",
"an interrupt"
],
"breaks_on": []
}
}Class spells
Abilities and their ranks, with the descriptions read from the game.
GET /api/v1/spells List records
GET /api/v1/spells/{id} Read one record
Filters for this listing
classstring9 values in this reading
druid,hunter,mage,paladin,priest,rogue,shaman,warlock,warriororiginstringclassic,later,sod,foreversortstringDefault: name
name
20 spell fields
mechanicsobject- 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.
headersobject- 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.
tooltiparray- 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.
topboolean- 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.
spellinteger- The number the game gives this spell. Each rank of a spell has a number of its own.
ranknull / string- The word the game writes under the name: mostly its rank (Rank 3), sometimes another (Passive, Summon). null when none.
taught_byinteger / null- For a hunter pet's ability: the number of the spell the hunter learns in order to teach it. null for every other spell.
petnull / string- 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.
levelinteger / null- 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.
teachesarray- 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_fromarray- The numbers of the spells that teach this one, the same table the other way. [] for none; null when the table was not read.
mechanicnull / string- 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.
dispelnull / string- The game's own word for what removes it (Magic, Curse, Poison, Disease), or null for none or when the table was not read.
affectsarray- 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_byarray- 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.
ppmnull- Its procs per minute when the files give one, or null.
summonsarray- 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.
enchantsarray- 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_byarray- 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_onarray- 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.
Examples from this reading
Aimed ShotA spell with ranks: each rank is a record of its own.
GET /api/v1/spells/hunter-19434
An aimed shot that increases ranged damage by 20. Aimed Shot shares its cooldown with Multi-Shot.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "spell",
"id": "hunter-19434",
"name": "Aimed Shot",
"class": "hunter",
"origin": "classic",
"url": "/api/v1/spells/hunter-19434",
"internal": false,
"spell": 19434,
"rank": "Rank 1",
"taught_by": null,
"pet": null,
"icon": "inv_spear_07",
"text": "An aimed shot that increases ranged damage by 20. Aimed Shot shares its cooldown with Multi-Shot.",
"headers": {
"context": "base-client-record",
"costs": [
{
"order": 0,
"power_type": 0,
"flat": 75,
"per_level": 0,
"per_second": 0,
"percent": 0.0,
"max_percent": 0.0,
"optional_flat": 0,
"optional_percent": 0.0,
"percent_per_second": 0.0,
"required_aura_spell": 0,
"display_id": 0,
"alternate_bar_id": 0,
"resource": "Mana"
}
],
"cast": {
"base_ms": 2000,
"minimum_ms": 2000,
"per_level_ms": 0,
"static_ms": 2000
},
"range": {
"flags": 0,
"label": "Hunter Range",
"hostile": {
"min_yards": 8.0,
"max_yards": 35.0
},
"friendly": {
"min_yards": 8.0,
"max_yards": 35.0
}
},
"cooldown": {
"ability_ms": 0,
"category_ms": 6000,
"gcd_ms": 1500,
"category_id": 2,
"gcd_category_id": 133,
"aura_spell": 0
},
"reagents": null,
"passive": false,
"channeled": false,
"drains_all_power": false,
"next_melee": false,
"hide_range": false
},
"tooltip": [
[
"75 Mana",
"8-35 yd range"
],
[
"2 sec cast",
"6 sec cooldown"
]
],
"mechanics": {
"version": 2,
"context": "base-client-record",
"spell_id": 19434,
"effects": [
{
"id": 696631,
"index": 0,
"effect_type": 121,
"aura_type": 0,
"mechanic": 0,
"implicit_targets": [
6,
0
],
"spell_class_mask": [
0,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": 20.0,
"radius_yards": null,
"raw": {
"ID": 696631,
"EffectAura": 0,
"DifficultyID": 0,
"EffectIndex": 0,
"Effect": 121,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 1.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 20.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
0,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
0,
0,
0,
0
],
"ImplicitTarget": [
6,
0
],
"SpellID": 19434
}
}
],
"misc": {
"ID": 329024,
"Attributes": [
4259858,
0,
131072,
0,
402653184,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8192,
128
],
"DifficultyID": 0,
"CastingTimeIndex": 5,
"DurationIndex": 0,
"PvPDurationIndex": 0,
"RangeIndex": 114,
"SchoolMask": 1,
"Speed": 40.0,
"LaunchDelay": 0.0,
"MinDuration": 0.0,
"SpellIconFileDataID": 135130,
"ActiveIconFileDataID": 0,
"ContentTuningID": 0,
"ShowFutureSpellPlayerConditionID": 0,
"SpellVisualScript": 0,
"ActiveSpellVisualScript": 0,
"SpellID": 19434
},
"duration": null,
"aura_options": null,
"target_restrictions": null,
"source": {
"build": "1.60.1.70630",
"reader": 24,
"tables": [
"SpellEffect",
"SpellAuraOptions",
"SpellTargetRestrictions",
"SpellMisc",
"SpellDuration",
"SpellName",
"SpellRadius"
],
"missing_tables": []
},
"related_spells": [],
"related_spells_truncated": false,
"unsupported": [
"server-side-behavior",
"aura-ownership",
"stacking-exclusivity",
"aura-state-prerequisites"
]
},
"level": 20,
"teaches": [],
"learned_from": [],
"mechanic": null,
"dispel": null,
"affects": [],
"affected_by": [
{
"spell": 19416,
"name": "Efficiency"
},
{
"spell": 19461,
"name": "Barrage"
},
{
"spell": 19485,
"name": "Mortal Shots"
},
{
"spell": 19498,
"name": "Hawk Eye"
},
{
"spell": 1310687,
"name": "Sniper Shot"
},
{
"spell": 1310785,
"name": "Sniper Shot"
},
{
"spell": 1310786,
"name": "Sniper Shot"
}
],
"ppm": null,
"summons": [],
"enchants": [],
"interrupted_by": [
"moving",
"being pushed back",
"bit 4"
],
"breaks_on": [],
"top": false
}
}Abolish DiseaseA spell without ranks.
Attempts to cure 1 disease effect on the target, and 1 more disease effect every 5 seconds for 20 sec.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "spell",
"id": "priest-552",
"name": "Abolish Disease",
"class": "priest",
"origin": "classic",
"url": "/api/v1/spells/priest-552",
"internal": false,
"spell": 552,
"rank": null,
"taught_by": null,
"pet": null,
"icon": "spell_nature_nullifydisease",
"text": "Attempts to cure 1 disease effect on the target, and 1 more disease effect every 5 seconds for 20 sec.",
"headers": {
"context": "base-client-record",
"costs": [
{
"order": 0,
"power_type": 0,
"flat": 0,
"per_level": 0,
"per_second": 0,
"percent": 15.0,
"max_percent": 0.0,
"optional_flat": 0,
"optional_percent": 0.0,
"percent_per_second": 0.0,
"required_aura_spell": 0,
"display_id": 0,
"alternate_bar_id": 0,
"resource": "Mana"
}
],
"cast": {
"base_ms": 0,
"minimum_ms": 0,
"per_level_ms": 0,
"static_ms": 0
},
"range": {
"flags": 0,
"label": "Medium Range",
"hostile": {
"min_yards": 0.0,
"max_yards": 30.0
},
"friendly": {
"min_yards": 0.0,
"max_yards": 30.0
}
},
"cooldown": {
"ability_ms": 0,
"category_ms": 0,
"gcd_ms": 1500,
"category_id": 0,
"gcd_category_id": 133,
"aura_spell": 0
},
"reagents": null,
"passive": false,
"channeled": false,
"drains_all_power": false,
"next_melee": false,
"hide_range": false
},
"tooltip": [
[
"15% of base mana",
"30 yd range"
],
[
"Instant",
null
]
],
"mechanics": {
"version": 2,
"context": "base-client-record",
"spell_id": 552,
"effects": [
{
"id": 679133,
"index": 0,
"effect_type": 6,
"aura_type": 23,
"mechanic": 0,
"implicit_targets": [
21,
0
],
"spell_class_mask": [
0,
0,
0,
0
],
"trigger_spell_id": 10872,
"base_points": 0.0,
"radius_yards": null,
"raw": {
"ID": 679133,
"EffectAura": 23,
"DifficultyID": 0,
"EffectIndex": 0,
"Effect": 6,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 5000,
"EffectBonusCoefficient": 0.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 10872,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 0.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
0,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
0,
0,
0,
0
],
"ImplicitTarget": [
21,
0
],
"SpellID": 552
}
},
{
"id": 679134,
"index": 1,
"effect_type": 38,
"aura_type": 0,
"mechanic": 0,
"implicit_targets": [
21,
0
],
"spell_class_mask": [
0,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": 1.0,
"radius_yards": null,
"raw": {
"ID": 679134,
"EffectAura": 0,
"DifficultyID": 0,
"EffectIndex": 1,
"Effect": 38,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 0.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 1.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
3,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
0,
0,
0,
0
],
"ImplicitTarget": [
21,
0
],
"SpellID": 552
}
}
],
"misc": {
"ID": 314254,
"Attributes": [
329728,
32768,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8192,
0
],
"DifficultyID": 0,
"CastingTimeIndex": 1,
"DurationIndex": 18,
"PvPDurationIndex": 0,
"RangeIndex": 4,
"SchoolMask": 2,
"Speed": 0.0,
"LaunchDelay": 0.0,
"MinDuration": 0.0,
"SpellIconFileDataID": 136066,
"ActiveIconFileDataID": 0,
"ContentTuningID": 0,
"ShowFutureSpellPlayerConditionID": 0,
"SpellVisualScript": 0,
"ActiveSpellVisualScript": 0,
"SpellID": 552
},
"duration": {
"ID": 18,
"Duration": 20000,
"MaxDuration": 20000,
"DurationPerResource": 0
},
"aura_options": null,
"target_restrictions": null,
"source": {
"build": "1.60.1.70630",
"reader": 24,
"tables": [
"SpellEffect",
"SpellAuraOptions",
"SpellTargetRestrictions",
"SpellMisc",
"SpellDuration",
"SpellName",
"SpellRadius"
],
"missing_tables": []
},
"related_spells": [
{
"spell_id": 10872,
"effects": [
{
"id": 688006,
"index": 0,
"effect_type": 38,
"aura_type": 0,
"mechanic": 0,
"implicit_targets": [
21,
0
],
"spell_class_mask": [
0,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": 1.0,
"radius_yards": null,
"raw": {
"ID": 688006,
"EffectAura": 0,
"DifficultyID": 0,
"EffectIndex": 0,
"Effect": 38,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 0.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 1.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
3,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
0,
0,
0,
0
],
"ImplicitTarget": [
21,
0
],
"SpellID": 10872
}
}
],
"misc": {
"ID": 321915,
"Attributes": [
384,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8192,
0
],
"DifficultyID": 0,
"CastingTimeIndex": 1,
"DurationIndex": 0,
"PvPDurationIndex": 0,
"RangeIndex": 1,
"SchoolMask": 8,
"Speed": 0.0,
"LaunchDelay": 0.0,
"MinDuration": 0.0,
"SpellIconFileDataID": 136066,
"ActiveIconFileDataID": 0,
"ContentTuningID": 0,
"ShowFutureSpellPlayerConditionID": 0,
"SpellVisualScript": 0,
"ActiveSpellVisualScript": 0,
"SpellID": 10872
},
"duration": null,
"aura_options": {
"ID": 123510,
"DifficultyID": 0,
"CumulativeAura": 0,
"ProcCategoryRecovery": 0,
"ProcChance": 101,
"ProcCharges": 0,
"SpellProcsPerMinuteID": 0,
"ProcTypeMask": [
0,
0
],
"SpellID": 10872
},
"target_restrictions": null,
"name": "Abolish Disease Effect"
}
],
"related_spells_truncated": false,
"unsupported": [
"server-side-behavior",
"aura-ownership",
"stacking-exclusivity",
"aura-state-prerequisites"
]
},
"level": 32,
"teaches": [],
"learned_from": [],
"mechanic": null,
"dispel": "Magic",
"affects": [],
"affected_by": [
{
"spell": 14520,
"name": "Mental Agility"
},
{
"spell": 14751,
"name": "Inner Focus"
},
{
"spell": 1309957,
"name": "Holy Precision"
}
],
"ppm": null,
"summons": [],
"enchants": [],
"interrupted_by": [
"an interrupt"
],
"breaks_on": [],
"top": true
}
}Arcane ResistanceA hunter pet's ability: taught_by is the number of the spell the hunter learns to teach it.
GET /api/v1/spells/hunter-24493
Increases Arcane resistance by 30.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "spell",
"id": "hunter-24493",
"name": "Arcane Resistance",
"class": "hunter",
"origin": "classic",
"url": "/api/v1/spells/hunter-24493",
"internal": false,
"spell": 24493,
"rank": "Rank 1",
"taught_by": 24495,
"pet": null,
"icon": "spell_nature_starfall",
"text": "Increases Arcane resistance by 30.",
"headers": {
"context": "base-client-record",
"costs": null,
"cast": {
"base_ms": 0,
"minimum_ms": 0,
"per_level_ms": 0,
"static_ms": 0
},
"range": {
"flags": 0,
"label": "Self Only",
"hostile": {
"min_yards": 0.0,
"max_yards": 0.0
},
"friendly": {
"min_yards": 0.0,
"max_yards": 0.0
}
},
"cooldown": null,
"reagents": null,
"passive": true,
"channeled": false,
"drains_all_power": false,
"next_melee": false,
"hide_range": false
},
"tooltip": [],
"mechanics": {
"version": 2,
"context": "base-client-record",
"spell_id": 24493,
"effects": [
{
"id": 701984,
"index": 0,
"effect_type": 6,
"aura_type": 22,
"mechanic": 0,
"implicit_targets": [
1,
0
],
"spell_class_mask": [
0,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": 30.0,
"radius_yards": null,
"raw": {
"ID": 701984,
"EffectAura": 22,
"DifficultyID": 0,
"EffectIndex": 0,
"Effect": 6,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 1.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 30.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
64,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
0,
0,
0,
0
],
"ImplicitTarget": [
1,
0
],
"SpellID": 24493
}
}
],
"misc": {
"ID": 333277,
"Attributes": [
64,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8192,
0
],
"DifficultyID": 0,
"CastingTimeIndex": 1,
"DurationIndex": 21,
"PvPDurationIndex": 0,
"RangeIndex": 1,
"SchoolMask": 1,
"Speed": 0.0,
"LaunchDelay": 0.0,
"MinDuration": 0.0,
"SpellIconFileDataID": 136096,
"ActiveIconFileDataID": 0,
"ContentTuningID": 0,
"ShowFutureSpellPlayerConditionID": 0,
"SpellVisualScript": 0,
"ActiveSpellVisualScript": 0,
"SpellID": 24493
},
"duration": {
"ID": 21,
"Duration": -1,
"MaxDuration": -1,
"DurationPerResource": 0
},
"aura_options": {
"ID": 134872,
"DifficultyID": 0,
"CumulativeAura": 0,
"ProcCategoryRecovery": 0,
"ProcChance": 101,
"ProcCharges": 0,
"SpellProcsPerMinuteID": 0,
"ProcTypeMask": [
0,
0
],
"SpellID": 24493
},
"target_restrictions": null,
"source": {
"build": "1.60.1.70630",
"reader": 24,
"tables": [
"SpellEffect",
"SpellAuraOptions",
"SpellTargetRestrictions",
"SpellMisc",
"SpellDuration",
"SpellName",
"SpellRadius"
],
"missing_tables": []
},
"related_spells": [],
"related_spells_truncated": false,
"unsupported": [
"server-side-behavior",
"aura-ownership",
"stacking-exclusivity",
"aura-state-prerequisites"
]
},
"level": 20,
"teaches": [],
"learned_from": [],
"mechanic": null,
"dispel": null,
"affects": [],
"affected_by": [],
"ppm": null,
"summons": [],
"enchants": [],
"interrupted_by": [],
"breaks_on": [],
"top": false
}
}Blood PactAn ability of a warlock's demon: pet names the demon.
GET /api/v1/spells/warlock-11766
Increases party members' Stamina by 39.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "spell",
"id": "warlock-11766",
"name": "Blood Pact",
"class": "warlock",
"origin": "classic",
"url": "/api/v1/spells/warlock-11766",
"internal": false,
"spell": 11766,
"rank": "Rank 4",
"taught_by": null,
"pet": "Imp",
"icon": "spell_shadow_bloodboil",
"text": "Increases party members' Stamina by 39.",
"headers": {
"context": "base-client-record",
"costs": null,
"cast": {
"base_ms": 0,
"minimum_ms": 0,
"per_level_ms": 0,
"static_ms": 0
},
"range": {
"flags": 0,
"label": "Short Range",
"hostile": {
"min_yards": 0.0,
"max_yards": 20.0
},
"friendly": {
"min_yards": 0.0,
"max_yards": 20.0
}
},
"cooldown": null,
"reagents": null,
"passive": false,
"channeled": false,
"drains_all_power": false,
"next_melee": false,
"hide_range": false
},
"tooltip": [
[
null,
"20 yd range"
],
[
"Instant",
null
]
],
"mechanics": {
"version": 2,
"context": "base-client-record",
"spell_id": 11766,
"effects": [
{
"id": 690767,
"index": 0,
"effect_type": 35,
"aura_type": 29,
"mechanic": 0,
"implicit_targets": [
1,
0
],
"spell_class_mask": [
0,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": 35.0,
"radius_yards": 30.0,
"raw": {
"ID": 690767,
"EffectAura": 29,
"DifficultyID": 0,
"EffectIndex": 0,
"Effect": 35,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 0.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.4,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": 35.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
2,
0
],
"EffectRadiusIndex": [
10,
10
],
"EffectSpellClassMask": [
0,
0,
0,
0
],
"ImplicitTarget": [
1,
0
],
"SpellID": 11766
}
}
],
"misc": {
"ID": 324211,
"Attributes": [
65536,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8192,
0
],
"DifficultyID": 0,
"CastingTimeIndex": 1,
"DurationIndex": 21,
"PvPDurationIndex": 0,
"RangeIndex": 3,
"SchoolMask": 32,
"Speed": 0.0,
"LaunchDelay": 0.0,
"MinDuration": 0.0,
"SpellIconFileDataID": 136124,
"ActiveIconFileDataID": 136116,
"ContentTuningID": 0,
"ShowFutureSpellPlayerConditionID": 0,
"SpellVisualScript": 0,
"ActiveSpellVisualScript": 0,
"SpellID": 11766
},
"duration": {
"ID": 21,
"Duration": -1,
"MaxDuration": -1,
"DurationPerResource": 0
},
"aura_options": null,
"target_restrictions": null,
"source": {
"build": "1.60.1.70630",
"reader": 24,
"tables": [
"SpellEffect",
"SpellAuraOptions",
"SpellTargetRestrictions",
"SpellMisc",
"SpellDuration",
"SpellName",
"SpellRadius"
],
"missing_tables": []
},
"related_spells": [],
"related_spells_truncated": false,
"unsupported": [
"server-side-behavior",
"aura-ownership",
"stacking-exclusivity",
"aura-state-prerequisites"
]
},
"level": 38,
"teaches": [],
"learned_from": [],
"mechanic": null,
"dispel": null,
"affects": [],
"affected_by": [],
"ppm": null,
"summons": [],
"enchants": [],
"interrupted_by": [],
"breaks_on": [],
"top": false
}
}Rogue Passive (DND)One of Blizzard's own working records: internal is true, and listings leave it out unless asked.
GET /api/v1/spells/rogue-21184
Decreases threat generated by 29%.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "spell",
"id": "rogue-21184",
"name": "Rogue Passive (DND)",
"class": "rogue",
"origin": "classic",
"url": "/api/v1/spells/rogue-21184",
"internal": true,
"spell": 21184,
"rank": null,
"taught_by": null,
"pet": null,
"icon": "ability_stealth",
"text": "Decreases threat generated by 29%.",
"headers": {
"context": "base-client-record",
"costs": null,
"cast": {
"base_ms": 0,
"minimum_ms": 0,
"per_level_ms": 0,
"static_ms": 0
},
"range": {
"flags": 0,
"label": "Self Only",
"hostile": {
"min_yards": 0.0,
"max_yards": 0.0
},
"friendly": {
"min_yards": 0.0,
"max_yards": 0.0
}
},
"cooldown": null,
"reagents": null,
"passive": true,
"channeled": false,
"drains_all_power": false,
"next_melee": false,
"hide_range": false
},
"tooltip": [],
"mechanics": {
"version": 2,
"context": "base-client-record",
"spell_id": 21184,
"effects": [
{
"id": 698526,
"index": 0,
"effect_type": 6,
"aura_type": 10,
"mechanic": 0,
"implicit_targets": [
1,
0
],
"spell_class_mask": [
0,
0,
0,
0
],
"trigger_spell_id": 0,
"base_points": -29.0,
"radius_yards": null,
"raw": {
"ID": 698526,
"EffectAura": 10,
"DifficultyID": 0,
"EffectIndex": 0,
"Effect": 6,
"EffectAmplitude": 0.0,
"EffectAttributes": 0,
"EffectAuraPeriod": 0,
"EffectBonusCoefficient": 0.0,
"EffectChainAmplitude": 1.0,
"EffectChainTargets": 0,
"EffectItemType": 0,
"EffectMechanic": 0,
"EffectPointsPerResource": 0.0,
"EffectPos_facing": 0.0,
"EffectRealPointsPerLevel": 0.0,
"EffectTriggerSpell": 0,
"BonusCoefficientFromAP": 0.0,
"PvpMultiplier": 1.0,
"Coefficient": 0.0,
"Variance": 0.0,
"ResourceCoefficient": 0.0,
"GroupSizeBasePointsCoefficient": 1.0,
"EffectBasePointsF": -29.0,
"ScalingClass": 0,
"Node__Field_12_0_0_63534_001": 0,
"EffectMiscValue": [
127,
0
],
"EffectRadiusIndex": [
0,
0
],
"EffectSpellClassMask": [
0,
0,
0,
0
],
"ImplicitTarget": [
1,
0
],
"SpellID": 21184
}
}
],
"misc": {
"ID": 330545,
"Attributes": [
327888,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8192,
0
],
"DifficultyID": 0,
"CastingTimeIndex": 1,
"DurationIndex": 21,
"PvPDurationIndex": 0,
"RangeIndex": 1,
"SchoolMask": 1,
"Speed": 0.0,
"LaunchDelay": 0.0,
"MinDuration": 0.0,
"SpellIconFileDataID": 132320,
"ActiveIconFileDataID": 0,
"ContentTuningID": 0,
"ShowFutureSpellPlayerConditionID": 0,
"SpellVisualScript": 0,
"ActiveSpellVisualScript": 0,
"SpellID": 21184
},
"duration": {
"ID": 21,
"Duration": -1,
"MaxDuration": -1,
"DurationPerResource": 0
},
"aura_options": {
"ID": 132140,
"DifficultyID": 0,
"CumulativeAura": 0,
"ProcCategoryRecovery": 0,
"ProcChance": 101,
"ProcCharges": 0,
"SpellProcsPerMinuteID": 0,
"ProcTypeMask": [
0,
0
],
"SpellID": 21184
},
"target_restrictions": null,
"source": {
"build": "1.60.1.70630",
"reader": 24,
"tables": [
"SpellEffect",
"SpellAuraOptions",
"SpellTargetRestrictions",
"SpellMisc",
"SpellDuration",
"SpellName",
"SpellRadius"
],
"missing_tables": []
},
"related_spells": [],
"related_spells_truncated": false,
"unsupported": [
"server-side-behavior",
"aura-ownership",
"stacking-exclusivity",
"aura-state-prerequisites"
]
},
"level": 1,
"teaches": [],
"learned_from": [],
"mechanic": null,
"dispel": null,
"affects": [],
"affected_by": [],
"ppm": null,
"summons": [],
"enchants": [],
"interrupted_by": [],
"breaks_on": [],
"top": false
}
}Racials
Race abilities and their descriptions.
GET /api/v1/racials List records
GET /api/v1/racials/{id} Read one record
Filters for this listing
sortstringDefault: name
nameracestring10 values in this reading
Dwarf,Gnome,High Order Skyborne,Human,Night Elf,Orc,Tauren,Troll,Undead,Windshaper Skyborne
5 racial fields
racestring- The race that has it.
spellinteger / null- 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_textnull / string- 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.
headersnull / object- That spell's headers, as a spell's; null without a spell.
tooltiparray / null- That spell's tooltip lines, as a spell's (Instant | 3 min cooldown); null without a spell.
Examples from this reading
Beast SlayingA racial: it has a race, and neither class nor origin.
GET /api/v1/racials/troll-beast-slaying
Damage dealt versus Beasts increased by 5%
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "racial",
"id": "troll-beast-slaying",
"name": "Beast Slaying",
"class": null,
"origin": null,
"url": "/api/v1/racials/troll-beast-slaying",
"internal": false,
"race": "Troll",
"icon": "inv_misc_pelt_bear_ruin_02",
"text": "Damage dealt versus Beasts increased by 5%",
"spell": 20557,
"spell_text": "Damage dealt versus Beasts increased by 5%.",
"headers": {
"context": "base-client-record",
"costs": null,
"cast": {
"base_ms": 0,
"minimum_ms": 0,
"per_level_ms": 0,
"static_ms": 0
},
"range": {
"flags": 0,
"label": "Self Only",
"hostile": {
"min_yards": 0.0,
"max_yards": 0.0
},
"friendly": {
"min_yards": 0.0,
"max_yards": 0.0
}
},
"cooldown": null,
"reagents": null,
"passive": true,
"channeled": false,
"drains_all_power": false,
"next_melee": false,
"hide_range": false
},
"tooltip": []
}
}Items
Item levels, equipment slots, stats, armor, damage and effects.
GET /api/v1/items List records
GET /api/v1/items/{id} Read one record
Filters for this listing
classstring9 values in this reading
druid,hunter,mage,paladin,priest,rogue,shaman,warlock,warriororiginstringclassic,later,sod,foreversortstringDefault: name
name,level,-levelslotstring25 values in this reading
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,WristqualitystringArtifact,Common,Epic,Heirloom,Legendary,Poor,Rare,Uncommontypestring77 values in this reading
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 Tokenmin_levelinteger- lowest item level
0–1,000
max_levelinteger- highest item level
0–1,000
17 item fields
typestring- What sort of thing it is, as the game files it (Weapon / Sword, Armor / Cloth, Consumable / Potions).
slotnull / string- Where it is worn or held (Head, Trinket, Two-Hand). null for what cannot be equipped.
qualitystring- Its colour in the game: Poor (grey), Common (white), Uncommon (green), Rare (blue), Epic (purple), Legendary (orange), Artifact or Heirloom.
levelinteger- Its item level: how strong the game counts it. Not the level a character needs (see requires).
requiresinteger / null- The level a character needs to use it. null when any level will do.
bindsnull / string- 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.
classesarray- The classes that may use it, when the game names them. An empty list when every class may.
speednull / number- Its attack speed as the game stores it: a weapon's seconds between two attacks. null when it has none.
statsobject- 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.
effectsarray- 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).
setnull / string- The name of the set it belongs to. null when it is of no set.
armorinteger / null- 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.
damagenull / object- 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.
uniquenull / object- 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_linenull / string- The grey line the game shows under the name (Raid Unique, a colour, a title), or null.
sellinteger / null- What a vendor pays for it, in copper (100 copper is a silver, 100 silver a gold). null when it cannot be sold.
buyinteger / null- What a vendor charges for it, in copper, when the files give a price. null otherwise.
Examples from this reading
Beastmaster's BootsAn item with stats, effects and a set.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "item",
"id": "22061",
"name": "Beastmaster's Boots",
"class": null,
"origin": "classic",
"url": "/api/v1/items/22061",
"internal": false,
"quality": "Epic",
"level": 60,
"requires": null,
"slot": "Feet",
"type": "Armor / Mail",
"binds": "Binds when picked up",
"classes": [],
"speed": null,
"stats": {
"Agility": 24,
"Stamina": 9
},
"effects": [
{
"name": "Increased Pet Damage +3%",
"on": "Equip",
"spell": 27206,
"text": "Increases damage dealt by your pet by 3%.",
"teaches": null
}
],
"set": "Beastmaster Armor",
"icon": "inv_boots_plate_07",
"text": null,
"armor": 266,
"damage": null,
"unique": null,
"name_line": null,
"sell": 31009,
"buy": 155045
}
}"Mage-Eye" BlunderbussA weapon: speed is its seconds between two attacks.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "item",
"id": "3041",
"name": "\"Mage-Eye\" Blunderbuss",
"class": null,
"origin": "classic",
"url": "/api/v1/items/3041",
"internal": false,
"quality": "Uncommon",
"level": 31,
"requires": 26,
"slot": "Ranged",
"type": "Weapon / Gun",
"binds": "Binds when equipped",
"classes": [],
"speed": 2.8,
"stats": {
"Agility": 4
},
"effects": [],
"set": null,
"icon": "inv_weapon_rifle_05",
"text": null,
"armor": null,
"damage": {
"min": 24,
"max": 46,
"per_second": 12.7
},
"unique": null,
"name_line": null,
"sell": 3769,
"buy": 18846
}
}A Jubling's Tiny HomeAn item that teaches a spell: its Learn effect names the spell and says what it does.
Teaches you how to summon this companion.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "item",
"id": "19450",
"name": "A Jubling's Tiny Home",
"class": null,
"origin": "classic",
"url": "/api/v1/items/19450",
"internal": false,
"quality": "Common",
"level": 35,
"requires": null,
"slot": null,
"type": "Miscellaneous / Pet",
"binds": null,
"classes": [],
"speed": null,
"stats": {},
"effects": [
{
"name": "Summon Jubling",
"on": "Learn",
"spell": 23811,
"text": "Right Click to summon and dismiss your Jubling.",
"teaches": 23811
}
],
"set": null,
"icon": "inv_egg_04",
"text": "Teaches you how to summon this companion.",
"armor": null,
"damage": null,
"unique": {
"name": null,
"count": 1
},
"name_line": null,
"sell": null,
"buy": null
}
}(DNT) MoonglaiveOne of Blizzard's own working records: internal is true, and listings leave it out unless asked.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "item",
"id": "260897",
"name": "(DNT) Moonglaive",
"class": null,
"origin": "forever",
"url": "/api/v1/items/260897",
"internal": true,
"quality": "Poor",
"level": 1,
"requires": 1,
"slot": "One-Hand",
"type": "Weapon / Sword",
"binds": null,
"classes": [],
"speed": 1.4,
"stats": {},
"effects": [],
"set": null,
"icon": null,
"text": null,
"armor": null,
"damage": {
"min": 0,
"max": 1,
"per_second": 0.8
},
"unique": null,
"name_line": null,
"sell": 3,
"buy": 18
}
}Zones
Every area of the world with its map and the zone it lies in.
GET /api/v1/zones List records
GET /api/v1/zones/{id} Read one record
Filters for this listing
sortstringDefault: name
namemapstring58 values in this reading
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
5 zone fields
mapnull / string- The map it is on (Eastern Kingdoms, Kalimdor, or an instance's own map), or null when the files name none.
parentinteger / null- The number of the area it lies in (a subzone's zone), or null for a zone of its own.
zonenull / string- The name of the zone it lies in, up the chain of parents, or null for a zone of its own.
levelinteger / null- 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).
factionnull / string- Whose side the game counts it on: Alliance, Horde, Both, or null for contested or neither.
Examples from this reading
Ahn'QirajA zone of its own: parent and zone are null.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "zone",
"id": "3428",
"name": "Ahn'Qiraj",
"class": null,
"origin": null,
"url": "/api/v1/zones/3428",
"internal": false,
"icon": null,
"text": null,
"map": "Ahn'Qiraj Temple",
"parent": null,
"zone": null,
"level": null,
"faction": null
}
}Abandoned TowerA subzone: parent is the number of the area it lies in, zone its name.
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "zone",
"id": "16610",
"name": "Abandoned Tower",
"class": null,
"origin": null,
"url": "/api/v1/zones/16610",
"internal": false,
"icon": null,
"text": null,
"map": "Darkspear Islands",
"parent": 16606,
"zone": "Darkspear Islands",
"level": null,
"faction": null
}
}Achievements
Achievements and the statistics the game keeps, with points and categories.
GET /api/v1/achievements List records
GET /api/v1/achievements/{id} Read one record
Filters for this listing
sortstringDefault: category
category,namecategorystring51 values in this reading
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
5 achievement fields
pointsinteger- The achievement points it gives; 0 for a statistic and for most of this client's rows.
categorystring- The category the game files it under (Dungeons and Raids, Quests, Statistics' Deaths …), or null.
factionnull / string- Alliance or Horde when only one side can earn it; null for both.
rewardnull / string- What the game says it rewards (a title, an item), or null.
statisticboolean- true for a counter the game keeps (kills, deaths, quests completed), not an achievement to earn; the client's table holds both.
Examples from this reading
Archmage Arugal kills (Shadowfang Keep)An achievement with points.
Archmage Arugal kills (Shadowfang Keep)
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "achievement",
"id": "1092",
"name": "Archmage Arugal kills (Shadowfang Keep)",
"class": null,
"origin": null,
"url": "/api/v1/achievements/1092",
"internal": false,
"icon": null,
"text": "Archmage Arugal kills (Shadowfang Keep)",
"points": 5,
"category": "Boss Kills",
"faction": null,
"reward": null,
"statistic": true
}
}Alterac Valley battlesA statistic the game keeps: statistic is true and points 0.
Alterac Valley battles
{
"build": "1.60.1.70630",
"read": "2026-10-27",
"license": "CC BY 4.0",
"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.",
"result": {
"kind": "achievement",
"id": "53",
"name": "Alterac Valley battles",
"class": null,
"origin": null,
"url": "/api/v1/achievements/53",
"internal": false,
"icon": "trade_engineering",
"text": "Alterac Valley battles",
"points": 0,
"category": "Battlegrounds",
"faction": null,
"reward": null,
"statistic": true
}
}Build changes
Differences between WoW Forever builds, newest first.
GET /api/v1/changes
To read the latest item changes:
curl --fail 'https://wowforever.news/api/v1/changes?kind=item&limit=5'kindstringtalent,spell,racial,item,zone,achievementbuildstring- the build a change was first seen in
limitinteger- 1 to 100, 50 when left out
1–100 · Default: 50
offsetinteger- records to skip
0–1,000,000 · Default: 0
Fields on a build change
seenstringbuild_fromstringbuild_tostringkindstringtalent,spell,racial,item,zone,achievementidstringnamestringwhatstringadded,removed,changedbeforenull / talent record / spell record / racial record / item record / zone record / achievement record- The record as it was; null when it was added.
afternull / talent record / spell record / racial record / item record / zone record / achievement record- The record as it is; null when it was removed.
before and after contain the record on each side of a change. before is null when added; after is null when removed.
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.
GET /api/v1/raid-buffs Everything at once; no query parameters
Fields of each entry of buffs
id- Never changes and is never given to another buff: saved plans and share links hold it.
order- Where a raid leader sees it among buffs of equal standing, 1 first: the order Guilds Forever's planner showed until 19 October 2026, kept when it switched to this API. A planner sorts by it once; the place in buffs stays fixed.
name- What it is called in a raid. A name several spells share says so (Demoralizing Shout or Roar); cast_as names each.
label- A short name, for a small tile.
icon- The game's name of its icon; the picture is at /icons/<icon>.png.
kind- buff (on players), debuff (on the enemy) or utility (summons, a battle resurrection, a cast on one ally).
scope- raid: one caster covers the whole raid; party: the caster's own party.
from- Who brings it, as class:spec (druid:feral_tank), with * for every spec of the class. The class and spec ids are Guilds Forever's planner's.
record- The address of the record whose tooltip stands for it: the highest rank of its spell, or a talent's record when the buff is the talent's own and no spell of it is trained higher (Leader of the Pack).
rests_on- The addresses of every record what is written here rests on: when the game changes one, this buff is to be checked again.
talents- The addresses of the talents any one of which gives it: a player's own talents count before a guess from the spec. [] when no talent is needed.
cast_as- When the name is shared, what each provider casts, keyed as in from: its name, its own icon (null when it is the buff's) and its record (null when it is a choice of several, as Fire, Frost or Shadow). {} otherwise.
hunter_pet- A hunter brings it only with this pet out (an id of hunter_pets); null otherwise.
helps- Whom it feeds, of melee, ranged, caster, healer and tank. null when it helps everyone.
mana_only- true when it does nothing for a player without mana.
wants- For a party buff, the kinds of player a party needs it for, of the same five; [] for nobody unless asked. null when not said.
not_with- The ids of other buffs it does not stack with inside one party.
seat- One for each player of the class: group (curse or judge) and order. Each further warlock (or paladin, for judgements) brings the next in the order. null otherwise.
slot- What a player gives up for it when only one of a kind runs at a time: aura (a paladin's one aura), or earth, fire, water or air (a shaman's one totem of each element). null otherwise.
must- true when a raid should have it: counted as missing when nobody brings it.
situational- true when only some fights need it: never counted as missing.
bonus- true when it counts when someone brings it but is never missing (a hunter's pet's buff).
uncertain- The id of the open question it depends on (see uncertain), or null.
confidence- How sure what is written is: high, medium or low.
source- Where it was learned: an id of sources.
note- What a raid leader needs to know of it, in a sentence or a few.
being_checked- Added by the API: the addresses of the records it rests on that read otherwise now (name, rank, whether it is its spell's highest, text, ranks' texts, tooltip lines) than in the build it was last checked against (checked_against), or that are gone. While the list is not empty it is being checked; [] when nothing changed.
Parts of the answer
knowledge- The version of what is written here: the day it last changed. It changes when we change it, not with the build.
checked_against- The build every piece was last checked against (being_checked says what changed since).
taken_over- Where it was first written, and what was changed when we took it over.
buffs- Every buff, debuff and raid tool, in a fixed order: one is only ever added at the end, so a place in the list keeps its meaning.
blessings- The ids of the paladin Blessings a player may be given, one each: whoever casts it, a second one replaces the first.
hunter_pets- The pets a planner tells apart, in a fixed order: id, label, ability, the buff it brings (null for none), what it gives, the record of its ability, rests_on and being_checked (as a buff's).
resistances- For each school, who raises its resistance: class, spell, the buff it is, whether it is an aura (a paladin's one aura) and the spell's record. An empty list for a school nobody raises. Its buff's being_checked covers it.
uncertain- The open questions a buff can depend on, by id: what is not confirmed in WoW Forever, and how sure the guess is.
sources- Where what is written was learned, by id.
fields- What each part and field means: this table.
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.
GET /api/v1/class-tools Everything at once; no query parameters
Fields of each entry of tools
job- The id of the job (of jobs, or of cooldown_kinds for a cooldown).
class- The class that has it.
spell- Its name, as a raid calls it.
record- The address of the spell's record, at its highest rank.
rests_on- The addresses of every record what is written here rests on: when the game changes one, this entry is to be checked again.
quote- The words of its tooltip that show it does the job, as the record's text has them.
specs- Only these specs of the class have it (a talent gives it, or it needs a shield, which only Protection carries); null when every spec does.
talent- The address of the talent that gives it: a player's own talents decide, a spec alone is a guess. null when no talent is needed.
pet- The warlock's demon that must be out for it (Felhunter, Voidwalker): it counts, but as a guess. null otherwise.
note- What is said beside it (needs a shield, before the pull). null when nothing.
being_checked- Added by the API: the addresses of the records it rests on that read otherwise now (name, rank, whether it is its spell's highest, text, ranks' texts, tooltip lines) than in the build it was last checked against (checked_against), or that are gone. While the list is not empty it is being checked; [] when nothing changed.
Fields of each entry of cooldowns
job- The id of the job (of jobs, or of cooldown_kinds for a cooldown).
class- The class that has it.
spell- Its name, as a raid calls it.
record- The address of the spell's record, at its highest rank.
rests_on- The addresses of every record what is written here rests on: when the game changes one, this entry is to be checked again.
quote- The words of its tooltip that show it does the job, as the record's text has them.
specs- Only these specs of the class have it (a talent gives it, or it needs a shield, which only Protection carries); null when every spec does.
talent- The address of the talent that gives it: a player's own talents decide, a spec alone is a guess. null when no talent is needed.
pet- The warlock's demon that must be out for it (Felhunter, Voidwalker): it counts, but as a guess. null otherwise.
note- What is said beside it (needs a shield, before the pull). null when nothing.
being_checked- Added by the API: the addresses of the records it rests on that read otherwise now (name, rank, whether it is its spell's highest, text, ranks' texts, tooltip lines) than in the build it was last checked against (checked_against), or that are gone. While the list is not empty it is being checked; [] when nothing changed.
Parts of the answer
knowledge- The version of what is written here: the day it last changed. It changes when we change it, not with the build.
checked_against- The build every piece was last checked against (being_checked says what changed since).
taken_over- Where it was first written, and what was changed when we took it over.
jobs- The jobs a raid needs covered, in a fixed order, each with its id (never changed), a short label and a title.
cooldown_kinds- The two kinds of cooldown a raid plans, each with its id (never changed), a label and what counts as one.
tools- Who can do each job, one entry for each class and spell, in a fixed order (a player is shown with the first that fits). Counts only: how many a fight needs is not said here.
cooldowns- Who has a healing cooldown or a defensive of their own, one entry for each class and spell, in a fixed order (a player is shown with the first that fits: a frost mage with Ice Block, another with a Ward).
fields- What each part and field means: this table.
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.
GET /api/v1/ability-notes Everything at once; no query parameters
Fields of each entry of talents
record- The address of the talent or class spell the note is about, a spell's at its highest rank. null for the few the API holds no record of: skills every class shares (Block, Dodge, Languages, Shoot), a hunter's pet's Sonic Blast, Omen of Clarity, and the Arcane Wrath talent, which this build holds as a spell only.
name- Its name.
class- The class that has it.
tree- A talent's tree; Baseline for a spell every spec has, Pet for a hunter's pet's ability.
modifies- The spells and talents it changes, each {name, record}, another class's too (Dampen Magic in a heal's note); record is null for one the API holds no record of.
category- What it is for: damage, healing, defense, threat, utility, mobility, cooldown, rage or pvp.
roles- Whom it is for, of melee, ranged, caster, healer and tank.
raid- How much it matters in a raid: core, good, situational, low or none.
uses- What it takes from others to work better, each {kind, how, detail, domains, certainty, quote}: kind, the stat or effect (mana, crit, armor_reduction); how, the way it is used (scales, cost, trigger, window, limit, protects); detail, in a sentence; domains, the kinds of hit it concerns (melee, ranged, healing, or a school); certainty: text (its tooltip says so, and quote holds the words), open (a guess still to be checked) or unconfirmed (taken from how such things are assumed to work, not confirmed in WoW Forever); quote: null unless certainty is text.
gives- What it gives others, each {kind, reach, detail, amount, domains, certainty, quote}: reach, who gets it (raid, party, one_ally, enemy_target, self); amount, {value, unit} with unit flat or %, or null; certainty: text (its tooltip says so, and quote holds the words), open (a guess still to be checked) or unconfirmed (taken from how such things are assumed to work, not confirmed in WoW Forever); quote: null unless certainty is text.
not_with- What it does not stack with or add nothing beside, each {kind, from, why, domains, certainty, quote}: from, the spells or talents, each {name, record}; why, in a sentence; certainty: text (its tooltip says so, and quote holds the words), open (a guess still to be checked) or unconfirmed (taken from how such things are assumed to work, not confirmed in WoW Forever); quote: null unless certainty is text.
numbers- Its numbers as its tooltip gives them, each {label, value, unit}.
analysis- What it does for a raid, in a few sentences.
open- What is still open about it, each a question in words or rule:<id>, a shared rule of rules.
status- draft: written from the tooltips and not yet confirmed in the game.
rests_on- The addresses of every record the note rests on (its own, and what it changes or does not stack with): when the game changes one, the note is to be checked again.
being_checked- Added by the API: the addresses of the records it rests on that read otherwise now (name, rank, whether it is its spell's highest, text, ranks' texts, tooltip lines) than in the build it was last checked against (checked_against), or that are gone. While the list is not empty it is being checked; [] when nothing changed.
Fields of each entry of spells
record- The address of the talent or class spell the note is about, a spell's at its highest rank. null for the few the API holds no record of: skills every class shares (Block, Dodge, Languages, Shoot), a hunter's pet's Sonic Blast, Omen of Clarity, and the Arcane Wrath talent, which this build holds as a spell only.
name- Its name.
class- The class that has it.
tree- A talent's tree; Baseline for a spell every spec has, Pet for a hunter's pet's ability.
modifies- The spells and talents it changes, each {name, record}, another class's too (Dampen Magic in a heal's note); record is null for one the API holds no record of.
category- What it is for: damage, healing, defense, threat, utility, mobility, cooldown, rage or pvp.
roles- Whom it is for, of melee, ranged, caster, healer and tank.
raid- How much it matters in a raid: core, good, situational, low or none.
uses- What it takes from others to work better, each {kind, how, detail, domains, certainty, quote}: kind, the stat or effect (mana, crit, armor_reduction); how, the way it is used (scales, cost, trigger, window, limit, protects); detail, in a sentence; domains, the kinds of hit it concerns (melee, ranged, healing, or a school); certainty: text (its tooltip says so, and quote holds the words), open (a guess still to be checked) or unconfirmed (taken from how such things are assumed to work, not confirmed in WoW Forever); quote: null unless certainty is text.
gives- What it gives others, each {kind, reach, detail, amount, domains, certainty, quote}: reach, who gets it (raid, party, one_ally, enemy_target, self); amount, {value, unit} with unit flat or %, or null; certainty: text (its tooltip says so, and quote holds the words), open (a guess still to be checked) or unconfirmed (taken from how such things are assumed to work, not confirmed in WoW Forever); quote: null unless certainty is text.
not_with- What it does not stack with or add nothing beside, each {kind, from, why, domains, certainty, quote}: from, the spells or talents, each {name, record}; why, in a sentence; certainty: text (its tooltip says so, and quote holds the words), open (a guess still to be checked) or unconfirmed (taken from how such things are assumed to work, not confirmed in WoW Forever); quote: null unless certainty is text.
numbers- Its numbers as its tooltip gives them, each {label, value, unit}.
analysis- What it does for a raid, in a few sentences.
open- What is still open about it, each a question in words or rule:<id>, a shared rule of rules.
status- draft: written from the tooltips and not yet confirmed in the game.
rests_on- The addresses of every record the note rests on (its own, and what it changes or does not stack with): when the game changes one, the note is to be checked again.
being_checked- Added by the API: the addresses of the records it rests on that read otherwise now (name, rank, whether it is its spell's highest, text, ranks' texts, tooltip lines) than in the build it was last checked against (checked_against), or that are gone. While the list is not empty it is being checked; [] when nothing changed.
Fields of each entry of fight_talents
id- Never changes and is never given to another.
needs- The state the enemy must be able to be in for the talent to do anything: bleed or freeze.
class- The class that has the talent.
specs- The specs that are taken to have it when a player's own talents are not known.
talent- The talent's name.
record- The address of the talent's record.
quote- The words of its text that show what it needs, as the record's text has them.
rests_on- The address of the talent's record: when the game changes it, this is to be checked again.
being_checked- Added by the API: the addresses of the records it rests on that read otherwise now (name, rank, whether it is its spell's highest, text, ranks' texts, tooltip lines) than in the build it was last checked against (checked_against), or that are gone. While the list is not empty it is being checked; [] when nothing changed.
Parts of the answer
knowledge- The version of what is written here: the day it last changed. It changes when we change it, not with the build.
checked_against- The build every piece was last checked against (being_checked says what changed since).
taken_over- Where it was first written, and what was changed when we took it over.
talents- A note for each talent, class by class and tree by tree.
spells- A note for each class spell (each name once, at its highest rank) and each hunter's pet's ability.
rules- The shared rules the notes cite as rule:<id>, by id (never changed): question, what is assumed until it is known (assume), status (unconfirmed, unknown, announced, observed or tooltip), source, the classes it concerns, and the kinds and domains of claims it blocks, supports or depends on.
fight_talents- The talents a fight makes useless when its enemy can never be in a state (bleeding, frozen), in a fixed order.
fields- What each part and field means: this table.
Index, specification and evidence
These endpoints take no query parameters.
- API index (JSON)GET /api/v1The current build, counts, filters, field meanings and known limits.
Response fields
namestringversionintegerbuildstringreadstringlicensestringlicense_urlstringlicense_coversstringtermsstringcreditstringproductstringbuild_namestringcountsobjectinternalobjectchanges_recordedintegerlimitsobjectaddressesarrayaboutobjectfiltersobjectfieldsobjectnotesarray
- OpenAPI specification (JSON)GET /api/v1/openapi.jsonThe 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.
- Real examples (JSON)GET /api/v1/examplesReal records chosen by rule, one for each case a reader needs to see, each with the address that returns it.
Response fields
buildstringreadstringlicensestringtermsstringchosenstringexamplesobject
- Data evidence (JSON)GET /api/v1/how-we-knowWhat 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.
Response fields
buildstring- The build of the game these records were read from.
readstring- The day we read it from the game's files.
licensestringtermsstringproductstring- The name Blizzard's version server lists the build under: wow_classic_beta is the beta's, wowf the one a build named Retail was first listed under. When two of them hold WoW Forever, this says which one these records were read from.
build_namestring- What Blizzard calls the build itself: a beta build's name ends in ForeverBeta.
readerinteger- The version of our reading rules that read it: a number raised with every correction to how we turn the game's files into records. Two readings are compared as a change in the game only when the same version made both.
layoutinteger- The version of the shape our copy of the data is kept in: a number raised when a record's fields change.
kindsobjectmeaningobjectsecond_readingstring
How to read a response
Listings return results; one record returns result. Both carry the build, read date and credit terms.
Fields on a listing response
buildstring- The build of the game these records were read from.
readstring- The day we read it from the game's files.
licensestringtermsstringtotalinteger- How many records answer the question.
limitintegeroffsetintegernextstring / null- The address of the next page of the same question; null after the last.
resultsarray
How to read every page
Follow the response’s next address, keeping your filters. It starts with /api/v1/, so resolve it against https://wowforever.news. Stop when next is null. If the build or read date changes during your requests, start again to avoid combining readings.
Unknowns and client-only evidence
null means a field has no value for that record. A ? marks a number we could not resolve from the files. Talent ranks are in rank_texts; each rank of a class spell is a separate record. An item’s stats maps stat names to amounts; effects lists its tooltip effects, including any spell it teaches.
Client data alone does not establish that an ability is live or an item is obtainable. Read How we know before treating a record as a confirmed gameplay fact.
Limits, answers and caching
Listings return 50 records by default. Set limit from 1 to 100, and offset to skip records, or follow next.
The API allows 120 requests per minute per address. Successful answers carry an ETag: send it back as If-None-Match on a later request. An answer may be kept for 3,600 seconds; respect the returned cache headers.
Answers and refusals
- 200
The answer
Listings carry
results, one record carriesresult; both name the build and read date and carry anETag. - 304
Not changed
You sent the
ETagback asIf-None-Matchand nothing changed. No body; keep your copy. - 400
Refused, with the reason
A parameter the address does not take, one given twice or empty, or a value that is not allowed. The
errorfield says which. - 404
Not found
No such address, or no such record.
- 429
Too many requests
More than 120 requests in a minute from one address. Wait for
Retry-Afterbefore asking again. - 503
Being rebuilt
Our copy of the game data is being rebuilt or is briefly unavailable. Wait for
Retry-After; nothing in the answer may be kept.
Refusals carry ok: false and a JSON error field; parameters that are unknown, repeated or empty are rejected. 429 and 503 also give retry_after in seconds. Do not cache refusals.
What changed in the API
New capabilities, fixes and each game build we read, newest first.
A game build read: 27 Oct 2026 · Build 1.60.1.70630 · Current build
158 records differ from build 1.60.1.70532 (added, removed or changed): 99 spells, 31 talents, 27 items, 1 zone. Each is listed at
/api/v1/changes.A fix: 20 Oct 2026 · #53
The paladin Vengeance note counts only melee crit as feeding it: whether a heal's or a Holy spell's crit counts is an open question of the note, so a raid's Moonkin Form no longer marks it as covered.
New in the API: 19 Oct 2026 · #51
Each buff of /api/v1/raid-buffs carries order, the order raid leaders saw in Guilds Forever's planner, so a planner's list keeps it while the list itself stays in its fixed order. The 13 buffs credited to Talents Forever were checked against our records of build 1.60.1.70450 and are credited to Forever News.
New in the API: 19 Oct 2026 · #49
Nearly every icon of the game is at /icons/<name>.png, not only those our records name: 30,151 pictures read from the game's own files. The 259 whose file names hold a space or another such sign have no address.
A fix: 19 Oct 2026 · #47
Arcane Wrath is a Mage talent (Arcane, row 4, column 4), as the game shows it: its node belongs to no tab's group, so the reader now places such a node by its position. Thorns says its damage (it said ?), a hunter's shots and stings and Summon Hawk say Instant, and the Trueshot Aura buff points at its highest rank, as every other buff does. The build is read again for it; nothing is recorded as a game change.
New in the API: 18 Oct 2026 · #45
Three addresses of what a raid planner needs to know: raid buffs, class tools and notes for every talent and class spell, each marking what a new build changed under it. Spells and talents carry their tooltip lines in the game's wording, a spell its highest rank and a demon's ability its demon; the warlock's demons' abilities and 81 more class spells were added, and icons come from our own address. Our copy of the data moved to a new layout, and the API answered 503 while it was rebuilt.
New in the API: 16 Oct 2026 · #34
Spells, talents and items got their own pages. Our copy of the data moved to a new layout, and the API answered 503 while it was rebuilt.
A game build read: 16 Oct 2026 · Build 1.60.1.70425
469 records differ from build 1.60.1.70374 (added, removed or changed): 268 items, 130 spells, 56 talents, 15 racials. Each is listed at
/api/v1/changes.A fix: 14 Oct 2026 · #29
A burst of callers is answered, and the index offers only filter values that list something.
New in the API: 14 Oct 2026 · #24
The API describes itself at three addresses: the OpenAPI document, real examples and how we know.
New in the API: 13 Oct 2026 · #22
Talents come in the order a player reads a tree, and the index says what every field means.
A fix: 13 Oct 2026 · #17
A search with an invisible character is refused, and an over-long request is still answered.
New in the API: 13 Oct 2026 · #16
One shape for every record, for WoW Forever alone.
New in the API: 13 Oct 2026 · #10
Licensed CC BY 4.0, with each caller counted by its own address.
New in the API: 13 Oct 2026 · #9
The public data API opened: talents, class spells, racials and items read from the game's files.
Credit the data
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.
The licence covers Forever News's compilation and classification. World of Warcraft names and texts belong to Blizzard Entertainment.