Per iniziare

Una API JSON di sola lettura sugli stessi dati che alimentano il sito: carte, mazzi, tornei e risultati dei giocatori.

Nessuna chiave API. Ogni endpoint è pubblico e non richiede autenticazione, token né registrazione.

GET o POST, e i parametri possono viaggiare nella query string o nel corpo. Vedi Invio dei parametri, più sotto.

URL di base
https://cardsrealm.com/it-it/api/

Il segmento di lingua fa parte del percorso e decide la lingua dei nomi delle carte e degli altri testi tradotti. Vale qualsiasi locale servito dal sito.

Scegliere il gioco. Due modi, con lo stesso risultato: chiamare il sottodominio del gioco, oppure passare il parametro game_id. Senza nessuno dei due, ottieni il gioco del dominio che hai chiamato.

Esempio di richiesta
curl "https://cardsrealm.com/en-us/api/getRecentDecks?game_id=1&limit=2"
I prezzi sono interi in centesimi. Un price di 77 con currency_prefix $ significa 0,77. Dividi per 100 prima di mostrarlo.
Uso corretto. Oggi non è applicato alcun limite rigido di richieste, quindi sii ragionevole: metti in cache ciò che puoi e preferisci una richiesta paginata a tante piccole. È l'abuso che trasforma una API aperta in chiusa.

Invio dei parametri

Ogni endpoint risponde sia a GET sia a POST e legge i parametri da quello che ti risulta più comodo. La risposta è la stessa.

Come lo inviiContent-Type
Query string (GET o POST)—
Modulo sempliceapplication/x-www-form-urlencoded
Modulo multipartmultipart/form-data
JSONapplication/json
La stessa chiamata, in tre modi
curl "https://cardsrealm.com/it-it/api/getRecentDecks?game_id=1&limit=2"

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

curl -X POST "https://cardsrealm.com/it-it/api/getRecentDecks" \
     -H "Content-Type: application/json" \
     -d '{"game_id": 1, "limit": 2}'
I numeri possono essere numeri. In un modulo ogni valore arriva come testo; in JSON puoi inviare 1 invece di "1". Entrambi sono accettati ovunque.
Non impostare l'intestazione Content-Type a mano in Postman, Insomnia o in una libreria HTTP. Lascia che sia lo strumento a scriverlo: nel multipart deve includere il boundary, e un Content-Type che non corrisponde al corpo fa arrivare tutti i campi vuoti. Quando succede, la risposta è un 400 sulla busta, non sui tuoi campi:
Risposta
{
  "error": "Non è stato possibile leggere i campi del corpo della richiesta. Inviali come form-data, x-www-form-urlencoded o JSON.",
  "hint": "Se usi Postman o Insomnia, cancella l'intestazione Content-Type e lascia che sia lo strumento a generarla."
}
La chiamata dal browser è consentita. Una pagina sul tuo dominio può chiamarla direttamente dal browser. Non viene letto alcun cookie o credenziale.

cardinfo

GET/it-it/api/cardinfo

Tutto ciò che il sito sa di una carta, cercata per nome: testo, costo di mana, rarità, edizioni e prezzi attuali.

