PoGo API - A small collection of Pokemon Go tools and API's

PoGoAPI Documentation

This page holds the the documentation about all the API's we offer holding Pokemon Go Data.

If you are missing some data you want feel free to contact me on Twitter.

Using these API's

It is recommended to locally cache these files so you can store them on your own server and use them as needed. To help facilitate this a hash API is provided, which gives the current hashes of all API's available. By downloading the current hashes you can compare them against the files you have stored. Then if the hashes are different you know you need to update the file.

This should reduce the traffic requirements on both my and your website and make updating easier.

GET /api/v1/api_hashes.json

Returns a json dict with the keys being the api filename and the values being an array containing api_filename, full_path, hash_md5, hash_sha1, hash_sha256.

Example data

{
    "alolan_pokemon.json": {
        "api_filename": "alolan_pokemon.json",
        "full_path": "/api/v1/alolan_pokemon.json",
        "hash_md5": "355f4ec183f1f519d9cae8e16013dcf4",
        "hash_sha1": "0bb393f6819825afa0ae89e38c1c57e2805371f3",
        "hash_sha256": "d3ea3002c9bbbd4a955bec49352a36c8ed5c6c62cfe8b3f71acfd2083a828b33"
    }, ...
}

GET /api/v1/pokemon_names.json

Returns a json dict with the keys being the pokemon ID, the values are an array containing the pokemon name and ID.

Example data

{
    1: {
        id: 1,
        name: "Bulbasaur"
    },
    2: {
        id: 2,
        name: "Ivysaur"
    },
    3: {
        id: 3,
        name: "Venusaur"
    }, ...
}

GET /api/v1/released_pokemon.json

Currently in Pokemon Go the majority of Pokemon have been released from the first three generations of Pokemon games. This API lets you get the full list of Pokemon that are currently released.

Returns a json dict with the keys being the pokemon ID, the values are an array containing the pokemon name and ID.

Example data

{
    1: {
        id: 1,
        name: "Bulbasaur"
    },
    2: {
        id: 2,
        name: "Ivysaur"
    },
    3: {
        id: 3,
        name: "Venusaur"
    }, ...
}

GET /api/v1/nesting_pokemon.json

Only specific Pokemon will nest and this API lets you get the name and ID of all Pokemon known to currently nest.

Returns a JSON dict with the keys being the Pokemon ID, the values are an array containing the pokemon name and ID.

Example data

{
    1: {
        id: 1,
        name: "Bulbasaur"
    },
    4: {
        id: 4,
        name: "Charmander"
    },
    7: {
        id: 7,
        name: "Squirtle"
    }, ...
}

GET /api/v1/shiny_pokemon.json

Returns a JSON dict with the keys being the Pokemon ID, the values are an array containing the Pokemon name, ID, and how that shiny can be found.

There are four main keys determining how the shiny can be found:

Example data

{
    1: {
        name: "Bulbasaur",
        found_wild: true,
        found_raid: false,
        found_egg: false,
        found_evolution: false,
        id: 1
    },
    2: {
        name: "Ivysaur",
        found_wild: false,
        found_raid: false,
        found_egg: false,
        found_evolution: true,
        id: 2
    }, ...
}

GET /api/v1/raid_exclusive_pokemon.json

Returns a JSON dict with the keys being the Pokemon ID, the values are an array containing the Pokemon name, ID, and and level raid they can be found in.

Currently all raid exclusive pokemon are tied to a specific raid level. In the future the API might need to change if this changes.

Example data

{
    303: {
        raid_level: 2,
        id: 303,
        name: "Mawile"
    },
    359: {
        raid_level: 4,
        id: 359,
        name: "Absol"
    }
}

GET /api/v1/alolan_pokemon.json

In Generation 7 of the Pokemon video games Alolan Pokemon were released. These are pokemon who canonically evolved in a different area so are subtly different from the standard Pokemon. These all look different and have different typing to classical pokemon. This API allows you to get a list of currently released alolan Pokemon.

Returns a JSON dict with the keys being the Pokemon ID, the values are an array containing the pokemon name and ID.

Example data

{
    19: {
        id: 19,
        name: "Rattata"
    },
    20: {
        id: 20,
        name: "Raticate"
    },
    26: {
        id: 26,
        name: "Raichu"
    }, ...
}

GET /api/v1/possible_ditto_pokemon.json

