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.io | PkmnPrices | |
|---|---|---|
| URL base | https://api.pokemontcg.io/v2 | https://api.pkmnprices.com/v1 |
| Cabecera de la clave | X-Api-Key | x-api-key |
| Sin clave | Funciona, con límites mucho más bajos | No es posible; una clave gratuita da 500 créditos al día |
| Id de carta | Una cadena como base1-4 | Un entero |
| Búsqueda | q=name:charizard subtypes:mega | Un parámetro por campo: name, set_id, number, rarity y otros |
| Tamaño de página | pageSize, hasta 250 | per_page, hasta 100 |
| Datos de paginación | count, totalCount | Un objeto pagination con total y total_pages |
| Elegir campos | select=id,name | No disponible; cada respuesta tiene una forma fija |
| Precios | Dentro de cada carta | No 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.
# pokemontcg.iocurl -H "X-Api-Key: $PTCG_KEY" \"https://api.pokemontcg.io/v2/cards?q=name:charizard&pageSize=3"# PkmnPricescurl -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.io | PkmnPrices |
|---|---|
name:charizard | name=charizard, una coincidencia por subcadena |
set.id:base1 | set_id=1, el id numérico de GET /v1/sets?name=Base Set |
number:4 | number=4; los ceros a la izquierda se ignoran |
rarity:"Rare Holo" | rarity=Rare Holo, escrito exactamente como en las respuestas |
types:fire | energy_type=Fire |
supertype:pokemon | card_type=Pokemon |
subtypes:stage1 | stage=Stage 1; los demás subtipos no tienen filtro |
artist:"Mitsuhiro Arita" | artist=arita, una subcadena sin distinguir mayúsculas |
hp:120 | hp=120; solo valores exactos, sin rangos |
orderBy=-set.releaseDate | sort=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.
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:
{"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:
// 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,highydirectLowno se devuelven. Cada fila tiene un solomarket_price.- Los promedios y tendencias de Cardmarket (
trendPrice,avg1,avg7,avg30y el resto) no se devuelven. Elmarket_pricede 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:
legalitiesyregulationMarksupertypeysubtypes(solo existencard_typeystage)rules,evolvesFrom,evolvesToynationalPokedexNumbersancientTrait, 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
ptcgoCodede un set: un set tieneid,name,languageycard_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.

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.