Skip to main content

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

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

const charmander = Dex.species.get('Charmander');
console.log(charmander.evos); // ['Charmeleon']

const charmeleon = Dex.species.get('Charmeleon');
console.log(charmeleon.evoLevel); // 16

Alternate Formes

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 }

Regional Formes

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']

Gigantamax Formes

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

Multiple Formes

// 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

Build docs developers (and LLMs) love