Ditto is a Pokemon that can transform into any Pokemon. In the wild you find him by catching a Pokemon which then transforms into Ditto. You cant tell which Pokemon might turn into a Ditto however if someone has caught a Ditto it will be a Ditto for everyone. This API allows you to get the list of Pokemon which are potentially a Ditto.

Returns a JSON dict with the keys being the Pokemon ID, the values are an array containing the pokemon name and ID.

Example data

{
    41: {
        "id": 41,
        "name": "Zubat"
    },
    "16": {
        "id": 16,
        "name": "Pidgey"
    },
    "19": {
        "id": 19,
        "name": "Rattata"
    }, ...
}

GET /api/v1/pokemon_stats.json

Each Pokemon has three base stats, attack, defense and stamina which determine how innately strong it is in each of these areas. These effect how much HP and damage each move can do along with its level and the typing of the moves.

Returns a JSON array where each element is a dict containing the pokemon name, ID, base stamina, base attack, and base defense.

[
    {
        base_stamina: "90",
        base_defense: "118",
        base_attack: "118",
        name: "Bulbasaur",
        id: 1
    },
    {
        base_stamina: "120",
        base_defense: "151",
        base_attack: "151",
        name: "Ivysaur",
        id: 2
    },
    {
        base_stamina: "160",
        base_defense: "198",
        base_attack: "198",
        name: "Venusaur",
        id: 3
    },..
]

GET /api/v1/fast_moves.json

Each Pokemon has a fast and charged move. This API allows you to download the full list of fast moves in the current Pokemon Go game master.

Returns a JSON array where each element is a dict containing the stamina_loss_scaler, name, power, duration, energy_delta and type.

[
    {
        "stamina_loss_scaler": "0.01",
        "name": "Fury Cutter",
        "power": 3,
        "duration": 400,
        "energy_delta": 6,
        "type": "Bug"
    }, {
        "stamina_loss_scaler": "0.01",
        "name": "Bug Bite",
        "power": 5,
        "duration": 500,
        "energy_delta": 6,
        "type": "Bug"
    }, {
        "stamina_loss_scaler": "0.01",
        "name": "Bite",
        "power": 6,
        "duration": 500,
        "energy_delta": 4,
        "type": "Dark"
    }, ...
]

GET /api/v1/charged_moves.json

Each Pokemon has a fast and charged move. This API allows you to download the full list of charged moves in the current Pokemon Go game master.

Returns a JSON array where each element is a dict containing the stamina_loss_scaler, name, power, duration, critical_chance, energy_delta and type.

[
    {
        "stamina_loss_scaler": "0.06",
        "name": "Wrap",
        "power": 60,
        "duration": 2900,
        "critical_chance": "0.05",
        "energy_delta": -33,
        "type": "Normal"
    }, {
        "stamina_loss_scaler": "0.15",
        "name": "Hyper Beam",
        "power": 150,
        "duration": 3800,
        "critical_chance": "0.05",
        "energy_delta": -100,
        "type": "Normal"
    }, {
        "stamina_loss_scaler": "0.08",
        "name": "Dark Pulse",
        "power": 80,
        "duration": 3000,
        "critical_chance": "0.05",
        "energy_delta": -50,
        "type": "Dark"
    }, ...
]

GET /api/v1/pokemon_max_cp.json

Each Pokemon has a maximum CP that it may achieve if it is a perfect pokemon (with 15 attack, stamina, and defense) and is level 40. This API returns the maximum CP for each Pokemon.

Returns a JSON array where each element is a dict containing the pokemon name, ID, and maximum CP.

[
    {
        name: "Bulbasaur",
        max_cp: 981,
        id: 1
    },
    {
        name: "Ivysaur",
        max_cp: 1552,
        id: 2
    },
    {
        name: "Venusaur",
        max_cp: 2568,
        id: 3
    }, ...
]

GET /api/v1/pokemon_buddy_distances.json

When you make a Pokemon your buddy after a certain distance walked with them you will get 1 candy from them. This distance depends on the specific Pokemon. The current buddy distances are 1, 3, 5, and 20 kilometres distance.

Returns a JSON object where each key is the distance needed to gain a candy and the value is a list containing multiple objects holding distance, Pokemon ID, Pokemon name and optionally the form.

