Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/smogon/pokemon-showdown/llms.txt

Use this file to discover all available pages before exploring further.

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