TapIn Pokémon

Data types

The shapes behind the API: trainers, Pokémon, battles, gyms, tournaments and flyovers.

Generated from net/protocol.ts, engine/types.ts and data/types.ts. Optional fields end in ?.

Protocol

ConstantValue
POKEMON_API_PREFIX"/pokemon-api"
POKEMON_WS_PATH"/pokemon-ws"
STARTER_IDS[1, 4, 7, 152, 155, 158]
PARTY_SIZE6
TOURNAMENT_TEAM_SIZE3
TOURNAMENT_LEVEL50
TURN_SECONDS10
CHALLENGE_TTL_SECONDS30

BadgeView

FieldType
communityIdstring
communityHandlestring
communityNamestring
badgeNamestring
typePokemonType
earnedAtnumber

TrainerSummary

FieldType
userIdstring
usernamestring
displayNamestring
avatarUrlstring | null
liveIdentitystring | null
leadSpeciesIdnumber | null
leadShinyboolean
trainerLevelnumber
pointsnumber
badgesBadgeView[]
dexSeennumber
dexCaughtnumber
onlineboolean

PendingDecision

| { id: string; kind: "learn-move"; uid: string; move: string } | { id: string; kind: "evolution"; uid: string; to: number }

TrainerSettings

FieldType
encountersboolean
soundboolean
animationsboolean

TrainerState

Extends TrainerSummary.

FieldType
moneynumber
partyOwnedPokemon[]
boxCountnumber
inventoryPartial<Record<ItemId, number>>
pendingPendingDecision[]
settingsTrainerSettings
createdAtnumber
timeOfDayTimeOfDay

MeResponse

{ needsStarter: true; starters: number[] } | { needsStarter: false; trainer: TrainerState }

PokedexEntryState

FieldType
speciesIdnumber
seenboolean
caughtboolean
firstCaughtAtnumber | null

WildPoolEntry

FieldType
speciesIdnumber
rarityRarity
minLevelnumber
maxLevelnumber

GymView

FieldType
communityIdstring
communityHandlestring
communityNamestring
leaderUserIdstring | null
leaderNamestring | null
typePokemonType
badgeNamestring
wildPoolWildPoolEntry[]
leaderTeamArray<{ speciesId: number; level: number }>
youHaveBadgeboolean
badgeHoldersnumber

LeaderboardEntry

FieldType
ranknumber
trainerTrainerSummary

ChallengeView

FieldType
challengeIdstring
kind"pvp" | "gym"
fromTrainerSummary
toTrainerSummary
communityHandlestring | null
expiresAtnumber

TradeStatus

"pending" | "accepted" | "declined" | "cancelled" | "expired"

TradeView

FieldType
tradeIdstring
fromTrainerSummary
toTrainerSummary
offerOwnedPokemon
requestOwnedPokemon | null
statusTradeStatus
createdAtnumber

BattleRewards

FieldType
moneynumber
pointsnumber
expGainsArray<{ uid: string; expGained: number; levelsGained: number[]; learnedMoves: string[]; }>
pendingPendingDecision[]
caughtOwnedPokemon | null
caughtToBoxboolean
newDexEntriesnumber[]
badgeBadgeView | null

TournamentPhase

"registration" | "running" | "final" | "finished" | "cancelled"

TournamentMatchView

FieldType
matchIdstring
roundnumber
astring | null
bstring | null
winnerstring | null
battleIdstring | null

StageRequestStatus

"pending" | "invited" | "declined"

TournamentView

FieldType
tournamentIdstring
communityHandlestring
communityNamestring
hostTrainerSummary
phaseTournamentPhase
rules{ teamSize: number; level: number; turnSeconds: number }
entrantsTrainerSummary[]
matchesTournamentMatchView[]
championstring | null
finalBattleIdstring | null
finalWinnerstring | null
stage{ userId: string; status: StageRequestStatus } | null
createdAtnumber

ClientContext

FieldType
pathstring
communityHandlestring | null
live{ communityHandle: string; isHost: boolean } | null
visibleboolean
localHournumber

FlyoverKind

"legendary" | "team-rocket"

FlyoverView

FieldType
flyoverIdstring
kindFlyoverKind
speciesIdnumber | null
path"left-to-right" | "right-to-left" | "arc"
durationMsnumber
expiresAtnumber
stake{ item: ItemId; quantity: number } | null