{
    "1": [
        {
            "distance": 1,
            "pokemon_id": 10,
            "pokemon_name": "Caterpie"
        },
        {
            "distance": 1,
            "pokemon_id": 11,
            "pokemon_name": "Metapod"
        },
        {
            "distance": 1,
            "pokemon_id": 12,
            "pokemon_name": "Butterfree"
        }, ...
    ], ...
}

GET /api/v1/pokemon_candy_to_evolve.json

For all Pokemon that evolve there will be a specific candy requirement. This API groups the evolvable Pokemon into the specific candy requirements for each.

Returns a JSON object where each key is the amount of candy needed to evolve and the value is a list containing multiple objects holding candy needed to evolve, Pokemon ID, Pokemon name and optionally the form.

{
    "100": [
        {
            "candy_required": 100,
            "pokemon_id": 2,
            "pokemon_name": "Ivysaur"
        },
        {
            "candy_required": 100,
            "pokemon_id": 5,
            "pokemon_name": "Charmeleon"
        },
        {
            "candy_required": 100,
            "pokemon_id": 8,
            "pokemon_name": "Wartortle"
        }, ...
    ],...
}

GET /api/v1/pokemon_encounter_data.json

When encountering a Pokemon there are a number of metrics that influence the catch rate, and what it does during the encounter. This API groups all the information that influences an encounter together.

Returns a JSON array where each element is a dict containing attack_probability, base_capture_rate, base_flee_rate, dodge_probability, max_pokemon_action_frequency, min_pokemon_action_frequency, Pokemon ID, Pokemon name and optionally the form.

The fields attack_probability, base_capture_rate, base_flee_rate, and dodge_probability are a value from 0 to 1. 0 represents 0% chance of it ocurring each turn and 1 represents 100% chance. The fields max_pokemon_action_frequency, and min_pokemon_action_frequency are in seconds representing the maximum and minimum amount of time between an action.

[
    {
        "attack_probability": 0.1,
        "base_capture_rate": 0.2,
        "base_flee_rate": 0.1,
        "dodge_probability": 0.15,
        "max_pokemon_action_frequency": 1.6,
        "min_pokemon_action_frequency": 0.2,
        "pokemon_id": 1,
        "pokemon_name": "Bulbasaur"
    },
    {
        "attack_probability": 0.1,
        "base_capture_rate": 0.1,
        "base_flee_rate": 0.07,
        "dodge_probability": 0.15,
        "max_pokemon_action_frequency": 1.6,
        "min_pokemon_action_frequency": 0.2,
        "pokemon_id": 2,
        "pokemon_name": "Ivysaur"
    }, ...
]

GET /api/v1/pokemon_types.json

All Pokemon have either one or two types, these types affect the strength of moves and weaknesses it has to opponents moves. This API lists the types of each Pokemon.

Returns a JSON array where each element is a dict containing type (an array of one or two items), Pokemon ID, Pokemon name and optionally the form.

[
    {
        "pokemon_id": 1,
        "pokemon_name": "Bulbasaur",
        "type": [
            "Grass",
            "Poison"
        ]
    },
    {
        "pokemon_id": 2,
        "pokemon_name": "Ivysaur",
        "type": [
            "Grass",
            "Poison"
        ]
    },
    {
        "pokemon_id": 3,
        "pokemon_name": "Venusaur",
        "type": [
            "Grass",
            "Poison"
        ]
    }, ...
]

GET /api/v1/weather_boosts.json

During different weather certain types will be boosted. When they are boosted Pokemon of the boosted types will be found at a higher level, and moves of that type will be more powerful. This API lists what each weather type boosts.

Returns a JSON dict where each key is the weather type and the value is an array of boosted types.

{
    Clear: [
        "Grass",
        "Ground",
        "Fire"
    ],
    Cloudy: [
        "Fairy",
        "Fighting",
        "Poison"
    ], ...
}

GET /api/v1/type_effectiveness.json

When a Pokemon attacks, a multiplier is applied based on the attacker and defender types. This type effectiveness is very important to help deal the most damage as possible in raids and pvp. This API details how each type multiplier is applied.

Returns a JSON dict where each key is the attacking type and the value is a dict of defender types and the damage multiplier.

{
    "Bug": {
        "Bug": "1",
        "Dark": "1.6",
        "Dragon": "1",
        "Electric": "1",
        "Fairy": "0.625",
        "Fighting": "0.625",
        "Fire": "0.625",
        "Flying": "0.625",
        "Ghost": "0.625",
        "Grass": "1.6",
        "Ground": "1",
        "Ice": "1",
        "Normal": "1",
        "Poison": "0.625",
        "Psychic": "1.6",
        "Rock": "1",
        "Steel": "0.625",
        "Water": "1"
    }, ...
}

