Primeros pasos

Una API JSON de solo lectura sobre los mismos datos que alimentan el sitio: cartas, mazos, torneos y resultados de jugadores.

Sin clave de API. Todos los endpoints son públicos y no requieren autenticación, token ni registro.

GET o POST, y los parámetros pueden ir en la query string o en el cuerpo. Vea Envío de parámetros, más abajo.

URL base
https://cardsrealm.com/es-ar/api/

El segmento de idioma forma parte de la ruta y decide el idioma de los nombres de carta y del resto del texto traducido. Sirve cualquier locale que el sitio atienda.

Elegir el juego. Dos caminos, y hacen lo mismo: llamar al subdominio del propio juego, o pasar el parámetro game_id. Sin ninguno de los dos, recibes el juego del dominio que llamaste.

Ejemplo de petición
curl "https://cardsrealm.com/en-us/api/getRecentDecks?game_id=1&limit=2"
Los precios son enteros en céntimos. Un price de 77 con currency_prefix $ significa 0,77. Divide entre 100 antes de mostrarlo.
Uso razonable. Hoy no se aplica ningún límite estricto de peticiones, así que sé razonable: cachea lo que puedas y prefiere una petición paginada a muchas pequeñas. El abuso es lo que convierte una API abierta en cerrada.

Envío de parámetros

Todos los endpoints responden a GET y a POST, y leen los parámetros de cualquiera de estos formatos, el que te resulte más fácil. La respuesta es la misma.

Cómo lo envíasContent-Type
Query string (GET o POST)—
Formulario simpleapplication/x-www-form-urlencoded
Formulario multipartmultipart/form-data
JSONapplication/json
La misma llamada, de tres formas
curl "https://cardsrealm.com/es-ar/api/getRecentDecks?game_id=1&limit=2"

curl -X POST "https://cardsrealm.com/es-ar/api/getRecentDecks" \
     -d "game_id=1" -d "limit=2"

curl -X POST "https://cardsrealm.com/es-ar/api/getRecentDecks" \
     -H "Content-Type: application/json" \
     -d '{"game_id": 1, "limit": 2}'
Los números pueden ser números. En un formulario todo valor llega como texto; en JSON puedes mandar 1 en vez de "1". Ambos se aceptan en todas partes.
No definas el encabezado Content-Type a mano en Postman, Insomnia o una biblioteca HTTP. Deja que la herramienta lo escriba: en multipart tiene que incluir el boundary, y un Content-Type que no corresponde al cuerpo hace que todos los campos lleguen vacíos. Cuando eso pasa, la respuesta es un 400 sobre el envoltorio, no sobre tus campos:
Respuesta
{
  "error": "No pude leer los campos del cuerpo de la solicitud. Envíalos como form-data, x-www-form-urlencoded o JSON.",
  "hint": "Si usas Postman o Insomnia, borra el encabezado Content-Type y deja que la herramienta lo genere sola."
}
Se puede llamar desde el navegador. Una página en tu propio dominio puede llamarla directamente desde el navegador. No se lee ninguna cookie ni credencial.

cardinfo

GET/es-ar/api/cardinfo

Todo lo que el sitio sabe sobre una carta, buscada por nombre: texto, coste de maná, rareza, ediciones y precios actuales.

ParámetroTipoDefectoNotas
cardnamestringPath to exileHasta 50 caracteres.
currencystringmoneda del localeTres letras.
game_idintjuego del dominio1 = Magic, 2 = Yu-Gi-Oh, 3 = Pokémon, 4 = Runeterra.
language_codestringidioma de la rutaIdioma del nombre y del texto de la carta devueltos.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/cardinfo?cardname=Lightning%20Bolt&currency=USD"
Ejemplo de respuesta
{
  "name_of_card": "Lightning Bolt",
  "name_ing": "Lightning Bolt",
  "type_of_card": "Instant",
  "text_of_card": "Lightning Bolt deals 3 damage to any target.",
  "price": 77,
  "currency_prefix": "$",
  "path_of_card": "oj7-lightning-bolt",
  "card_url": "https://mtg.cardsrealm.com/en-us/card/lightning-bolt"
}

getCardsInfo

GET/es-ar/api/getCardsInfo

Nombre, imagen, reverso y tipo de varias cartas en una sola llamada. Es lo que da cardinfo, sin precios ni ediciones, para una lista de mazo entera.