Pokémon and battles

SideIndex

0 | 1

Dvs

FieldType
attacknumber
defensenumber
specialnumber
speednumber

StatExp

Record<StatExpKey, number>

Stats

Record<BaseStat, number>

MoveSlot

FieldType
moveMoveSlug
ppnumber
maxPpnumber

OwnedPokemon

FieldType
uidstring
speciesIdnumber
nicknamestring | null
levelnumber
expnumber
dvsDvs
statExpStatExp
movesMoveSlot[]
hpnumber
statusMajorStatus | null
shinyboolean
ownerIdstring
originalTrainerIdstring
originalTrainerNamestring
caughtAtnumber
ballBallId
metLocationstring
metLevelnumber
friendshipnumber
heldItemHeldItemId | BerryId | null
genderGender | null
metTimeOfDayTimeOfDay | null

BattleKind

"wild" | "pvp" | "gym" | "tournament" | "legendary-event" | "team-rocket"

BattleRules

FieldType
allowItemsboolean
allowRunboolean
allowCatchboolean
turnSecondsnumber | null
levelScalenumber | null
maxTurnsnumber | null
awardExpboolean

BattleSideInit

FieldType
trainerIdstring | null
namestring
partyOwnedPokemon[]
controller"human" | "ai"
inventoryPartial<Record<ItemId, number>>
aiSkill"wild" | "trainer" | "leader"

CreateBattleInput

FieldType
battleIdstring
kindBattleKind
seednumber
rulesBattleRules
sides[BattleSideInit, BattleSideInit]
locationstring
timeOfDayTimeOfDay

BattleAction

One of:

  • { kind: "move"; slot: number }
  • { kind: "switch"; partyIndex: number }
  • { kind: "item"; item: ItemId; partyIndex: number | null; moveIndex?: number | null }
  • { kind: "run" }
  • { kind: "forfeit" }

Effectiveness

0 | 0.25 | 0.5 | 1 | 2 | 4

BattleEvent

One of:

  • { kind: "text"; text: string }
  • { kind: "send-out"; side: SideIndex; partyIndex: number; pokemon: BattlePokemonView }
  • { kind: "withdraw"; side: SideIndex }
  • { kind: "use-move"; side: SideIndex; move: MoveSlug; moveName: string; moveType: PokemonType }
  • { kind: "miss"; side: SideIndex }
  • { kind: "damage"; side: SideIndex; amount: number; hp: number; maxHp: number; effectiveness: Effectiveness; critical: boolean; source: "move" | "status" | "recoil" | "confusion" | "leech-seed" | "trap" | "struggle"; }
  • { kind: "heal"; side: SideIndex; amount: number; hp: number; maxHp: number }
  • { kind: "status"; side: SideIndex; status: MajorStatus | null }
  • { kind: "volatile"; side: SideIndex; effect: string; active: boolean }
  • { kind: "stat-stage"; side: SideIndex; stat: StageStat; change: number; stage: number }
  • { kind: "faint"; side: SideIndex; partyIndex: number }
  • { kind: "item"; side: SideIndex; item: ItemId; partyIndex: number | null }
  • { kind: "ball-throw"; ball: BallId; shakes: 0 | 1 | 2 | 3; caught: boolean }
  • { kind: "run"; side: SideIndex; success: boolean }
  • { kind: "transform"; side: SideIndex; speciesId: number }
  • { kind: "weather"; weather: Weather | null }
  • { kind: "held-item"; side: SideIndex; item: HeldItemId | BerryId; consumed: boolean }
  • { kind: "turn"; turn: number }
  • { kind: "end"; result: BattleResult }

BattlePokemonView

FieldType
uidstring
speciesIdnumber
namestring
levelnumber
hpnumber
maxHpnumber
statusMajorStatus | null
typesPokemonType[]
shinyboolean
faintedboolean
stagesPartial<Record<StageStat, number>>
volatilestring[]
transformedIntonumber | null
genderGender | null

OwnBattlePokemonView

Extends BattlePokemonView.

FieldType
movesArray<MoveSlot & { disabled: boolean }>
statsStats
expnumber
heldItemHeldItemId | BerryId | null
friendshipnumber

PartyEntryView

FieldType
speciesIdnumber
levelnumber
hpnumber
maxHpnumber
statusMajorStatus | null
faintedboolean

SideView

