Overview
The Species API provides access to Pokémon species data including base stats, types, abilities, evolution chains, and alternate formes.
Basic Usage
Get a Species
Retrieve species information using Dex.species.get():
const { Dex } = require ( 'pokemon-showdown' );
const pikachu = Dex . species . get ( 'Pikachu' );
console . log ( pikachu . name ); // 'Pikachu'
console . log ( pikachu . types ); // ['Electric']
console . log ( pikachu . baseStats );
// { hp: 35, atk: 55, def: 40, spa: 50, spd: 50, spe: 90 }
Species names are case-insensitive and whitespace is ignored.
// All of these work
Dex . species . get ( 'pikachu' );
Dex . species . get ( 'Pikachu' );
Dex . species . get ( 'PIKACHU' );
Dex . species . get ( 'P i k a c h u' );
Species Properties
Basic Properties
Abilities
Physical Data
Gender Ratio
const bulbasaur = Dex . species . get ( 'Bulbasaur' );
console . log ( bulbasaur . num ); // 1
console . log ( bulbasaur . name ); // 'Bulbasaur'
console . log ( bulbasaur . types ); // ['Grass', 'Poison']
console . log ( bulbasaur . baseStats );
// { hp: 45, atk: 49, def: 49, spa: 65, spd: 65, spe: 45 }
Evolution Data
Evolution Chains
const ivysaur = Dex . species . get ( 'Ivysaur' );
console . log ( ivysaur . prevo ); // 'Bulbasaur'
console . log ( ivysaur . evoLevel ); // 16
console . log ( ivysaur . evos ); // ['Venusaur']
const venusaur = Dex . species . get ( 'Venusaur' );
console . log ( venusaur . prevo ); // 'Ivysaur'
console . log ( venusaur . evoLevel ); // 32
console . log ( venusaur . evos ); // undefined (fully evolved)
Evolution Methods
Level Up
Evolution Stone
Friendship
Trade
const charmander = Dex . species . get ( 'Charmander' );
console . log ( charmander . evos ); // ['Charmeleon']
const charmeleon = Dex . species . get ( 'Charmeleon' );
console . log ( charmeleon . evoLevel ); // 16
Mega Evolutions
const venusaur = Dex . species . get ( 'Venusaur' );
console . log ( venusaur . otherFormes ); // ['Venusaur-Mega']
console . log ( venusaur . formeOrder );
// ['Venusaur', 'Venusaur-Mega']
const venusaurMega = Dex . species . get ( 'Venusaur-Mega' );
console . log ( venusaurMega . baseSpecies ); // 'Venusaur'
console . log ( venusaurMega . forme ); // 'Mega'
console . log ( venusaurMega . requiredItem ); // 'Venusaurite'
console . log ( venusaurMega . baseStats );
// { hp: 80, atk: 100, def: 123, spa: 122, spd: 120, spe: 80 }
const rattata = Dex . species . get ( 'Rattata' );
console . log ( rattata . otherFormes ); // ['Rattata-Alola']
const rattataAlola = Dex . species . get ( 'Rattata-Alola' );
console . log ( rattataAlola . baseSpecies ); // 'Rattata'
console . log ( rattataAlola . forme ); // 'Alola'
console . log ( rattataAlola . types ); // ['Dark', 'Normal']
// Compare to original
const rattataKanto = Dex . species . get ( 'Rattata' );
console . log ( rattataKanto . types ); // ['Normal']
const venusaur = Dex . species . get ( 'Venusaur' );
console . log ( venusaur . canGigantamax ); // 'G-Max Vine Lash'
const venusaurGmax = Dex . species . get ( 'Venusaur-Gmax' );
console . log ( venusaurGmax . baseSpecies ); // 'Venusaur'
console . log ( venusaurGmax . forme ); // 'Gmax'
console . log ( venusaurGmax . changesFrom ); // 'Venusaur'
List All Species
Retrieve all species data:
const allSpecies = Dex . species . all ();
console . log ( allSpecies . length ); // 1000+ species
console . log ( allSpecies [ 0 ]. name ); // 'Bulbasaur'
// Filter to standard species only
const standardSpecies = allSpecies . filter ( s =>
s . exists && ! s . isNonstandard
);
The .all() method includes nonstandard data from CAP, past generations, and unreleased content. Always check exists and isNonstandard properties.
Generation-Specific Data
Access species data from previous generations:
// Gen 1 data
const gen1Dex = Dex . mod ( 'gen1' );
const gen1Pikachu = gen1Dex . species . get ( 'Pikachu' );
console . log ( gen1Pikachu . types ); // ['Electric']
// Gen 1 has no abilities or held items
console . log ( gen1Pikachu . abilities ); // undefined
// Gen 4 added evolutions
const gen3Dex = Dex . mod ( 'gen3' );
const gen3Pikachu = gen3Dex . species . get ( 'Pikachu' );
console . log ( gen3Pikachu . prevo ); // undefined (Pichu not in Gen 3)
const gen4Dex = Dex . mod ( 'gen4' );
const gen4Pikachu = gen4Dex . species . get ( 'Pikachu' );
console . log ( gen4Pikachu . prevo ); // 'Pichu'
Checking Species Existence
Validate species before using:
const missingno = Dex . species . get ( 'Missingno' );
console . log ( missingno . exists ); // false
console . log ( missingno . name ); // 'Missingno' (returned anyway)
const tomohawk = Dex . species . get ( 'Tomohawk' );
console . log ( tomohawk . exists ); // true
console . log ( tomohawk . isNonstandard ); // 'CAP'
const pikachu = Dex . species . get ( 'Pikachu' );
console . log ( pikachu . exists ); // true
console . log ( pikachu . isNonstandard ); // null (standard)
Special Cases
// Charizard has two Mega Evolutions
const charizard = Dex . species . get ( 'Charizard' );
console . log ( charizard . otherFormes );
// ['Charizard-Mega-X', 'Charizard-Mega-Y']
const charizardX = Dex . species . get ( 'Charizard-Mega-X' );
console . log ( charizardX . types ); // ['Fire', 'Dragon']
console . log ( charizardX . requiredItem ); // 'Charizardite X'
const charizardY = Dex . species . get ( 'Charizard-Mega-Y' );
console . log ( charizardY . types ); // ['Fire', 'Flying']
console . log ( charizardY . requiredItem ); // 'Charizardite Y'
Cosplay Pikachu
const pikachu = Dex . species . get ( 'Pikachu' );
console . log ( pikachu . otherFormes . length ); // Multiple cosplay formes
const pikachuRockStar = Dex . species . get ( 'Pikachu-Rock-Star' );
console . log ( pikachuRockStar . baseSpecies ); // 'Pikachu'
console . log ( pikachuRockStar . forme ); // 'Rock-Star'
console . log ( pikachuRockStar . gender ); // 'F'
Practical Examples
Get All Dragon Types
const dragonTypes = Dex . species . all ()
. filter ( s => s . exists && ! s . isNonstandard )
. filter ( s => s . types . includes ( 'Dragon' ));
console . log ( dragonTypes . map ( s => s . name ));
// ['Dratini', 'Dragonair', 'Dragonite', ...]
Find Fastest Pokémon
const allSpecies = Dex . species . all ()
. filter ( s => s . exists && ! s . isNonstandard );
const fastest = allSpecies . reduce (( max , s ) =>
s . baseStats . spe > max . baseStats . spe ? s : max
);
console . log ( fastest . name ); // Species with highest base Speed
console . log ( fastest . baseStats . spe );
Check Type Combinations
const species = Dex . species . get ( 'Charizard-Mega-X' );
const hasType = ( types , type ) => types . includes ( type );
if ( hasType ( species . types , 'Fire' ) && hasType ( species . types , 'Dragon' )) {
console . log ( ` ${ species . name } is Fire/Dragon type` );
}
Moves API Access move data and properties
Abilities API Query ability information
Items API Retrieve held items data
Formats Data Get format-specific restrictions