ParámetroTipoDefectoNotas
cardsstringrequeridoNombres de las cartas en inglés separados por |. Hasta 250 nombres, cada uno de 100 caracteres como máximo. Sin él la llamada responde 400.
game_idintjuego del dominioLo mismo que en cardinfo.
language_codestringidioma de la rutaIdioma del nombre y de la imagen devueltos.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/getCardsInfo?cards=Lightning%20Bolt%7CSol%20Ring"
Ejemplo de respuesta
[
  {
    "name_ing": "Lightning Bolt",
    "name_of_card": "Lightning Bolt",
    "image_of_card": "https://cdn.cardsrealm.com/images/cartas/clu-ravnica-clue-edition/EN/med/lightning-bolt-141.png?5541",
    "back_of_card": "",
    "type_of_card": "Instant"
  },
  {
    "name_ing": "Sol Ring",
    "name_of_card": "Sol Ring",
    "image_of_card": "https://cdn.cardsrealm.com/images/cartas/sld-secret-lair-drop/EN/med/sol-ring-2063.png?7315",
    "back_of_card": "",
    "type_of_card": "Artifact"
  }
]
Un nombre que el sitio no conoce simplemente no vuelve: compara lo que enviaste con lo que recibiste.

getCardsRelated

GET/es-ar/api/getCardsRelated

Las cartas que trae consigo una lista de cartas: las fichas que crean, el emblema, la carta que invocan. Pensado para quien tiene una decklist y necesita saber qué fichas pide ese mazo, en una sola llamada para todo el mazo.

ParámetroTipoDefectoNotas
cardsstringrequeridoNombres de las cartas en inglés separados por |. Hasta 250 nombres, cada uno de 100 caracteres como máximo. Sin él la llamada responde 400.
game_idintjuego del dominioLo mismo que en cardinfo.
language_codestringidioma de la rutaIdioma del nombre y del texto de la carta devueltos.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/getCardsRelated?cards=Young%20Pyromancer%7CLingering%20Souls"
Ejemplo de respuesta
[
  {
    "card_id": 20194,
    "name_of_card": "Elemental Token",
    "name_ing": "Elemental Token",
    "image_of_card": "https://cdn.cardsrealm.com/images/cartas/tdsc-duskmourn-commander-tokens/EN/med/elemental-token-9.png?1457",
    "back_of_card": "https://cdn.cardsrealm.com/images/cartas/tust-unstable-tokens/en/back/elemental-token-11.png?3508",
    "type_of_card": "Token creature — elemental",
    "set_name": "Duskmourn: House of Horror Commander Tokens",
    "related_to": "Young Pyromancer"
  }
]
related_to indica las cartas de tu lista que la ponen en juego, separadas por " | ". Una ficha creada por dos cartas del mazo vuelve una sola vez, con los dos nombres.
El token viene en la impresión que pertenece a la carta que lo crea, e image_of_card es esa impresión: el mismo nombre de token puede volver más de una vez, con arte distinto, cuando cartas distintas de tu lista crean impresiones distintas de él. Una carta reimpresa en varias colecciones trae la impresión más reciente.

getCardArts

GET/es-ar/api/getCardArts

Todas las ilustraciones (impresiones) de una carta, la más nueva primero: la misma lista de ediciones que muestra la página de la carta, pero aquí buscada por nombre en lugar de card_id. Pensado para quien solo tiene una lista de mazo a mano, como la mesa de play.cardsrealm.com, donde el jugador cambia la ilustración de una carta durante la partida.

ParámetroTipoDefectoNotas
cardnamestringrequeridoNombre de la carta, en inglés o en el idioma de language_code. Hasta 100 caracteres. Sin él la llamada responde 400.
game_idintjuego del dominioLo mismo que en cardinfo.
language_codestringidioma de la rutaIdioma del nombre y de la imagen devueltos.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/getCardArts?cardname=Lightning%20Bolt"
Ejemplo de respuesta
[
  {
    "card_set_id": 9525351,
    "print_name": "Secret Lair Drop",
    "set_rarity": 2,
    "set_number": "2579",
    "set_artist": "Jessica Fong",
    "name_ing": "Lightning Bolt",
    "name_of_card": "Lightning Bolt",
    "image_of_card": "https://cdn.cardsrealm.com/images/cartas/sld-secret-lair-drop/EN/med/lightning-bolt-2579.png?2214",
    "back_of_card": ""
  }
]
La respuesta es una lista de como máximo 120 impresiones, de la más nueva a la más vieja. back_of_card viene vacío para una carta de una sola cara.

getDeckByPath

GET/es-ar/api/getDeckByPath/<deck_path>

El mismo mazo de getDeckByID, encontrado por la ruta del enlace, para quien tiene el enlace y no el id.

ParámetroTipoDefectoNotas
deck_pathstringrequeridoVa en la URL, no en la query string. Es la parte después de /decks/ en el enlace: mkh-sidar.
currencystringBRLTres letras.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/getDeckByPath/mkh-sidar"
La respuesta es la misma de getDeckByID, y 404 cuando ningún mazo tiene esa ruta.

getRecentDecks

GET/es-ar/api/getRecentDecks

Los mazos publicados más recientemente, del más nuevo al más antiguo.

