diff --git a/data/cards.json b/data/cards.json new file mode 100644 index 0000000..b43bea9 --- /dev/null +++ b/data/cards.json @@ -0,0 +1,4927 @@ +{ + "data": [ + { + "id": "det1-8", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Hold Still", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Heal 10 damage from this Pokémon." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "det1", + "name": "Detective Pikachu", + "series": "Sun & Moon", + "printedTotal": 18, + "total": 18, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "DET", + "releaseDate": "2019/04/05", + "updatedAt": "2021/09/01 05:37:00", + "images": { + "symbol": "https://images.pokemontcg.io/det1/symbol.png", + "logo": "https://images.pokemontcg.io/det1/logo.png" + } + }, + "number": "8", + "artist": "Framestore", + "rarity": "Common", + "flavorText": "In the distant past, they were fairly strong, but they have become gradually weaker over time.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/det1/8.png", + "large": "https://images.pokemontcg.io/det1/8_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/det1-8", + "updatedAt": "2025/08/17", + "prices": { + "holofoil": { + "low": 0.05, + "mid": 0.34, + "high": 40, + "market": 0.33, + "directLow": 0.25 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/det1-8", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.28, + "lowPrice": 0.02, + "trendPrice": 0.26, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.15, + "reverseHoloLow": 0.02, + "reverseHoloTrend": 0.59, + "lowPriceExPlus": 0.02, + "avg1": 0.5, + "avg7": 0.36, + "avg30": 0.28, + "reverseHoloAvg1": 1.45, + "reverseHoloAvg7": 0.44, + "reverseHoloAvg30": 0.27 + } + } + }, + { + "id": "sm115-15", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Splash", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "sm115", + "name": "Hidden Fates", + "series": "Sun & Moon", + "printedTotal": 68, + "total": 69, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "HIF", + "releaseDate": "2019/08/23", + "updatedAt": "2021/09/01 05:37:00", + "images": { + "symbol": "https://images.pokemontcg.io/sm115/symbol.png", + "logo": "https://images.pokemontcg.io/sm115/logo.png" + } + }, + "number": "15", + "artist": "Shigenori Negishi", + "rarity": "Common", + "flavorText": "In the distant past, they were fairly strong, but they have become gradually weaker over time.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/sm115/15.png", + "large": "https://images.pokemontcg.io/sm115/15_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sm115-15", + "updatedAt": "2025/08/17", + "prices": { + "reverseHolofoil": { + "low": 0.16, + "mid": 0.5, + "high": 4321, + "market": 0.5, + "directLow": 0.25 + }, + "normal": { + "low": 0.02, + "mid": 0.18, + "high": 4.95, + "market": 0.16, + "directLow": 0.1 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sm115-15", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.07, + "lowPrice": 0.02, + "trendPrice": 0.06, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.34, + "reverseHoloLow": 0.05, + "reverseHoloTrend": 0.32, + "lowPriceExPlus": 0.02, + "avg1": 0.09, + "avg7": 0.08, + "avg30": 0.07, + "reverseHoloAvg1": 0.19, + "reverseHoloAvg7": 0.25, + "reverseHoloAvg30": 0.4 + } + } + }, + { + "id": "mcd16-4", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Epic Splash", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "30", + "text": "Flip 2 coins. If either of them is tails, this attack does nothing." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "mcd16", + "name": "McDonald's Collection 2016", + "series": "Other", + "printedTotal": 12, + "total": 12, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "releaseDate": "2016/08/19", + "updatedAt": "2022/10/10 15:12:00", + "images": { + "symbol": "https://images.pokemontcg.io/mcd16/symbol.png", + "logo": "https://images.pokemontcg.io/mcd16/logo.png" + } + }, + "number": "4", + "artist": "Akira Komayama", + "flavorText": "In the distant past, it was somewhat stronger than the horribly weak descendants that exist today.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/mcd16/4.png", + "large": "https://images.pokemontcg.io/mcd16/4_hires.png" + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/mcd16-4", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 4.64, + "lowPrice": 0.2, + "trendPrice": 3.59, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 2.5, + "lowPriceExPlus": 2, + "avg1": 0.75, + "avg7": 5.1, + "avg30": 6.34, + "reverseHoloAvg1": 0.72, + "reverseHoloAvg7": 2.55, + "reverseHoloAvg30": 1.53 + } + } + }, + { + "id": "xy7-19", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Epic Splash", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "30", + "text": "Flip 2 coins. If either of them is tails, this attack does nothing." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "xy7", + "name": "Ancient Origins", + "series": "XY", + "printedTotal": 98, + "total": 100, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "AOR", + "releaseDate": "2015/08/12", + "updatedAt": "2020/08/14 09:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/xy7/symbol.png", + "logo": "https://images.pokemontcg.io/xy7/logo.png" + } + }, + "number": "19", + "artist": "Akira Komayama", + "rarity": "Common", + "flavorText": "In the distant past, it was somewhat stronger than the horribly weak descendants that exist today.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/xy7/19.png", + "large": "https://images.pokemontcg.io/xy7/19_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/xy7-19", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.02, + "mid": 0.24, + "high": 4.95, + "market": 0.22, + "directLow": null + }, + "reverseHolofoil": { + "low": 0.19, + "mid": 0.5, + "high": 4.95, + "market": 0.63, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/xy7-19", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.12, + "lowPrice": 0.02, + "trendPrice": 0.16, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.6, + "reverseHoloLow": 0.2, + "reverseHoloTrend": 0.71, + "lowPriceExPlus": 0.02, + "avg1": 0.18, + "avg7": 0.13, + "avg30": 0.12, + "reverseHoloAvg1": 1.2, + "reverseHoloAvg7": 0.65, + "reverseHoloAvg30": 0.78 + } + } + }, + { + "id": "sm75-19", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Water Splash", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10+", + "text": "Flip a coin. If heads, this attack does 10 more damage." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "sm75", + "name": "Dragon Majesty", + "series": "Sun & Moon", + "printedTotal": 70, + "total": 80, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "DRM", + "releaseDate": "2018/09/07", + "updatedAt": "2018/10/01 21:54:00", + "images": { + "symbol": "https://images.pokemontcg.io/sm75/symbol.png", + "logo": "https://images.pokemontcg.io/sm75/logo.png" + } + }, + "number": "19", + "artist": "Sekio", + "rarity": "Common", + "flavorText": "Its reckless leaps make it easy pickings for predators. On the bright side, many Pokémon enjoy longer life spans, thanks to Magikarp.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/sm75/19.png", + "large": "https://images.pokemontcg.io/sm75/19_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sm75-19", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.24, + "mid": 0.38, + "high": 4.95, + "market": 0.38, + "directLow": 0.35 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sm75-19", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.26, + "lowPrice": 0.02, + "trendPrice": 0.2, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 2.46, + "reverseHoloLow": 0.5, + "reverseHoloTrend": 2.68, + "lowPriceExPlus": 0.02, + "avg1": 0.17, + "avg7": 0.18, + "avg30": 0.25, + "reverseHoloAvg1": 0.1, + "reverseHoloAvg7": 2.38, + "reverseHoloAvg30": 2.29 + } + } + }, + { + "id": "bw6-23", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Soggy Rush", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10×", + "text": "Flip a coin until you get tails. This attack does 10 damage times the number of heads." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "bw6", + "name": "Dragons Exalted", + "series": "Black & White", + "printedTotal": 124, + "total": 128, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "DRX", + "releaseDate": "2012/08/15", + "updatedAt": "2018/03/04 10:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/bw6/symbol.png", + "logo": "https://images.pokemontcg.io/bw6/logo.png" + } + }, + "number": "23", + "artist": "Mizue", + "rarity": "Common", + "flavorText": "A Magikarp living for many years can leap a mountain using Splash. The move remains useless, though.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/bw6/23.png", + "large": "https://images.pokemontcg.io/bw6/23_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/bw6-23", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.25, + "mid": 0.45, + "high": 4.95, + "market": 0.45, + "directLow": 0.43 + }, + "reverseHolofoil": { + "low": 3.9, + "mid": 6.64, + "high": 8.24, + "market": 9.31, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/bw6-23", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.28, + "lowPrice": 0.02, + "trendPrice": 0.28, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 4.67, + "reverseHoloLow": 0.1, + "reverseHoloTrend": 3.83, + "lowPriceExPlus": 0.02, + "avg1": 0.23, + "avg7": 0.24, + "avg30": 0.21, + "reverseHoloAvg1": 4, + "reverseHoloAvg7": 3.47, + "reverseHoloAvg30": 2.24 + } + } + }, + { + "id": "sm4-17", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "abilities": [ + { + "name": "Submerge", + "text": "As long as this Pokémon is on your Bench, prevent all damage done to this Pokémon by attacks (both yours and your opponent's).", + "type": "Ability" + } + ], + "attacks": [ + { + "name": "Waterfall Evolution", + "cost": [ + "Water", + "Colorless", + "Colorless" + ], + "convertedEnergyCost": 3, + "damage": "", + "text": "Search your deck for a card that evolves from this Pokémon and put it onto this Pokémon to evolve it. Then, shuffle your deck." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "sm4", + "name": "Crimson Invasion", + "series": "Sun & Moon", + "printedTotal": 111, + "total": 126, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "CIN", + "releaseDate": "2017/11/03", + "updatedAt": "2022/10/11 21:39:00", + "images": { + "symbol": "https://images.pokemontcg.io/sm4/symbol.png", + "logo": "https://images.pokemontcg.io/sm4/logo.png" + } + }, + "number": "17", + "artist": "TOKIYA", + "rarity": "Common", + "flavorText": "Although weak and helpless, this Pokémon is incredibly fertile. They exist in such multitudes, you'll soon grow tired of seeing them.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/sm4/17.png", + "large": "https://images.pokemontcg.io/sm4/17_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sm4-17", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.04, + "mid": 0.24, + "high": 4.95, + "market": 0.23, + "directLow": 0.22 + }, + "reverseHolofoil": { + "low": 0.14, + "mid": 0.54, + "high": 4.95, + "market": 0.55, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sm4-17", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.11, + "lowPrice": 0.02, + "trendPrice": 0.08, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.39, + "reverseHoloLow": 0.07, + "reverseHoloTrend": 0.41, + "lowPriceExPlus": 0.02, + "avg1": 0.05, + "avg7": 0.09, + "avg30": 0.1, + "reverseHoloAvg1": 0.3, + "reverseHoloAvg7": 0.4, + "reverseHoloAvg30": 0.38 + } + } + }, + { + "id": "bw11-30", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Flailing Flop", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "Flip a coin. If tails, this Pokémon does 10 damage to itself." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "bw11", + "name": "Legendary Treasures", + "series": "Black & White", + "printedTotal": 113, + "total": 140, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "LTR", + "releaseDate": "2013/11/06", + "updatedAt": "2018/03/04 10:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/bw11/symbol.png", + "logo": "https://images.pokemontcg.io/bw11/logo.png" + } + }, + "number": "30", + "artist": "Midori Harada", + "rarity": "Common", + "flavorText": "A Magikarp living for many years can leap a mountain using Splash. The move remains useless, though.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/bw11/30.png", + "large": "https://images.pokemontcg.io/bw11/30_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/bw11-30", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.25, + "mid": 0.5, + "high": 5, + "market": 0.7, + "directLow": 0.34 + }, + "reverseHolofoil": { + "low": 4.75, + "mid": 4.75, + "high": 4.75, + "market": 5.49, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/bw11-30", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.66, + "lowPrice": 0.1, + "trendPrice": 0.82, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 14.31, + "reverseHoloLow": 7, + "reverseHoloTrend": 12.6, + "lowPriceExPlus": 0.1, + "avg1": 0.34, + "avg7": 1.02, + "avg30": 0.7, + "reverseHoloAvg1": 14.99, + "reverseHoloAvg7": 10.45, + "reverseHoloAvg30": 9.49 + } + } + }, + { + "id": "sm9-29", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Enter the Dragon", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Flip a coin. If heads, put a card that evolves from this Pokémon from your discard pile onto this Pokémon to evolve it." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "sm9", + "name": "Team Up", + "series": "Sun & Moon", + "printedTotal": 181, + "total": 198, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "TEU", + "releaseDate": "2019/02/01", + "updatedAt": "2021/09/01 05:37:00", + "images": { + "symbol": "https://images.pokemontcg.io/sm9/symbol.png", + "logo": "https://images.pokemontcg.io/sm9/logo.png" + } + }, + "number": "29", + "artist": "sui", + "rarity": "Common", + "flavorText": "In the distant past, they were fairly strong, but they have become gradually weaker over time.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/sm9/29.png", + "large": "https://images.pokemontcg.io/sm9/29_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sm9-29", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.1, + "mid": 0.25, + "high": 4.95, + "market": 0.27, + "directLow": 0.19 + }, + "reverseHolofoil": { + "low": 0.43, + "mid": 1, + "high": 4.95, + "market": 0.85, + "directLow": 2.99 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sm9-29", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.13, + "lowPrice": 0.02, + "trendPrice": 0.11, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.1, + "reverseHoloLow": 0.1, + "reverseHoloTrend": 0.81, + "lowPriceExPlus": 0.02, + "avg1": 0.02, + "avg7": 0.15, + "avg30": 0.14, + "reverseHoloAvg1": 0.1, + "reverseHoloAvg7": 0.69, + "reverseHoloAvg30": 0.7 + } + } + }, + { + "id": "g1-22", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Epic Splash", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "30", + "text": "Flip 2 coins. If either of them is tails, this attack does nothing." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "g1", + "name": "Generations", + "series": "XY", + "printedTotal": 83, + "total": 117, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "GEN", + "releaseDate": "2016/02/22", + "updatedAt": "2020/08/14 09:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/g1/symbol.png", + "logo": "https://images.pokemontcg.io/g1/logo.png" + } + }, + "number": "22", + "artist": "Miki Tanaka", + "rarity": "Common", + "flavorText": "In the distant past, it was somewhat stronger than the horribly weak descendants that exist today.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/g1/22.png", + "large": "https://images.pokemontcg.io/g1/22_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/g1-22", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.12, + "mid": 0.44, + "high": 4.95, + "market": 0.45, + "directLow": 0.24 + }, + "reverseHolofoil": { + "low": 0.65, + "mid": 1.06, + "high": 2.97, + "market": 1.87, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/g1-22", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.22, + "lowPrice": 0.02, + "trendPrice": 0.18, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 2, + "reverseHoloLow": 0.44, + "reverseHoloTrend": 1.82, + "lowPriceExPlus": 0.02, + "avg1": 0.13, + "avg7": 0.12, + "avg30": 0.17, + "reverseHoloAvg1": 1.99, + "reverseHoloAvg7": 2.09, + "reverseHoloAvg30": 1.34 + } + } + }, + { + "id": "base1-35", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "8", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Tackle", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + }, + { + "name": "Flail", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10×", + "text": "Does 10 damage times the number of damage counters on Magikarp." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "base1", + "name": "Base", + "series": "Base", + "printedTotal": 102, + "total": 102, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "BS", + "releaseDate": "1999/01/09", + "updatedAt": "2022/10/10 15:12:00", + "images": { + "symbol": "https://images.pokemontcg.io/base1/symbol.png", + "logo": "https://images.pokemontcg.io/base1/logo.png" + } + }, + "number": "35", + "artist": "Mitsuhiro Arita", + "rarity": "Uncommon", + "flavorText": "In the distant past, it was stronger than its horribly weak descendants that exist today.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/base1/35.png", + "large": "https://images.pokemontcg.io/base1/35_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/base1-35", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.48, + "mid": 1.5, + "high": 89, + "market": 2.33, + "directLow": 0.52 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/base1-35", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 2.31, + "lowPrice": 0.02, + "trendPrice": 2.69, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 2.2, + "lowPriceExPlus": 0.4, + "avg1": 2.96, + "avg7": 2.37, + "avg30": 2.2, + "reverseHoloAvg1": 7.5, + "reverseHoloAvg7": 3.82, + "reverseHoloAvg30": 3.82 + } + } + }, + { + "id": "sm3-32", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Splashing Dodge", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "Flip a coin. If heads, prevent all effects of attacks, including damage, done to this Pokémon during your opponent's next turn." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "sm3", + "name": "Burning Shadows", + "series": "Sun & Moon", + "printedTotal": 147, + "total": 177, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "BUS", + "releaseDate": "2017/08/05", + "updatedAt": "2022/10/11 21:39:00", + "images": { + "symbol": "https://images.pokemontcg.io/sm3/symbol.png", + "logo": "https://images.pokemontcg.io/sm3/logo.png" + } + }, + "number": "32", + "artist": "Yukiko Baba", + "rarity": "Common", + "flavorText": "Although weak and helpless, this Pokémon is incredibly fertile. They exist in such multitudes, you'll soon grow tired of seeing them.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/sm3/32.png", + "large": "https://images.pokemontcg.io/sm3/32_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sm3-32", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.05, + "mid": 0.21, + "high": 4.95, + "market": 0.2, + "directLow": 0.17 + }, + "reverseHolofoil": { + "low": 0.22, + "mid": 0.47, + "high": 4.95, + "market": 0.45, + "directLow": 0.25 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sm3-32", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.06, + "lowPrice": 0.02, + "trendPrice": 0.07, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.36, + "reverseHoloLow": 0.05, + "reverseHoloTrend": 0.37, + "lowPriceExPlus": 0.02, + "avg1": 0.05, + "avg7": 0.11, + "avg30": 0.08, + "reverseHoloAvg1": 0.5, + "reverseHoloAvg7": 0.37, + "reverseHoloAvg30": 0.41 + } + } + }, + { + "id": "xy12-33", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "8", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Flail", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10×", + "text": "This attack does 10 damage times the number of damage counters on this Pokémon." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "xy12", + "name": "Evolutions", + "series": "XY", + "printedTotal": 108, + "total": 113, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "EVO", + "releaseDate": "2016/11/02", + "updatedAt": "2020/09/25 10:09:00", + "images": { + "symbol": "https://images.pokemontcg.io/xy12/symbol.png", + "logo": "https://images.pokemontcg.io/xy12/logo.png" + } + }, + "number": "33", + "artist": "Mitsuhiro Arita", + "rarity": "Common", + "flavorText": "It is virtually worthless in terms of both power and speed. It is the most weak and pathetic Pokémon in the world.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/xy12/33.png", + "large": "https://images.pokemontcg.io/xy12/33_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/xy12-33", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.01, + "mid": 0.19, + "high": 4.95, + "market": 0.18, + "directLow": 0.14 + }, + "reverseHolofoil": { + "low": 0.2, + "mid": 0.5, + "high": 89, + "market": 0.56, + "directLow": 0.45 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/xy12-33", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.08, + "lowPrice": 0.02, + "trendPrice": 0.1, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.98, + "reverseHoloLow": 0.06, + "reverseHoloTrend": 0.78, + "lowPriceExPlus": 0.02, + "avg1": 0.09, + "avg7": 0.1, + "avg30": 0.08, + "reverseHoloAvg1": 1.45, + "reverseHoloAvg7": 1.08, + "reverseHoloAvg30": 0.96 + } + } + }, + { + "id": "swsh2-39", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Leap Out", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Switch this Pokémon with 1 of your Benched Pokémon." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "swsh2", + "name": "Rebel Clash", + "series": "Sword & Shield", + "printedTotal": 192, + "total": 209, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "RCL", + "releaseDate": "2020/05/01", + "updatedAt": "2020/09/25 10:09:00", + "images": { + "symbol": "https://images.pokemontcg.io/swsh2/symbol.png", + "logo": "https://images.pokemontcg.io/swsh2/logo.png" + } + }, + "number": "39", + "artist": "kanahei", + "rarity": "Common", + "flavorText": "It is virtually worthless in terms of both power and speed. It is the most weak and pathetic Pokémon in the world.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "regulationMark": "D", + "images": { + "small": "https://images.pokemontcg.io/swsh2/39.png", + "large": "https://images.pokemontcg.io/swsh2/39_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/swsh2-39", + "updatedAt": "2025/08/17", + "prices": { + "reverseHolofoil": { + "low": 0.24, + "mid": 0.5, + "high": 19.99, + "market": 0.65, + "directLow": 0.72 + }, + "normal": { + "low": 0.04, + "mid": 0.23, + "high": 4.95, + "market": 0.21, + "directLow": 0.13 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/swsh2-39", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.09, + "lowPrice": 0.02, + "trendPrice": 0.1, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.42, + "reverseHoloLow": 0.08, + "reverseHoloTrend": 0.5, + "lowPriceExPlus": 0.02, + "avg1": 0.08, + "avg7": 0.1, + "avg30": 0.09, + "reverseHoloAvg1": 0.49, + "reverseHoloAvg7": 0.49, + "reverseHoloAvg30": 0.39 + } + } + }, + { + "id": "base5-47", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "6", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Flop", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + }, + { + "name": "Rapid Evolution", + "cost": [ + "Water", + "Water", + "Water" + ], + "convertedEnergyCost": 3, + "damage": "", + "text": "Search your deck for an Evolution card named Gyarados or Dark Gyarados and put it on Magikarp. (This counts as evolving Magikarp.) Shuffle your deck afterward." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "base5", + "name": "Team Rocket", + "series": "Base", + "printedTotal": 82, + "total": 83, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "TR", + "releaseDate": "2000/04/24", + "updatedAt": "2020/08/14 09:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/base5/symbol.png", + "logo": "https://images.pokemontcg.io/base5/logo.png" + } + }, + "number": "47", + "artist": "Kagemaru Himeno", + "rarity": "Uncommon", + "flavorText": "Recent research has revealed the presence of dragon DNA in this species of Pokémon.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/base5/47.png", + "large": "https://images.pokemontcg.io/base5/47_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/base5-47", + "updatedAt": "2025/08/17", + "prices": { + "1stEdition": { + "low": 2.25, + "mid": 4.55, + "high": 9999, + "market": 4.86, + "directLow": 2.99 + }, + "unlimited": { + "low": 0.83, + "mid": 1.64, + "high": 15.99, + "market": 2.16, + "directLow": 0.99 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/base5-47", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 2.26, + "lowPrice": 0.05, + "trendPrice": 2.09, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 0, + "lowPriceExPlus": 0.5, + "avg1": 1.78, + "avg7": 2.11, + "avg30": 2.28, + "reverseHoloAvg1": 0, + "reverseHoloAvg7": 0, + "reverseHoloAvg30": 0 + } + } + }, + { + "id": "base4-50", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "8", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Tackle", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + }, + { + "name": "Flail", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10×", + "text": "Does 10 damage times the number of damage counters on Magikarp." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "base4", + "name": "Base Set 2", + "series": "Base", + "printedTotal": 130, + "total": 130, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "B2", + "releaseDate": "2000/02/24", + "updatedAt": "2022/10/10 15:12:00", + "images": { + "symbol": "https://images.pokemontcg.io/base4/symbol.png", + "logo": "https://images.pokemontcg.io/base4/logo.png" + } + }, + "number": "50", + "artist": "Mitsuhiro Arita", + "rarity": "Uncommon", + "flavorText": "In the distant past, it was stronger than its horribly weak descendants that exist today.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/base4/50.png", + "large": "https://images.pokemontcg.io/base4/50_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/base4-50", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.38, + "mid": 0.89, + "high": 17.99, + "market": 0.96, + "directLow": 0.67 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/base4-50", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.68, + "lowPrice": 0.19, + "trendPrice": 0.91, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 0, + "lowPriceExPlus": 0.5, + "avg1": 0.3, + "avg7": 1.04, + "avg30": 1, + "reverseHoloAvg1": 0, + "reverseHoloAvg7": 0, + "reverseHoloAvg30": 0 + } + } + }, + { + "id": "base6-52", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "8", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Tackle", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + }, + { + "name": "Flail", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10×", + "text": "Does 10 damage times the number of damage counters on Magikarp." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "base6", + "name": "Legendary Collection", + "series": "Other", + "printedTotal": 110, + "total": 110, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "LC", + "releaseDate": "2002/05/24", + "updatedAt": "2020/08/14 09:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/base6/symbol.png", + "logo": "https://images.pokemontcg.io/base6/logo.png" + } + }, + "number": "52", + "artist": "Mitsuhiro Arita", + "rarity": "Uncommon", + "flavorText": "In the distant past, it was stronger than its horribly weak descendants that exist today.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/base6/52.png", + "large": "https://images.pokemontcg.io/base6/52_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/base6-52", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 1.35, + "mid": 2.25, + "high": 5.99, + "market": 3.87, + "directLow": 19.99 + }, + "reverseHolofoil": { + "low": 98.24, + "mid": 255.09, + "high": 258.07, + "market": 150, + "directLow": 258.07 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/base6-52", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 1.46, + "lowPrice": 0.25, + "trendPrice": 1.96, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 80.93, + "reverseHoloLow": 40, + "reverseHoloTrend": 71.73, + "lowPriceExPlus": 1.5, + "avg1": 1.95, + "avg7": 1.53, + "avg30": 1.72, + "reverseHoloAvg1": 49.99, + "reverseHoloAvg7": 69.1, + "reverseHoloAvg30": 63.16 + } + } + }, + { + "id": "ex3-60", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Call for Family", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Search your deck for Magikarp and put as many of them as you like onto your Bench. Shuffle your deck afterward." + }, + { + "name": "Tackle", + "cost": [ + "Water", + "Colorless" + ], + "convertedEnergyCost": 2, + "damage": "20", + "text": "" + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "ex3", + "name": "Dragon", + "series": "EX", + "printedTotal": 97, + "total": 100, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "DR", + "releaseDate": "2003/11/24", + "updatedAt": "2023/02/16 05:47:00", + "images": { + "symbol": "https://images.pokemontcg.io/ex3/symbol.png", + "logo": "https://images.pokemontcg.io/ex3/logo.png" + } + }, + "number": "60", + "artist": "Kouki Saitou", + "rarity": "Common", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/ex3/60.png", + "large": "https://images.pokemontcg.io/ex3/60_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/ex3-60", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 1.51, + "mid": 2.1, + "high": 17.5, + "market": 2.15, + "directLow": null + }, + "reverseHolofoil": { + "low": 13.32, + "mid": 18.12, + "high": 26, + "market": 13.54, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/ex3-60", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.67, + "lowPrice": 0.05, + "trendPrice": 0.73, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 5.08, + "reverseHoloLow": 0.3, + "reverseHoloTrend": 4.4, + "lowPriceExPlus": 0.1, + "avg1": 0.1, + "avg7": 0.4, + "avg30": 0.61, + "reverseHoloAvg1": 1.18, + "reverseHoloAvg7": 4.8, + "reverseHoloAvg30": 3.43 + } + } + }, + { + "id": "col1-61", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Splash", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "col1", + "name": "Call of Legends", + "series": "HeartGold & SoulSilver", + "printedTotal": 95, + "total": 106, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "CL", + "releaseDate": "2011/02/09", + "updatedAt": "2018/03/04 10:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/col1/symbol.png", + "logo": "https://images.pokemontcg.io/col1/logo.png" + } + }, + "number": "61", + "artist": "Mitsuhiro Arita", + "rarity": "Common", + "flavorText": "For no reason, it jumps and splashes about, making it easy for predators like Pidgeotto to catch it mid-jump.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/col1/61.png", + "large": "https://images.pokemontcg.io/col1/61_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/col1-61", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.14, + "mid": 0.49, + "high": 4.95, + "market": 0.71, + "directLow": 0.41 + }, + "reverseHolofoil": { + "low": 9.31, + "mid": 10, + "high": 12, + "market": 10.39, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/col1-61", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.61, + "lowPrice": 0.02, + "trendPrice": 0.7, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 5, + "reverseHoloLow": 0.5, + "reverseHoloTrend": 4.78, + "lowPriceExPlus": 0.02, + "avg1": 0.29, + "avg7": 0.73, + "avg30": 0.53, + "reverseHoloAvg1": 5, + "reverseHoloAvg7": 4.49, + "reverseHoloAvg30": 4.58 + } + } + }, + { + "id": "hgss1-72", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Splash", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "hgss1", + "name": "HeartGold & SoulSilver", + "series": "HeartGold & SoulSilver", + "printedTotal": 123, + "total": 124, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "HS", + "releaseDate": "2010/02/10", + "updatedAt": "2018/03/04 10:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/hgss1/symbol.png", + "logo": "https://images.pokemontcg.io/hgss1/logo.png" + } + }, + "number": "72", + "artist": "Mitsuhiro Arita", + "rarity": "Common", + "flavorText": "For no reason, it jumps and splashes about, making it easy for predators like Pidgeotto to catch it mid-jump.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/hgss1/72.png", + "large": "https://images.pokemontcg.io/hgss1/72_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/hgss1-72", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.01, + "mid": 0.65, + "high": 8.35, + "market": 0.71, + "directLow": null + }, + "reverseHolofoil": { + "low": 8.71, + "mid": 9.53, + "high": 29.99, + "market": 22.34, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/hgss1-72", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.86, + "lowPrice": 0.02, + "trendPrice": 1.58, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 2, + "reverseHoloLow": 0.69, + "reverseHoloTrend": 2.84, + "lowPriceExPlus": 0.02, + "avg1": 0.4, + "avg7": 1.55, + "avg30": 0.7, + "reverseHoloAvg1": 5, + "reverseHoloAvg7": 2.01, + "reverseHoloAvg30": 2.74 + } + } + }, + { + "id": "ex8-64", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Leap Out", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Switch Magikarp with 1 of your Benched Pokémon." + }, + { + "name": "Rage", + "cost": [ + "Water", + "Colorless" + ], + "convertedEnergyCost": 2, + "damage": "10+", + "text": "Does 10 damage plus 10 more damage for each damage counter on Magikarp." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "ex8", + "name": "Deoxys", + "series": "EX", + "printedTotal": 107, + "total": 108, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "DX", + "releaseDate": "2005/02/01", + "updatedAt": "2019/01/28 16:44:00", + "images": { + "symbol": "https://images.pokemontcg.io/ex8/symbol.png", + "logo": "https://images.pokemontcg.io/ex8/logo.png" + } + }, + "number": "64", + "artist": "Hisao Nakamura", + "rarity": "Common", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/ex8/64.png", + "large": "https://images.pokemontcg.io/ex8/64_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/ex8-64", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 2, + "mid": 2.5, + "high": 5, + "market": 2.14, + "directLow": null + }, + "reverseHolofoil": { + "low": 32.75, + "mid": 33.54, + "high": 34.32, + "market": 32.75, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/ex8-64", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 1.67, + "lowPrice": 0.05, + "trendPrice": 1.57, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 13.25, + "reverseHoloLow": 1.5, + "reverseHoloTrend": 8.79, + "lowPriceExPlus": 0.15, + "avg1": 0.74, + "avg7": 1.36, + "avg30": 1.43, + "reverseHoloAvg1": 3, + "reverseHoloAvg7": 11.56, + "reverseHoloAvg30": 10.42 + } + } + }, + { + "id": "ex7-65", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Call for Friends", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Search your deck for up to 2 Basic Pokémon and put them onto your Bench. Shuffle your deck afterward." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "ex7", + "name": "Team Rocket Returns", + "series": "EX", + "printedTotal": 109, + "total": 111, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "TRR", + "releaseDate": "2004/11/01", + "updatedAt": "2019/01/28 16:44:00", + "images": { + "symbol": "https://images.pokemontcg.io/ex7/symbol.png", + "logo": "https://images.pokemontcg.io/ex7/logo.png" + } + }, + "number": "65", + "artist": "Yukiko Baba", + "rarity": "Common", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/ex7/65.png", + "large": "https://images.pokemontcg.io/ex7/65_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/ex7-65", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 2.32, + "mid": 3.5, + "high": 9.99, + "market": 3.37, + "directLow": 4.54 + }, + "reverseHolofoil": { + "low": 84.99, + "mid": 97.5, + "high": 129.99, + "market": 46.29, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/ex7-65", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 1.62, + "lowPrice": 0.1, + "trendPrice": 1.55, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 17.26, + "reverseHoloLow": 11.29, + "reverseHoloTrend": 22.17, + "lowPriceExPlus": 0.29, + "avg1": 1.5, + "avg7": 1.59, + "avg30": 1.41, + "reverseHoloAvg1": 12.99, + "reverseHoloAvg7": 19.04, + "reverseHoloAvg30": 16.47 + } + } + }, + { + "id": "ex13-69", + "name": "Magikarp δ", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Metal" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Splash", + "cost": [ + "Metal" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "ex13", + "name": "Holon Phantoms", + "series": "EX", + "printedTotal": 110, + "total": 111, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "HP", + "releaseDate": "2006/05/01", + "updatedAt": "2018/03/04 10:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/ex13/symbol.png", + "logo": "https://images.pokemontcg.io/ex13/logo.png" + } + }, + "number": "69", + "artist": "Midori Harada", + "rarity": "Common", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/ex13/69.png", + "large": "https://images.pokemontcg.io/ex13/69_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/ex13-69", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.9, + "mid": 2.25, + "high": 5, + "market": 2.48, + "directLow": null + }, + "reverseHolofoil": { + "low": 54.45, + "mid": 99.99, + "high": 129.99, + "market": 25.52, + "directLow": 129.98 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/ex13-69", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.89, + "lowPrice": 0.02, + "trendPrice": 0.89, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 5.83, + "reverseHoloLow": 1.99, + "reverseHoloTrend": 12.65, + "lowPriceExPlus": 0.18, + "avg1": 0.44, + "avg7": 1.17, + "avg30": 0.88, + "reverseHoloAvg1": 5.99, + "reverseHoloAvg7": 10.55, + "reverseHoloAvg30": 10.46 + } + } + }, + { + "id": "gym2-73", + "name": "Giovanni's Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "9", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Ancestral Memory", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "40", + "text": "Flip a coin. If tails, this attack does nothing. Either way, you can't use this attack again as long as Giovanni's Magikarp stays in play (even putting Giovanni's Magikarp on the Bench won't let you use it again)." + }, + { + "name": "Flail Around", + "cost": [ + "Water", + "Colorless" + ], + "convertedEnergyCost": 2, + "damage": "10×", + "text": "Flip 3 coins. This attack does 10 damage times the number of heads." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "gym2", + "name": "Gym Challenge", + "series": "Gym", + "printedTotal": 132, + "total": 132, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "G2", + "releaseDate": "2000/10/16", + "updatedAt": "2022/10/10 15:12:00", + "images": { + "symbol": "https://images.pokemontcg.io/gym2/symbol.png", + "logo": "https://images.pokemontcg.io/gym2/logo.png" + } + }, + "number": "73", + "artist": "Ken Sugimori", + "rarity": "Common", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/gym2/73.png", + "large": "https://images.pokemontcg.io/gym2/73_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/gym2-73", + "updatedAt": "2025/08/17", + "prices": { + "1stEdition": { + "low": 3, + "mid": 6.47, + "high": 8.74, + "market": 6.4, + "directLow": null + }, + "unlimited": { + "low": 1.14, + "mid": 2.18, + "high": 724.14, + "market": 2.5, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/gym2-73", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 3.13, + "lowPrice": 0.25, + "trendPrice": 2.95, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 0, + "lowPriceExPlus": 1.15, + "avg1": 0.99, + "avg7": 3.26, + "avg30": 2.8, + "reverseHoloAvg1": 0, + "reverseHoloAvg7": 0, + "reverseHoloAvg30": 0 + } + } + }, + { + "id": "ex6-67", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Surprise Attack", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "Flip a coin. If tails, this attack does nothing." + }, + { + "name": "Ascension", + "cost": [ + "Water", + "Colorless" + ], + "convertedEnergyCost": 2, + "damage": "", + "text": "Search your deck for a card that evolves from Magikarp and put it on Magikarp. (This counts as evolving Magikarp.) Shuffle your deck afterward." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "ex6", + "name": "FireRed & LeafGreen", + "series": "EX", + "printedTotal": 112, + "total": 116, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "RG", + "releaseDate": "2004/09/01", + "updatedAt": "2019/01/28 16:44:00", + "images": { + "symbol": "https://images.pokemontcg.io/ex6/symbol.png", + "logo": "https://images.pokemontcg.io/ex6/logo.png" + } + }, + "number": "67", + "artist": "Atsuko Nishida", + "rarity": "Common", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/ex6/67.png", + "large": "https://images.pokemontcg.io/ex6/67_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/ex6-67", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 1.96, + "mid": 2.75, + "high": 11.92, + "market": 2.95, + "directLow": 2.24 + }, + "reverseHolofoil": { + "low": 399.99, + "mid": 399.99, + "high": 399.99, + "market": 30.5, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/ex6-67", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 1.64, + "lowPrice": 0.02, + "trendPrice": 1.8, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 24.3, + "reverseHoloLow": 7.8, + "reverseHoloTrend": 18.19, + "lowPriceExPlus": 0.25, + "avg1": 1.05, + "avg7": 2.13, + "avg30": 1.6, + "reverseHoloAvg1": 29.9, + "reverseHoloAvg7": 20.61, + "reverseHoloAvg30": 15.49 + } + } + }, + { + "id": "neo3-66", + "name": "Shining Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "11", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "rules": [ + "You can't have more than 1 Shining Magikarp in your deck." + ], + "attacks": [ + { + "name": "Gold Scale", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Your opponent may draw 2 cards. Either way, you may draw 2 cards." + }, + { + "name": "Dragon Bond", + "cost": [ + "Psychic" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Search your deck for a card named Gyarados, Dark Gyarados, or Shining Gyarados. Show it to your opponent and put it into your hand. Shuffle your deck afterward." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "neo3", + "name": "Neo Revelation", + "series": "Neo", + "printedTotal": 64, + "total": 66, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "N3", + "releaseDate": "2001/09/21", + "updatedAt": "2020/08/14 09:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/neo3/symbol.png", + "logo": "https://images.pokemontcg.io/neo3/logo.png" + } + }, + "number": "66", + "artist": "Ken Sugimori", + "rarity": "Rare Shining", + "flavorText": "An underpowered, pathetic Pokémon. It may jump high on rare occasions, but never more than seven feet.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/neo3/66.png", + "large": "https://images.pokemontcg.io/neo3/66_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/neo3-66", + "updatedAt": "2025/08/17", + "prices": { + "unlimitedHolofoil": { + "low": 350, + "mid": 500, + "high": 700, + "market": 425.96, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/neo3-66", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 180.91, + "lowPrice": 55, + "trendPrice": 196.43, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 85.59, + "lowPriceExPlus": 175, + "avg1": 220, + "avg7": 191.25, + "avg30": 206.28, + "reverseHoloAvg1": 55, + "reverseHoloAvg7": 120.9, + "reverseHoloAvg30": 126.4 + } + } + }, + { + "id": "dp7-65", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "10", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Sea Spray", + "cost": [], + "convertedEnergyCost": 0, + "damage": "", + "text": "Flip a coin until you get tails. For each heads, draw a card." + }, + { + "name": "Splash", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "+10" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "dp7", + "name": "Stormfront", + "series": "Diamond & Pearl", + "printedTotal": 100, + "total": 106, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "SF", + "releaseDate": "2008/11/01", + "updatedAt": "2020/05/01 16:06:00", + "images": { + "symbol": "https://images.pokemontcg.io/dp7/symbol.png", + "logo": "https://images.pokemontcg.io/dp7/logo.png" + } + }, + "number": "65", + "artist": "Tomokazu Komiya", + "rarity": "Common", + "flavorText": "It is said to be the world's weakest Pokémon. No one knows why it has managed to survive.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/dp7/65.png", + "large": "https://images.pokemontcg.io/dp7/65_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/dp7-65", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 1.39, + "mid": 2.75, + "high": 5, + "market": 2.71, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/dp7-65", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.37, + "lowPrice": 0.02, + "trendPrice": 0.68, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 8, + "reverseHoloLow": 2, + "reverseHoloTrend": 10.75, + "lowPriceExPlus": 0.05, + "avg1": 0.1, + "avg7": 0.63, + "avg30": 0.35, + "reverseHoloAvg1": 5, + "reverseHoloAvg7": 9.66, + "reverseHoloAvg30": 6.37 + } + } + }, + { + "id": "gym2-88", + "name": "Misty's Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "5", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Play Dead", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Flip a coin. If heads, during your opponent's next turn, prevent all effects of attacks, including damage, done to Misty's Magikarp." + }, + { + "name": "Leap", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "gym2", + "name": "Gym Challenge", + "series": "Gym", + "printedTotal": 132, + "total": 132, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "G2", + "releaseDate": "2000/10/16", + "updatedAt": "2022/10/10 15:12:00", + "images": { + "symbol": "https://images.pokemontcg.io/gym2/symbol.png", + "logo": "https://images.pokemontcg.io/gym2/logo.png" + } + }, + "number": "88", + "artist": "Ken Sugimori", + "rarity": "Common", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/gym2/88.png", + "large": "https://images.pokemontcg.io/gym2/88_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/gym2-88", + "updatedAt": "2025/08/17", + "prices": { + "1stEdition": { + "low": 3.62, + "mid": 5.05, + "high": 4321, + "market": 4.96, + "directLow": 6.16 + }, + "unlimited": { + "low": 0.99, + "mid": 1.98, + "high": 9.99, + "market": 2.25, + "directLow": 1.97 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/gym2-88", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 3.06, + "lowPrice": 0.2, + "trendPrice": 2.54, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 0.41, + "lowPriceExPlus": 1, + "avg1": 1.94, + "avg7": 2.48, + "avg30": 2.89, + "reverseHoloAvg1": 0.41, + "reverseHoloAvg7": 0.41, + "reverseHoloAvg30": 0.41 + } + } + }, + { + "id": "dp2-89", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "13", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Flail", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10×", + "text": "Does 10 damage times the number of damage counters on Magikarp." + }, + { + "name": "Dragon Rage", + "cost": [ + "Water", + "Water" + ], + "convertedEnergyCost": 2, + "damage": "60", + "text": "Flip 2 coins. If either of them is tails, this attack does nothing." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "+10" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "dp2", + "name": "Mysterious Treasures", + "series": "Diamond & Pearl", + "printedTotal": 123, + "total": 124, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "MT", + "releaseDate": "2007/08/01", + "updatedAt": "2018/03/04 10:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/dp2/symbol.png", + "logo": "https://images.pokemontcg.io/dp2/logo.png" + } + }, + "number": "89", + "artist": "Yusuke Ohmura", + "rarity": "Common", + "flavorText": "It is said to be the world's weakest Pokémon. No one knows why it has managed to survive.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/dp2/89.png", + "large": "https://images.pokemontcg.io/dp2/89_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/dp2-89", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.15, + "mid": 0.5, + "high": 4.95, + "market": 0.82, + "directLow": null + }, + "reverseHolofoil": { + "low": 2.28, + "mid": 2.96, + "high": 9.99, + "market": 1.82, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/dp2-89", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.35, + "lowPrice": 0.02, + "trendPrice": 0.29, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 2.56, + "reverseHoloLow": 0.39, + "reverseHoloTrend": 3.93, + "lowPriceExPlus": 0.03, + "avg1": 0.02, + "avg7": 0.33, + "avg30": 0.36, + "reverseHoloAvg1": 2, + "reverseHoloAvg7": 3.19, + "reverseHoloAvg30": 2.89 + } + } + }, + { + "id": "ecard3-75", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Signs of Evolution", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Flip a coin. If heads, search your deck for a card that evolves from Magikarp, show it to your opponent, and put it into your hand. Shuffle your deck afterward." + }, + { + "name": "Splash", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "ecard3", + "name": "Skyridge", + "series": "E-Card", + "printedTotal": 144, + "total": 182, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "SK", + "releaseDate": "2003/05/12", + "updatedAt": "2020/08/14 09:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/ecard3/symbol.png", + "logo": "https://images.pokemontcg.io/ecard3/logo.png" + } + }, + "number": "75", + "artist": "Keiko Fukuyama", + "rarity": "Common", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/ecard3/75.png", + "large": "https://images.pokemontcg.io/ecard3/75_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/ecard3-75", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 49, + "mid": 54.66, + "high": 99.99, + "market": 41.49, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/ecard3-75", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 6.31, + "lowPrice": 1, + "trendPrice": 7.51, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 52.78, + "reverseHoloLow": 10, + "reverseHoloTrend": 41.21, + "lowPriceExPlus": 3.9, + "avg1": 5, + "avg7": 6.13, + "avg30": 5.9, + "reverseHoloAvg1": 35.99, + "reverseHoloAvg7": 42.33, + "reverseHoloAvg30": 38.07 + } + } + }, + { + "id": "pl3-110", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "9", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Flail Around", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10×", + "text": "Flip 3 coins. This attack does 10 damage times the number of heads." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "+10" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "pl3", + "name": "Supreme Victors", + "series": "Platinum", + "printedTotal": 147, + "total": 153, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "SV", + "releaseDate": "2009/08/19", + "updatedAt": "2018/03/07 22:40:00", + "images": { + "symbol": "https://images.pokemontcg.io/pl3/symbol.png", + "logo": "https://images.pokemontcg.io/pl3/logo.png" + } + }, + "number": "110", + "artist": "Masakazu Fukuda", + "rarity": "Common", + "flavorText": "A Magikarp living for many years can leap a mountain using Splash. The move remains useless, though.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/pl3/110.png", + "large": "https://images.pokemontcg.io/pl3/110_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/pl3-110", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.1, + "mid": 1, + "high": 4.95, + "market": 1.35, + "directLow": null + }, + "reverseHolofoil": { + "low": 30, + "mid": 41.7, + "high": 48.99, + "market": 48.4, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/pl3-110", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.64, + "lowPrice": 0.02, + "trendPrice": 0.87, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.5, + "reverseHoloLow": 5, + "reverseHoloTrend": 10.24, + "lowPriceExPlus": 0.2, + "avg1": 0.43, + "avg7": 0.66, + "avg30": 0.56, + "reverseHoloAvg1": 0.5, + "reverseHoloAvg7": 8.99, + "reverseHoloAvg30": 5.67 + } + } + }, + { + "id": "ecard1-118", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Flail", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "10×", + "text": "This attack does 10 damage times the number of damage counters on Magikarp." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "ecard1", + "name": "Expedition Base Set", + "series": "E-Card", + "printedTotal": 165, + "total": 165, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "EX", + "releaseDate": "2002/09/15", + "updatedAt": "2022/10/10 15:12:00", + "images": { + "symbol": "https://images.pokemontcg.io/ecard1/symbol.png", + "logo": "https://images.pokemontcg.io/ecard1/logo.png" + } + }, + "number": "118", + "artist": "Tomokazu Komiya", + "rarity": "Common", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/ecard1/118.png", + "large": "https://images.pokemontcg.io/ecard1/118_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/ecard1-118", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 6.98, + "mid": 9.99, + "high": 50, + "market": 10.33, + "directLow": null + }, + "reverseHolofoil": { + "low": 49.99, + "mid": 75.45, + "high": 179, + "market": 35.52, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/ecard1-118", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 3.63, + "lowPrice": 0.25, + "trendPrice": 3.79, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 8.94, + "reverseHoloLow": 5.9, + "reverseHoloTrend": 11.38, + "lowPriceExPlus": 2.49, + "avg1": 1.5, + "avg7": 2.69, + "avg30": 3.62, + "reverseHoloAvg1": 7.4, + "reverseHoloAvg7": 7.88, + "reverseHoloAvg30": 9.67 + } + } + }, + { + "id": "xyp-XY143", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Epic Splash", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "30", + "text": "Flip 2 coins. If either of them is tails, this attack does nothing." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "xyp", + "name": "XY Black Star Promos", + "series": "XY", + "printedTotal": 211, + "total": 216, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "PR-XY", + "releaseDate": "2013/10/12", + "updatedAt": "2020/08/14 09:35:00", + "images": { + "symbol": "https://images.pokemontcg.io/xyp/symbol.png", + "logo": "https://images.pokemontcg.io/xyp/logo.png" + } + }, + "number": "XY143", + "artist": "Saya Tsuruta", + "rarity": "Promo", + "flavorText": "In the distant past, it was somewhat stronger than the horribly weak descendants that exist today.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/xyp/XY143.png", + "large": "https://images.pokemontcg.io/xyp/XY143_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/xyp-XY143", + "updatedAt": "2025/08/17", + "prices": { + "holofoil": { + "low": 39.95, + "mid": 52.44, + "high": 133.4, + "market": 49.6, + "directLow": 44.97 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/xyp-XY143", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 34.95, + "lowPrice": 14.85, + "trendPrice": 33.47, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 55.44, + "lowPriceExPlus": 29.5, + "avg1": 19.99, + "avg7": 24.25, + "avg30": 30.65, + "reverseHoloAvg1": 22.9, + "reverseHoloAvg7": 31.46, + "reverseHoloAvg30": 33.82 + } + } + }, + { + "id": "sm9-160", + "name": "Magikarp & Wailord-GX", + "supertype": "Pokémon", + "subtypes": [ + "Basic", + "TAG TEAM", + "GX" + ], + "hp": "300", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "rules": [ + "TAG TEAM rule: When your TAG TEAM is Knocked Out, your opponent takes 3 Prize cards." + ], + "attacks": [ + { + "name": "Super Splash", + "cost": [ + "Water", + "Water", + "Water", + "Water", + "Water" + ], + "convertedEnergyCost": 5, + "damage": "180", + "text": "" + }, + { + "name": "Towering Splash-GX", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "If this Pokémon has at least 7 extra Water Energy attached to it (in addition to this attack's cost), this attack does 100 damage to each of your opponent's Benched Pokémon. (Don't apply Weakness and Resistance for Benched Pokémon.) (You can't use more than 1 GX attack in a game.)" + } + ], + "weaknesses": [ + { + "type": "Grass", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless", + "Colorless", + "Colorless", + "Colorless" + ], + "convertedRetreatCost": 4, + "set": { + "id": "sm9", + "name": "Team Up", + "series": "Sun & Moon", + "printedTotal": 181, + "total": 198, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "TEU", + "releaseDate": "2019/02/01", + "updatedAt": "2021/09/01 05:37:00", + "images": { + "symbol": "https://images.pokemontcg.io/sm9/symbol.png", + "logo": "https://images.pokemontcg.io/sm9/logo.png" + } + }, + "number": "160", + "artist": "5ban Graphics", + "rarity": "Rare Ultra", + "nationalPokedexNumbers": [ + 129, + 321 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/sm9/160.png", + "large": "https://images.pokemontcg.io/sm9/160_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sm9-160", + "updatedAt": "2025/08/17", + "prices": { + "holofoil": { + "low": 62.99, + "mid": 98.21, + "high": 149, + "market": 83.83, + "directLow": 119.96 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sm9-160", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 66.39, + "lowPrice": 9.9, + "trendPrice": 73.12, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 13.27, + "lowPriceExPlus": 19.45, + "avg1": 95, + "avg7": 44.87, + "avg30": 52.64, + "reverseHoloAvg1": 8, + "reverseHoloAvg7": 12.59, + "reverseHoloAvg30": 12.61 + } + } + }, + { + "id": "sm9-161", + "name": "Magikarp & Wailord-GX", + "supertype": "Pokémon", + "subtypes": [ + "Basic", + "TAG TEAM", + "GX" + ], + "hp": "300", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "rules": [ + "TAG TEAM rule: When your TAG TEAM is Knocked Out, your opponent takes 3 Prize cards." + ], + "attacks": [ + { + "name": "Super Splash", + "cost": [ + "Water", + "Water", + "Water", + "Water", + "Water" + ], + "convertedEnergyCost": 5, + "damage": "180", + "text": "" + }, + { + "name": "Towering Splash-GX", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "If this Pokémon has at least 7 extra Water Energy attached to it (in addition to this attack's cost), this attack does 100 damage to each of your opponent's Benched Pokémon. (Don't apply Weakness and Resistance for Benched Pokémon.) (You can't use more than 1 GX attack in a game.)" + } + ], + "weaknesses": [ + { + "type": "Grass", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless", + "Colorless", + "Colorless", + "Colorless" + ], + "convertedRetreatCost": 4, + "set": { + "id": "sm9", + "name": "Team Up", + "series": "Sun & Moon", + "printedTotal": 181, + "total": 198, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "TEU", + "releaseDate": "2019/02/01", + "updatedAt": "2021/09/01 05:37:00", + "images": { + "symbol": "https://images.pokemontcg.io/sm9/symbol.png", + "logo": "https://images.pokemontcg.io/sm9/logo.png" + } + }, + "number": "161", + "artist": "OOYAMA", + "rarity": "Rare Ultra", + "nationalPokedexNumbers": [ + 129, + 321 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/sm9/161.png", + "large": "https://images.pokemontcg.io/sm9/161_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sm9-161", + "updatedAt": "2025/08/17", + "prices": { + "holofoil": { + "low": 675, + "mid": 1019.99, + "high": 1500, + "market": 528.13, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sm9-161", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 254.74, + "lowPrice": 48.9, + "trendPrice": 248.15, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 33.25, + "lowPriceExPlus": 159, + "avg1": 50, + "avg7": 217, + "avg30": 325.36, + "reverseHoloAvg1": 34.9, + "reverseHoloAvg7": 29.9, + "reverseHoloAvg30": 34.09 + } + } + }, + { + "id": "smp-SM166", + "name": "Magikarp & Wailord-GX", + "supertype": "Pokémon", + "subtypes": [ + "Basic", + "TAG TEAM", + "GX" + ], + "hp": "300", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "rules": [ + "TAG TEAM rule: When your TAG TEAM is Knocked Out, your opponent takes 3 Prize cards." + ], + "attacks": [ + { + "name": "Super Splash", + "cost": [ + "Water", + "Water", + "Water", + "Water", + "Water" + ], + "convertedEnergyCost": 5, + "damage": "180", + "text": "" + }, + { + "name": "Towering Splash-GX", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "If this Pokémon has at least 7 extra Water Energy attached to it (in addition to this attack's cost), this attack does 100 damage to each of your opponent's Benched Pokémon. (Don't apply Weakness and Resistance for Benched Pokémon.) (You can't use more than 1 GX attack in a game.)" + } + ], + "weaknesses": [ + { + "type": "Grass", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless", + "Colorless", + "Colorless", + "Colorless" + ], + "convertedRetreatCost": 4, + "set": { + "id": "smp", + "name": "SM Black Star Promos", + "series": "Sun & Moon", + "printedTotal": 248, + "total": 250, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "PR-SM", + "releaseDate": "2017/02/03", + "updatedAt": "2020/05/01 16:06:00", + "images": { + "symbol": "https://images.pokemontcg.io/smp/symbol.png", + "logo": "https://images.pokemontcg.io/smp/logo.png" + } + }, + "number": "SM166", + "artist": "Mitsuhiro Arita", + "rarity": "Promo", + "nationalPokedexNumbers": [ + 129, + 321 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/smp/SM166.png", + "large": "https://images.pokemontcg.io/smp/SM166_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/smp-SM166", + "updatedAt": "2025/08/17", + "prices": { + "holofoil": { + "low": 58.08, + "mid": 124.35, + "high": 149.69, + "market": 87.28, + "directLow": 79.99 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/smp-SM166", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 41.11, + "lowPrice": 3.97, + "trendPrice": 32.91, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 5.9, + "lowPriceExPlus": 9.99, + "avg1": 35, + "avg7": 25.06, + "avg30": 35.43, + "reverseHoloAvg1": 5.99, + "reverseHoloAvg7": 6.11, + "reverseHoloAvg30": 5.77 + } + } + }, + { + "id": "sm9-183", + "name": "Magikarp & Wailord-GX", + "supertype": "Pokémon", + "subtypes": [ + "Basic", + "TAG TEAM", + "GX" + ], + "hp": "300", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "rules": [ + "TAG TEAM rule: When your TAG TEAM is Knocked Out, your opponent takes 3 Prize cards." + ], + "attacks": [ + { + "name": "Super Splash", + "cost": [ + "Water", + "Water", + "Water", + "Water", + "Water" + ], + "convertedEnergyCost": 5, + "damage": "180", + "text": "" + }, + { + "name": "Towering Splash-GX", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "If this Pokémon has at least 7 extra Water Energy attached to it (in addition to this attack's cost), this attack does 100 damage to each of your opponent's Benched Pokémon. (Don't apply Weakness and Resistance for Benched Pokémon.) (You can't use more than 1 GX attack in a game.)" + } + ], + "weaknesses": [ + { + "type": "Grass", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless", + "Colorless", + "Colorless", + "Colorless" + ], + "convertedRetreatCost": 4, + "set": { + "id": "sm9", + "name": "Team Up", + "series": "Sun & Moon", + "printedTotal": 181, + "total": 198, + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "TEU", + "releaseDate": "2019/02/01", + "updatedAt": "2021/09/01 05:37:00", + "images": { + "symbol": "https://images.pokemontcg.io/sm9/symbol.png", + "logo": "https://images.pokemontcg.io/sm9/logo.png" + } + }, + "number": "183", + "artist": "5ban Graphics", + "rarity": "Rare Rainbow", + "nationalPokedexNumbers": [ + 129, + 321 + ], + "legalities": { + "unlimited": "Legal", + "expanded": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/sm9/183.png", + "large": "https://images.pokemontcg.io/sm9/183_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sm9-183", + "updatedAt": "2025/08/17", + "prices": { + "holofoil": { + "low": 87.65, + "mid": 149.95, + "high": 329.95, + "market": 87.86, + "directLow": 121.2 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sm9-183", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 80.26, + "lowPrice": 15, + "trendPrice": 72.79, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 30.29, + "lowPriceExPlus": 19.95, + "avg1": 52.95, + "avg7": 86.92, + "avg30": 59.21, + "reverseHoloAvg1": 34, + "reverseHoloAvg7": 24.88, + "reverseHoloAvg30": 21.5 + } + } + }, + { + "id": "cel25c-66_A", + "name": "Shining Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "level": "45", + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "rules": [ + "You can't have more than 1 Shining Magikarp in your deck." + ], + "attacks": [ + { + "cost": [ + "Water" + ], + "name": "Gold Scale", + "damage": "", + "text": "Your opponent may draw 2 cards. Either way, you may draw 2 cards.", + "convertedEnergyCost": 1 + }, + { + "cost": [ + "Psychic" + ], + "name": "Dragon Bond", + "damage": "", + "text": "Search your deck for a card named Gyarados, Dark Gyarados, or Shining Gyarados. Show it to your opponent and put it into your hand. Shuffle your deck afterward.", + "convertedEnergyCost": 1 + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "cel25c", + "name": "Celebrations: Classic Collection", + "series": "Sword & Shield", + "printedTotal": 25, + "total": 25, + "legalities": { + "unlimited": "Legal" + }, + "ptcgoCode": "CEL", + "releaseDate": "2021/10/08", + "updatedAt": "2022/10/11 21:39:00", + "images": { + "symbol": "https://images.pokemontcg.io/cel25c/symbol.png", + "logo": "https://images.pokemontcg.io/cel25c/logo.png" + } + }, + "number": "66", + "artist": "Ken Sugimori", + "rarity": "Classic Collection", + "flavorText": "An underpowered, pathetic Pokémon. It may jump high on rare occasions, but never more than seven feet.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal" + }, + "images": { + "small": "https://images.pokemontcg.io/cel25c/66_A.png", + "large": "https://images.pokemontcg.io/cel25c/66_A_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/cel25c-66_A", + "updatedAt": "2025/08/17", + "prices": { + "holofoil": { + "low": 22, + "mid": 33.05, + "high": 1000, + "market": 27.97, + "directLow": 27.74 + } + } + } + }, + { + "id": "pgo-21", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Lively Grouping", + "cost": [ + "Colorless" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Search your deck for any number of Magikarp, reveal them, and put them into your hand. Then, shuffle your deck." + }, + { + "name": "Raging Fin", + "cost": [ + "Colorless", + "Colorless" + ], + "convertedEnergyCost": 2, + "damage": "10+", + "text": "This attack does 30 more damage for each Magikarp and Gyarados in your discard pile." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "pgo", + "name": "Pokémon GO", + "series": "Sword & Shield", + "printedTotal": 78, + "total": 88, + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "PGO", + "releaseDate": "2022/07/01", + "updatedAt": "2022/07/06 17:07:00", + "images": { + "symbol": "https://images.pokemontcg.io/pgo/symbol.png", + "logo": "https://images.pokemontcg.io/pgo/logo.png" + } + }, + "number": "21", + "artist": "N-DESIGN Inc.", + "rarity": "Common", + "flavorText": "It is virtually worthless in terms of both power and speed. It is the most weak and pathetic Pokémon in the world.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "regulationMark": "F", + "images": { + "small": "https://images.pokemontcg.io/pgo/21.png", + "large": "https://images.pokemontcg.io/pgo/21_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/pgo-21", + "updatedAt": "2025/08/17", + "prices": { + "reverseHolofoil": { + "low": 0.05, + "mid": 0.25, + "high": 4.95, + "market": 0.24, + "directLow": null + }, + "normal": { + "low": 0.01, + "mid": 0.12, + "high": 4.95, + "market": 0.1, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/pgo-21", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.04, + "lowPrice": 0.02, + "trendPrice": 0.05, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.17, + "reverseHoloLow": 0.02, + "reverseHoloTrend": 0.3, + "lowPriceExPlus": 0.02, + "avg1": 0.02, + "avg7": 0.04, + "avg30": 0.04, + "reverseHoloAvg1": 0.2, + "reverseHoloAvg7": 0.3, + "reverseHoloAvg30": 0.19 + } + } + }, + { + "id": "sv1-44", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "attacks": [ + { + "cost": [ + "Water" + ], + "name": "Jump", + "damage": "", + "text": "Flip a coin. If heads, this attack does 10 damage to 1 of your opponent's Pokémon. (Don't apply Weakness and Resistance for Benched Pokémon.)", + "convertedEnergyCost": 1 + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "sv1", + "name": "Scarlet & Violet", + "series": "Scarlet & Violet", + "printedTotal": 198, + "total": 258, + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "releaseDate": "2023/03/31", + "updatedAt": "2023/03/31 15:45:00", + "images": { + "symbol": "https://images.pokemontcg.io/sv1/symbol.png", + "logo": "https://images.pokemontcg.io/sv1/logo.png" + } + }, + "number": "44", + "artist": "KIYOTAKA OSHIYAMA", + "rarity": "Common", + "flavorText": "An underpowered, pathetic Pokémon. It may jump high on rare occasions but never more than seven feet.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "regulationMark": "G", + "images": { + "small": "https://images.pokemontcg.io/sv1/44.png", + "large": "https://images.pokemontcg.io/sv1/44_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sv1-44", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.01, + "mid": 0.12, + "high": 4.95, + "market": 0.1, + "directLow": null + }, + "reverseHolofoil": { + "low": 0.04, + "mid": 0.22, + "high": 7.27, + "market": 0.21, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sv1-44", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.21, + "lowPrice": 0.02, + "trendPrice": 1.01, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.14, + "reverseHoloLow": 0.02, + "reverseHoloTrend": 0.16, + "lowPriceExPlus": 0.02, + "avg1": 7.54, + "avg7": 1.53, + "avg30": 0.22, + "reverseHoloAvg1": 0.11, + "reverseHoloAvg7": 0.12, + "reverseHoloAvg30": 0.14 + } + } + }, + { + "id": "sv2-42", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "attacks": [ + { + "cost": [ + "Water" + ], + "name": "Expert Splasher", + "damage": "10+", + "text": "Flip 2 coins. If both of them are heads, this attack does 20 more damage.", + "convertedEnergyCost": 1 + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "sv2", + "name": "Paldea Evolved", + "series": "Scarlet & Violet", + "printedTotal": 193, + "total": 279, + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "releaseDate": "2023/06/09", + "updatedAt": "2023/06/09 15:00:00", + "images": { + "symbol": "https://images.pokemontcg.io/sv2/symbol.png", + "logo": "https://images.pokemontcg.io/sv2/logo.png" + } + }, + "number": "42", + "artist": "HYOGONOSUKE", + "rarity": "Common", + "flavorText": "An underpowered, pathetic Pokémon. It may jump high on rare occasions but never more than seven feet.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "regulationMark": "G", + "images": { + "small": "https://images.pokemontcg.io/sv2/42.png", + "large": "https://images.pokemontcg.io/sv2/42_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sv2-42", + "updatedAt": "2025/08/17", + "prices": { + "normal": { + "low": 0.01, + "mid": 0.1, + "high": 4.95, + "market": 0.1, + "directLow": null + }, + "reverseHolofoil": { + "low": 0.03, + "mid": 0.17, + "high": 4.95, + "market": 0.15, + "directLow": 0.11 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sv2-42", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.05, + "lowPrice": 0.02, + "trendPrice": 0.06, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.14, + "reverseHoloLow": 0.02, + "reverseHoloTrend": 0.16, + "lowPriceExPlus": 0.02, + "avg1": 0.02, + "avg7": 0.04, + "avg30": 0.05, + "reverseHoloAvg1": 0.09, + "reverseHoloAvg7": 0.16, + "reverseHoloAvg30": 0.14 + } + } + }, + { + "id": "sv2-203", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "attacks": [ + { + "cost": [ + "Water" + ], + "name": "Expert Splasher", + "damage": "10+", + "text": "Flip 2 coins. If both of them are heads, this attack does 20 more damage.", + "convertedEnergyCost": 1 + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "sv2", + "name": "Paldea Evolved", + "series": "Scarlet & Violet", + "printedTotal": 193, + "total": 279, + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "releaseDate": "2023/06/09", + "updatedAt": "2023/06/09 15:00:00", + "images": { + "symbol": "https://images.pokemontcg.io/sv2/symbol.png", + "logo": "https://images.pokemontcg.io/sv2/logo.png" + } + }, + "number": "203", + "artist": "Shinji Kanda", + "rarity": "Illustration Rare", + "flavorText": "An underpowered, pathetic Pokémon. It may jump high on rare occasions but never more than seven feet.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "regulationMark": "G", + "images": { + "small": "https://images.pokemontcg.io/sv2/203.png", + "large": "https://images.pokemontcg.io/sv2/203_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sv2-203", + "updatedAt": "2025/08/17", + "prices": { + "holofoil": { + "low": 172.37, + "mid": 265.39, + "high": 599.99, + "market": 246.52, + "directLow": 204.24 + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sv2-203", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 181.51, + "lowPrice": 99.99, + "trendPrice": 156.67, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0, + "reverseHoloLow": 0, + "reverseHoloTrend": 0, + "lowPriceExPlus": 120, + "avg1": 178.93, + "avg7": 187.71, + "avg30": 193.53, + "reverseHoloAvg1": 0, + "reverseHoloAvg7": 0, + "reverseHoloAvg30": 0 + } + } + }, + { + "id": "sv3pt5-129", + "name": "Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "attacks": [ + { + "name": "Splashy Splash", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "", + "text": "Flip a coin until you get tails. For each heads, draw a card." + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "sv3pt5", + "name": "151", + "series": "Scarlet & Violet", + "printedTotal": 165, + "total": 207, + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "releaseDate": "2023/09/22", + "updatedAt": "2023/09/22 15:00:00", + "images": { + "symbol": "https://images.pokemontcg.io/sv3pt5/symbol.png", + "logo": "https://images.pokemontcg.io/sv3pt5/logo.png" + } + }, + "number": "129", + "artist": "Kouki Saitou", + "rarity": "Common", + "flavorText": "An underpowered, pathetic Pokémon. It may jump high on rare occasions but never more than seven feet.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "regulationMark": "G", + "images": { + "small": "https://images.pokemontcg.io/sv3pt5/129.png", + "large": "https://images.pokemontcg.io/sv3pt5/129_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sv3pt5-129", + "updatedAt": "2025/08/17", + "prices": { + "reverseHolofoil": { + "low": 0.04, + "mid": 0.21, + "high": 20, + "market": 0.17, + "directLow": null + }, + "normal": { + "low": 0.01, + "mid": 0.11, + "high": 4.95, + "market": 0.1, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sv3pt5-129", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.04, + "lowPrice": 0.02, + "trendPrice": 0.04, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.16, + "reverseHoloLow": 0.02, + "reverseHoloTrend": 0.17, + "lowPriceExPlus": 0.02, + "avg1": 0.04, + "avg7": 0.05, + "avg30": 0.05, + "reverseHoloAvg1": 0.16, + "reverseHoloAvg7": 0.17, + "reverseHoloAvg30": 0.16 + } + } + }, + { + "id": "sv10-48", + "name": "Misty's Magikarp", + "supertype": "Pokémon", + "subtypes": [ + "Basic" + ], + "hp": "30", + "types": [ + "Water" + ], + "evolvesTo": [ + "Gyarados" + ], + "abilities": [ + { + "name": "So Submerged", + "text": "As long as this Pokémon is on your Bench, prevent all damage from and effects of attacks from your opponent's Pokémon done to this Pokémon.", + "type": "Ability" + } + ], + "attacks": [ + { + "name": "Splash", + "cost": [ + "Water" + ], + "convertedEnergyCost": 1, + "damage": "10", + "text": "" + } + ], + "weaknesses": [ + { + "type": "Lightning", + "value": "×2" + } + ], + "retreatCost": [ + "Colorless" + ], + "convertedRetreatCost": 1, + "set": { + "id": "sv10", + "name": "Destined Rivals", + "series": "Scarlet & Violet", + "printedTotal": 182, + "total": 244, + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "ptcgoCode": "DRI", + "releaseDate": "2025/05/30", + "updatedAt": "2025/05/29 22:00:00", + "images": { + "symbol": "https://images.pokemontcg.io/sv10/symbol.png", + "logo": "https://images.pokemontcg.io/sv10/logo.png" + } + }, + "number": "48", + "artist": "Shimaris Yukichi", + "rarity": "Common", + "flavorText": "An underpowered, pathetic Pokémon. It may jump high on rare occasions but never more than seven feet.", + "nationalPokedexNumbers": [ + 129 + ], + "legalities": { + "unlimited": "Legal", + "standard": "Legal", + "expanded": "Legal" + }, + "regulationMark": "I", + "images": { + "small": "https://images.pokemontcg.io/sv10/48.png", + "large": "https://images.pokemontcg.io/sv10/48_hires.png" + }, + "tcgplayer": { + "url": "https://prices.pokemontcg.io/tcgplayer/sv10-48", + "updatedAt": "2025/08/17", + "prices": { + "reverseHolofoil": { + "low": 0.14, + "mid": 0.55, + "high": 5.19, + "market": 0.58, + "directLow": null + }, + "normal": { + "low": 0.01, + "mid": 0.15, + "high": 20, + "market": 0.13, + "directLow": null + } + } + }, + "cardmarket": { + "url": "https://prices.pokemontcg.io/cardmarket/sv10-48", + "updatedAt": "2025/08/17", + "prices": { + "averageSellPrice": 0.04, + "lowPrice": 0.02, + "trendPrice": 0.04, + "germanProLow": 0, + "suggestedPrice": 0, + "reverseHoloSell": 0.24, + "reverseHoloLow": 0.02, + "reverseHoloTrend": 0.28, + "lowPriceExPlus": 0.02, + "avg1": 0.05, + "avg7": 0.03, + "avg30": 0.04, + "reverseHoloAvg1": 0.39, + "reverseHoloAvg7": 0.22, + "reverseHoloAvg30": 0.25 + } + } + } + ], + "page": 1, + "pageSize": 250, + "count": 44, + "totalCount": 44, + "cached": false, + "updatedAt": "2025-08-17T12:00:51.895Z" +} \ No newline at end of file diff --git a/src/app/api/magikarp/route.ts b/src/app/api/magikarp/route.ts index 9d8da8c..3791269 100644 --- a/src/app/api/magikarp/route.ts +++ b/src/app/api/magikarp/route.ts @@ -1,5 +1,15 @@ import { NextRequest } from 'next/server'; import { fetchMagikarpCards } from '@/lib/api'; +import { promises as fs } from 'fs'; +import path from 'path'; + +const DATA_DIR = path.join(process.cwd(), 'data'); +const CARDS_FILE = path.join(DATA_DIR, 'cards.json'); +const TTL_MS = 24 * 60 * 60 * 1000; // 24 hours + +async function ensureDataDir() { + try { await fs.mkdir(DATA_DIR, { recursive: true }); } catch {} +} export async function GET(req: NextRequest) { const { searchParams } = new URL(req.url); @@ -7,10 +17,31 @@ export async function GET(req: NextRequest) { const page = Number(searchParams.get('page') ?? '1'); const pageSize = Number(searchParams.get('pageSize') ?? '250'); const orderBy = searchParams.get('orderBy') ?? 'set.releaseDate'; + const refresh = searchParams.get('refresh') === '1'; try { + await ensureDataDir(); + if (!refresh) { + // Try to serve from cache if exists + try { + const raw = await fs.readFile(CARDS_FILE, 'utf-8'); + if (raw) { + const json = JSON.parse(raw); + const ts = json?.updatedAt ? Date.parse(json.updatedAt) : NaN; + const fresh = Number.isFinite(ts) && (Date.now() - ts) < TTL_MS; + if (fresh) { + return Response.json({ ...json, cached: true }, { status: 200 }); + } + } + } catch {} + } + + // Fetch fresh from API const data = await fetchMagikarpCards({ q, page, pageSize }); - return Response.json(data, { status: 200 }); + const payload = { ...data, cached: false, updatedAt: new Date().toISOString() }; + // Write cache best-effort + try { await fs.writeFile(CARDS_FILE, JSON.stringify(payload, null, 2), 'utf-8'); } catch {} + return Response.json(payload, { status: 200 }); } catch (err: any) { const hasKey = !!(process.env.POKEMON_TCG_API_KEY || process.env.NEXT_PUBLIC_POKEMON_TCG_API_KEY); console.error('Error fetching cards', err); diff --git a/src/app/page.tsx b/src/app/page.tsx index 328dbd5..1342de5 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -16,6 +16,10 @@ export default function Page() { const [setId, setSetId] = useState(''); const [note, setNote] = useState(null); const [tab, setTab] = useState<'uncollected' | 'collected'>('uncollected'); + const [refreshing, setRefreshing] = useState(false); + const [updatedAt, setUpdatedAt] = useState(null); + const [cachedFlag, setCachedFlag] = useState(null); + const [toast, setToast] = useState(null); useEffect(() => { (async () => { @@ -34,6 +38,8 @@ export default function Page() { const json = await res.json(); setCards(json.data || []); if (json.note) setNote(String(json.note)); + if (json.updatedAt) setUpdatedAt(String(json.updatedAt)); + if (typeof json.cached === 'boolean') setCachedFlag(json.cached); } catch (e: any) { setError(e?.message || 'Error'); } finally { @@ -43,6 +49,28 @@ export default function Page() { load(); }, []); + async function refreshCards() { + setRefreshing(true); + setError(null); + try { + const res = await fetch('/api/magikarp?pageSize=250&refresh=1', { cache: 'no-store' }); + if (!res.ok) throw new Error('Failed to refresh'); + const json = await res.json(); + setCards(json.data || []); + if (json.note) setNote(String(json.note)); else setNote(null); + if (json.updatedAt) setUpdatedAt(String(json.updatedAt)); + if (typeof json.cached === 'boolean') setCachedFlag(json.cached); + } catch (e: any) { + // Non-blocking toast on refresh failure + const msg = e?.message ? String(e.message) : 'Refresh failed'; + setToast(msg); + // auto-hide + setTimeout(() => setToast(null), 3000); + } finally { + setRefreshing(false); + } + } + function toggleCollected(id: string, key: VariantKey) { setChecklist((prev) => { const next: ChecklistV2 = { ...prev }; @@ -116,6 +144,25 @@ export default function Page() {
+ + {updatedAt ? ( + + Updated: {new Date(updatedAt).toLocaleString()} + {cachedFlag !== null && ( + + {cachedFlag ? 'Cached' : 'Live'} + + )} + + ) : null}
{loading ? ( @@ -163,6 +210,12 @@ export default function Page() { Showing {displayed.length} of {filtered.length} cards in this tab. + {/* Toast */} + {toast ? ( +
+ {toast} +
+ ) : null} )}