FieldType
trainerIdstring | null
namestring
isWildboolean
activeIndexnumber
activeBattlePokemonView | null
partyArray<PartyEntryView | null>

OwnSideView

Extends Omit<SideView, "active">.

FieldType
activeOwnBattlePokemonView | null
partyArray<PartyEntryView & { uid: string; name: string }>
inventoryPartial<Record<ItemId, number>>

BattlePhase

"choose" | "switch-required" | "waiting" | "ended"

BattleResult

FieldType
winnerSideIndex | null
reason"faint" | "run" | "catch" | "forfeit" | "timeout" | "turn-limit" | "flee"
caughtPartyIndexnumber | null

BattleView

FieldType
battleIdstring
kindBattleKind
locationstring
turnnumber
phaseBattlePhase
youSideIndex
selfOwnSideView
opponentSideView
legalActionsBattleAction[]
weatherWeather | null
timeOfDayTimeOfDay
rulesBattleRules
resultBattleResult | null

ExpGainOutcome

FieldType
pokemonOwnedPokemon
expGainednumber
levelsGainednumber[]
learnedMovesMoveSlug[]
pendingMovesMoveSlug[]
evolutionnumber | null

Game data

ConstantValue
POKEMON_TYPES[ "normal", "fire", "water", "electric", "grass", "ice", "fighting", "poison", "ground", "flying", "psychic", "bug", "rock", "ghost", "dragon", "dark", "steel", ]
KANTO_MAX_ID151
JOHTO_MAX_ID251
BALL_IDS[ "poke-ball", "great-ball", "ultra-ball", "master-ball", "fast-ball", "level-ball", "lure-ball", "heavy-ball", "love-ball", "friend-ball", "moon-ball", ]
EVOLUTION_STONES[ "fire-stone", "water-stone", "thunder-stone", "leaf-stone", "moon-stone", "sun-stone", ]
TRADE_EVOLUTION_ITEMS["kings-rock", "metal-coat", "dragon-scale", "up-grade"]
MEDICINE_IDS[ "potion", "super-potion", "hyper-potion", "max-potion", "full-restore", "revive", "max-revive", "antidote", "paralyze-heal", "awakening", "burn-heal", "ice-heal", "full-heal", "ether", "max-ether", "elixir", "max-elixir", "fresh-water", "soda-pop", "lemonade", "moomoo-milk", "energy-powder", "energy-root", "heal-powder", "revival-herb", ]
BATTLE_ITEM_IDS[ "x-attack", "x-defend", "x-speed", "x-special", "x-accuracy", "dire-hit", "guard-spec", ]
BERRY_IDS[ "berry", "gold-berry", "przcure-berry", "mint-berry", "ice-berry", "burnt-berry", "psncure-berry", "bitter-berry", "miracle-berry", "mysteryberry", ]
POKEMON_ASSET_PREFIX"/pokemon-assets"

PokemonType

(typeof POKEMON_TYPES)[number]

Generation

1 | 2

BaseStat

"hp" | "attack" | "defense" | "specialAttack" | "specialDefense" | "speed"

DvStat

"attack" | "defense" | "speed" | "special"

StatExpKey

"hp" | "attack" | "defense" | "speed" | "special"

StageStat

"attack" | "defense" | "specialAttack" | "specialDefense" | "speed" | "accuracy" | "evasion"

GrowthRate

"fast" | "medium-fast" | "medium-slow" | "slow"

Rarity

"common" | "uncommon" | "rare" | "very-rare" | "legendary"

MajorStatus

"paralysis" | "burn" | "freeze" | "poison" | "toxic" | "sleep"

TimeOfDay

"morning" | "day" | "night"

Weather

"rain" | "sun" | "sandstorm"

Gender

"male" | "female"

MoveSlug

string

BallId

(typeof BALL_IDS)[number]

EvolutionStone

(typeof EVOLUTION_STONES)[number]

TradeEvolutionItem

(typeof TRADE_EVOLUTION_ITEMS)[number]

MedicineId

(typeof MEDICINE_IDS)[number]

BattleItemId

(typeof BATTLE_ITEM_IDS)[number]

BerryId

(typeof BERRY_IDS)[number]

HeldItemId

(typeof HELD_ITEM_IDS)[number]

ItemId

BallId | EvolutionStone | MedicineId | BattleItemId | BerryId | HeldItemId | "rare-candy"

ItemCategory

