PkmnPrices7 min de lectura

Cómo pasar de pokemontcg.io a PkmnPrices

Las claves de pokemontcg.io funcionan hasta el 1 de marzo de 2027. Cómo se corresponden sus solicitudes y respuestas con PkmnPrices, el código para mover una consulta de carta y sus precios, y los campos que perderás.

La API Pokémon TCG de pokemontcg.io está obsoleta. Su documentación dice que los registros nuevos están cerrados y que «existing API keys will continue to function through March 1, 2027». Si tu app llama a api.pokemontcg.io, esa es tu fecha límite.

Este artículo es la parte de código de la migración: cómo se corresponde una solicitud a pokemontcg.io con la nuestra, unas líneas que reconstruyen el objeto tcgplayer.prices que tu código probablemente lee, y los campos de carta sin equivalente. Nosotros gestionamos PkmnPrices, así que valora el consejo en consecuencia. Si necesitas el texto completo de las cartas y los datos de legalidad, el artículo comparativo trata Scrydex, adonde apunta pokemontcg.io. Todos los datos de pokemontcg.io se comprobaron en su documentación el 26 de octubre de 2026.

Qué cambia

pokemontcg.ioPkmnPrices
URL basehttps://api.pokemontcg.io/v2https://api.pkmnprices.com/v1
Cabecera de la claveX-Api-Keyx-api-key
Sin claveFunciona, con límites mucho más bajosNo es posible; una clave gratuita da 500 créditos al día
Id de cartaUna cadena como base1-4Un entero
Búsquedaq=name:charizard subtypes:megaUn parámetro por campo: name, set_id, number, rarity y otros
Tamaño de páginapageSize, hasta 250per_page, hasta 100
Datos de paginacióncount, totalCountUn objeto pagination con total y total_pages
Elegir camposselect=id,nameNo disponible; cada respuesta tiene una forma fija
PreciosDentro de cada cartaNo en las listas; GET /v1/cards/:id devuelve un array prices

Autenticación

Crea una clave en el panel. El plan gratuito no pide tarjeta. Los nombres de cabecera no distinguen mayúsculas, así que el código que ya envía X-Api-Key sigue funcionando en cuanto lleve una clave de PkmnPrices.

bash
# pokemontcg.io
curl -H "X-Api-Key: $PTCG_KEY" \
"https://api.pokemontcg.io/v2/cards?q=name:charizard&pageSize=3"
# PkmnPrices
curl -H "x-api-key: $PKMNPRICES_KEY" \
"https://api.pkmnprices.com/v1/cards?name=charizard&per_page=3"

Búsqueda

pokemontcg.io tiene un lenguaje de consulta en q. Nosotros tenemos parámetros separados, así que cada cláusula de un q pasa a ser su propio parámetro.

q de pokemontcg.ioPkmnPrices
name:charizardname=charizard, una coincidencia por subcadena
set.id:base1set_id=1, el id numérico de GET /v1/sets?name=Base Set
number:4number=4; los ceros a la izquierda se ignoran
rarity:"Rare Holo"rarity=Rare Holo, escrito exactamente como en las respuestas
types:fireenergy_type=Fire
supertype:pokemoncard_type=Pokemon
subtypes:stage1stage=Stage 1; los demás subtipos no tienen filtro
artist:"Mitsuhiro Arita"artist=arita, una subcadena sin distinguir mayúsculas
hp:120hp=120; solo valores exactos, sin rangos
orderBy=-set.releaseDatesort=price_asc o price_desc, y solo con un filtro de precio

Encontrar la misma carta

Un id de pokemontcg.io es un código de set y un número, base1-4. El nuestro es un entero sin relación con él. Busca el set por su nombre una vez y guarda el resultado.