ParámetroTipoDefectoNotas
pageint1Número de página.
limitint50Mazos por página. El tope es 500; por encima de eso la llamada devuelve error.
game_idint1Lo mismo que en cardinfo.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/getRecentDecks?page=1&limit=2"
Ejemplo de respuesta
[
  {
    "deck_id": 374859,
    "deck_title": "Attack of the myrs",
    "deck_owner": "jarrod long",
    "deck_format_name": "Commander",
    "deck_colours": "B G R U W",
    "total_cards": 100,
    "deck_url": "https://cardsrealm.com/decks/en-us/l8dh-attack-of-the-myrs"
  }
]

getDeckByID

GET/es-ar/api/getDeckByID

Una lista de mazo completa. La lista de cartas viene en la clave cards, con cantidad, board (main o side) y precio por carta.

ParámetroTipoDefectoNotas
deck_idint0El id numérico del mazo.
currencystringBRLTres letras.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/getDeckByID?deck_id=374859&currency=USD"
Ejemplo de respuesta
{
  "deck_title": "Attack of the myrs",
  "user_name": "jarrod long",
  "tour_type_name": "Commander",
  "deck_quantity_main": 99,
  "deck_quantity_side": 1,
  "cards": [
    {
      "name_ing": "Command Tower",
      "deck_quantity": 1,
      "deck_sideboard": 0,
      "card_price_total": 18
    }
  ]
}
Un deck_id inexistente responde 200 con un objeto casi vacío, no un error. Comprueba que deck_title esté presente antes de usar el resto.

getDeckResults

GET/es-ar/api/getDeckResults

Cómo viene rindiendo un arquetipo: historial general, más un desglose by_meta de sus resultados frente a cada otro arquetipo.

ParámetroTipoDefectoNotas
deck_namestringvacíoNombre del arquetipo, hasta 40 caracteres.
weekint4Cuántas semanas hacia atrás. El tope es 52.
formatstringStandardHasta 20 caracteres.
game_idint1Lo mismo que en cardinfo.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/getDeckResults?deck_name=Grixis%20Affinity&format=Pauper&week=8"

getPlayerResults

GET/es-ar/api/getPlayerResults

El historial de un jugador, con un desglose by_meta de cómo le fue con cada arquetipo.

ParámetroTipoDefectoNotas
player_namestringvacíoHasta 40 caracteres.
weekint52Cuántas semanas hacia atrás.
player_platformstringcardsrealm_nicknamePor qué nombre estás buscando. Uno entre cardsrealm_nickname, mtgo, arena, riot o display. Cualquier otro devuelve error.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/getPlayerResults?player_name=Carrubs&player_platform=mtgo"

getPastTournaments

GET/es-ar/api/getPastTournaments

Torneos que ya ocurrieron, del más reciente al más antiguo.

ParámetroTipoDefectoNotas
pageint1Número de página.
formatstringvacíoHasta 20 caracteres. Vacío significa todos los formatos.
game_idint1Lo mismo que en cardinfo.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/getPastTournaments?format=Pauper&page=1"
Ejemplo de respuesta
[
  {
    "tournament_id": 810845,
    "tournament_name": "Domingooouuu Pauper 86",
    "tournament_path": "https://cardsrealm.com/tournament/en-us/1k3c9-domingooouuu-pauper-86",
    "format_name": "Pauper",
    "game_name": "Magic: the Gathering",
    "datetime_utc": "Sun, 16 Aug 2026 16:30:00 GMT"
  }
]

getTournamentInfo

GET/es-ar/api/getTournamentInfo

Un torneo completo: el evento, sus rondas en round_info y la tabla final en standings. Un id inexistente devuelve una lista vacía, no un error.

ParámetroTipoDefectoNotas
tournament_idint1El id numérico del torneo.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/getTournamentInfo?tournament_id=810845"

getUserTournaments

GET/es-ar/api/getUserTournaments

Los torneos organizados por una cuenta.

ParámetroTipoDefectoNotas
nicknamestringCards RealmHasta 30 caracteres.
Ejemplo de petición
curl "https://cardsrealm.com/es-ar/api/getUserTournaments?nickname=leon-diniz"

Errores y soporte

CódigoSignificado
200Éxito. El cuerpo siempre es JSON.
400La llamada fue rechazada: un nombre demasiado largo, un número que no es número, un valor fuera de la lista aceptada, o un cuerpo que no se pudo leer.
500Algo se rompió de nuestro lado. Vale la pena avisarnos.

Una llamada rechazada responde 400 con un objeto. invalid_fields nombra los parámetros que conviene revisar, y no aparece cuando el problema no es un campo concreto.

Respuesta
{
  "error": "La semana debe ser un número",
  "invalid_fields": ["week"]
}
Esto cambió el 8 de septiembre de 2026. Una llamada rechazada respondía 404 con una cadena suelta. El mensaje es el mismo; el código y el envoltorio no. Registro de cambios

¿Dudas, o un campo que necesitas y no está aquí? Habla con nosotros en el Discord. Discord