"ball" | "medicine" | "evolution" | "battle" | "berry" | "held" | "other"

ItemData

FieldType
idItemId
namestring
categoryItemCategory
pricenumber
descriptionstring
holdableboolean
generationGeneration

EvolutionCondition

"attack-gt-defense" | "attack-lt-defense" | "attack-eq-defense"

EvolutionTrigger

One of:

  • { kind: "level"; level: number; timeOfDay?: TimeOfDay[]; condition?: EvolutionCondition }
  • { kind: "stone"; item: EvolutionStone }
  • { kind: "trade"; heldItem?: TradeEvolutionItem }
  • { kind: "friendship"; timeOfDay?: TimeOfDay[] }
FieldType
tonumber
triggerEvolutionTrigger

LearnsetEntry

FieldType
levelnumber
moveMoveSlug

SpeciesData

FieldType
idnumber
generationGeneration
slugstring
namestring
types[PokemonType] | [PokemonType, PokemonType]
baseStatsRecord<BaseStat, number>
baseExpnumber
catchRatenumber
growthRateGrowthRate
genderRatenumber
baseFriendshipnumber
genusstring
dexEntrystring
heightMnumber
weightKgnumber
rarityRarity
activeTimesTimeOfDay[]
wildHeldItemsArray<{ item: HeldItemId | BerryId; chance: number }>
learnsetLearnsetEntry[]
tmMovesMoveSlug[]
evolvesFromnumber | null
evolvesToEvolutionLink[]

MoveCategory

"physical" | "special" | "status"

SpecialMoveKind

One of:

  • "fixed-damage"
  • "level-damage"
  • "psywave"
  • "super-fang"
  • "ohko"
  • "counter"
  • "mirror-coat"
  • "bide"
  • "charge"
  • "recharge"
  • "rampage"
  • "trap"
  • "self-destruct"
  • "rest"
  • "haze"
  • "reflect"
  • "light-screen"
  • "safeguard"
  • "mist"
  • "focus-energy"
  • "leech-seed"
  • "substitute"
  • "transform"
  • "conversion"
  • "conversion-2"
  • "mimic"
  • "sketch"
  • "metronome"
  • "mirror-move"
  • "disable"
  • "encore"
  • "rage"
  • "flee"
  • "splash"
  • "pay-day"
  • "dream-eater"
  • "nightmare"
  • "crash-on-miss"
  • "struggle"
  • "protect"
  • "endure"
  • "sleep-talk"
  • "snore"
  • "heal-bell"
  • "baton-pass"
  • "belly-drum"
  • "curse"
  • "destiny-bond"
  • "foresight"
  • "future-sight"
  • "attract"
  • "perish-song"
  • "mean-look"
  • "spikes"
  • "rapid-spin"
  • "weather"
  • "thief"
  • "spite"
  • "pain-split"
  • "present"
  • "return"
  • "frustration"
  • "hidden-power"
  • "magnitude"
  • "rollout"
  • "fury-cutter"
  • "false-swipe"
  • "triple-kick"
  • "beat-up"
  • "pursuit"
  • "psych-up"
  • "lock-on"
  • "reversal"
  • "swagger"
  • "weather-heal"
  • "solar-beam"
  • "thunder"
  • "hits-flying"
  • "hits-underground"
  • "never-miss"
  • "stomp"

VolatileAilment

"confusion" | "flinch" | "attract"

MoveEffect

FieldType
target"opponent" | "self"
ailment?MajorStatus | VolatileAilment
ailmentChance?number
statChanges?Array<{ stat: StageStat; change: number }>
statChance?number
drain?number
healing?number
highCrit?boolean
minHits?number
maxHits?number
minTurns?number
maxTurns?number
special?SpecialMoveKind
fixedDamage?number
semiInvulnerable?boolean
weather?Weather
thawsUser?boolean

MoveData

FieldType
slugMoveSlug
namestring
generationGeneration
typePokemonType
categoryMoveCategory
powernumber | null
accuracynumber | null
ppnumber
prioritynumber
effectMoveEffect
descriptionstring

PokemonDataset

FieldType
speciesSpeciesData[]
movesRecord<MoveSlug, MoveData>
itemsRecord<ItemId, ItemData>

TapIn Pokémon is an unofficial fan project. Pokémon and all related names and artwork are trademarks and © of Nintendo, Game Freak and Creatures. Legal

On this page