js
const API = "https://api.pkmnprices.com/v1";
const get = async (path, params = {}) => {
const url = new URL(API + path);
for (const [key, value] of Object.entries(params)) {
if (value !== undefined) url.searchParams.set(key, value);
}
const res = await fetch(url, { headers: { "x-api-key": process.env.PKMNPRICES_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
return res.json();
};
// pokemontcg.io id "base1-4" becomes a set name plus a number here.
export const findCard = async (setName, number) => {
const sets = await get("/sets", { name: setName });
const set = sets.data.find((s) => s.name === setName);
if (!set) throw new Error(`no set called ${setName}`);
const cards = await get("/cards", { set_id: set.id, number });
if (cards.data.length === 0) throw new Error(`no card ${number} in ${setName}`);
// The list has no prices; the single-card call does.
return get(`/cards/${cards.data[0].id}`);
};

La carta que recibes incluye sus precios. La llamada de lista del medio no los incluye, por eso la última línea es una segunda solicitud.

Precios

pokemontcg.io anida los precios bajo el mercado y la impresión: card.tcgplayer.prices.holofoil.market. Los nuestros son filas de un array prices, una por fuente, estado e impresión:

json
{
"source": "tcgplayer",
"currency": "USD",
"condition": "Near Mint",
"variant": "Holofoil",
"market_price": 412.5
}

Esto reconstruye el objeto que tu código ya lee, para las tres impresiones que más usan las apps:

js
// card.tcgplayer.prices.holofoil.market, rebuilt from the prices array.
const VARIANT_KEY = {
Normal: "normal",
Holofoil: "holofoil",
"Reverse Holofoil": "reverseHolofoil",
};
export const tcgplayerPrices = (card) => {
const prices = {};
for (const row of card.prices) {
if (row.source !== "tcgplayer" || row.condition !== "Near Mint") continue;
const key = VARIANT_KEY[row.variant];
if (key) prices[key] = { market: row.market_price };
}
return prices;
};

Algunos campos no pasan:

  • low, mid, high y directLow no se devuelven. Cada fila tiene un solo market_price.
  • Los promedios y tendencias de Cardmarket (trendPrice, avg1, avg7, avg30 y el resto) no se devuelven. El market_price de una fila de Cardmarket es la oferta actual fiable más baja para ese estado e impresión, en EUR, desde Pro.
  • Las primeras ediciones aparecen como variantes propias. Lee las cadenas de variante en una respuesta real antes de asignarlas.

A cambio obtienes un precio para cada estado y no solo Near Mint, historial diario de precios de hasta un año, los anuncios en vivo de TCGplayer y Cardmarket, y las ventas de eBay. La documentación cubre cada uno.

Lo que no encontrarás

Nuestras cartas llevan los campos que necesita una app de precios y dejan fuera el texto completo de reglas. Estos no tienen equivalente:

  • legalities y regulationMark
  • supertype y subtypes (solo existen card_type y stage)
  • rules, evolvesFrom, evolvesTo y nationalPokedexNumbers
  • ancientTrait, y habilidades y ataques como objetos estructurados: los nuestros son texto
  • Imágenes pequeña y grande: hay un solo image_url
  • La serie, la fecha de salida y el ptcgoCode de un set: un set tiene id, name, language y card_count

Si tu app los necesita, guarda una copia local para eso y usa la API para los precios. Los datos JSON históricos del repositorio pokemon-tcg-data aún se pueden clonar, aunque su README lo llama heredado y dice que el proyecto se está retirando. Scrydex heredó la base de datos completa de cartas.

Créditos y paginación

Un crédito es un elemento devuelto. Una página de 100 cartas cuesta 100 créditos, y la lista no trae precios, así que cada consulta de precio cuesta un crédito más. Pro permite 20.000 créditos al día.

Una app que replica todas las cartas no cabe en un día. Hay más de 80.000 cartas, así que listarlas todas una vez cuesta casi esa cantidad de créditos: repártelo en unos días y guarda los ids. Para los precios de todo el catálogo, la exportación del catálogo del plan Scale devuelve cada precio actual en un solo archivo, y una descarga no gasta créditos.

Migrar sin un día D

Deja pokemontcg.io funcionando hasta marzo. Consigue una clave gratuita y haz unas consultas con el código de arriba junto a tus llamadas actuales, para comparar las cifras. Guarda nuestro id de carta junto al tuyo. Después cambia las lecturas y deja la clave antigua hasta estar seguro. La página de planes lista lo que incluye cada nivel.

¿Cuándo dejan de funcionar las claves de pokemontcg.io?
Su documentación dice que las claves existentes siguen funcionando hasta el 1 de marzo de 2027. Los registros nuevos ya están cerrados.
¿Puedo usar mi clave de pokemontcg.io con PkmnPrices?
No. Crea una clave de PkmnPrices en el panel. El plan gratuito da 500 créditos al día y no pide tarjeta.
¿PkmnPrices devuelve datos de legalidad o de rotación?
No. Las cartas llevan precios, atributos como etapa, tipo, PS, debilidad y texto de ataques, y una imagen, pero no legalidades ni marcas de regulación. Guarda una copia local para eso.
¿Hay un SDK?
Sí, SDK oficiales para JavaScript y Python. La página de SDK de la documentación muestra ambos.
PkmnPrices

Escrito por

PkmnPrices

PkmnPrices es una API para desarrolladores con datos del JCC Pokémon: precios diarios de TCGPlayer de más de 80.000 cartas, más de 800 expansiones y productos sellados.