diff --git a/config/settings.py b/config/settings.py index 8213dd2e0..5459cc7db 100755 --- a/config/settings.py +++ b/config/settings.py @@ -99,6 +99,7 @@ "corsheaders", "rest_framework", "cachalot", + "drf_spectacular", ) + CUSTOM_APPS @@ -116,6 +117,7 @@ "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination", "PAGE_SIZE": 20, "PAGINATE_BY": 20, + "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema", } @@ -136,3 +138,42 @@ ] DEFAULT_AUTO_FIELD = "django.db.models.AutoField" + +SPECTACULAR_SETTINGS = { + "TITLE": "PokéAPI", + "DESCRIPTION": """All the Pokémon data you'll ever need in one place, easily accessible through a modern free open-source RESTful API. + +## What is this? + +This is a full RESTful API linked to an extensive database detailing everything about the Pokémon main game series. + +We've covered everything from Pokémon to Berry Flavors. + +## Where do I start? + +We have awesome [documentation](https://pokeapi.co/docs/v2) on how to use this API. It takes minutes to get started. + +This API will always be publicly available and will never require any extensive setup process to consume. + +Created by [**Paul Hallett**(]https://github.com/phalt) and other [**PokéAPI contributors***](https://github.com/PokeAPI/pokeapi#contributing) around the world. Pokémon and Pokémon character names are trademarks of Nintendo. + """, + "SERVERS": [{"url": "https://pokeapi.co"}], + "EXTERNAL_DOCS": {"url": "https://pokeapi.co/docs/v2"}, + "VERSION": "2.7.0", + "SERVE_INCLUDE_SCHEMA": False, + "OAS_VERSION": "3.1.0", + "COMPONENT_SPLIT_REQUEST": True, + "TAGS": [ + "pokemon", + "evolution", + "berries", + "items", + "machines", + "location", + "contest", + "moves", + "encounters", + "games", + "utility", + ], +} diff --git a/default.nix b/default.nix new file mode 100644 index 000000000..f5ae82fe7 --- /dev/null +++ b/default.nix @@ -0,0 +1,42 @@ +with import { }; + +let + pythonPackages = python3Packages; +in pkgs.mkShell rec { + name = "impurePythonEnv"; + venvDir = "./.venv"; + buildInputs = [ + python310Packages.python + python310Packages.venvShellHook + + # python310Packages.coverage + # python310Packages.python-mimeparse + # python310Packages.python-dateutil + # python310Packages.drf-spectacular + # python310Packages.djangorestframework + # python310Packages.django-redis + # python310Packages.django-cors-headers + + # Required dependancies + black + taglib + openssl + git + libxml2 + libxslt + libzip + zlib + ]; + + # Run this command, only after creating the virtual environment + postVenvCreation = '' + unset SOURCE_DATE_EPOCH + pip install -r requirements.txt + ''; + + postShellHook = '' + # allow pip to install wheels + unset SOURCE_DATE_EPOCH + ''; + +} diff --git a/openapi.yml b/openapi.yml new file mode 100644 index 000000000..f262ee3bd --- /dev/null +++ b/openapi.yml @@ -0,0 +1,9157 @@ +openapi: 3.1.0 +info: + title: PokéAPI + version: 2.7.0 + description: "All the Pokémon data you'll ever need in one place, easily accessible\ + \ through a modern free open-source RESTful API.\n\n## What is this?\n\nThis is\ + \ a full RESTful API linked to an extensive database detailing everything about\ + \ the Pokémon main game series.\n\nWe've covered everything from Pokémon to Berry\ + \ Flavors.\n\n## Where do I start?\n\nWe have awesome [documentation](https://pokeapi.co/docs/v2)\ + \ on how to use this API. It takes minutes to get started.\n\nThis API will always\ + \ be publicly available and will never require any extensive setup process to\ + \ consume.\n\nCreated by [**Paul Hallett**(]https://github.com/phalt) and other\ + \ [**PokéAPI contributors***](https://github.com/PokeAPI/pokeapi#contributing)\ + \ around the world. Pokémon and Pokémon character names are trademarks of Nintendo.\n\ + \ " +paths: + /api/v2/ability/: + get: + operationId: ability_list + description: Abilities provide passive effects for Pokémon in battle or in the + overworld. Pokémon have multiple possible abilities but can have only one + ability at a time. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Ability) + for greater detail. + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedAbilitySummaryList' + description: '' + /api/v2/ability/{id}/: + get: + operationId: ability_retrieve + description: Abilities provide passive effects for Pokémon in battle or in the + overworld. Pokémon have multiple possible abilities but can have only one + ability at a time. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Ability) + for greater detail. + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this ability. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/AbilityDetail' + description: '' + /api/v2/berry/: + get: + operationId: berry_list + description: Berries are small fruits that can provide HP and status condition + restoration, stat enhancement, and even damage negation when eaten by Pokémon. + Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Berry) for greater + detail. + summary: List berries + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - berries + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedBerrySummaryList' + description: '' + /api/v2/berry-firmness/: + get: + operationId: berry_firmness_list + description: Berries can be soft or hard. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Category:Berries_by_firmness) + for greater detail. + summary: List berry firmness + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - berries + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedBerryFirmnessSummaryList' + description: '' + /api/v2/berry-firmness/{id}/: + get: + operationId: berry_firmness_retrieve + description: Berries can be soft or hard. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Category:Berries_by_firmness) + for greater detail. + summary: Get berry by firmness + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this berry firmness. + required: true + tags: + - berries + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BerryFirmnessDetail' + description: '' + /api/v2/berry-flavor/: + get: + operationId: berry_flavor_list + description: Flavors determine whether a Pokémon will benefit or suffer from + eating a berry based on their **nature**. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Flavor) + for greater detail. + summary: List berry flavors + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - berries + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedBerryFlavorSummaryList' + description: '' + /api/v2/berry-flavor/{id}/: + get: + operationId: berry_flavor_retrieve + description: Flavors determine whether a Pokémon will benefit or suffer from + eating a berry based on their **nature**. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Flavor) + for greater detail. + summary: Get berries by flavor + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this berry flavor. + required: true + tags: + - berries + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BerryFlavorDetail' + description: '' + /api/v2/berry/{id}/: + get: + operationId: berry_retrieve + description: Berries are small fruits that can provide HP and status condition + restoration, stat enhancement, and even damage negation when eaten by Pokémon. + Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Berry) for greater + detail. + summary: Get a berry + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this berry. + required: true + tags: + - berries + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/BerryDetail' + description: '' + /api/v2/characteristic/: + get: + operationId: characteristic_list + description: Characteristics indicate which stat contains a Pokémon's highest + IV. A Pokémon's Characteristic is determined by the remainder of its highest + IV divided by 5 (gene_modulo). Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Characteristic) + for greater detail. + summary: List charecterictics + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedCharacteristicSummaryList' + description: '' + /api/v2/characteristic/{id}/: + get: + operationId: characteristic_retrieve + description: Characteristics indicate which stat contains a Pokémon's highest + IV. A Pokémon's Characteristic is determined by the remainder of its highest + IV divided by 5 (gene_modulo). Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Characteristic) + for greater detail. + summary: Get characteristic + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this characteristic. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CharacteristicDetail' + description: '' + /api/v2/contest-effect/: + get: + operationId: contest_effect_list + description: Contest effects refer to the effects of moves when used in contests. + summary: List contest effects + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - contests + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedContestEffectSummaryList' + description: '' + /api/v2/contest-effect/{id}/: + get: + operationId: contest_effect_retrieve + description: Contest effects refer to the effects of moves when used in contests. + summary: Get contest effect + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this contest effect. + required: true + tags: + - contests + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContestEffectDetail' + description: '' + /api/v2/contest-type/: + get: + operationId: contest_type_list + description: Contest types are categories judges used to weigh a Pokémon's condition + in Pokémon contests. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Contest_condition) + for greater detail. + summary: List contest types + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - contests + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedContestTypeSummaryList' + description: '' + /api/v2/contest-type/{id}/: + get: + operationId: contest_type_retrieve + description: Contest types are categories judges used to weigh a Pokémon's condition + in Pokémon contests. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Contest_condition) + for greater detail. + summary: Get contest type + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this contest type. + required: true + tags: + - contests + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ContestTypeDetail' + description: '' + /api/v2/egg-group/: + get: + operationId: egg_group_list + description: Egg Groups are categories which determine which Pokémon are able + to interbreed. Pokémon may belong to either one or two Egg Groups. Check out + [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Egg_Group) for greater + detail. + summary: List egg groups + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedEggGroupSummaryList' + description: '' + /api/v2/egg-group/{id}/: + get: + operationId: egg_group_retrieve + description: Egg Groups are categories which determine which Pokémon are able + to interbreed. Pokémon may belong to either one or two Egg Groups. Check out + [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Egg_Group) for greater + detail. + summary: Get egg group + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this egg group. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EggGroupDetail' + description: '' + /api/v2/encounter-condition/: + get: + operationId: encounter_condition_list + description: Conditions which affect what pokemon might appear in the wild, + e.g., day or night. + summary: List encounter conditions + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - encounters + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedEncounterConditionSummaryList' + description: '' + /api/v2/encounter-condition-value/: + get: + operationId: encounter_condition_value_list + description: Encounter condition values are the various states that an encounter + condition can have, i.e., time of day can be either day or night. + summary: List encounter condition values + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - encounters + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedEncounterConditionValueSummaryList' + description: '' + /api/v2/encounter-condition-value/{id}/: + get: + operationId: encounter_condition_value_retrieve + description: Encounter condition values are the various states that an encounter + condition can have, i.e., time of day can be either day or night. + summary: Get encounter condition value + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this encounter condition value. + required: true + tags: + - encounters + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EncounterConditionValueDetail' + description: '' + /api/v2/encounter-condition/{id}/: + get: + operationId: encounter_condition_retrieve + description: Conditions which affect what pokemon might appear in the wild, + e.g., day or night. + summary: Get encounter condition + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this encounter condition. + required: true + tags: + - encounters + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EncounterConditionDetail' + description: '' + /api/v2/encounter-method/: + get: + operationId: encounter_method_list + description: Methods by which the player might can encounter Pokémon in the + wild, e.g., walking in tall grass. Check out Bulbapedia for greater detail. + summary: List encounter methods + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - encounters + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedEncounterMethodSummaryList' + description: '' + /api/v2/encounter-method/{id}/: + get: + operationId: encounter_method_retrieve + description: Methods by which the player might can encounter Pokémon in the + wild, e.g., walking in tall grass. Check out Bulbapedia for greater detail. + summary: Get encounter method + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this encounter method. + required: true + tags: + - encounters + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EncounterMethodDetail' + description: '' + /api/v2/evolution-chain/: + get: + operationId: evolution_chain_list + description: Evolution chains are essentially family trees. They start with + the lowest stage within a family and detail evolution conditions for each + as well as Pokémon they can evolve into up through the hierarchy. + summary: List evolution chains + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - evolution + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedEvolutionChainSummaryList' + description: '' + /api/v2/evolution-chain/{id}/: + get: + operationId: evolution_chain_retrieve + description: Evolution chains are essentially family trees. They start with + the lowest stage within a family and detail evolution conditions for each + as well as Pokémon they can evolve into up through the hierarchy. + summary: Get evolution chain + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this evolution chain. + required: true + tags: + - evolution + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EvolutionChainDetail' + description: '' + /api/v2/evolution-trigger/: + get: + operationId: evolution_trigger_list + description: Evolution triggers are the events and conditions that cause a Pokémon + to evolve. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Methods_of_evolution) + for greater detail. + summary: List evolution triggers + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - evolution + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedEvolutionTriggerSummaryList' + description: '' + /api/v2/evolution-trigger/{id}/: + get: + operationId: evolution_trigger_retrieve + description: Evolution triggers are the events and conditions that cause a Pokémon + to evolve. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Methods_of_evolution) + for greater detail. + summary: Get evolution trigger + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this evolution trigger. + required: true + tags: + - evolution + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/EvolutionTriggerDetail' + description: '' + /api/v2/gender/: + get: + operationId: gender_list + description: Genders were introduced in Generation II for the purposes of breeding + Pokémon but can also result in visual differences or even different evolutionary + lines. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Gender) + for greater detail. + summary: List genders + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedGenderSummaryList' + description: '' + /api/v2/gender/{id}/: + get: + operationId: gender_retrieve + description: Genders were introduced in Generation II for the purposes of breeding + Pokémon but can also result in visual differences or even different evolutionary + lines. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Gender) + for greater detail. + summary: Get gender + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this gender. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/GenderDetail' + description: '' + /api/v2/generation/: + get: + operationId: generation_list + description: A generation is a grouping of the Pokémon games that separates + them based on the Pokémon they include. In each generation, a new set of Pokémon, + Moves, Abilities and Types that did not exist in the previous generation are + released. + summary: List genrations + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - games + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedGenerationSummaryList' + description: '' + /api/v2/generation/{id}/: + get: + operationId: generation_retrieve + description: A generation is a grouping of the Pokémon games that separates + them based on the Pokémon they include. In each generation, a new set of Pokémon, + Moves, Abilities and Types that did not exist in the previous generation are + released. + summary: Get genration + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this generation. + required: true + tags: + - games + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/GenerationDetail' + description: '' + /api/v2/growth-rate/: + get: + operationId: growth_rate_list + description: Growth rates are the speed with which Pokémon gain levels through + experience. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Experience) + for greater detail. + summary: List growth rates + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedGrowthRateSummaryList' + description: '' + /api/v2/growth-rate/{id}/: + get: + operationId: growth_rate_retrieve + description: Growth rates are the speed with which Pokémon gain levels through + experience. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Experience) + for greater detail. + summary: Get growth rate + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this growth rate. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/GrowthRateDetail' + description: '' + /api/v2/item/: + get: + operationId: item_list + description: An item is an object in the games which the player can pick up, + keep in their bag, and use in some manner. They have various uses, including + healing, powering up, helping catch Pokémon, or to access a new area. + summary: List items + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - items + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedItemSummaryList' + description: '' + /api/v2/item-attribute/: + get: + operationId: item_attribute_list + description: Item attributes define particular aspects of items, e.g."usable + in battle" or "consumable". + summary: List item attributes + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - items + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedItemAttributeSummaryList' + description: '' + /api/v2/item-attribute/{id}/: + get: + operationId: item_attribute_retrieve + description: Item attributes define particular aspects of items, e.g."usable + in battle" or "consumable". + summary: Get item attribute + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this item attribute. + required: true + tags: + - items + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ItemAttributeDetail' + description: '' + /api/v2/item-category/: + get: + operationId: item_category_list + description: Item categories determine where items will be placed in the players + bag. + summary: List item categories + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - items + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedItemCategorySummaryList' + description: '' + /api/v2/item-category/{id}/: + get: + operationId: item_category_retrieve + description: Item categories determine where items will be placed in the players + bag. + summary: Get item category + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this item category. + required: true + tags: + - items + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ItemCategoryDetail' + description: '' + /api/v2/item-fling-effect/: + get: + operationId: item_fling_effect_list + description: The various effects of the move"Fling" when used with different + items. + summary: List item fling effects + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - items + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedItemFlingEffectSummaryList' + description: '' + /api/v2/item-fling-effect/{id}/: + get: + operationId: item_fling_effect_retrieve + description: The various effects of the move"Fling" when used with different + items. + summary: Get item fling effect + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this item fling effect. + required: true + tags: + - items + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ItemFlingEffectDetail' + description: '' + /api/v2/item-pocket/: + get: + operationId: item_pocket_list + description: Pockets within the players bag used for storing items by category. + summary: List item pockets + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - items + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedItemPocketSummaryList' + description: '' + /api/v2/item-pocket/{id}/: + get: + operationId: item_pocket_retrieve + description: Pockets within the players bag used for storing items by category. + summary: Get item pocket + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this item pocket. + required: true + tags: + - items + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ItemPocketDetail' + description: '' + /api/v2/item/{id}/: + get: + operationId: item_retrieve + description: An item is an object in the games which the player can pick up, + keep in their bag, and use in some manner. They have various uses, including + healing, powering up, helping catch Pokémon, or to access a new area. + summary: Get item + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this item. + required: true + tags: + - items + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ItemDetail' + description: '' + /api/v2/language/: + get: + operationId: language_list + description: Languages for translations of API resource information. + summary: List languages + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - utility + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedLanguageSummaryList' + description: '' + /api/v2/language/{id}/: + get: + operationId: language_retrieve + description: Languages for translations of API resource information. + summary: Get language + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this language. + required: true + tags: + - utility + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LanguageDetail' + description: '' + /api/v2/location/: + get: + operationId: location_list + description: Locations that can be visited within the games. Locations make + up sizable portions of regions, like cities or routes. + summary: List locations + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - location + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedLocationSummaryList' + description: '' + /api/v2/location-area/: + get: + operationId: location_area_list + description: Location areas are sections of areas, such as floors in a building + or cave. Each area has its own set of possible Pokémon encounters. + summary: List location areas + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - location + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedLocationAreaSummaryList' + description: '' + /api/v2/location-area/{id}/: + get: + operationId: location_area_retrieve + description: Location areas are sections of areas, such as floors in a building + or cave. Each area has its own set of possible Pokémon encounters. + summary: Get location area + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this location area. + required: true + tags: + - location + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LocationAreaDetail' + description: '' + /api/v2/location/{id}/: + get: + operationId: location_retrieve + description: Locations that can be visited within the games. Locations make + up sizable portions of regions, like cities or routes. + summary: Get location + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this location. + required: true + tags: + - location + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LocationDetail' + description: '' + /api/v2/machine/: + get: + operationId: machine_list + description: Machines are the representation of items that teach moves to Pokémon. + They vary from version to version, so it is not certain that one specific + TM or HM corresponds to a single Machine. + summary: List machines + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - machines + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedMachineSummaryList' + description: '' + /api/v2/machine/{id}/: + get: + operationId: machine_retrieve + description: Machines are the representation of items that teach moves to Pokémon. + They vary from version to version, so it is not certain that one specific + TM or HM corresponds to a single Machine. + summary: Get machine + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this machine. + required: true + tags: + - machines + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MachineDetail' + description: '' + /api/v2/move/: + get: + operationId: move_list + description: Moves are the skills of Pokémon in battle. In battle, a Pokémon + uses one move each turn. Some moves (including those learned by Hidden Machine) + can be used outside of battle as well, usually for the purpose of removing + obstacles or exploring new areas. + summary: List moves + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedMoveSummaryList' + description: '' + /api/v2/move-ailment/: + get: + operationId: move_ailment_list + description: Move Ailments are status conditions caused by moves used during + battle. See [Bulbapedia](https://bulbapedia.bulbagarden.net/wiki/Status_condition) + for greater detail. + summary: List move meta ailments + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedMoveMetaAilmentSummaryList' + description: '' + /api/v2/move-ailment/{id}/: + get: + operationId: move_ailment_retrieve + description: Move Ailments are status conditions caused by moves used during + battle. See [Bulbapedia](https://bulbapedia.bulbagarden.net/wiki/Status_condition) + for greater detail. + summary: Get move meta ailment + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this move meta ailment. + required: true + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MoveMetaAilmentDetail' + description: '' + /api/v2/move-battle-style/: + get: + operationId: move_battle_style_list + description: Styles of moves when used in the Battle Palace. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Battle_Frontier_(Generation_III)) + for greater detail. + summary: List move battle styles + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedMoveBattleStyleSummaryList' + description: '' + /api/v2/move-battle-style/{id}/: + get: + operationId: move_battle_style_retrieve + description: Styles of moves when used in the Battle Palace. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Battle_Frontier_(Generation_III)) + for greater detail. + summary: Get move battle style + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this move battle style. + required: true + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MoveBattleStyleDetail' + description: '' + /api/v2/move-category/: + get: + operationId: move_category_list + description: Very general categories that loosely group move effects. + summary: List move meta categories + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedMoveMetaCategorySummaryList' + description: '' + /api/v2/move-category/{id}/: + get: + operationId: move_category_retrieve + description: Very general categories that loosely group move effects. + summary: Get move meta category + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this move meta category. + required: true + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MoveMetaCategoryDetail' + description: '' + /api/v2/move-damage-class/: + get: + operationId: move_damage_class_list + description: Damage classes moves can have, e.g. physical, special, or non-damaging. + summary: List move damage classes + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedMoveDamageClassSummaryList' + description: '' + /api/v2/move-damage-class/{id}/: + get: + operationId: move_damage_class_retrieve + description: Damage classes moves can have, e.g. physical, special, or non-damaging. + summary: Get move damage class + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this move damage class. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MoveDamageClassDetail' + description: '' + /api/v2/move-learn-method/: + get: + operationId: move_learn_method_list + description: Methods by which Pokémon can learn moves. + summary: List move learn methods + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedMoveLearnMethodSummaryList' + description: '' + /api/v2/move-learn-method/{id}/: + get: + operationId: move_learn_method_retrieve + description: Methods by which Pokémon can learn moves. + summary: Get move learn method + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this move learn method. + required: true + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MoveLearnMethodDetail' + description: '' + /api/v2/move-target/: + get: + operationId: move_target_list + description: Targets moves can be directed at during battle. Targets can be + Pokémon, environments or even other moves. + summary: List move targets + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedMoveTargetSummaryList' + description: '' + /api/v2/move-target/{id}/: + get: + operationId: move_target_retrieve + description: Targets moves can be directed at during battle. Targets can be + Pokémon, environments or even other moves. + summary: Get move target + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this move target. + required: true + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MoveTargetDetail' + description: '' + /api/v2/move/{id}/: + get: + operationId: move_retrieve + description: Moves are the skills of Pokémon in battle. In battle, a Pokémon + uses one move each turn. Some moves (including those learned by Hidden Machine) + can be used outside of battle as well, usually for the purpose of removing + obstacles or exploring new areas. + summary: Get move + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this move. + required: true + tags: + - moves + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MoveDetail' + description: '' + /api/v2/nature/: + get: + operationId: nature_list + description: Natures influence how a Pokémon's stats grow. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Nature) + for greater detail. + summary: List natures + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedNatureSummaryList' + description: '' + /api/v2/nature/{id}/: + get: + operationId: nature_retrieve + description: Natures influence how a Pokémon's stats grow. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Nature) + for greater detail. + summary: Get nature + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this nature. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/NatureDetail' + description: '' + /api/v2/pal-park-area/: + get: + operationId: pal_park_area_list + description: Areas used for grouping Pokémon encounters in Pal Park. They're + like habitats that are specific to Pal Park. + summary: List pal park areas + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - location + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedPalParkAreaSummaryList' + description: '' + /api/v2/pal-park-area/{id}/: + get: + operationId: pal_park_area_retrieve + description: Areas used for grouping Pokémon encounters in Pal Park. They're + like habitats that are specific to Pal Park. + summary: Get pal park area + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this pal park area. + required: true + tags: + - location + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PalParkAreaDetail' + description: '' + /api/v2/pokeathlon-stat/: + get: + operationId: pokeathlon_stat_list + description: Pokeathlon Stats are different attributes of a Pokémon's performance + in Pokéathlons. In Pokéathlons, competitions happen on different courses; + one for each of the different Pokéathlon stats. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9athlon) + for greater detail. + summary: List pokeathlon stats + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedPokeathlonStatSummaryList' + description: '' + /api/v2/pokeathlon-stat/{id}/: + get: + operationId: pokeathlon_stat_retrieve + description: Pokeathlon Stats are different attributes of a Pokémon's performance + in Pokéathlons. In Pokéathlons, competitions happen on different courses; + one for each of the different Pokéathlon stats. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9athlon) + for greater detail. + summary: Get pokeathlon stat + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this pokeathlon stat. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PokeathlonStatDetail' + description: '' + /api/v2/pokedex/: + get: + operationId: pokedex_list + description: A Pokédex is a handheld electronic encyclopedia device; one which + is capable of recording and retaining information of the various Pokémon in + a given region with the exception of the national dex and some smaller dexes + related to portions of a region. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pokedex) + for greater detail. + summary: List pokedex + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - games + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedPokedexSummaryList' + description: '' + /api/v2/pokedex/{id}/: + get: + operationId: pokedex_retrieve + description: A Pokédex is a handheld electronic encyclopedia device; one which + is capable of recording and retaining information of the various Pokémon in + a given region with the exception of the national dex and some smaller dexes + related to portions of a region. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pokedex) + for greater detail. + summary: Get pokedex + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this pokedex. + required: true + tags: + - games + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PokedexDetail' + description: '' + /api/v2/pokemon/: + get: + operationId: pokemon_list + description: Pokémon are the creatures that inhabit the world of the Pokémon + games. They can be caught using Pokéballs and trained by battling with other + Pokémon. Each Pokémon belongs to a specific species but may take on a variant + which makes it differ from other Pokémon of the same species, such as base + stats, available abilities and typings. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9mon_(species)) + for greater detail. + summary: List pokemon + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedPokemonSummaryList' + description: '' + /api/v2/pokemon-color/: + get: + operationId: pokemon_color_list + description: Colors used for sorting Pokémon in a Pokédex. The color listed + in the Pokédex is usually the color most apparent or covering each Pokémon's + body. No orange category exists; Pokémon that are primarily orange are listed + as red or brown. + summary: List pokemon colors + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedPokemonColorSummaryList' + description: '' + /api/v2/pokemon-color/{id}/: + get: + operationId: pokemon_color_retrieve + description: Colors used for sorting Pokémon in a Pokédex. The color listed + in the Pokédex is usually the color most apparent or covering each Pokémon's + body. No orange category exists; Pokémon that are primarily orange are listed + as red or brown. + summary: Get pokemon color + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this pokemon color. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PokemonColorDetail' + description: '' + /api/v2/pokemon-form/: + get: + operationId: pokemon_form_list + description: Some Pokémon may appear in one of multiple, visually different + forms. These differences are purely cosmetic. For variations within a Pokémon + species, which do differ in more than just visuals, the 'Pokémon' entity is + used to represent such a variety. + summary: List pokemon forms + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedPokemonFormSummaryList' + description: '' + /api/v2/pokemon-form/{id}/: + get: + operationId: pokemon_form_retrieve + description: Some Pokémon may appear in one of multiple, visually different + forms. These differences are purely cosmetic. For variations within a Pokémon + species, which do differ in more than just visuals, the 'Pokémon' entity is + used to represent such a variety. + summary: Get pokemon form + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this pokemon form. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PokemonFormDetail' + description: '' + /api/v2/pokemon-habitat/: + get: + operationId: pokemon_habitat_list + description: Habitats are generally different terrain Pokémon can be found in + but can also be areas designated for rare or legendary Pokémon. + summary: List pokemom habitas + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedPokemonHabitatSummaryList' + description: '' + /api/v2/pokemon-habitat/{id}/: + get: + operationId: pokemon_habitat_retrieve + description: Habitats are generally different terrain Pokémon can be found in + but can also be areas designated for rare or legendary Pokémon. + summary: Get pokemom habita + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this pokemon habitat. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PokemonHabitatDetail' + description: '' + /api/v2/pokemon-shape/: + get: + operationId: pokemon_shape_list + description: Shapes used for sorting Pokémon in a Pokédex. + summary: List pokemon shapes + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedPokemonShapeSummaryList' + description: '' + /api/v2/pokemon-shape/{id}/: + get: + operationId: pokemon_shape_retrieve + description: Shapes used for sorting Pokémon in a Pokédex. + summary: Get pokemon shape + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this pokemon shape. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PokemonShapeDetail' + description: '' + /api/v2/pokemon-species/: + get: + operationId: pokemon_species_list + description: A Pokémon Species forms the basis for at least one Pokémon. Attributes + of a Pokémon species are shared across all varieties of Pokémon within the + species. A good example is Wormadam; Wormadam is the species which can be + found in three different varieties, Wormadam-Trash, Wormadam-Sandy and Wormadam-Plant. + summary: List pokemon species + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedPokemonSpeciesSummaryList' + description: '' + /api/v2/pokemon-species/{id}/: + get: + operationId: pokemon_species_retrieve + description: A Pokémon Species forms the basis for at least one Pokémon. Attributes + of a Pokémon species are shared across all varieties of Pokémon within the + species. A good example is Wormadam; Wormadam is the species which can be + found in three different varieties, Wormadam-Trash, Wormadam-Sandy and Wormadam-Plant. + summary: Get pokemon species + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this pokemon species. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PokemonSpeciesDetail' + description: '' + /api/v2/pokemon/{id}/: + get: + operationId: pokemon_retrieve + description: Pokémon are the creatures that inhabit the world of the Pokémon + games. They can be caught using Pokéballs and trained by battling with other + Pokémon. Each Pokémon belongs to a specific species but may take on a variant + which makes it differ from other Pokémon of the same species, such as base + stats, available abilities and typings. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9mon_(species)) + for greater detail. + summary: Get pokemon + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this pokemon. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PokemonDetail' + description: '' + /api/v2/pokemon/{pokemon_id}/encounters: + get: + operationId: pokemon_encounters_retrieve + description: Handles Pokemon Encounters as a sub-resource. + summary: Get pokemon encounter + parameters: + - in: path + name: pokemon_id + schema: + type: string + pattern: ^\d+$ + required: true + tags: + - encounters + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + type: array + items: + type: object + required: + - location_area + - version_details + properties: + location_area: + type: object + required: + - name + - url + properties: + name: + type: string + example: cerulean-city-area + url: + type: string + format: uri + example: https://pokeapi.co/api/v2/location-area/281/ + version_details: + type: array + items: + type: object + required: + - encounter_details + - max_chance + - version + properties: + encounter_details: + type: array + items: + type: object + required: + - chance + - condition_values + - max_level + - method + - min_level + properties: + chance: + type: number + example: 100 + condition_values: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + example: story-progress-beat-red + url: + type: string + format: uri + example: https://pokeapi.co/api/v2/encounter-condition-value/55/ + max_level: + type: number + example: 10 + method: + type: object + required: + - name + - url + properties: + name: + type: string + example: gift + url: + type: string + format: uri + example: https://pokeapi.co/api/v2/encounter-method/18/ + min_level: + type: number + example: 10 + max_chance: + type: number + example: 100 + version: + type: object + required: + - name + - url + properties: + name: + type: string + example: red + url: + type: string + format: uri + example: https://pokeapi.co/api/v2/version/1/ + description: '' + /api/v2/region/: + get: + operationId: region_list + description: A region is an organized area of the Pokémon world. Most often, + the main difference between regions is the species of Pokémon that can be + encountered within them. + summary: List regions + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - location + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedRegionSummaryList' + description: '' + /api/v2/region/{id}/: + get: + operationId: region_retrieve + description: A region is an organized area of the Pokémon world. Most often, + the main difference between regions is the species of Pokémon that can be + encountered within them. + summary: Get region + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this region. + required: true + tags: + - location + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RegionDetail' + description: '' + /api/v2/stat/: + get: + operationId: stat_list + description: Stats determine certain aspects of battles. Each Pokémon has a + value for each stat which grows as they gain levels and can be altered momentarily + by effects in battles. + summary: List stats + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedStatSummaryList' + description: '' + /api/v2/stat/{id}/: + get: + operationId: stat_retrieve + description: Stats determine certain aspects of battles. Each Pokémon has a + value for each stat which grows as they gain levels and can be altered momentarily + by effects in battles. + summary: Get stat + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this stat. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/StatDetail' + description: '' + /api/v2/super-contest-effect/: + get: + operationId: super_contest_effect_list + description: Super contest effects refer to the effects of moves when used in + super contests. + summary: List super contest effects + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - contests + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedSuperContestEffectSummaryList' + description: '' + /api/v2/super-contest-effect/{id}/: + get: + operationId: super_contest_effect_retrieve + description: Super contest effects refer to the effects of moves when used in + super contests. + summary: Get super contest effect + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this super contest effect. + required: true + tags: + - contests + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SuperContestEffectDetail' + description: '' + /api/v2/type/: + get: + operationId: type_list + description: 'Types are properties for Pokémon and their moves. Each type has + three properties: which types of Pokémon it is super effective against, which + types of Pokémon it is not very effective against, and which types of Pokémon + it is completely ineffective against.' + summary: List types + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedTypeSummaryList' + description: '' + /api/v2/type/{id}/: + get: + operationId: type_retrieve + description: 'Types are properties for Pokémon and their moves. Each type has + three properties: which types of Pokémon it is super effective against, which + types of Pokémon it is not very effective against, and which types of Pokémon + it is completely ineffective against.' + summary: Get types + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this type. + required: true + tags: + - pokemon + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TypeDetail' + description: '' + /api/v2/version/: + get: + operationId: version_list + description: Versions of the games, e.g., Red, Blue or Yellow. + summary: List versions + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - games + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedVersionSummaryList' + description: '' + /api/v2/version-group/: + get: + operationId: version_group_list + description: Version groups categorize highly similar versions of the games. + summary: List version groups + parameters: + - name: limit + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - name: offset + required: false + in: query + description: The initial index from which to return the results. + schema: + type: integer + tags: + - games + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedVersionGroupSummaryList' + description: '' + /api/v2/version-group/{id}/: + get: + operationId: version_group_retrieve + description: Version groups categorize highly similar versions of the games. + summary: Get version group + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this version group. + required: true + tags: + - games + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/VersionGroupDetail' + description: '' + /api/v2/version/{id}/: + get: + operationId: version_retrieve + description: Versions of the games, e.g., Red, Blue or Yellow. + summary: Get version + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this version. + required: true + tags: + - games + security: + - cookieAuth: [] + - basicAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/VersionDetail' + description: '' +components: + schemas: + AbilityChange: + type: object + properties: + version_group: + $ref: '#/components/schemas/VersionGroupSummary' + effect_entries: + type: array + items: + $ref: '#/components/schemas/AbilityChangeEffectText' + readOnly: true + required: + - effect_entries + - version_group + AbilityChangeEffectText: + type: object + properties: + effect: + type: string + maxLength: 6000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - effect + - language + AbilityDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + is_main_series: + type: boolean + generation: + $ref: '#/components/schemas/GenerationSummary' + names: + type: array + items: + $ref: '#/components/schemas/AbilityName' + readOnly: true + effect_entries: + type: array + items: + $ref: '#/components/schemas/AbilityEffectText' + readOnly: true + effect_changes: + type: array + items: + $ref: '#/components/schemas/AbilityChange' + readOnly: true + flavor_text_entries: + type: array + items: + $ref: '#/components/schemas/AbilityFlavorText' + readOnly: true + pokemon: + type: array + items: + type: object + required: + - is_hidden + - slot + - pokemon + properties: + is_hidden: + type: boolean + slot: + type: integer + format: int32 + examples: + - 3 + pokemon: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - gloom + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon/44/ + readOnly: true + required: + - effect_changes + - effect_entries + - flavor_text_entries + - generation + - id + - name + - names + - pokemon + AbilityEffectText: + type: object + properties: + effect: + type: string + maxLength: 6000 + short_effect: + type: string + maxLength: 300 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - effect + - language + - short_effect + AbilityFlavorText: + type: object + properties: + flavor_text: + type: string + language: + $ref: '#/components/schemas/LanguageSummary' + version_group: + $ref: '#/components/schemas/VersionGroupSummary' + required: + - flavor_text + - language + - version_group + AbilityName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + AbilitySummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + BerryDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + growth_time: + type: integer + maximum: 2147483647 + minimum: -2147483648 + max_harvest: + type: integer + maximum: 2147483647 + minimum: -2147483648 + natural_gift_power: + type: integer + maximum: 2147483647 + minimum: -2147483648 + size: + type: integer + maximum: 2147483647 + minimum: -2147483648 + smoothness: + type: integer + maximum: 2147483647 + minimum: -2147483648 + soil_dryness: + type: integer + maximum: 2147483647 + minimum: -2147483648 + firmness: + $ref: '#/components/schemas/BerryFirmnessSummary' + flavors: + type: array + items: + type: object + required: + - potency + - flavor + properties: + potency: + type: integer + examples: + - 10 + flavor: + type: object + require: + - name + - url + properties: + name: + type: string + description: The name of the flavor + examples: + - spicy + url: + type: string + format: uri + description: The URL to get more information about the flavor + examples: + - https://pokeapi.co/api/v2/berry-flavor/1/ + readOnly: true + item: + $ref: '#/components/schemas/ItemSummary' + natural_gift_type: + $ref: '#/components/schemas/TypeSummary' + required: + - firmness + - flavors + - growth_time + - id + - item + - max_harvest + - name + - natural_gift_power + - natural_gift_type + - size + - smoothness + - soil_dryness + BerryFirmnessDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + berries: + type: array + items: + $ref: '#/components/schemas/BerrySummary' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/BerryFirmnessName' + readOnly: true + required: + - berries + - id + - name + - names + BerryFirmnessName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + BerryFirmnessSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + BerryFlavorDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + berries: + type: array + items: + type: object + required: + - potency + - berry + properties: + potency: + type: integer + examples: + - 10 + berry: + type: object + require: + - name + - url + properties: + name: + type: string + description: The name of the berry + examples: + - rowap + url: + type: string + format: uri + description: The URL to get more information about the berry + examples: + - https://pokeapi.co/api/v2/berry/64/ + readOnly: true + contest_type: + $ref: '#/components/schemas/ContestTypeSummary' + names: + type: array + items: + $ref: '#/components/schemas/BerryFlavorName' + readOnly: true + required: + - berries + - contest_type + - id + - name + - names + BerryFlavorName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + BerryFlavorSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + BerrySummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + CharacteristicDescription: + type: object + properties: + description: + type: string + maxLength: 1000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + CharacteristicDetail: + type: object + properties: + id: + type: integer + readOnly: true + gene_modulo: + type: integer + possible_values: + type: array + items: + type: integer + format: int32 + examples: + - - 0 + - 5 + - 10 + - 15 + - 20 + - 25 + - 30 + readOnly: true + highest_stat: + $ref: '#/components/schemas/StatSummary' + descriptions: + type: array + items: + $ref: '#/components/schemas/CharacteristicDescription' + readOnly: true + required: + - descriptions + - gene_modulo + - highest_stat + - id + - possible_values + CharacteristicSummary: + type: object + properties: + url: + type: string + format: uri + readOnly: true + required: + - url + ContestEffectDetail: + type: object + properties: + id: + type: integer + readOnly: true + appeal: + type: integer + maximum: 2147483647 + minimum: -2147483648 + jam: + type: integer + maximum: 2147483647 + minimum: -2147483648 + effect_entries: + type: array + items: + $ref: '#/components/schemas/ContestEffectEffectText' + readOnly: true + flavor_text_entries: + type: array + items: + $ref: '#/components/schemas/ContestEffectFlavorText' + readOnly: true + required: + - appeal + - effect_entries + - flavor_text_entries + - id + - jam + ContestEffectEffectText: + type: object + properties: + effect: + type: string + maxLength: 6000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - effect + - language + ContestEffectFlavorText: + type: object + properties: + flavor_text: + type: string + maxLength: 500 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - flavor_text + - language + ContestEffectSummary: + type: object + properties: + url: + type: string + format: uri + readOnly: true + required: + - url + ContestTypeDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + berry_flavor: + allOf: + - $ref: '#/components/schemas/BerryFlavorSummary' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/ContestTypeName' + readOnly: true + required: + - berry_flavor + - id + - name + - names + ContestTypeName: + type: object + properties: + name: + type: string + maxLength: 100 + color: + type: string + maxLength: 10 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - color + - language + - name + ContestTypeSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + EggGroupDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + names: + type: array + items: + $ref: '#/components/schemas/EggGroupName' + readOnly: true + pokemon_species: + type: array + items: + type: object + required: + - potency + - flavor + properties: + name: + type: string + description: Pokemon species name. + examples: + - bulbasaur + url: + type: string + format: uri + description: The URL to get more information about the species + examples: + - https://pokeapi.co/api/v2/pokemon-species/1/ + readOnly: true + required: + - id + - name + - names + - pokemon_species + EggGroupName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + EggGroupSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + EncounterConditionDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + values: + type: array + items: + $ref: '#/components/schemas/EncounterConditionValueSummary' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/EncounterConditionName' + readOnly: true + required: + - id + - name + - names + - values + EncounterConditionName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + EncounterConditionSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + EncounterConditionValueDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + condition: + $ref: '#/components/schemas/EncounterConditionSummary' + names: + type: array + items: + $ref: '#/components/schemas/EncounterConditionValueName' + readOnly: true + required: + - condition + - id + - name + - names + EncounterConditionValueName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + EncounterConditionValueSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + EncounterMethodDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + order: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + names: + type: array + items: + $ref: '#/components/schemas/EncounterMethodName' + readOnly: true + required: + - id + - name + - names + EncounterMethodName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + EncounterMethodSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + EvolutionChainDetail: + type: object + properties: + id: + type: integer + readOnly: true + baby_trigger_item: + $ref: '#/components/schemas/ItemSummary' + chain: + type: object + required: + - evolution_details + - evolves_to + - is_baby + - species + properties: + evolution_details: + type: array + items: {} + examples: [] + evolves_to: + type: array + items: + type: object + required: + - evolution_details + - evolves_to + - is_baby + - species + properties: + evolution_details: + type: array + items: + type: object + required: + - gender + - held_item + - item + - known_move + - known_move_type + - location + - min_affection + - min_beauty + - min_happiness + - min_level + - needs_overworld_rain + - party_species + - party_type + - relative_physical_stats + - time_of_day + - trade_species + - trigger + - turn_upside_down + properties: + gender: + type: object + nullable: true + required: + - name + - url + properties: + name: + type: string + examples: + - 1 + url: + type: string + format: uri + examples: + - 2 + held_item: + type: object + nullable: true + required: + - name + - url + properties: + name: + type: string + examples: + - 1 + url: + type: string + format: uri + examples: + - 2 + item: + type: object + nullable: true + required: + - name + - url + properties: + name: + type: string + examples: + - 1 + url: + type: string + format: uri + examples: + - 2 + known_move: + type: '' + nullable: true + known_move_type: + type: '' + nullable: true + location: + type: object + nullable: true + required: + - name + - url + properties: + name: + type: string + url: + type: string + format: uri + min_affection: + type: integer + format: int32 + nullable: true + min_beauty: + type: integer + format: int32 + nullable: true + min_happiness: + type: integer + format: int32 + nullable: true + min_level: + type: integer + format: int32 + nullable: true + needs_overworld_rain: + type: boolean + nullable: true + party_species: + type: string + nullable: true + party_type: + type: string + nullable: true + relative_physical_stats: + type: string + nullable: true + time_of_day: + type: string + trade_species: + type: string + nullable: true + trigger: + type: object + required: + - name + - url + properties: + name: + type: string + url: + type: string + format: uri + turn_upside_down: + type: boolean + is_baby: + type: boolean + species: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - happiny + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon-species/440/ + is_baby: + type: boolean + species: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - happiny + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon-species/440/ + readOnly: true + required: + - baby_trigger_item + - chain + - id + EvolutionChainSummary: + type: object + properties: + url: + type: string + format: uri + readOnly: true + required: + - url + EvolutionTriggerDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + names: + type: array + items: + $ref: '#/components/schemas/EvolutionTriggerName' + readOnly: true + pokemon_species: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - ivysaur + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon-species/2/ + readOnly: true + required: + - id + - name + - names + - pokemon_species + EvolutionTriggerName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + EvolutionTriggerSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + Experience: + type: object + properties: + level: + type: integer + maximum: 2147483647 + minimum: -2147483648 + experience: + type: integer + maximum: 2147483647 + minimum: -2147483648 + required: + - experience + - level + GenderDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + pokemon_species_details: + type: array + items: + type: object + required: + - rate + - pokemon_species + properties: + rate: + type: integer + format: int32 + examples: + - 1 + pokemon_species: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - bulbasaur + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon-species/1/ + readOnly: true + required_for_evolution: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - wormadam + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon-species/413/ + readOnly: true + required: + - id + - name + - pokemon_species_details + - required_for_evolution + GenderSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + GenerationDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + abilities: + type: array + items: + $ref: '#/components/schemas/AbilitySummary' + readOnly: true + main_region: + $ref: '#/components/schemas/RegionSummary' + moves: + type: array + items: + $ref: '#/components/schemas/MoveSummary' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/GenerationName' + readOnly: true + pokemon_species: + type: array + items: + $ref: '#/components/schemas/PokemonSpeciesSummary' + readOnly: true + types: + type: array + items: + $ref: '#/components/schemas/TypeSummary' + readOnly: true + version_groups: + type: array + items: + $ref: '#/components/schemas/VersionGroupSummary' + readOnly: true + required: + - abilities + - id + - main_region + - moves + - name + - names + - pokemon_species + - types + - version_groups + GenerationName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + GenerationSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + GrowthRateDescription: + type: object + properties: + description: + type: string + maxLength: 1000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + GrowthRateDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + formula: + type: string + maxLength: 500 + descriptions: + type: array + items: + $ref: '#/components/schemas/GrowthRateDescription' + readOnly: true + levels: + type: array + items: + $ref: '#/components/schemas/Experience' + readOnly: true + pokemon_species: + type: array + items: + $ref: '#/components/schemas/PokemonSpeciesSummary' + readOnly: true + required: + - descriptions + - formula + - id + - levels + - name + - pokemon_species + GrowthRateSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + ItemAttributeDescription: + type: object + properties: + description: + type: string + maxLength: 1000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + ItemAttributeDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + descriptions: + type: array + items: + $ref: '#/components/schemas/ItemAttributeDescription' + readOnly: true + items: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - master-ball + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/item/1/ + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/ItemAttributeName' + readOnly: true + required: + - descriptions + - id + - items + - name + - names + ItemAttributeName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + ItemAttributeSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + ItemCategoryDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + items: + type: array + items: + $ref: '#/components/schemas/ItemSummary' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/ItemCategoryName' + readOnly: true + pocket: + $ref: '#/components/schemas/ItemPocketSummary' + required: + - id + - items + - name + - names + - pocket + ItemCategoryName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + ItemCategorySummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + ItemDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + cost: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + fling_power: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + fling_effect: + $ref: '#/components/schemas/ItemFlingEffectSummary' + attributes: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - countable + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/item-attribute/1/ + readOnly: true + category: + $ref: '#/components/schemas/ItemCategorySummary' + effect_entries: + type: array + items: + $ref: '#/components/schemas/ItemEffectText' + readOnly: true + flavor_text_entries: + type: array + items: + $ref: '#/components/schemas/ItemFlavorText' + readOnly: true + game_indices: + type: array + items: + $ref: '#/components/schemas/ItemGameIndex' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/ItemName' + readOnly: true + held_by_pokemon: + type: array + items: + type: object + required: + - pokemon + - version-details + properties: + pokemon: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - farfetchd + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon/83/ + version-details: + type: array + items: + type: object + required: + - rarity + - version + properties: + rarity: + type: integer + format: int32 + examples: + - 5 + version: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - ruby + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/version/7/ + readOnly: true + sprites: + type: object + required: + - default + properties: + default: + type: string + format: uri + examples: + - https://pokeapi.co/media/sprites/items/master-ball.png + readOnly: true + baby_trigger_for: + type: object + required: + - url + properties: + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/evolution-chain/51/ + readOnly: true + machines: + type: array + items: + type: object + required: + - machine + - version_group + properties: + machine: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/machine/1/ + version_group: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - sword-shield + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/version-group/20/ + readOnly: true + required: + - attributes + - baby_trigger_for + - category + - effect_entries + - flavor_text_entries + - fling_effect + - game_indices + - held_by_pokemon + - id + - machines + - name + - names + - sprites + ItemEffectText: + type: object + properties: + effect: + type: string + maxLength: 6000 + short_effect: + type: string + maxLength: 300 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - effect + - language + - short_effect + ItemFlavorText: + type: object + properties: + text: + type: string + version_group: + $ref: '#/components/schemas/VersionGroupSummary' + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - text + - version_group + ItemFlingEffectDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + effect_entries: + type: array + items: + $ref: '#/components/schemas/ItemFlingEffectEffectText' + readOnly: true + items: + type: array + items: + $ref: '#/components/schemas/ItemSummary' + readOnly: true + required: + - effect_entries + - id + - items + - name + ItemFlingEffectEffectText: + type: object + properties: + effect: + type: string + maxLength: 6000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - effect + - language + ItemFlingEffectSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + ItemGameIndex: + type: object + properties: + game_index: + type: integer + maximum: 2147483647 + minimum: -2147483648 + generation: + $ref: '#/components/schemas/GenerationSummary' + required: + - game_index + - generation + ItemName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + ItemPocketDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + categories: + type: array + items: + $ref: '#/components/schemas/ItemCategorySummary' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/ItemPocketName' + readOnly: true + required: + - categories + - id + - name + - names + ItemPocketName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + ItemPocketSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + ItemSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + LanguageDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + official: + type: boolean + iso639: + type: string + maxLength: 10 + iso3166: + type: string + maxLength: 2 + names: + type: array + items: + $ref: '#/components/schemas/LanguageName' + readOnly: true + required: + - id + - iso3166 + - iso639 + - name + - names + LanguageName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + LanguageSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + LocationAreaDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + game_index: + type: integer + maximum: 2147483647 + minimum: -2147483648 + encounter_method_rates: + type: array + items: + type: object + required: + - encounter_method + - version_details + properties: + encounter_method: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - old-rod + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/encounter-method/2/ + version_details: + type: array + items: + type: object + required: + - rate + - version + properties: + rate: + type: integer + format: int32 + examples: + - 5 + version: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - platinum + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/version/14/ + readOnly: true + location: + $ref: '#/components/schemas/LocationSummary' + names: + type: array + items: + $ref: '#/components/schemas/LocationAreaName' + readOnly: true + pokemon_encounters: + type: array + items: + type: object + required: + - pokemon + - version_details + properties: + pokemon: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - tentacool + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon/72/ + version_details: + type: array + items: + type: object + required: + - version + - max_chance + - encounter_details + properties: + version: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - diamond + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/version/12/ + max_chance: + type: integer + format: int32 + examples: + - 60 + encounter_details: + type: object + required: + - min_level + - max_level + - condition_value + - chance + - method + properties: + min_level: + type: integer + format: int32 + examples: + - 20 + max_level: + type: integer + format: int32 + examples: + - 30 + condition_values: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - slot2-sapphire + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/encounter-condition-value/10/ + chance: + type: integer + format: int32 + examples: + - 60 + method: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - surf + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/encounter-method/5/ + readOnly: true + required: + - encounter_method_rates + - game_index + - id + - location + - name + - names + - pokemon_encounters + LocationAreaName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + LocationAreaSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + LocationDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + region: + $ref: '#/components/schemas/RegionSummary' + names: + type: array + items: + $ref: '#/components/schemas/LocationName' + readOnly: true + game_indices: + type: array + items: + $ref: '#/components/schemas/LocationGameIndex' + readOnly: true + areas: + type: array + items: + $ref: '#/components/schemas/LocationAreaSummary' + readOnly: true + required: + - areas + - game_indices + - id + - name + - names + - region + LocationGameIndex: + type: object + properties: + game_index: + type: integer + maximum: 2147483647 + minimum: -2147483648 + generation: + $ref: '#/components/schemas/GenerationSummary' + required: + - game_index + - generation + LocationName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + LocationSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + MachineDetail: + type: object + properties: + id: + type: integer + readOnly: true + item: + $ref: '#/components/schemas/ItemSummary' + version_group: + $ref: '#/components/schemas/VersionGroupSummary' + move: + $ref: '#/components/schemas/MoveSummary' + required: + - id + - item + - move + - version_group + MachineSummary: + type: object + properties: + url: + type: string + format: uri + readOnly: true + required: + - url + MoveBattleStyleDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + names: + type: array + items: + $ref: '#/components/schemas/MoveBattleStyleName' + readOnly: true + required: + - id + - name + - names + MoveBattleStyleName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + MoveBattleStyleSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + MoveChange: + type: object + properties: + accuracy: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + power: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + pp: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + effect_chance: + type: integer + effect_entries: + type: array + items: + type: object + required: + - effect + - short_effect + - language + properties: + effect: + type: string + examples: + - Inflicts [regular damage]{mechanic:regular-damage}. + short_effect: + type: string + examples: + - Inflicts regular damage with no additional effect. + language: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - en + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/language/9/ + readOnly: true + type: + $ref: '#/components/schemas/TypeSummary' + version_group: + $ref: '#/components/schemas/VersionGroupSummary' + required: + - effect_chance + - effect_entries + - type + - version_group + MoveDamageClassDescription: + type: object + properties: + description: + type: string + maxLength: 1000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + MoveDamageClassDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + descriptions: + type: array + items: + $ref: '#/components/schemas/MoveDamageClassDescription' + readOnly: true + moves: + type: array + items: + $ref: '#/components/schemas/MoveSummary' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/MoveDamageClassName' + readOnly: true + required: + - descriptions + - id + - moves + - name + - names + MoveDamageClassName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + MoveDamageClassSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + MoveDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + accuracy: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + effect_chance: + type: integer + pp: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + priority: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + power: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + contest_combos: + type: object + required: + - normal + - super + properties: + normal: + type: object + required: + - use_before + - use_after + properties: + use_before: + type: array + nullable: true + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - fire-punch + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/move/7/ + use_after: + type: array + nullable: true + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - ice-punch + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/move/8/ + super: + type: object + required: + - use_before + - use_after + properties: + use_before: + type: array + nullable: true + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - night-slash + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/move/400/ + use_after: + type: array + nullable: true + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - focus-energy + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/move/116/ + readOnly: true + contest_type: + $ref: '#/components/schemas/ContestTypeSummary' + contest_effect: + $ref: '#/components/schemas/ContestEffectSummary' + damage_class: + $ref: '#/components/schemas/MoveDamageClassSummary' + effect_entries: + type: array + items: + type: object + required: + - effect + - short_effect + - language + properties: + effect: + type: string + examples: + - Inflicts [regular damage]{mechanic:regular-damage}. + short_effect: + type: string + examples: + - Inflicts regular damage with no additional effect. + language: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - en + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/language/9/ + readOnly: true + effect_changes: + type: array + items: + type: object + required: + - effect_entries + - version_group + properties: + effect_entries: + type: array + items: + type: object + required: + - effect + - language + properties: + effect: + type: string + examples: + - Hits Pokémon under the effects of dig and fly. + language: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - en + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/language/9/ + version_group: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - gold-silver + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/version-group/3/ + readOnly: true + generation: + $ref: '#/components/schemas/GenerationSummary' + meta: + allOf: + - $ref: '#/components/schemas/MoveMeta' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/MoveName' + readOnly: true + past_values: + type: array + items: + $ref: '#/components/schemas/MoveChange' + readOnly: true + stat_changes: + type: array + items: + type: object + required: + - change + - stat + properties: + change: + type: integer + format: int32 + examples: + - 2 + stat: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - attack + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/stat/1/ + readOnly: true + super_contest_effect: + $ref: '#/components/schemas/SuperContestEffectSummary' + target: + $ref: '#/components/schemas/MoveTargetSummary' + type: + $ref: '#/components/schemas/TypeSummary' + machines: + type: array + items: + type: object + required: + - machine + - version_group + properties: + machine: + type: object + required: + - url + properties: + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/machine/1/ + version_group: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - sword-shield + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/version-group/1/ + readOnly: true + flavor_text_entries: + type: array + items: + $ref: '#/components/schemas/MoveFlavorText' + readOnly: true + learned_by_pokemon: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - clefairy + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon/35/ + readOnly: true + required: + - contest_combos + - contest_effect + - contest_type + - damage_class + - effect_chance + - effect_changes + - effect_entries + - flavor_text_entries + - generation + - id + - learned_by_pokemon + - machines + - meta + - name + - names + - past_values + - stat_changes + - super_contest_effect + - target + - type + MoveFlavorText: + type: object + properties: + flavor_text: + type: string + language: + $ref: '#/components/schemas/LanguageSummary' + version_group: + $ref: '#/components/schemas/VersionGroupSummary' + required: + - flavor_text + - language + - version_group + MoveLearnMethodDescription: + type: object + properties: + description: + type: string + maxLength: 1000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + MoveLearnMethodDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + names: + type: array + items: + $ref: '#/components/schemas/MoveLearnMethodName' + readOnly: true + descriptions: + type: array + items: + $ref: '#/components/schemas/MoveLearnMethodDescription' + readOnly: true + version_groups: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - red-blue + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/version-group/1/ + readOnly: true + required: + - descriptions + - id + - name + - names + - version_groups + MoveLearnMethodName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + MoveLearnMethodSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + MoveMeta: + type: object + properties: + ailment: + $ref: '#/components/schemas/MoveMetaAilmentSummary' + category: + $ref: '#/components/schemas/MoveMetaCategorySummary' + min_hits: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + max_hits: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + min_turns: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + max_turns: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + drain: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + healing: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + crit_rate: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + ailment_chance: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + flinch_chance: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + stat_chance: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + required: + - ailment + - category + MoveMetaAilmentDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + moves: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - thunder-punch + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/move/9/ + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/MoveMetaAilmentName' + readOnly: true + required: + - id + - moves + - name + - names + MoveMetaAilmentName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + MoveMetaAilmentSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + MoveMetaCategoryDescription: + type: object + properties: + description: + type: string + maxLength: 1000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + MoveMetaCategoryDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + descriptions: + type: array + items: + $ref: '#/components/schemas/MoveMetaCategoryDescription' + readOnly: true + moves: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - sing + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/move/47/ + readOnly: true + required: + - descriptions + - id + - moves + - name + MoveMetaCategorySummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + MoveName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + MoveSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + MoveTargetDescription: + type: object + properties: + description: + type: string + maxLength: 1000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + MoveTargetDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + descriptions: + type: array + items: + $ref: '#/components/schemas/MoveTargetDescription' + readOnly: true + moves: + type: array + items: + $ref: '#/components/schemas/MoveSummary' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/MoveTargetName' + readOnly: true + required: + - descriptions + - id + - moves + - name + - names + MoveTargetName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + MoveTargetSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + NatureBattleStylePreference: + type: object + properties: + low_hp_preference: + type: integer + maximum: 2147483647 + minimum: -2147483648 + high_hp_preference: + type: integer + maximum: 2147483647 + minimum: -2147483648 + move_battle_style: + $ref: '#/components/schemas/MoveBattleStyleSummary' + required: + - high_hp_preference + - low_hp_preference + - move_battle_style + NatureDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + decreased_stat: + $ref: '#/components/schemas/StatSummary' + increased_stat: + $ref: '#/components/schemas/StatSummary' + likes_flavor: + $ref: '#/components/schemas/BerryFlavorSummary' + hates_flavor: + $ref: '#/components/schemas/BerryFlavorSummary' + berries: + type: array + items: + $ref: '#/components/schemas/BerrySummary' + readOnly: true + pokeathlon_stat_changes: + type: array + items: + type: object + required: + - max_change + - pokeathlon_stat + properties: + max_change: + type: integer + format: int32 + examples: + - 1 + pokeathlon_stat: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - power + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokeathlon-stat/2/ + readOnly: true + move_battle_style_preferences: + type: array + items: + $ref: '#/components/schemas/NatureBattleStylePreference' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/NatureName' + readOnly: true + required: + - berries + - decreased_stat + - hates_flavor + - id + - increased_stat + - likes_flavor + - move_battle_style_preferences + - name + - names + - pokeathlon_stat_changes + NatureName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + NatureSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + PaginatedAbilitySummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/AbilitySummary' + PaginatedBerryFirmnessSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/BerryFirmnessSummary' + PaginatedBerryFlavorSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/BerryFlavorSummary' + PaginatedBerrySummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/BerrySummary' + PaginatedCharacteristicSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/CharacteristicSummary' + PaginatedContestEffectSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/ContestEffectSummary' + PaginatedContestTypeSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/ContestTypeSummary' + PaginatedEggGroupSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/EggGroupSummary' + PaginatedEncounterConditionSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/EncounterConditionSummary' + PaginatedEncounterConditionValueSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/EncounterConditionValueSummary' + PaginatedEncounterMethodSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/EncounterMethodSummary' + PaginatedEvolutionChainSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/EvolutionChainSummary' + PaginatedEvolutionTriggerSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/EvolutionTriggerSummary' + PaginatedGenderSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/GenderSummary' + PaginatedGenerationSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/GenerationSummary' + PaginatedGrowthRateSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/GrowthRateSummary' + PaginatedItemAttributeSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/ItemAttributeSummary' + PaginatedItemCategorySummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/ItemCategorySummary' + PaginatedItemFlingEffectSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/ItemFlingEffectSummary' + PaginatedItemPocketSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/ItemPocketSummary' + PaginatedItemSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/ItemSummary' + PaginatedLanguageSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/LanguageSummary' + PaginatedLocationAreaSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/LocationAreaSummary' + PaginatedLocationSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/LocationSummary' + PaginatedMachineSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/MachineSummary' + PaginatedMoveBattleStyleSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/MoveBattleStyleSummary' + PaginatedMoveDamageClassSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/MoveDamageClassSummary' + PaginatedMoveLearnMethodSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/MoveLearnMethodSummary' + PaginatedMoveMetaAilmentSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/MoveMetaAilmentSummary' + PaginatedMoveMetaCategorySummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/MoveMetaCategorySummary' + PaginatedMoveSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/MoveSummary' + PaginatedMoveTargetSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/MoveTargetSummary' + PaginatedNatureSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/NatureSummary' + PaginatedPalParkAreaSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/PalParkAreaSummary' + PaginatedPokeathlonStatSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/PokeathlonStatSummary' + PaginatedPokedexSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/PokedexSummary' + PaginatedPokemonColorSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/PokemonColorSummary' + PaginatedPokemonFormSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/PokemonFormSummary' + PaginatedPokemonHabitatSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/PokemonHabitatSummary' + PaginatedPokemonShapeSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/PokemonShapeSummary' + PaginatedPokemonSpeciesSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/PokemonSpeciesSummary' + PaginatedPokemonSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/PokemonSummary' + PaginatedRegionSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/RegionSummary' + PaginatedStatSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/StatSummary' + PaginatedSuperContestEffectSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/SuperContestEffectSummary' + PaginatedTypeSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/TypeSummary' + PaginatedVersionGroupSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/VersionGroupSummary' + PaginatedVersionSummaryList: + type: object + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=400&limit=100 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?offset=200&limit=100 + results: + type: array + items: + $ref: '#/components/schemas/VersionSummary' + PalParkAreaDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + names: + type: array + items: + $ref: '#/components/schemas/PalParkAreaName' + readOnly: true + pokemon_encounters: + type: array + items: + type: object + required: + - base_score + - pokemon-species + - rate + properties: + base_score: + type: integer + format: int32 + examples: + - 50 + pokemon-species: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - bulbasaur + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon-species/1/ + rate: + type: integer + format: int32 + examples: + - 30 + readOnly: true + required: + - id + - name + - names + - pokemon_encounters + PalParkAreaName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + PalParkAreaSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + PokeathlonStatDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + affecting_natures: + type: object + required: + - decrease + - increase + properties: + decrease: + type: array + items: + type: object + required: + - max_change + - nature + properties: + max_change: + type: integer + format: int32 + maximum: -1 + examples: + - -1 + nature: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - hardy + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/nature/1/ + increase: + type: array + items: + type: object + required: + - max_change + - nature + properties: + max_change: + type: integer + format: int32 + minimum: 1 + examples: + - 2 + nature: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - hardy + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/nature/1/ + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/PokeathlonStatName' + readOnly: true + required: + - affecting_natures + - id + - name + - names + PokeathlonStatName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + PokeathlonStatSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + PokedexDescription: + type: object + properties: + description: + type: string + maxLength: 1000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + PokedexDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + is_main_series: + type: boolean + descriptions: + type: array + items: + $ref: '#/components/schemas/PokedexDescription' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/PokedexName' + readOnly: true + pokemon_entries: + type: array + items: + type: object + required: + - entry_number + - pokemon_species + properties: + entry_number: + type: integer + format: int32 + examples: + - 1 + pokemon_species: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - bulbasaur + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon-species/1/ + readOnly: true + region: + $ref: '#/components/schemas/RegionSummary' + version_groups: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - the-teal-mask + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/version-group/26/ + readOnly: true + required: + - descriptions + - id + - name + - names + - pokemon_entries + - region + - version_groups + PokedexName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + PokedexSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + PokemonColorDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + names: + type: array + items: + $ref: '#/components/schemas/PokemonColorName' + readOnly: true + pokemon_species: + type: array + items: + $ref: '#/components/schemas/PokemonSpeciesSummary' + readOnly: true + required: + - id + - name + - names + - pokemon_species + PokemonColorName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + PokemonColorSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + PokemonDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + base_experience: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + height: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + is_default: + type: boolean + order: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + weight: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + abilities: + type: array + items: + type: object + required: + - ability + - is_hidden + - slot + properties: + ability: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - sand-veil + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/ability/8/ + is_hidden: + type: boolean + slot: + type: integer + format: int32 + examples: + - 1 + readOnly: true + past_abilities: + type: array + items: + type: object + required: + - abilities + - generation + properties: + abilities: + type: array + items: + type: object + required: + - ability + - is_hidden + - slot + properties: + ability: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - levitate + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/ability/26/ + is_hidden: + type: boolean + slot: + type: integer + format: int32 + examples: + - 1 + generation: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - generation-vi + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/generation/6/ + readOnly: true + forms: + type: array + items: + $ref: '#/components/schemas/PokemonFormSummary' + readOnly: true + game_indices: + type: array + items: + $ref: '#/components/schemas/PokemonGameIndex' + readOnly: true + held_items: + type: object + required: + - item + - version_details + properties: + item: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - soft-sand + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/item/214/ + version_details: + type: array + items: + type: object + required: + - rarity + - version + properties: + rarity: + type: integer + format: int32 + examples: + - 5 + version: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - diamond + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/version/12/ + readOnly: true + location_area_encounters: + type: string + examples: + - https://pokeapi.co/api/v2/pokemon/1/encounters + readOnly: true + moves: + type: array + items: + type: object + required: + - move + - version_group_details + properties: + move: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - scratch + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/move/10/ + version_group_details: + type: array + items: + type: object + required: + - level_learned_at + - move_learn_method + - version_group + properties: + level_learned_at: + type: integer + format: int32 + examples: + - 1 + move_learn_method: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - level-up + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/move-learn-method/1/ + version_group: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - red-blue + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/version-group/1/ + readOnly: true + species: + $ref: '#/components/schemas/PokemonSpeciesSummary' + sprites: + type: object + properties: + front_default: + type: string + format: uri + exmaple: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/1.png + additionalProperties: + type: string + format: uri + nullable: true + examples: + - https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/1.png + examples: + - back_default: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/1.png + back_female: null + back_shiny: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/1.png + back_shiny_female: null + front_default: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/1.png + front_female: null + front_shiny: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/shiny/1.png + front_shiny_female: null + readOnly: true + cries: + type: object + required: + - latest + - legacy + properties: + latest: + type: string + format: uri + examples: + - https://raw.githubusercontent.com/PokeAPI/cries/main/cries/pokemon/latest/50.ogg + legacy: + type: string + format: uri + examples: + - https://raw.githubusercontent.com/PokeAPI/cries/main/cries/pokemon/legacy/50.ogg + readOnly: true + stats: + type: array + items: + $ref: '#/components/schemas/PokemonStat' + readOnly: true + types: + type: array + items: + type: object + required: + - slot + - type + properties: + slot: + type: integer + format: int32 + examples: + - 1 + type: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - ghost + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/8/ + readOnly: true + past_types: + type: array + items: + type: object + required: + - generation + - types + properties: + generation: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - generation-v + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/generation/5/ + types: + type: array + items: + type: object + required: + - slot + - type + properties: + slot: + type: integer + format: int32 + examples: + - 1 + type: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - normal + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/1/ + readOnly: true + required: + - abilities + - cries + - forms + - game_indices + - held_items + - id + - location_area_encounters + - moves + - name + - past_abilities + - past_types + - species + - sprites + - stats + - types + PokemonDexEntry: + type: object + properties: + entry_number: + type: integer + pokedex: + $ref: '#/components/schemas/PokedexSummary' + required: + - entry_number + - pokedex + PokemonFormDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + order: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + form_order: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + is_default: + type: boolean + is_battle_only: + type: boolean + is_mega: + type: boolean + form_name: + type: string + maxLength: 30 + pokemon: + $ref: '#/components/schemas/PokemonSummary' + sprites: + type: object + properties: + default: + type: string + format: uri + examples: + - https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/412.png + additionalProperties: + type: string + format: uri + nullable: true + examples: + - https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/412.png + examples: + - back_default: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/412.png + back_female: null + back_shiny: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/412.png + back_shiny_female: null + front_default: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/412.png + front_female: null + front_shiny: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/shiny/412.png + front_shiny_female: null + readOnly: true + version_group: + $ref: '#/components/schemas/VersionGroupSummary' + form_names: + type: array + items: + type: object + required: + - language + - name + properties: + language: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - en + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/language/9/ + name: + type: string + examples: + - Plant Cloak + readOnly: true + names: + type: array + items: + type: object + required: + - language + - name + properties: + language: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - en + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/language/9/ + name: + type: string + examples: + - Plant Cloak + readOnly: true + types: + type: array + items: + type: object + required: + - slot + - type + properties: + slot: + type: integer + format: int32 + examples: + - 1 + type: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - bug + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/7/ + readOnly: true + required: + - form_name + - form_names + - id + - name + - names + - pokemon + - sprites + - types + - version_group + PokemonFormSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + PokemonGameIndex: + type: object + properties: + game_index: + type: integer + maximum: 2147483647 + minimum: -2147483648 + version: + $ref: '#/components/schemas/VersionSummary' + required: + - game_index + - version + PokemonHabitatDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + names: + type: array + items: + $ref: '#/components/schemas/PokemonHabitatName' + readOnly: true + pokemon_species: + type: array + items: + $ref: '#/components/schemas/PokemonSpeciesSummary' + readOnly: true + required: + - id + - name + - names + - pokemon_species + PokemonHabitatName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + PokemonHabitatSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + PokemonShapeDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + awesome_names: + type: array + items: + type: object + required: + - awesome_name + - language + properties: + awesome_name: + type: string + examples: + - Pomaceous + language: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - en + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/language/9/ + readOnly: true + names: + type: array + items: + type: object + required: + - url + - name + properties: + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/language/9/ + name: + type: string + examples: + - Ball + readOnly: true + pokemon_species: + type: array + items: + $ref: '#/components/schemas/PokemonSpeciesSummary' + readOnly: true + required: + - awesome_names + - id + - name + - names + - pokemon_species + PokemonShapeSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + PokemonSpeciesDescription: + type: object + properties: + description: + type: string + maxLength: 1000 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + PokemonSpeciesDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + order: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + gender_rate: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + capture_rate: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + base_happiness: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + is_baby: + type: boolean + is_legendary: + type: boolean + is_mythical: + type: boolean + hatch_counter: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + has_gender_differences: + type: boolean + forms_switchable: + type: boolean + growth_rate: + $ref: '#/components/schemas/GrowthRateSummary' + pokedex_numbers: + type: array + items: + $ref: '#/components/schemas/PokemonDexEntry' + readOnly: true + egg_groups: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - monster + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/egg-group/1/ + readOnly: true + color: + $ref: '#/components/schemas/PokemonColorSummary' + shape: + $ref: '#/components/schemas/PokemonShapeSummary' + evolves_from_species: + $ref: '#/components/schemas/PokemonSpeciesSummary' + evolution_chain: + $ref: '#/components/schemas/EvolutionChainSummary' + habitat: + $ref: '#/components/schemas/PokemonHabitatSummary' + generation: + $ref: '#/components/schemas/GenerationSummary' + names: + type: array + items: + type: object + required: + - language + - name + properties: + language: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - en + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/language/9/ + name: + type: string + examples: + - bulbasaur + readOnly: true + pal_park_encounters: + type: array + items: + type: object + required: + - area + - base_score + - rate + properties: + area: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - field + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pal-park-area/2/ + base_score: + type: integer + format: int32 + examples: + - 50 + rate: + type: integer + format: int32 + examples: + - 30 + readOnly: true + form_descriptions: + type: array + items: + $ref: '#/components/schemas/PokemonSpeciesDescription' + readOnly: true + flavor_text_entries: + type: array + items: + $ref: '#/components/schemas/PokemonSpeciesFlavorText' + readOnly: true + genera: + type: array + items: + type: object + required: + - genus + - language + properties: + genus: + type: string + examples: + - Seed Pokémon + language: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - en + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/language/9/ + readOnly: true + varieties: + type: array + items: + type: object + required: + - is_default + - pokemon + properties: + is_default: + type: boolean + pokemon: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - bulbasaur + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokemon/1/ + readOnly: true + required: + - color + - egg_groups + - evolution_chain + - evolves_from_species + - flavor_text_entries + - form_descriptions + - genera + - generation + - growth_rate + - habitat + - id + - name + - names + - pal_park_encounters + - pokedex_numbers + - shape + - varieties + PokemonSpeciesFlavorText: + type: object + properties: + flavor_text: + type: string + language: + $ref: '#/components/schemas/LanguageSummary' + version: + $ref: '#/components/schemas/VersionSummary' + required: + - flavor_text + - language + - version + PokemonSpeciesSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + PokemonStat: + type: object + properties: + base_stat: + type: integer + maximum: 2147483647 + minimum: -2147483648 + effort: + type: integer + maximum: 2147483647 + minimum: -2147483648 + stat: + $ref: '#/components/schemas/StatSummary' + required: + - base_stat + - effort + - stat + PokemonSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + RegionDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + locations: + type: array + items: + $ref: '#/components/schemas/LocationSummary' + readOnly: true + main_generation: + allOf: + - $ref: '#/components/schemas/GenerationSummary' + readOnly: true + names: + type: array + items: + $ref: '#/components/schemas/RegionName' + readOnly: true + pokedexes: + type: array + items: + $ref: '#/components/schemas/PokedexSummary' + readOnly: true + version_groups: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - red-blue + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/version-group/1/ + readOnly: true + required: + - id + - locations + - main_generation + - name + - names + - pokedexes + - version_groups + RegionName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + RegionSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + StatDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + game_index: + type: integer + maximum: 2147483647 + minimum: -2147483648 + is_battle_only: + type: boolean + affecting_moves: + type: object + required: + - decrease + - increase + properties: + increase: + type: array + items: + type: object + required: + - change + - move + properties: + change: + type: integer + format: int32 + examples: + - -1 + move: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - swords-dance + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/move/14/ + decrease: + type: array + items: + type: object + required: + - change + - move + properties: + change: + type: integer + format: int32 + examples: + - 5 + move: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - growl + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/move/45/ + readOnly: true + affecting_natures: + type: object + required: + - increase + - decrease + properties: + increase: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - lonely + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/nature/6/ + decrease: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - bold + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/nature/2/ + readOnly: true + characteristics: + type: array + items: + $ref: '#/components/schemas/CharacteristicSummary' + readOnly: true + move_damage_class: + $ref: '#/components/schemas/MoveDamageClassSummary' + names: + type: array + items: + $ref: '#/components/schemas/StatName' + readOnly: true + required: + - affecting_moves + - affecting_natures + - characteristics + - game_index + - id + - move_damage_class + - name + - names + StatName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + StatSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + SuperContestEffectDetail: + type: object + properties: + id: + type: integer + readOnly: true + appeal: + type: integer + maximum: 2147483647 + minimum: -2147483648 + flavor_text_entries: + type: array + items: + $ref: '#/components/schemas/SuperContestEffectFlavorText' + readOnly: true + moves: + type: array + items: + $ref: '#/components/schemas/MoveSummary' + readOnly: true + required: + - appeal + - flavor_text_entries + - id + - moves + SuperContestEffectFlavorText: + type: object + properties: + flavor_text: + type: string + maxLength: 500 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - flavor_text + - language + SuperContestEffectSummary: + type: object + properties: + url: + type: string + format: uri + readOnly: true + required: + - url + TypeDetail: + type: object + description: Serializer for the Type resource + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + damage_relations: + type: object + required: + - no_damage_to + - half_damage_to + - double_damage_to + - no_damage_from + - half_damage_from + - double_damage_from + properties: + no_damage_to: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - flying + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/3/ + half_damage_to: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - bug + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/7/ + double_damage_to: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - poison + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/4/ + no_damage_from: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - electric + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/13/ + half_damage_from: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - poison + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/4/ + double_damage_from: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - water + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/11/ + readOnly: true + past_damage_relations: + type: array + items: + type: object + required: + - generation + - damage_relations + properties: + generation: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - generation-v + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/generation/5/ + damage_relations: + type: object + required: + - no_damage_to + - half_damage_to + - double_damage_to + - no_damage_from + - half_damage_from + - double_damage_from + properties: + no_damage_to: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - flying + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/3/ + half_damage_to: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - bug + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/7/ + double_damage_to: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - poison + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/4/ + no_damage_from: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - electric + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/13/ + half_damage_from: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - poison + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/4/ + double_damage_from: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - water + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/type/11/ + readOnly: true + game_indices: + type: array + items: + $ref: '#/components/schemas/TypeGameIndex' + readOnly: true + generation: + $ref: '#/components/schemas/GenerationSummary' + move_damage_class: + $ref: '#/components/schemas/MoveDamageClassSummary' + names: + type: array + items: + $ref: '#/components/schemas/AbilityName' + readOnly: true + pokemon: + type: array + items: + type: object + required: + - potency + - flavor + properties: + slot: + type: integer + examples: + - 1 + pokemon: + type: object + require: + - name + - url + properties: + name: + type: string + description: The name of the pokemon + examples: + - sandshrew + url: + type: string + format: uri + description: The URL to get more information about the pokemon + examples: + - https://pokeapi.co/api/v2/pokemon/27/ + readOnly: true + moves: + type: array + items: + $ref: '#/components/schemas/MoveSummary' + readOnly: true + required: + - damage_relations + - game_indices + - generation + - id + - move_damage_class + - moves + - name + - names + - past_damage_relations + - pokemon + TypeGameIndex: + type: object + properties: + game_index: + type: integer + maximum: 2147483647 + minimum: -2147483648 + generation: + $ref: '#/components/schemas/GenerationSummary' + required: + - game_index + - generation + TypeSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + VersionDetail: + type: object + description: |- + Should have a link to Version Group info but the Circular + dependency and compilation order fight eachother and I'm + not sure how to add anything other than a hyperlink + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + names: + type: array + items: + $ref: '#/components/schemas/VersionName' + readOnly: true + version_group: + $ref: '#/components/schemas/VersionGroupSummary' + required: + - id + - name + - names + - version_group + VersionGroupDetail: + type: object + properties: + id: + type: integer + readOnly: true + name: + type: string + maxLength: 100 + order: + type: + - integer + - 'null' + maximum: 2147483647 + minimum: -2147483648 + generation: + $ref: '#/components/schemas/GenerationSummary' + move_learn_methods: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - level-up + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/move-learn-method/1/ + readOnly: true + pokedexes: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - kanto + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/pokedex/2/ + readOnly: true + regions: + type: array + items: + type: object + required: + - name + - url + properties: + name: + type: string + examples: + - kanto + url: + type: string + format: uri + examples: + - https://pokeapi.co/api/v2/region/1/ + readOnly: true + versions: + type: array + items: + $ref: '#/components/schemas/VersionSummary' + readOnly: true + required: + - generation + - id + - move_learn_methods + - name + - pokedexes + - regions + - versions + VersionGroupSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + VersionName: + type: object + properties: + name: + type: string + maxLength: 100 + language: + $ref: '#/components/schemas/LanguageSummary' + required: + - language + - name + VersionSummary: + type: object + properties: + name: + type: string + maxLength: 100 + url: + type: string + format: uri + readOnly: true + required: + - name + - url + securitySchemes: + basicAuth: + type: http + scheme: basic + cookieAuth: + type: apiKey + in: cookie + name: sessionid +servers: +- url: https://pokeapi.co +tags: +- pokemon +- evolution +- berries +- items +- machines +- location +- contest +- moves +- encounters +- games +- utility +externalDocs: + url: https://pokeapi.co/docs/v2 diff --git a/pokemon_v2/api.py b/pokemon_v2/api.py index 790f62b93..7154aeead 100644 --- a/pokemon_v2/api.py +++ b/pokemon_v2/api.py @@ -4,6 +4,8 @@ from rest_framework.views import APIView from django.shortcuts import get_object_or_404 from django.http import Http404 +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter +from drf_spectacular.types import OpenApiTypes from .models import * from .serializers import * @@ -38,6 +40,16 @@ class NameOrIdRetrieval: idPattern = re.compile(r"^-?[0-9]+$") namePattern = re.compile(r"^[0-9A-Za-z\-\+]+$") + @extend_schema( + parameters=[ + OpenApiParameter( + name="id", + description="This parameter can be a string or an integer.", + location=OpenApiParameter.PATH, + type=OpenApiTypes.STR, + ), + ] + ) def get_object(self): queryset = self.get_queryset() queryset = self.filter_queryset(queryset) @@ -70,299 +82,879 @@ class PokeapiCommonViewset( ########## +@extend_schema( + description="Abilities provide passive effects for Pokémon in battle or in the overworld. Pokémon have multiple possible abilities but can have only one ability at a time. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Ability) for greater detail.", + tags=["pokemon"], +) class AbilityResource(PokeapiCommonViewset): queryset = Ability.objects.all() serializer_class = AbilityDetailSerializer list_serializer_class = AbilitySummarySerializer +@extend_schema( + description="Berries are small fruits that can provide HP and status condition restoration, stat enhancement, and even damage negation when eaten by Pokémon. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Berry) for greater detail.", + tags=["berries"], + summary="Get a berry", +) +@extend_schema_view( + list=extend_schema( + summary="List berries", + ) +) class BerryResource(PokeapiCommonViewset): queryset = Berry.objects.all() serializer_class = BerryDetailSerializer list_serializer_class = BerrySummarySerializer +@extend_schema( + description="Berries can be soft or hard. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Category:Berries_by_firmness) for greater detail.", + tags=["berries"], + summary="Get berry by firmness", +) +@extend_schema_view( + list=extend_schema( + summary="List berry firmness", + ) +) class BerryFirmnessResource(PokeapiCommonViewset): queryset = BerryFirmness.objects.all() serializer_class = BerryFirmnessDetailSerializer list_serializer_class = BerryFirmnessSummarySerializer +@extend_schema( + description="Flavors determine whether a Pokémon will benefit or suffer from eating a berry based on their **nature**. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Flavor) for greater detail.", + summary="Get berries by flavor", + tags=["berries"], +) +@extend_schema_view( + list=extend_schema( + summary="List berry flavors", + ) +) class BerryFlavorResource(PokeapiCommonViewset): queryset = BerryFlavor.objects.all() serializer_class = BerryFlavorDetailSerializer list_serializer_class = BerryFlavorSummarySerializer +@extend_schema( + description="Characteristics indicate which stat contains a Pokémon's highest IV. A Pokémon's Characteristic is determined by the remainder of its highest IV divided by 5 (gene_modulo). Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Characteristic) for greater detail.", + summary="Get characteristic", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List charecterictics", + ) +) class CharacteristicResource(PokeapiCommonViewset): queryset = Characteristic.objects.all() serializer_class = CharacteristicDetailSerializer list_serializer_class = CharacteristicSummarySerializer +@extend_schema( + description="Contest effects refer to the effects of moves when used in contests.", + tags=["contests"], + summary="Get contest effect", +) +@extend_schema_view( + list=extend_schema( + summary="List contest effects", + ) +) class ContestEffectResource(PokeapiCommonViewset): queryset = ContestEffect.objects.all() serializer_class = ContestEffectDetailSerializer list_serializer_class = ContestEffectSummarySerializer +@extend_schema( + description="Contest types are categories judges used to weigh a Pokémon's condition in Pokémon contests. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Contest_condition) for greater detail.", + summary="Get contest type", + tags=["contests"], +) +@extend_schema_view( + list=extend_schema( + summary="List contest types", + ) +) class ContestTypeResource(PokeapiCommonViewset): queryset = ContestType.objects.all() serializer_class = ContestTypeDetailSerializer list_serializer_class = ContestTypeSummarySerializer +@extend_schema( + description="Egg Groups are categories which determine which Pokémon are able to interbreed. Pokémon may belong to either one or two Egg Groups. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Egg_Group) for greater detail.", + summary="Get egg group", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List egg groups", + ) +) class EggGroupResource(PokeapiCommonViewset): queryset = EggGroup.objects.all() serializer_class = EggGroupDetailSerializer list_serializer_class = EggGroupSummarySerializer +@extend_schema( + description="Conditions which affect what pokemon might appear in the wild, e.g., day or night.", + summary="Get encounter condition", + tags=["encounters"], +) +@extend_schema_view( + list=extend_schema( + summary="List encounter conditions", + ) +) class EncounterConditionResource(PokeapiCommonViewset): queryset = EncounterCondition.objects.all() serializer_class = EncounterConditionDetailSerializer list_serializer_class = EncounterConditionSummarySerializer +@extend_schema( + description="Encounter condition values are the various states that an encounter condition can have, i.e., time of day can be either day or night.", + summary="Get encounter condition value", + tags=["encounters"], +) +@extend_schema_view( + list=extend_schema( + summary="List encounter condition values", + ) +) class EncounterConditionValueResource(PokeapiCommonViewset): queryset = EncounterConditionValue.objects.all() serializer_class = EncounterConditionValueDetailSerializer list_serializer_class = EncounterConditionValueSummarySerializer +@extend_schema( + description="Methods by which the player might can encounter Pokémon in the wild, e.g., walking in tall grass. Check out Bulbapedia for greater detail.", + summary="Get encounter method", + tags=["encounters"], +) +@extend_schema_view( + list=extend_schema( + summary="List encounter methods", + ) +) class EncounterMethodResource(PokeapiCommonViewset): queryset = EncounterMethod.objects.all() serializer_class = EncounterMethodDetailSerializer list_serializer_class = EncounterMethodSummarySerializer +@extend_schema( + description="Evolution chains are essentially family trees. They start with the lowest stage within a family and detail evolution conditions for each as well as Pokémon they can evolve into up through the hierarchy.", + summary="Get evolution chain", + tags=["evolution"], +) +@extend_schema_view( + list=extend_schema( + summary="List evolution chains", + ) +) class EvolutionChainResource(PokeapiCommonViewset): queryset = EvolutionChain.objects.all() serializer_class = EvolutionChainDetailSerializer list_serializer_class = EvolutionChainSummarySerializer +@extend_schema( + description="Evolution triggers are the events and conditions that cause a Pokémon to evolve. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Methods_of_evolution) for greater detail.", + summary="Get evolution trigger", + tags=["evolution"], +) +@extend_schema_view( + list=extend_schema( + summary="List evolution triggers", + ) +) class EvolutionTriggerResource(PokeapiCommonViewset): queryset = EvolutionTrigger.objects.all() serializer_class = EvolutionTriggerDetailSerializer list_serializer_class = EvolutionTriggerSummarySerializer +@extend_schema( + description="A generation is a grouping of the Pokémon games that separates them based on the Pokémon they include. In each generation, a new set of Pokémon, Moves, Abilities and Types that did not exist in the previous generation are released.", + summary="Get genration", + tags=["games"], +) +@extend_schema_view( + list=extend_schema( + summary="List genrations", + ) +) class GenerationResource(PokeapiCommonViewset): queryset = Generation.objects.all() serializer_class = GenerationDetailSerializer list_serializer_class = GenerationSummarySerializer +@extend_schema( + description="Genders were introduced in Generation II for the purposes of breeding Pokémon but can also result in visual differences or even different evolutionary lines. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Gender) for greater detail.", + summary="Get gender", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List genders", + ) +) class GenderResource(PokeapiCommonViewset): queryset = Gender.objects.all() serializer_class = GenderDetailSerializer list_serializer_class = GenderSummarySerializer +@extend_schema( + description="Growth rates are the speed with which Pokémon gain levels through experience. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Experience) for greater detail.", + summary="Get growth rate", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List growth rates", + ) +) class GrowthRateResource(PokeapiCommonViewset): queryset = GrowthRate.objects.all() serializer_class = GrowthRateDetailSerializer list_serializer_class = GrowthRateSummarySerializer +@extend_schema( + description="An item is an object in the games which the player can pick up, keep in their bag, and use in some manner. They have various uses, including healing, powering up, helping catch Pokémon, or to access a new area.", + summary="Get item", + tags=["items"], +) +@extend_schema_view( + list=extend_schema( + summary="List items", + ) +) class ItemResource(PokeapiCommonViewset): queryset = Item.objects.all() serializer_class = ItemDetailSerializer list_serializer_class = ItemSummarySerializer +@extend_schema( + description="Item categories determine where items will be placed in the players bag.", + summary="Get item category", + tags=["items"], +) +@extend_schema_view( + list=extend_schema( + summary="List item categories", + ) +) class ItemCategoryResource(PokeapiCommonViewset): queryset = ItemCategory.objects.all() serializer_class = ItemCategoryDetailSerializer list_serializer_class = ItemCategorySummarySerializer +@extend_schema( + description='Item attributes define particular aspects of items, e.g."usable in battle" or "consumable".', + summary="Get item attribute", + tags=["items"], +) +@extend_schema_view( + list=extend_schema( + summary="List item attributes", + ) +) class ItemAttributeResource(PokeapiCommonViewset): queryset = ItemAttribute.objects.all() serializer_class = ItemAttributeDetailSerializer list_serializer_class = ItemAttributeSummarySerializer +@extend_schema( + description='The various effects of the move"Fling" when used with different items.', + summary="Get item fling effect", + tags=["items"], +) +@extend_schema_view( + list=extend_schema( + summary="List item fling effects", + ) +) class ItemFlingEffectResource(PokeapiCommonViewset): queryset = ItemFlingEffect.objects.all() serializer_class = ItemFlingEffectDetailSerializer list_serializer_class = ItemFlingEffectSummarySerializer +@extend_schema( + description="Pockets within the players bag used for storing items by category.", + summary="Get item pocket", + tags=["items"], +) +@extend_schema_view( + list=extend_schema( + summary="List item pockets", + ) +) class ItemPocketResource(PokeapiCommonViewset): queryset = ItemPocket.objects.all() serializer_class = ItemPocketDetailSerializer list_serializer_class = ItemPocketSummarySerializer +@extend_schema( + description="Languages for translations of API resource information.", + summary="Get language", + tags=["utility"], +) +@extend_schema_view( + list=extend_schema( + summary="List languages", + ) +) class LanguageResource(PokeapiCommonViewset): queryset = Language.objects.all() serializer_class = LanguageDetailSerializer list_serializer_class = LanguageSummarySerializer +@extend_schema( + description="Locations that can be visited within the games. Locations make up sizable portions of regions, like cities or routes.", + summary="Get location", + tags=["location"], +) +@extend_schema_view( + list=extend_schema( + summary="List locations", + ) +) class LocationResource(PokeapiCommonViewset): queryset = Location.objects.all() serializer_class = LocationDetailSerializer list_serializer_class = LocationSummarySerializer +@extend_schema( + description="Location areas are sections of areas, such as floors in a building or cave. Each area has its own set of possible Pokémon encounters.", + summary="Get location area", + tags=["location"], +) +@extend_schema_view( + list=extend_schema( + summary="List location areas", + ) +) class LocationAreaResource(ListOrDetailSerialRelation, viewsets.ReadOnlyModelViewSet): queryset = LocationArea.objects.all() serializer_class = LocationAreaDetailSerializer list_serializer_class = LocationAreaSummarySerializer +@extend_schema( + description="Machines are the representation of items that teach moves to Pokémon. They vary from version to version, so it is not certain that one specific TM or HM corresponds to a single Machine.", + summary="Get machine", + tags=["machines"], +) +@extend_schema_view( + list=extend_schema( + summary="List machines", + ) +) class MachineResource(PokeapiCommonViewset): queryset = Machine.objects.all() serializer_class = MachineDetailSerializer list_serializer_class = MachineSummarySerializer +@extend_schema( + description="Moves are the skills of Pokémon in battle. In battle, a Pokémon uses one move each turn. Some moves (including those learned by Hidden Machine) can be used outside of battle as well, usually for the purpose of removing obstacles or exploring new areas.", + summary="Get move", + tags=["moves"], +) +@extend_schema_view( + list=extend_schema( + summary="List moves", + ) +) class MoveResource(PokeapiCommonViewset): queryset = Move.objects.all() serializer_class = MoveDetailSerializer list_serializer_class = MoveSummarySerializer +@extend_schema( + description="Damage classes moves can have, e.g. physical, special, or non-damaging.", + summary="Get move damage class", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List move damage classes", + ) +) class MoveDamageClassResource(PokeapiCommonViewset): queryset = MoveDamageClass.objects.all() serializer_class = MoveDamageClassDetailSerializer list_serializer_class = MoveDamageClassSummarySerializer +@extend_schema( + description="Move Ailments are status conditions caused by moves used during battle. See [Bulbapedia](https://bulbapedia.bulbagarden.net/wiki/Status_condition) for greater detail.", + summary="Get move meta ailment", + tags=["moves"], +) +@extend_schema_view( + list=extend_schema( + summary="List move meta ailments", + ) +) class MoveMetaAilmentResource(PokeapiCommonViewset): queryset = MoveMetaAilment.objects.all() serializer_class = MoveMetaAilmentDetailSerializer list_serializer_class = MoveMetaAilmentSummarySerializer +@extend_schema( + description="Styles of moves when used in the Battle Palace. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Battle_Frontier_(Generation_III)) for greater detail.", + summary="Get move battle style", + tags=["moves"], +) +@extend_schema_view( + list=extend_schema( + summary="List move battle styles", + ) +) class MoveBattleStyleResource(PokeapiCommonViewset): queryset = MoveBattleStyle.objects.all() serializer_class = MoveBattleStyleDetailSerializer list_serializer_class = MoveBattleStyleSummarySerializer +@extend_schema( + description="Very general categories that loosely group move effects.", + summary="Get move meta category", + tags=["moves"], +) +@extend_schema_view( + list=extend_schema( + summary="List move meta categories", + ) +) class MoveMetaCategoryResource(PokeapiCommonViewset): queryset = MoveMetaCategory.objects.all() serializer_class = MoveMetaCategoryDetailSerializer list_serializer_class = MoveMetaCategorySummarySerializer +@extend_schema( + description="Methods by which Pokémon can learn moves.", + summary="Get move learn method", + tags=["moves"], +) +@extend_schema_view( + list=extend_schema( + summary="List move learn methods", + ) +) class MoveLearnMethodResource(PokeapiCommonViewset): queryset = MoveLearnMethod.objects.all() serializer_class = MoveLearnMethodDetailSerializer list_serializer_class = MoveLearnMethodSummarySerializer +@extend_schema( + description="Targets moves can be directed at during battle. Targets can be Pokémon, environments or even other moves.", + summary="Get move target", + tags=["moves"], +) +@extend_schema_view( + list=extend_schema( + summary="List move targets", + ) +) class MoveTargetResource(PokeapiCommonViewset): queryset = MoveTarget.objects.all() serializer_class = MoveTargetDetailSerializer list_serializer_class = MoveTargetSummarySerializer +@extend_schema( + description="Natures influence how a Pokémon's stats grow. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Nature) for greater detail.", + summary="Get nature", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List natures", + ) +) class NatureResource(PokeapiCommonViewset): queryset = Nature.objects.all() serializer_class = NatureDetailSerializer list_serializer_class = NatureSummarySerializer +@extend_schema( + description="Areas used for grouping Pokémon encounters in Pal Park. They're like habitats that are specific to Pal Park.", + summary="Get pal park area", + tags=["location"], +) +@extend_schema_view( + list=extend_schema( + summary="List pal park areas", + ) +) class PalParkAreaResource(PokeapiCommonViewset): queryset = PalParkArea.objects.all() serializer_class = PalParkAreaDetailSerializer list_serializer_class = PalParkAreaSummarySerializer +@extend_schema( + description="Pokeathlon Stats are different attributes of a Pokémon's performance in Pokéathlons. In Pokéathlons, competitions happen on different courses; one for each of the different Pokéathlon stats. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9athlon) for greater detail.", + summary="Get pokeathlon stat", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List pokeathlon stats", + ) +) class PokeathlonStatResource(PokeapiCommonViewset): queryset = PokeathlonStat.objects.all() serializer_class = PokeathlonStatDetailSerializer list_serializer_class = PokeathlonStatSummarySerializer +@extend_schema( + description="A Pokédex is a handheld electronic encyclopedia device; one which is capable of recording and retaining information of the various Pokémon in a given region with the exception of the national dex and some smaller dexes related to portions of a region. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pokedex) for greater detail.", + summary="Get pokedex", + tags=["games"], +) +@extend_schema_view( + list=extend_schema( + summary="List pokedex", + ) +) class PokedexResource(PokeapiCommonViewset): queryset = Pokedex.objects.all() serializer_class = PokedexDetailSerializer list_serializer_class = PokedexSummarySerializer +@extend_schema( + description="Colors used for sorting Pokémon in a Pokédex. The color listed in the Pokédex is usually the color most apparent or covering each Pokémon's body. No orange category exists; Pokémon that are primarily orange are listed as red or brown.", + summary="Get pokemon color", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List pokemon colors", + ) +) class PokemonColorResource(PokeapiCommonViewset): queryset = PokemonColor.objects.all() serializer_class = PokemonColorDetailSerializer list_serializer_class = PokemonColorSummarySerializer +@extend_schema( + description="Some Pokémon may appear in one of multiple, visually different forms. These differences are purely cosmetic. For variations within a Pokémon species, which do differ in more than just visuals, the 'Pokémon' entity is used to represent such a variety.", + summary="Get pokemon form", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List pokemon forms", + ) +) class PokemonFormResource(PokeapiCommonViewset): queryset = PokemonForm.objects.all() serializer_class = PokemonFormDetailSerializer list_serializer_class = PokemonFormSummarySerializer +@extend_schema( + description="Habitats are generally different terrain Pokémon can be found in but can also be areas designated for rare or legendary Pokémon.", + summary="Get pokemom habita", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List pokemom habitas", + ) +) class PokemonHabitatResource(PokeapiCommonViewset): queryset = PokemonHabitat.objects.all() serializer_class = PokemonHabitatDetailSerializer list_serializer_class = PokemonHabitatSummarySerializer +@extend_schema( + description="Shapes used for sorting Pokémon in a Pokédex.", + summary="Get pokemon shape", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List pokemon shapes", + ) +) class PokemonShapeResource(PokeapiCommonViewset): queryset = PokemonShape.objects.all() serializer_class = PokemonShapeDetailSerializer list_serializer_class = PokemonShapeSummarySerializer +@extend_schema( + description="Pokémon are the creatures that inhabit the world of the Pokémon games. They can be caught using Pokéballs and trained by battling with other Pokémon. Each Pokémon belongs to a specific species but may take on a variant which makes it differ from other Pokémon of the same species, such as base stats, available abilities and typings. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9mon_(species)) for greater detail.", + summary="Get pokemon", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List pokemon", + ) +) class PokemonResource(PokeapiCommonViewset): queryset = Pokemon.objects.all() serializer_class = PokemonDetailSerializer list_serializer_class = PokemonSummarySerializer +@extend_schema( + description="A Pokémon Species forms the basis for at least one Pokémon. Attributes of a Pokémon species are shared across all varieties of Pokémon within the species. A good example is Wormadam; Wormadam is the species which can be found in three different varieties, Wormadam-Trash, Wormadam-Sandy and Wormadam-Plant.", + summary="Get pokemon species", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List pokemon species", + ) +) class PokemonSpeciesResource(PokeapiCommonViewset): queryset = PokemonSpecies.objects.all().order_by("id") serializer_class = PokemonSpeciesDetailSerializer list_serializer_class = PokemonSpeciesSummarySerializer +@extend_schema( + description="A region is an organized area of the Pokémon world. Most often, the main difference between regions is the species of Pokémon that can be encountered within them.", + summary="Get region", + tags=["location"], +) +@extend_schema_view( + list=extend_schema( + summary="List regions", + ) +) class RegionResource(PokeapiCommonViewset): queryset = Region.objects.all() serializer_class = RegionDetailSerializer list_serializer_class = RegionSummarySerializer +@extend_schema( + description="Stats determine certain aspects of battles. Each Pokémon has a value for each stat which grows as they gain levels and can be altered momentarily by effects in battles.", + summary="Get stat", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List stats", + ) +) class StatResource(PokeapiCommonViewset): queryset = Stat.objects.all() serializer_class = StatDetailSerializer list_serializer_class = StatSummarySerializer +@extend_schema( + description="Super contest effects refer to the effects of moves when used in super contests.", + summary="Get super contest effect", + tags=["contests"], +) +@extend_schema_view( + list=extend_schema( + summary="List super contest effects", + ) +) class SuperContestEffectResource(PokeapiCommonViewset): queryset = SuperContestEffect.objects.all() serializer_class = SuperContestEffectDetailSerializer list_serializer_class = SuperContestEffectSummarySerializer +@extend_schema( + description="Types are properties for Pokémon and their moves. Each type has three properties: which types of Pokémon it is super effective against, which types of Pokémon it is not very effective against, and which types of Pokémon it is completely ineffective against.", + summary="Get types", + tags=["pokemon"], +) +@extend_schema_view( + list=extend_schema( + summary="List types", + ) +) class TypeResource(PokeapiCommonViewset): queryset = Type.objects.all() serializer_class = TypeDetailSerializer list_serializer_class = TypeSummarySerializer +@extend_schema( + description="Versions of the games, e.g., Red, Blue or Yellow.", + summary="Get version", + tags=["games"], +) +@extend_schema_view( + list=extend_schema( + summary="List versions", + ) +) class VersionResource(PokeapiCommonViewset): queryset = Version.objects.all() serializer_class = VersionDetailSerializer list_serializer_class = VersionSummarySerializer +@extend_schema( + description="Version groups categorize highly similar versions of the games.", + summary="Get version group", + tags=["games"], +) +@extend_schema_view( + list=extend_schema( + summary="List version groups", + ) +) class VersionGroupResource(PokeapiCommonViewset): queryset = VersionGroup.objects.all() serializer_class = VersionGroupDetailSerializer list_serializer_class = VersionGroupSummarySerializer +@extend_schema( + description="Handles Pokemon Encounters as a sub-resource.", + summary="Get pokemon encounter", + tags=["encounters"], + responses={ + "200": { + "type": "array", + "items": { + "type": "object", + "required": ["location_area", "version_details"], + "properties": { + "location_area": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "example": "cerulean-city-area"}, + "url": { + "type": "string", + "format": "uri", + "example": "https://pokeapi.co/api/v2/location-area/281/", + }, + }, + }, + "version_details": { + "type": "array", + "items": { + "type": "object", + "required": ["encounter_details", "max_chance", "version"], + "properties": { + "encounter_details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "chance", + "condition_values", + "max_level", + "method", + "min_level", + ], + "properties": { + "chance": { + "type": "number", + "example": 100, + }, + "condition_values": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "example": "story-progress-beat-red", + }, + "url": { + "type": "string", + "format": "uri", + "example": "https://pokeapi.co/api/v2/encounter-condition-value/55/", + }, + }, + }, + }, + "max_level": { + "type": "number", + "example": 10, + }, + "method": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "example": "gift", + }, + "url": { + "type": "string", + "format": "uri", + "example": "https://pokeapi.co/api/v2/encounter-method/18/", + }, + }, + }, + "min_level": { + "type": "number", + "example": 10, + }, + }, + }, + }, + "max_chance": {"type": "number", "example": 100}, + "version": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "example": "red"}, + "url": { + "type": "string", + "format": "uri", + "example": "https://pokeapi.co/api/v2/version/1/", + }, + }, + }, + }, + }, + }, + }, + }, + } + }, +) class PokemonEncounterView(APIView): - """ - Handles Pokemon Encounters as a sub-resource. - """ - def get(self, request, pokemon_id): self.context = dict(request=request) diff --git a/pokemon_v2/serializers.py b/pokemon_v2/serializers.py index cef6f6b13..3b5df51f6 100644 --- a/pokemon_v2/serializers.py +++ b/pokemon_v2/serializers.py @@ -2,6 +2,7 @@ import json from django.urls import reverse from rest_framework import serializers +from drf_spectacular.utils import extend_schema_field # pylint: disable=redefined-builtin @@ -477,6 +478,16 @@ class Meta: "descriptions", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "integer", + "format": "int32", + }, + "examples": [[0, 5, 10, 15, 20, 25, 30]], + } + ) def get_values(self, obj): mod = obj.gene_mod_5 values = [] @@ -609,6 +620,23 @@ class Meta: "version_groups", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["red-blue"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/version-group/1/"], + }, + }, + }, + } + ) def get_region_version_groups(self, obj): vg_regions = VersionGroupRegion.objects.filter(region=obj) data = VersionGroupRegionSerializer( @@ -676,6 +704,32 @@ class Meta: model = Gender fields = ("id", "name", "pokemon_species_details", "required_for_evolution") + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["rate", "pokemon_species"], + "properties": { + "rate": {"type": "integer", "format": "int32", "examples": [1]}, + "pokemon_species": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["bulbasaur"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/pokemon-species/1/" + ], + }, + }, + }, + }, + }, + } + ) def get_species(self, obj): species_objects = [] @@ -698,6 +752,23 @@ def get_species(self, obj): return details + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["wormadam"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/pokemon-species/413/"], + }, + }, + }, + } + ) def get_required(self, obj): evo_objects = PokemonEvolution.objects.filter(gender=obj) species_list = [] @@ -907,6 +978,62 @@ class Meta: "pokemon_encounters", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["encounter_method", "version_details"], + "properties": { + "encounter_method": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["old-rod"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/encounter-method/2/" + ], + }, + }, + }, + "version_details": { + "type": "array", + "items": { + "type": "object", + "required": ["rate", "version"], + "properties": { + "rate": { + "type": "integer", + "format": "int32", + "examples": [5], + }, + "version": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["platinum"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/version/14/" + ], + }, + }, + }, + }, + }, + }, + }, + }, + } + ) def get_method_rates(self, obj): # Get encounters related to this area and pull out unique encounter methods encounter_rates = LocationAreaEncounterRate.objects.filter( @@ -948,6 +1075,121 @@ def get_method_rates(self, obj): return encounter_rate_list + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["pokemon", "version_details"], + "properties": { + "pokemon": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["tentacool"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/pokemon/72/"], + }, + }, + }, + "version_details": { + "type": "array", + "items": { + "type": "object", + "required": ["version", "max_chance", "encounter_details"], + "properties": { + "version": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["diamond"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/version/12/" + ], + }, + }, + }, + "max_chance": { + "type": "integer", + "format": "int32", + "examples": [60], + }, + "encounter_details": { + "type": "object", + "required": [ + "min_level", + "max_level", + "condition_value", + "chance", + "method", + ], + "properties": { + "min_level": { + "type": "integer", + "format": "int32", + "examples": [20], + }, + "max_level": { + "type": "integer", + "format": "int32", + "examples": [30], + }, + "condition_values": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["slot2-sapphire"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/encounter-condition-value/10/" + ], + }, + }, + }, + "chance": { + "type": "integer", + "format": "int32", + "examples": [60], + }, + "method": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["surf"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/encounter-method/5/" + ], + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + } + ) def get_encounters(self, obj): # get versions for later use version_objects = Version.objects.all() @@ -1119,6 +1361,31 @@ class Meta: "pokemon", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["is_hidden", "slot", "pokemon"], + "properties": { + "is_hidden": {"type": "boolean"}, + "slot": {"type": "integer", "format": "int32", "examples": [3]}, + "pokemon": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["gloom"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/pokemon/44/"], + }, + }, + }, + }, + }, + } + ) def get_ability_pokemon(self, obj): pokemon_ability_objects = PokemonAbility.objects.filter(ability=obj) data = PokemonAbilitySerializer( @@ -1169,6 +1436,73 @@ class Meta: "names", ) + @extend_schema_field( + field={ + "type": "object", + "required": ["decrease", "increase"], + "properties": { + "increase": { + "type": "array", + "items": { + "type": "object", + "required": ["change", "move"], + "properties": { + "change": { + "type": "integer", + "format": "int32", + "examples": [-1], + }, + "move": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["swords-dance"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/move/14/" + ], + }, + }, + }, + }, + }, + }, + "decrease": { + "type": "array", + "items": { + "type": "object", + "required": ["change", "move"], + "properties": { + "change": { + "type": "integer", + "format": "int32", + "examples": [5], + }, + "move": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["growl"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/move/45/" + ], + }, + }, + }, + }, + }, + }, + }, + } + ) def get_moves_that_affect(self, obj): stat_change_objects = MoveMetaStatChange.objects.filter(stat=obj) stat_changes = MoveMetaStatChangeSerializer( @@ -1185,6 +1519,44 @@ def get_moves_that_affect(self, obj): return changes + @extend_schema_field( + field={ + "type": "object", + "required": ["increase", "decrease"], + "properties": { + "increase": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["lonely"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/nature/6/"], + }, + }, + }, + }, + "decrease": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["bold"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/nature/2/"], + }, + }, + }, + }, + }, + } + ) def get_natures_that_affect(self, obj): increase_objects = Nature.objects.filter(increased_stat=obj) increases = NatureSummarySerializer( @@ -1279,6 +1651,23 @@ class Meta: model = ItemAttribute fields = ("id", "name", "descriptions", "items", "names") + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["master-ball"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/item/1/"], + }, + }, + }, + } + ) def get_attribute_items(self, obj): item_map_objects = ItemAttributeMap.objects.filter(item_attribute=obj) items = [] @@ -1395,6 +1784,36 @@ class Meta: "machines", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["machine", "version_group"], + "properties": { + "machine": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/machine/1/"], + }, + "version_group": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["sword-shield"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/version-group/20/" + ], + }, + }, + }, + }, + }, + } + ) def get_item_machines(self, obj): machine_objects = Machine.objects.filter(item=obj) @@ -1415,10 +1834,42 @@ def get_item_machines(self, obj): return machines + @extend_schema_field( + field={ + "type": "object", + "required": ["default"], + "properties": { + "default": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/media/sprites/items/master-ball.png" + ], + } + }, + } + ) def get_item_sprites(self, obj): sprites_object = ItemSprites.objects.get(item_id=obj) return sprites_object.sprites + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["countable"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/item-attribute/1/"], + }, + }, + }, + } + ) def get_item_attributes(self, obj): item_attribute_maps = ItemAttributeMap.objects.filter(item=obj) serializer = ItemAttributeMapSerializer( @@ -1436,6 +1887,60 @@ def get_item_attributes(self, obj): return attributes + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["pokemon", "version-details"], + "properties": { + "pokemon": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["farfetchd"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/pokemon/83/"], + }, + }, + }, + "version-details": { + "type": "array", + "items": { + "type": "object", + "required": ["rarity", "version"], + "properties": { + "rarity": { + "type": "integer", + "format": "int32", + "examples": [5], + }, + "version": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["ruby"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/version/7/" + ], + }, + }, + }, + }, + }, + }, + }, + }, + } + ) def get_held_by_pokemon(self, obj): pokemon_items = PokemonItem.objects.filter(item=obj).order_by("pokemon_id") pokemon_ids = pokemon_items.values("pokemon_id").distinct() @@ -1468,6 +1973,19 @@ def get_held_by_pokemon(self, obj): return pokemon_list + @extend_schema_field( + field={ + "type": "object", + "required": ["url"], + "properties": { + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/evolution-chain/51/"], + } + }, + } + ) def get_baby_trigger_for(self, obj): try: chain_object = EvolutionChain.objects.get(baby_trigger_item=obj) @@ -1532,6 +2050,36 @@ class Meta: "names", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["max_change", "pokeathlon_stat"], + "properties": { + "max_change": { + "type": "integer", + "format": "int32", + "examples": [1], + }, + "pokeathlon_stat": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["power"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/pokeathlon-stat/2/" + ], + }, + }, + }, + }, + }, + } + ) def get_pokeathlon_stats(self, obj): pokeathlon_stat_objects = NaturePokeathlonStat.objects.filter(nature=obj) pokeathlon_stats = NaturePokeathlonStatSerializer( @@ -1587,6 +2135,35 @@ class Meta: model = BerryFlavor fields = ("id", "name", "berries", "contest_type", "names") + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["potency", "berry"], + "properties": { + "potency": {"type": "integer", "examples": [10]}, + "berry": { + "type": "object", + "require": ["name", "url"], + "properties": { + "name": { + "type": "string", + "description": "The name of the berry", + "examples": ["rowap"], + }, + "url": { + "type": "string", + "format": "uri", + "description": "The URL to get more information about the berry", + "examples": ["https://pokeapi.co/api/v2/berry/64/"], + }, + }, + }, + }, + }, + } + ) def get_berries_with_flavor(self, obj): flavor_map_objects = BerryFlavorMap.objects.filter( berry_flavor=obj, potency__gt=0 @@ -1624,6 +2201,37 @@ class Meta: "natural_gift_type", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["potency", "flavor"], + "properties": { + "potency": {"type": "integer", "examples": [10]}, + "flavor": { + "type": "object", + "require": ["name", "url"], + "properties": { + "name": { + "type": "string", + "description": "The name of the flavor", + "examples": ["spicy"], + }, + "url": { + "type": "string", + "format": "uri", + "description": "The URL to get more information about the flavor", + "examples": [ + "https://pokeapi.co/api/v2/berry-flavor/1/" + ], + }, + }, + }, + }, + }, + } + ) def get_berry_flavors(self, obj): flavor_map_objects = BerryFlavorMap.objects.filter(berry=obj) flavor_maps = BerryFlavorMapSerializer( @@ -1666,6 +2274,28 @@ class Meta: model = EggGroup fields = ("id", "name", "names", "pokemon_species") + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["potency", "flavor"], + "properties": { + "name": { + "type": "string", + "description": "Pokemon species name.", + "examples": ["bulbasaur"], + }, + "url": { + "type": "string", + "format": "uri", + "description": "The URL to get more information about the species", + "examples": ["https://pokeapi.co/api/v2/pokemon-species/1/"], + }, + }, + }, + } + ) def get_species(self, obj): results = PokemonEggGroup.objects.filter(egg_group=obj) data = PokemonEggGroupSerializer(results, many=True, context=self.context).data @@ -1745,6 +2375,7 @@ class Meta: # adds an entry for the given type with the given damage # factor in the given direction to the set of relations + def add_type_entry(self, relations, type, damage_factor, direction="_damage_to"): if damage_factor == 200: relations["double" + direction].append( @@ -1759,6 +2390,111 @@ def add_type_entry(self, relations, type, damage_factor, direction="_damage_to") TypeSummarySerializer(type, context=self.context).data ) + @extend_schema_field( + field={ + "type": "object", + "required": [ + "no_damage_to", + "half_damage_to", + "double_damage_to", + "no_damage_from", + "half_damage_from", + "double_damage_from", + ], + "properties": { + "no_damage_to": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["flying"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/type/3/"], + }, + }, + }, + }, + "half_damage_to": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["bug"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/type/7/"], + }, + }, + }, + }, + "double_damage_to": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["poison"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/type/4/"], + }, + }, + }, + }, + "no_damage_from": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["electric"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/type/13/"], + }, + }, + }, + }, + "half_damage_from": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["poison"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/type/4/"], + }, + }, + }, + }, + "double_damage_from": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["water"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/type/11/"], + }, + }, + }, + }, + }, + } + ) def get_type_relationships(self, obj): relations = OrderedDict() relations["no_damage_to"] = [] @@ -1823,6 +2559,159 @@ def remove_type_entry(self, relations, type, direction="_damage_to"): return # returns past type relationships for the given type object + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["generation", "damage_relations"], + "properties": { + "generation": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["generation-v"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/generation/5/"], + }, + }, + }, + "damage_relations": { + "type": "object", + "required": [ + "no_damage_to", + "half_damage_to", + "double_damage_to", + "no_damage_from", + "half_damage_from", + "double_damage_from", + ], + "properties": { + "no_damage_to": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["flying"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/type/3/" + ], + }, + }, + }, + }, + "half_damage_to": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["bug"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/type/7/" + ], + }, + }, + }, + }, + "double_damage_to": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["poison"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/type/4/" + ], + }, + }, + }, + }, + "no_damage_from": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["electric"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/type/13/" + ], + }, + }, + }, + }, + "half_damage_from": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["poison"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/type/4/" + ], + }, + }, + }, + }, + "double_damage_from": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["water"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/type/11/" + ], + }, + }, + }, + }, + }, + }, + }, + }, + } + ) def get_type_past_relationships(self, obj): # collect data from DB damage_type_results = list(TypeEfficacyPast.objects.filter(damage_type=obj)) @@ -1917,6 +2806,35 @@ def type_is_present(self, type, current_gen): gen_introduced = Generation.objects.get(pk=type_obj.generation.id) return gen_introduced.id <= current_gen.id + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["potency", "flavor"], + "properties": { + "slot": {"type": "integer", "examples": [1]}, + "pokemon": { + "type": "object", + "require": ["name", "url"], + "properties": { + "name": { + "type": "string", + "description": "The name of the pokemon", + "examples": ["sandshrew"], + }, + "url": { + "type": "string", + "format": "uri", + "description": "The URL to get more information about the pokemon", + "examples": ["https://pokeapi.co/api/v2/pokemon/27/"], + }, + }, + }, + }, + }, + } + ) def get_type_pokemon(self, obj): poke_type_objects = PokemonType.objects.filter(type=obj) poke_types = PokemonTypeSerializer( @@ -2023,6 +2941,23 @@ class Meta: model = MoveMetaAilment fields = ("id", "name", "moves", "names") + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["thunder-punch"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/move/9/"], + }, + }, + }, + } + ) def get_ailment_moves(self, obj): move_meta_objects = MoveMeta.objects.filter(move_meta_ailment=obj) moves = [] @@ -2053,6 +2988,23 @@ class Meta: model = MoveMetaCategory fields = ("id", "name", "descriptions", "moves") + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["sing"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/move/47/"], + }, + }, + }, + } + ) def get_category_moves(self, obj): move_meta_objects = MoveMeta.objects.filter(move_meta_category=obj) moves = [] @@ -2147,6 +3099,41 @@ class Meta: "version_group", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["effect", "short_effect", "language"], + "properties": { + "effect": { + "type": "string", + "examples": [ + "Inflicts [regular damage]{mechanic:regular-damage}." + ], + }, + "short_effect": { + "type": "string", + "examples": [ + "Inflicts regular damage with no additional effect." + ], + }, + "language": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["en"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/language/9/"], + }, + }, + }, + }, + }, + } + ) def get_effects(self, obj): effect_texts = MoveEffectEffectText.objects.filter(move_effect=obj.move_effect) data = MoveEffectEffectTextSerializer( @@ -2244,6 +3231,23 @@ class Meta: "learned_by_pokemon", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["clefairy"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/pokemon/35/"], + }, + }, + }, + } + ) def get_learned_by_pokemon(self, obj): pokemon_moves = PokemonMove.objects.filter(move_id=obj).order_by("pokemon_id") @@ -2261,6 +3265,42 @@ def get_learned_by_pokemon(self, obj): return pokemon_list + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["machine", "version_group"], + "properties": { + "machine": { + "type": "object", + "required": ["url"], + "properties": { + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/machine/1/"], + } + }, + }, + "version_group": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["sword-shield"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/version-group/1/" + ], + }, + }, + }, + }, + }, + } + ) def get_move_machines(self, obj): machine_objects = Machine.objects.filter(move=obj) @@ -2281,6 +3321,110 @@ def get_move_machines(self, obj): return machines + @extend_schema_field( + field={ + "type": "object", + "required": ["normal", "super"], + "properties": { + "normal": { + "type": "object", + "required": ["use_before", "use_after"], + "properties": { + "use_before": { + "type": "array", + "nullable": True, + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["fire-punch"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/move/7/" + ], + }, + }, + }, + }, + "use_after": { + "type": "array", + "nullable": True, + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["ice-punch"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/move/8/" + ], + }, + }, + }, + }, + }, + }, + "super": { + "type": "object", + "required": ["use_before", "use_after"], + "properties": { + "use_before": { + "type": "array", + "nullable": True, + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["night-slash"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/move/400/" + ], + }, + }, + }, + }, + "use_after": { + "type": "array", + "nullable": True, + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["focus-energy"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/move/116/" + ], + }, + }, + }, + }, + }, + }, + }, + } + ) def get_combos(self, obj): normal_before_objects = ContestCombo.objects.filter(first_move=obj) normal_before_data = ContestComboSerializer( @@ -2338,6 +3482,41 @@ def get_combos(self, obj): return details + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["effect", "short_effect", "language"], + "properties": { + "effect": { + "type": "string", + "examples": [ + "Inflicts [regular damage]{mechanic:regular-damage}." + ], + }, + "short_effect": { + "type": "string", + "examples": [ + "Inflicts regular damage with no additional effect." + ], + }, + "language": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["en"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/language/9/"], + }, + }, + }, + }, + }, + } + ) def get_effect_text(self, obj): effect_texts = MoveEffectEffectText.objects.filter(move_effect=obj.move_effect) data = MoveEffectEffectTextSerializer( @@ -2352,6 +3531,60 @@ def get_effect_text(self, obj): return data + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["effect_entries", "version_group"], + "properties": { + "effect_entries": { + "type": "array", + "items": { + "type": "object", + "required": ["effect", "language"], + "properties": { + "effect": { + "type": "string", + "examples": [ + "Hits Pokémon under the effects of dig and fly." + ], + }, + "language": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["en"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/language/9/" + ], + }, + }, + }, + }, + }, + }, + "version_group": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["gold-silver"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/version-group/3/" + ], + }, + }, + }, + }, + }, + } + ) def get_effect_change_text(self, obj): effect_changes = MoveEffectChange.objects.filter(move_effect=obj.move_effect) data = MoveEffectChangeSerializer( @@ -2360,6 +3593,30 @@ def get_effect_change_text(self, obj): return data + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["change", "stat"], + "properties": { + "change": {"type": "integer", "format": "int32", "examples": [2]}, + "stat": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["attack"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/stat/1/"], + }, + }, + }, + }, + }, + } + ) def get_move_stat_change(self, obj): stat_change_objects = MoveMetaStatChange.objects.filter(move=obj) stat_changes = MoveMetaStatChangeSerializer( @@ -2404,6 +3661,37 @@ class Meta: model = PalParkArea fields = ("id", "name", "names", "pokemon_encounters") + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["base_score", "pokemon-species", "rate"], + "properties": { + "base_score": { + "type": "integer", + "format": "int32", + "examples": [50], + }, + "pokemon-species": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["bulbasaur"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/pokemon-species/1/" + ], + }, + }, + }, + "rate": {"type": "integer", "format": "int32", "examples": [30]}, + }, + }, + } + ) def get_encounters(self, obj): pal_park_objects = PalPark.objects.filter(pal_park_area=obj) parks = PalParkSerializer( @@ -2488,6 +3776,30 @@ class Meta: "types", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["language", "name"], + "properties": { + "language": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["en"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/language/9/"], + }, + }, + }, + "name": {"type": "string", "examples": ["Plant Cloak"]}, + }, + }, + } + ) def get_pokemon_form_names(self, obj): form_results = PokemonFormName.objects.filter( pokemon_form=obj, name__regex=".+" @@ -2503,6 +3815,30 @@ def get_pokemon_form_names(self, obj): return data + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["language", "name"], + "properties": { + "language": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["en"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/language/9/"], + }, + }, + }, + "name": {"type": "string", "examples": ["Plant Cloak"]}, + }, + }, + } + ) def get_pokemon_form_pokemon_names(self, obj): form_results = PokemonFormName.objects.filter( pokemon_form=obj, pokemon_name__regex=".+" @@ -2519,10 +3855,68 @@ def get_pokemon_form_pokemon_names(self, obj): return data + @extend_schema_field( + field={ + "type": "object", + "properties": { + "default": { + "type": "string", + "format": "uri", + "examples": [ + "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/412.png" + ], + } + }, + "additionalProperties": { # Stoplight Elements doesn't render this well + "type": "string", + "format": "uri", + "nullable": True, + "examples": [ + "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/412.png" + ], + }, + "examples": [ + { + "back_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/412.png", + "back_female": None, + "back_shiny": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/412.png", + "back_shiny_female": None, + "front_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/412.png", + "front_female": None, + "front_shiny": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/shiny/412.png", + "front_shiny_female": None, + } + ], + } + ) def get_pokemon_form_sprites(self, obj): sprites_object = PokemonFormSprites.objects.get(pokemon_form_id=obj) return sprites_object.sprites + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["slot", "type"], + "properties": { + "slot": {"type": "integer", "format": "int32", "examples": [1]}, + "type": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["bug"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/type/7/"], + }, + }, + }, + }, + }, + } + ) def get_pokemon_form_types(self, obj): form_type_objects = PokemonFormType.objects.filter(pokemon_form=obj) form_types = PokemonFormTypeSerializer( @@ -2606,6 +4000,29 @@ class Meta: model = MoveLearnMethod fields = ("id", "name", "names", "descriptions", "version_groups") + # "version_groups": [ + # { + # "name": "red-blue", + # "url": "https://pokeapi.co/api/v2/version-group/1/" + # }, + + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["red-blue"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/version-group/1/"], + }, + }, + }, + } + ) def get_method_version_groups(self, obj): version_group_objects = VersionGroupMoveLearnMethod.objects.filter( move_learn_method=obj @@ -2650,6 +4067,23 @@ class Meta: model = PokemonShape fields = ("id", "name", "awesome_names", "names", "pokemon_species") + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["url", "name"], + "properties": { + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/language/9/"], + }, + "name": {"type": "string", "examples": ["Ball"]}, + }, + }, + } + ) def get_shape_names(self, obj): results = PokemonShapeName.objects.filter(pokemon_shape_id=obj) serializer = PokemonShapeNameSerializer( @@ -2662,6 +4096,46 @@ def get_shape_names(self, obj): return data + # "awesome_names": [ + # { + # "awesome_name": "Pomacé", + # "language": { + # "name": "fr", + # "url": "https://pokeapi.co/api/v2/language/5/" + # } + # }, + # { + # "awesome_name": "Pomaceous", + # "language": { + # "name": "en", + # "url": "https://pokeapi.co/api/v2/language/9/" + # } + # } + # ], + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["awesome_name", "language"], + "properties": { + "awesome_name": {"type": "string", "examples": ["Pomaceous"]}, + "language": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["en"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/language/9/"], + }, + }, + }, + }, + }, + } + ) def get_shape_awesome_names(self, obj): results = PokemonShapeName.objects.filter(pokemon_shape_id=obj) serializer = PokemonShapeNameSerializer( @@ -2755,14 +4229,410 @@ class Meta: "past_types", ) + @extend_schema_field( + field={ + "type": "object", + "properties": { + "front_default": { + "type": "string", + "format": "uri", + "exmaple": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/1.png", + } + }, + "additionalProperties": { # Stoplight Elements doesn't render this well + "type": "string", + "format": "uri", + "nullable": True, + "examples": [ + "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/1.png" + ], + }, + "examples": [ + { + "back_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/1.png", + "back_female": None, + "back_shiny": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/1.png", + "back_shiny_female": None, + "front_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/1.png", + "front_female": None, + "front_shiny": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/shiny/1.png", + "front_shiny_female": None, + } + ], + } + ) def get_pokemon_sprites(self, obj): sprites_object = PokemonSprites.objects.get(pokemon_id=obj) return sprites_object.sprites + @extend_schema_field( + field={ + "type": "object", + "required": ["latest", "legacy"], + "properties": { + "latest": { + "type": "string", + "format": "uri", + "examples": [ + "https://raw.githubusercontent.com/PokeAPI/cries/main/cries/pokemon/latest/50.ogg" + ], + }, + "legacy": { + "type": "string", + "format": "uri", + "examples": [ + "https://raw.githubusercontent.com/PokeAPI/cries/main/cries/pokemon/legacy/50.ogg" + ], + }, + }, + } + ) def get_pokemon_cries(self, obj): cries_object = PokemonCries.objects.get(pokemon_id=obj) return cries_object.cries + # { + # "move": { + # "name": "scratch", + # "url": "https://pokeapi.co/api/v2/move/10/" + # }, + # "version_group_details": [ + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "red-blue", + # "url": "https://pokeapi.co/api/v2/version-group/1/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "yellow", + # "url": "https://pokeapi.co/api/v2/version-group/2/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "gold-silver", + # "url": "https://pokeapi.co/api/v2/version-group/3/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "crystal", + # "url": "https://pokeapi.co/api/v2/version-group/4/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "ruby-sapphire", + # "url": "https://pokeapi.co/api/v2/version-group/5/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "emerald", + # "url": "https://pokeapi.co/api/v2/version-group/6/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "firered-leafgreen", + # "url": "https://pokeapi.co/api/v2/version-group/7/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "diamond-pearl", + # "url": "https://pokeapi.co/api/v2/version-group/8/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "platinum", + # "url": "https://pokeapi.co/api/v2/version-group/9/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "heartgold-soulsilver", + # "url": "https://pokeapi.co/api/v2/version-group/10/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "black-white", + # "url": "https://pokeapi.co/api/v2/version-group/11/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "colosseum", + # "url": "https://pokeapi.co/api/v2/version-group/12/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "xd", + # "url": "https://pokeapi.co/api/v2/version-group/13/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "black-2-white-2", + # "url": "https://pokeapi.co/api/v2/version-group/14/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "x-y", + # "url": "https://pokeapi.co/api/v2/version-group/15/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "omega-ruby-alpha-sapphire", + # "url": "https://pokeapi.co/api/v2/version-group/16/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "sun-moon", + # "url": "https://pokeapi.co/api/v2/version-group/17/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "ultra-sun-ultra-moon", + # "url": "https://pokeapi.co/api/v2/version-group/18/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "lets-go-pikachu-lets-go-eevee", + # "url": "https://pokeapi.co/api/v2/version-group/19/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "sword-shield", + # "url": "https://pokeapi.co/api/v2/version-group/20/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "brilliant-diamond-and-shining-pearl", + # "url": "https://pokeapi.co/api/v2/version-group/23/" + # } + # }, + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "scarlet-violet", + # "url": "https://pokeapi.co/api/v2/version-group/25/" + # } + # } + # ] + # }, + + # "move": { + # "name": "scratch", + # "url": "https://pokeapi.co/api/v2/move/10/" + # }, + # "version_group_details": [ + # { + # "level_learned_at": 1, + # "move_learn_method": { + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + # }, + # "version_group": { + # "name": "red-blue", + # "url": "https://pokeapi.co/api/v2/version-group/1/" + # } + # }, + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["move", "version_group_details"], + "properties": { + "move": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["scratch"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/move/10/"], + }, + }, + }, + "version_group_details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "level_learned_at", + "move_learn_method", + "version_group", + ], + "properties": { + "level_learned_at": { + "type": "integer", + "format": "int32", + "examples": [1], + }, + "move_learn_method": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["level-up"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/move-learn-method/1/" + ], + }, + }, + }, + "version_group": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["red-blue"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/version-group/1/" + ], + }, + }, + }, + }, + }, + }, + }, + }, + } + ) def get_pokemon_moves(self, obj): version_objects = VersionGroup.objects.all() version_data = VersionGroupSummarySerializer( @@ -2814,6 +4684,67 @@ def get_pokemon_moves(self, obj): return move_list + # { + # "item": { + # "name": "soft-sand", + # "url": "https://pokeapi.co/api/v2/item/214/" + # }, + # "version_details": [ + # { + # "rarity": 5, + # "version": { + # "name": "diamond", + # "url": "https://pokeapi.co/api/v2/version/12/" + # } + # }, + @extend_schema_field( + field={ + "type": "object", + "required": ["item", "version_details"], + "properties": { + "item": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["soft-sand"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/item/214/"], + }, + }, + }, + "version_details": { + "type": "array", + "items": { + "type": "object", + "required": ["rarity", "version"], + "properties": { + "rarity": { + "type": "integer", + "format": "int32", + "examples": [5], + }, + "version": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["diamond"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/version/12/" + ], + }, + }, + }, + }, + }, + }, + }, + } + ) def get_pokemon_held_items(self, obj): # Get items related to this pokemon and pull out unique Item IDs pokemon_items = PokemonItem.objects.filter(pokemon_id=obj).order_by("item_id") @@ -2847,6 +4778,39 @@ def get_pokemon_held_items(self, obj): return item_list + # { + # "ability": { + # "name": "sand-veil", + # "url": "https://pokeapi.co/api/v2/ability/8/" + # }, + # "is_hidden": false, + # "slot": 1 + # }, + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["ability", "is_hidden", "slot"], + "properties": { + "ability": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["sand-veil"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/ability/8/"], + }, + }, + }, + "is_hidden": {"type": "boolean"}, + "slot": {"type": "integer", "format": "int32", "examples": [1]}, + }, + }, + } + ) def get_pokemon_abilities(self, obj): pokemon_ability_objects = PokemonAbility.objects.filter(pokemon=obj) data = PokemonAbilitySerializer( @@ -2860,6 +4824,77 @@ def get_pokemon_abilities(self, obj): return abilities + # { + # "abilities": [ + # { + # "ability": { + # "name": "levitate", + # "url": "https://pokeapi.co/api/v2/ability/26/" + # }, + # "is_hidden": false, + # "slot": 1 + # } + # ], + # "generation": { + # "name": "generation-vi", + # "url": "https://pokeapi.co/api/v2/generation/6/" + # } + # } + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["abilities", "generation"], + "properties": { + "abilities": { + "type": "array", + "items": { + "type": "object", + "required": ["ability", "is_hidden", "slot"], + "properties": { + "ability": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["levitate"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/ability/26/" + ], + }, + }, + }, + "is_hidden": {"type": "boolean"}, + "slot": { + "type": "integer", + "format": "int32", + "examples": [1], + }, + }, + }, + }, + "generation": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["generation-vi"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/generation/6/"], + }, + }, + }, + }, + }, + } + ) def get_past_pokemon_abilities(self, obj): pokemon_past_ability_objects = PokemonAbilityPast.objects.filter(pokemon=obj) pokemon_past_abilities = PokemonAbilityPastSerializer( @@ -2895,6 +4930,37 @@ def get_past_pokemon_abilities(self, obj): return final_data + # { + # "slot": 1, + # "type": { + # "name": "ghost", + # "url": "https://pokeapi.co/api/v2/type/8/" + # } + # }, + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["slot", "type"], + "properties": { + "slot": {"type": "integer", "format": "int32", "examples": [1]}, + "type": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["ghost"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/type/8/"], + }, + }, + }, + }, + }, + } + ) def get_pokemon_types(self, obj): poke_type_objects = PokemonType.objects.filter(pokemon=obj) poke_types = PokemonTypeSerializer( @@ -2906,6 +4972,77 @@ def get_pokemon_types(self, obj): return poke_types + # "past_types": [ + # { + # "generation": { + # "name": "generation-v", + # "url": "https://pokeapi.co/api/v2/generation/5/" + # }, + # "types": [ + # { + # "slot": 1, + # "type": { + # "name": "normal", + # "url": "https://pokeapi.co/api/v2/type/1/" + # } + # } + # ] + # } + # ], + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["generation", "types"], + "properties": { + "generation": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["generation-v"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/generation/5/"], + }, + }, + }, + "types": { + "type": "array", + "items": { + "type": "object", + "required": ["slot", "type"], + "properties": { + "slot": { + "type": "integer", + "format": "int32", + "examples": [1], + }, + "type": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": ["normal"], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/type/1/" + ], + }, + }, + }, + }, + }, + }, + }, + }, + } + ) def get_past_pokemon_types(self, obj): poke_past_type_objects = PokemonTypePast.objects.filter(pokemon=obj) poke_past_types = PokemonTypePastSerializer( @@ -2941,6 +5078,12 @@ def get_past_pokemon_types(self, obj): return final_data + @extend_schema_field( + field={ + "type": "string", + "examples": ["https://pokeapi.co/api/v2/pokemon/1/encounters"], + } + ) def get_encounters(self, obj): return reverse("pokemon_encounters", kwargs={"pokemon_id": obj.pk}) @@ -2966,6 +5109,23 @@ class Meta: model = EvolutionTrigger fields = ("id", "name", "names", "pokemon_species") + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["ivysaur"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/pokemon-species/2/"], + }, + }, + }, + } + ) def get_species(self, obj): evo_objects = PokemonEvolution.objects.filter(evolution_trigger=obj) species_list = [] @@ -3073,6 +5233,30 @@ class Meta: "varieties", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["language", "name"], + "properties": { + "language": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["en"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/language/9/"], + }, + }, + }, + "name": {"type": "string", "examples": ["bulbasaur"]}, + }, + }, + } + ) def get_pokemon_names(self, obj): species_results = PokemonSpeciesName.objects.filter(pokemon_species=obj) species_serializer = PokemonSpeciesNameSerializer( @@ -3086,6 +5270,37 @@ def get_pokemon_names(self, obj): return data + # { + # "genus": "Seed Pokémon", + # "language": { + # "name": "en", + # "url": "https://pokeapi.co/api/v2/language/9/" + # } + # }, + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["genus", "language"], + "properties": { + "genus": {"type": "string", "examples": ["Seed Pokémon"]}, + "language": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["en"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/language/9/"], + }, + }, + }, + }, + }, + } + ) def get_pokemon_genera(self, obj): results = PokemonSpeciesName.objects.filter(pokemon_species=obj) serializer = PokemonSpeciesNameSerializer( @@ -3101,6 +5316,23 @@ def get_pokemon_genera(self, obj): return genera + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["monster"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/egg-group/1/"], + }, + }, + }, + } + ) def get_pokemon_egg_groups(self, obj): results = PokemonEggGroup.objects.filter(pokemon_species=obj) data = PokemonEggGroupSerializer(results, many=True, context=self.context).data @@ -3110,6 +5342,30 @@ def get_pokemon_egg_groups(self, obj): return groups + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["is_default", "pokemon"], + "properties": { + "is_default": {"type": "boolean"}, + "pokemon": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["bulbasaur"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/pokemon/1/"], + }, + }, + }, + }, + }, + } + ) def get_pokemon_varieties(self, obj): results = Pokemon.objects.filter(pokemon_species=obj) summary_data = PokemonSummarySerializer( @@ -3129,6 +5385,37 @@ def get_pokemon_varieties(self, obj): return varieties + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["area", "base_score", "rate"], + "properties": { + "area": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["field"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/pal-park-area/2/" + ], + }, + }, + }, + "base_score": { + "type": "integer", + "format": "int32", + "examples": [50], + }, + "rate": {"type": "integer", "format": "int32", "examples": [30]}, + }, + }, + } + ) def get_encounters(self, obj): pal_park_objects = PalPark.objects.filter(pokemon_species=obj) parks = PalParkSerializer( @@ -3186,6 +5473,214 @@ class Meta: model = EvolutionChain fields = ("id", "baby_trigger_item", "chain") + # TODO: Revisit Schema + @extend_schema_field( + field={ + "type": "object", + "required": ["evolution_details", "evolves_to", "is_baby", "species"], + "properties": { + "evolution_details": {"type": "array", "items": {}, "examples": []}, + "evolves_to": { + "type": "array", + "items": { + "type": "object", + "required": [ + "evolution_details", + "evolves_to", + "is_baby", + "species", + ], + "properties": { + "evolution_details": { + "type": "array", + "items": { + "type": "object", + "required": [ + "gender", + "held_item", + "item", + "known_move", + "known_move_type", + "location", + "min_affection", + "min_beauty", + "min_happiness", + "min_level", + "needs_overworld_rain", + "party_species", + "party_type", + "relative_physical_stats", + "time_of_day", + "trade_species", + "trigger", + "turn_upside_down", + ], + "properties": { + "gender": { + "type": "", + "nullable": True, + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": [1], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [2], + }, + }, + }, + "held_item": { + "type": "object", + "nullable": True, + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": [1], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [2], + }, + }, + }, + "item": { + "type": "object", + "nullable": True, + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + "examples": [1], + }, + "url": { + "type": "string", + "format": "uri", + "examples": [2], + }, + }, + }, + "known_move": { + "type": "", + "nullable": True, + }, + "known_move_type": { + "type": "", + "nullable": True, + }, + "location": { + "type": "object", + "nullable": True, + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + }, + "url": { + "type": "string", + "format": "uri", + }, + }, + }, + "min_affection": { + "type": "integer", + "format": "int32", + "nullable": True, + }, + "min_beauty": { + "type": "integer", + "format": "int32", + "nullable": True, + }, + "min_happiness": { + "type": "integer", + "format": "int32", + "nullable": True, + }, + "min_level": { + "type": "integer", + "format": "int32", + "nullable": True, + }, + "needs_overworld_rain": { + "type": "boolean", + "nullable": True, + }, + "party_species": { + "type": "string", + "nullable": True, + }, + "party_type": { + "type": "string", + "nullable": True, + }, + "relative_physical_stats": { + "type": "string", + "nullable": True, + }, + "time_of_day": {"type": "string"}, + "trade_species": { + "type": "string", + "nullable": True, + }, + "trigger": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": { + "type": "string", + }, + "url": { + "type": "string", + "format": "uri", + }, + }, + }, + "turn_upside_down": {"type": "boolean"}, + }, + }, + }, + "is_baby": {"type": "boolean"}, + "species": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["happiny"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/pokemon-species/440/" + ], + }, + }, + }, + }, + }, + }, + "is_baby": {"type": "boolean"}, + "species": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["happiny"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/pokemon-species/440/" + ], + }, + }, + }, + }, + } + ) def build_chain(self, obj): chain_id = obj.id @@ -3298,6 +5793,72 @@ class Meta: model = PokeathlonStat fields = ("id", "name", "affecting_natures", "names") + @extend_schema_field( + field={ + "type": "object", + "required": ["decrease", "increase"], + "properties": { + "decrease": { + "type": "array", + "items": { + "type": "object", + "required": ["max_change", "nature"], + "properties": { + "max_change": { + "type": "integer", + "format": "int32", + "maximum": -1, + "examples": [-1], + }, + "nature": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["hardy"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/nature/1/" + ], + }, + }, + }, + }, + }, + }, + "increase": { + "type": "array", + "items": { + "type": "object", + "required": ["max_change", "nature"], + "properties": { + "max_change": { + "type": "integer", + "format": "int32", + "minimum": 1, + "examples": [2], + }, + "nature": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["hardy"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/nature/1/" + ], + }, + }, + }, + }, + }, + }, + }, + } + ) def get_natures_that_affect(self, obj): stat_change_objects = NaturePokeathlonStat.objects.filter(pokeathlon_stat=obj) stat_changes = NaturePokeathlonStatSerializer( @@ -3356,6 +5917,36 @@ class Meta: "version_groups", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["entry_number", "pokemon_species"], + "properties": { + "entry_number": { + "type": "integer", + "format": "int32", + "examples": [1], + }, + "pokemon_species": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["bulbasaur"]}, + "url": { + "type": "string", + "format": "uri", + "examples": [ + "https://pokeapi.co/api/v2/pokemon-species/1/" + ], + }, + }, + }, + }, + }, + } + ) def get_pokedex_entries(self, obj): results = PokemonDexNumber.objects.filter(pokedex=obj).order_by( "pokedex_number" @@ -3370,6 +5961,23 @@ def get_pokedex_entries(self, obj): return data + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["the-teal-mask"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/version-group/26/"], + }, + }, + }, + } + ) def get_pokedex_version_groups(self, obj): dex_group_objects = PokedexVersionGroup.objects.filter(pokedex=obj) dex_groups = PokedexVersionGroupSerializer( @@ -3429,6 +6037,23 @@ class Meta: "versions", ) + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["kanto"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/region/1/"], + }, + }, + }, + } + ) def get_version_group_regions(self, obj): vg_regions = VersionGroupRegion.objects.filter(version_group=obj) data = VersionGroupRegionSerializer( @@ -3441,6 +6066,25 @@ def get_version_group_regions(self, obj): return regions + # "name": "level-up", + # "url": "https://pokeapi.co/api/v2/move-learn-method/1/" + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["level-up"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/move-learn-method/1/"], + }, + }, + }, + } + ) def get_learn_methods(self, obj): learn_method_objects = VersionGroupMoveLearnMethod.objects.filter( version_group=obj @@ -3455,6 +6099,23 @@ def get_learn_methods(self, obj): return methods + @extend_schema_field( + field={ + "type": "array", + "items": { + "type": "object", + "required": ["name", "url"], + "properties": { + "name": {"type": "string", "examples": ["kanto"]}, + "url": { + "type": "string", + "format": "uri", + "examples": ["https://pokeapi.co/api/v2/pokedex/2/"], + }, + }, + }, + } + ) def get_version_groups_pokedexes(self, obj): dex_group_objects = PokedexVersionGroup.objects.filter(version_group=obj) dex_groups = PokedexVersionGroupSerializer( diff --git a/requirements.txt b/requirements.txt index c7d6d4a69..383b8bbd5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,3 +11,4 @@ mimeparse==0.1.3 psycopg2-binary==2.9.9 python-dateutil==2.8.2 python-mimeparse==1.6.0 +drf-spectacular==0.27.2