ParametroTipoPredefinitoNote
cardnamestringPath to exileFino a 50 caratteri.
currencystringvaluta del localeTre lettere.
game_idintgioco del dominio1 = Magic, 2 = Yu-Gi-Oh, 3 = Pokémon, 4 = Runeterra.
language_codestringlingua del percorsoLingua del nome e del testo della carta restituiti.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/cardinfo?cardname=Lightning%20Bolt&currency=USD"
Esempio di risposta
{
  "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/it-it/api/getCardsInfo

Nome, immagine, retro e tipo di più carte in una sola chiamata. È ciò che dà cardinfo, senza prezzi né edizioni, per un'intera lista di mazzo.

ParametroTipoPredefinitoNote
cardsstringnecessarioNomi delle carte in inglese separati da |. Fino a 250 nomi, ognuno di massimo 100 caratteri. Senza questo parametro la chiamata risponde 400.
game_idintgioco del dominioCome in cardinfo.
language_codestringlingua del percorsoLingua del nome e dell'immagine restituiti.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/getCardsInfo?cards=Lightning%20Bolt%7CSol%20Ring"
Esempio di risposta
[
  {
    "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 nome che il sito non conosce semplicemente non torna: confronta ciò che hai inviato con ciò che hai ricevuto.

getCardsRelated

GET/it-it/api/getCardsRelated

Le carte che una lista di carte porta con sé: le pedine che creano, l'emblema, la carta che evocano. Pensato per chi ha una decklist e deve sapere quali pedine richiede quel mazzo, con una sola chiamata per l'intero mazzo.

ParametroTipoPredefinitoNote
cardsstringnecessarioNomi delle carte in inglese separati da |. Fino a 250 nomi, ognuno di massimo 100 caratteri. Senza questo parametro la chiamata risponde 400.
game_idintgioco del dominioCome in cardinfo.
language_codestringlingua del percorsoLingua del nome e del testo della carta restituiti.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/getCardsRelated?cards=Young%20Pyromancer%7CLingering%20Souls"
Esempio di risposta
[
  {
    "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 elenca le carte della tua lista che la mettono in gioco, separate da " | ". Una pedina creata da due carte del mazzo torna una volta sola, con entrambi i nomi.
Il token arriva nella stampa che appartiene alla carta che lo crea, e image_of_card è quella stampa: lo stesso nome del token può tornare più di una volta, con illustrazioni diverse, quando carte diverse della tua lista ne creano stampe diverse. Una carta ristampata in più set riporta la stampa più recente.

getCardArts

GET/it-it/api/getCardArts

Tutte le illustrazioni (stampe) di una carta, dalla più recente: lo stesso elenco di edizioni che mostra la pagina della carta, qui però cercato per nome invece che per card_id. Pensato per chi ha in mano solo una lista di mazzo, come il tavolo di play.cardsrealm.com, dove il giocatore cambia l'illustrazione di una carta durante la partita.

ParametroTipoPredefinitoNote
cardnamestringnecessarioNome della carta, in inglese o nella lingua di language_code. Fino a 100 caratteri. Senza di esso la chiamata risponde 400.
game_idintgioco del dominioCome in cardinfo.
language_codestringlingua del percorsoLingua del nome e dell'immagine restituiti.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/getCardArts?cardname=Lightning%20Bolt"
Esempio di risposta
[
  {
    "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 risposta è un elenco di al massimo 120 stampe, dalla più recente alla più vecchia. back_of_card è vuoto per una carta con una sola faccia.

getDeckByPath

GET/it-it/api/getDeckByPath/<deck_path>

Lo stesso mazzo di getDeckByID, trovato dal percorso del link, per chi ha il link e non l'id.

ParametroTipoPredefinitoNote
deck_pathstringnecessarioVa nell'URL, non nella query string. È la parte dopo /decks/ nel link: mkh-sidar.
currencystringBRLTre lettere.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/getDeckByPath/mkh-sidar"
La risposta è la stessa di getDeckByID, e 404 quando nessun mazzo ha quel percorso.

getRecentDecks

GET/it-it/api/getRecentDecks

I mazzi pubblicati più di recente, dal più nuovo al più vecchio.

ParametroTipoPredefinitoNote
pageint1Numero di pagina.
limitint50Mazzi per pagina. Il tetto è 500; oltre, la chiamata restituisce un errore.
game_idint1Come in cardinfo.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/getRecentDecks?page=1&limit=2"
Esempio di risposta
[
  {
    "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/it-it/api/getDeckByID

Una decklist completa. L'elenco delle carte si trova nella chiave cards, con quantità, board (main o side) e prezzo per carta.

ParametroTipoPredefinitoNote
deck_idint0L'id numerico del mazzo.
currencystringBRLTre lettere.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/getDeckByID?deck_id=374859&currency=USD"
Esempio di risposta
{
  "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 inesistente risponde 200 con un oggetto quasi vuoto, non un errore. Verifica che deck_title ci sia prima di usare il resto.

getDeckResults

GET/it-it/api/getDeckResults

Come sta andando un archetipo: bilancio complessivo, più un dettaglio by_meta dei risultati contro ogni altro archetipo.

ParametroTipoPredefinitoNote
deck_namestringvuotoNome dell'archetipo, fino a 40 caratteri.
weekint4Quante settimane indietro. Il tetto è 52.
formatstringStandardFino a 20 caratteri.
game_idint1Come in cardinfo.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/getDeckResults?deck_name=Grixis%20Affinity&format=Pauper&week=8"

getPlayerResults

GET/it-it/api/getPlayerResults

Lo storico di un giocatore, con un dettaglio by_meta dei suoi risultati con ogni archetipo.

ParametroTipoPredefinitoNote
player_namestringvuotoFino a 40 caratteri.
weekint52Quante settimane indietro.
player_platformstringcardsrealm_nicknameCon quale nome stai cercando. Uno tra cardsrealm_nickname, mtgo, arena, riot o display. Qualsiasi altro restituisce un errore.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/getPlayerResults?player_name=Carrubs&player_platform=mtgo"

getPastTournaments

GET/it-it/api/getPastTournaments

Tornei già svolti, dal più recente al più vecchio.

ParametroTipoPredefinitoNote
pageint1Numero di pagina.
formatstringvuotoFino a 20 caratteri. Vuoto significa tutti i formati.
game_idint1Come in cardinfo.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/getPastTournaments?format=Pauper&page=1"
Esempio di risposta
[
  {
    "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/it-it/api/getTournamentInfo

Un torneo completo: l'evento, i suoi turni in round_info e la classifica finale in standings. Un id inesistente restituisce una lista vuota, non un errore.

ParametroTipoPredefinitoNote
tournament_idint1L'id numerico del torneo.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/getTournamentInfo?tournament_id=810845"

getUserTournaments

GET/it-it/api/getUserTournaments

I tornei organizzati da un account.

ParametroTipoPredefinitoNote
nicknamestringCards RealmFino a 30 caratteri.
Esempio di richiesta
curl "https://cardsrealm.com/it-it/api/getUserTournaments?nickname=leon-diniz"

Errori e supporto

CodiceSenso
200Successo. Il corpo è sempre JSON.
400La chiamata è stata rifiutata: un nome troppo lungo, un numero che non è un numero, un valore fuori dall'elenco accettato, o un corpo illeggibile.
500Qualcosa si è rotto dalla nostra parte. Vale la pena segnalarcelo.

Una chiamata rifiutata risponde 400 con un oggetto. invalid_fields indica i parametri da guardare, ed è assente quando il problema non è un campo specifico.

Risposta
{
  "error": "La settimana deve essere un numero",
  "invalid_fields": ["week"]
}
Questo è cambiato l'8 settembre 2026. Una chiamata rifiutata rispondeva 404 con una stringa nuda. Il messaggio è lo stesso; il codice e la busta no. Registro delle modifiche

Domande, o un campo che ti serve e non c'è? Scrivici sul Discord. Discord