GET /api/v1/pokemon_rarity.json

Pokemon are split up into 3 rarity types. These are Standard, Legendary, and Mythic. Typically Legendary and Mythic Pokemon have different trading rules along with a much higher buddy walking distance. This API details how what rarity ranking Pokemon Go places each Pokemon in.

Returns a JSON dict where each key is the rarity type and the value is a list of dicts containing the details of Pokemon in that rarity group. Each Pokemon dict has the pokemon_id, pokemon_name and rarity inside it for ease of processing.

{
    "Legendary": [
        {
            "pokemon_id": 144,
            "pokemon_name": "Articuno",
            "rarity": "Legendary"
        },
        {
            "pokemon_id": 145,
            "pokemon_name": "Zapdos",
            "rarity": "Legendary"
        },
        {
            "pokemon_id": 146,
            "pokemon_name": "Moltres",
            "rarity": "Legendary"
        }, ...
    ], ...
}

GET /api/v1/pokemon_powerup_requirements.json

To power up a pokemon you need to pay some stardust and candy. Pokemon can be powered up to two levels higher than your level, to a max level of 40. This API details how much it will cost to power up a Pokemon each level.

Returns a JSON dict where each key is the current level and the value is a dictionary containing the cost of powering up a Pokemon at that level. Each powerup dict contains the candy to upgrade, the stardust to upgrade, the current level and the next level.

{
    "1": {
        "candy_to_upgrade": "1",
        "current_level": 1,
        "level_after_powering": 1.5,
        "stardust_to_upgrade": "200"
    },
    "1.5": {
        "candy_to_upgrade": "1",
        "current_level": 1.5,
        "level_after_powering": 2.0,
        "stardust_to_upgrade": "200"
    },
    "2": {
        "candy_to_upgrade": "1",
        "current_level": 2,
        "level_after_powering": 2.5,
        "stardust_to_upgrade": "200"
    }, ...
}

GET /api/v1/pokemon_genders.json

Each Pokemon either has a gender of male or female, or is classified as genderless. This is important for some Pokemon who have gender specific evolutions. For example only a female Combee will evolve.

For each Pokemon there is percentage chance of any gender. For example some Pokemon are exclusively male or female and some are skewed towards one gender. This API details the gender breakdown for each Pokemon.

Returns a JSON dict where each key is the name of the gender ratio and the value is a list of Pokemon and their gender percentages. This dictionary holds the Pokemon ID, Pokemon name, and their gender percentages under the gender key.

The gender key is a dictionary which has three possible keys, female_percent, male_percent, genderless_percent. These values are a value from 0 to 1 and are not percentages but are kept named as such as this is what the game master calls it. 1 represents the Pokemon is entirely of one gender. The actual percentage may be obtained by multiplying the value by 100.

{
    "0M_1F": [
        {
            "gender": {
                "female_percent": "1"
            },
            "pokemon_id": 29,
            "pokemon_name": "Nidoran\u2640"
        },
        {
            "gender": {
                "female_percent": "1"
            },
            "pokemon_id": 30,
            "pokemon_name": "Nidorina"
        }, ...
    }, ...
}

GET /api/v1/player_xp_requirements.json

For each Pokemon Go level you are required to reach a specific amount of cumulative xp. This API details the cumulative xp requirement for each level.

Returns a JSON dict where each key is the level and the value is the xp required for the keys level.

{
    "1": 0,
    "2": 1000,
    "3": 3000,
    "4": 6000,
    "5": 10000,
    "6": 15000,
    "7": 21000,
    "8": 28000, ...
}

GET /api/v1/pokemon_generations.json

Each Pokemon has an associated generation that it was originally released in. Currently Niantic are progressing through the generations releasing Pokemon. This API lists each Pokemon and the generation it was released in.

Returns a JSON dict where each key is the generation name and the value is a list of Pokemon that are from that generation. Each Pokemon entry has its name, Pokemon ID, and generation number.

{
    "Generation 1": [
        {
            "generation_number": 1,
            "id": 1,
            "name": "Bulbasaur"
        },
        {
            "generation_number": 1,
            "id": 2,
            "name": "Ivysaur"
        }, ...
    ], ...
}