Cards Realm API
Pour commencer
Une API JSON en lecture seule sur les mêmes données qui alimentent le site : cartes, decks, tournois et résultats des joueurs.
Pas de clé d'API. Chaque point d'accès est public et ne demande ni authentification, ni jeton, ni inscription.
GET ou POST, et les paramètres peuvent voyager dans la query string ou dans le corps. Voir Envoi des paramètres, plus bas.
https://cardsrealm.com/fr-fr/api/
Le segment de langue fait partie du chemin et détermine la langue des noms de cartes et des autres textes traduits. N'importe quelle locale servie par le site fonctionne.
Choisir le jeu. Deux moyens, au résultat identique : appeler le sous-domaine du jeu, ou passer le paramètre game_id. Sans l'un ni l'autre, vous obtenez le jeu du domaine appelé.
curl "https://cardsrealm.com/en-us/api/getRecentDecks?game_id=1&limit=2"
Envoi des paramètres
Chaque endpoint répond en GET et en POST, et lit ses paramètres dans celui de ces formats qui vous arrange. La réponse est la même.
| Comment vous l'envoyez | Content-Type |
|---|---|
| Query string (GET ou POST) | — |
| Formulaire simple | application/x-www-form-urlencoded |
| Formulaire multipart | multipart/form-data |
| JSON | application/json |
curl "https://cardsrealm.com/fr-fr/api/getRecentDecks?game_id=1&limit=2"
curl -X POST "https://cardsrealm.com/fr-fr/api/getRecentDecks" \
-d "game_id=1" -d "limit=2"
curl -X POST "https://cardsrealm.com/fr-fr/api/getRecentDecks" \
-H "Content-Type: application/json" \
-d '{"game_id": 1, "limit": 2}'{
"error": "Impossible de lire les champs du corps de la requête. Envoyez-les en form-data, x-www-form-urlencoded ou JSON.",
"hint": "Si vous utilisez Postman ou Insomnia, supprimez l'en-tête Content-Type et laissez l'outil le générer."
}cardinfo
Tout ce que le site sait d'une carte, cherchée par son nom : texte, coût en mana, rareté, éditions et prix actuels.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
cardname | string | Path to exile | 50 caractères au maximum. |
currency | string | devise de la locale | Trois lettres. |
game_id | int | jeu du domaine | 1 = Magic, 2 = Yu-Gi-Oh, 3 = Pokémon, 4 = Runeterra. |
language_code | string | langue du chemin | Langue du nom et du texte de la carte renvoyés. |
curl "https://cardsrealm.com/fr-fr/api/cardinfo?cardname=Lightning%20Bolt¤cy=USD"
{
"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
Nom, image, dos et type de plusieurs cartes en un seul appel. C'est ce que donne cardinfo, sans les prix ni les éditions, pour toute une liste de deck.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
cards | string | requis | Noms des cartes en anglais séparés par |. Jusqu'à 250 noms, de 100 caractères maximum chacun. Sans ce paramètre, l'appel répond 400. |
game_id | int | jeu du domaine | Comme dans cardinfo. |
language_code | string | langue du chemin | Langue du nom et de l'image renvoyés. |
curl "https://cardsrealm.com/fr-fr/api/getCardsInfo?cards=Lightning%20Bolt%7CSol%20Ring"
[
{
"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"
}
]getCardsRelated
Les cartes qu'une liste de cartes amène avec elle : les jetons qu'elles créent, l'emblème, la carte qu'elles invoquent. Pensé pour qui a une decklist sous les yeux et doit savoir quels jetons ce deck réclame, en un seul appel pour tout le deck.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
cards | string | requis | Noms des cartes en anglais séparés par |. Jusqu'à 250 noms, de 100 caractères maximum chacun. Sans ce paramètre, l'appel répond 400. |
game_id | int | jeu du domaine | Comme dans cardinfo. |
language_code | string | langue du chemin | Langue du nom et du texte de la carte renvoyés. |
curl "https://cardsrealm.com/fr-fr/api/getCardsRelated?cards=Young%20Pyromancer%7CLingering%20Souls"
[
{
"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"
}
]getCardArts
Toutes les illustrations (impressions) d'une carte, la plus récente en premier : la même liste d'éditions que celle affichée sur la page de la carte, mais recherchée ici par nom plutôt que par card_id. Pensé pour ceux qui n'ont qu'une liste de deck sous la main, comme la table de play.cardsrealm.com, où le joueur change l'illustration d'une carte en pleine partie.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
cardname | string | requis | Nom de la carte, en anglais ou dans la langue de language_code. Jusqu'à 100 caractères. Sans lui, l'appel répond 400. |
game_id | int | jeu du domaine | Comme dans cardinfo. |
language_code | string | langue du chemin | Langue du nom et de l'image renvoyés. |
curl "https://cardsrealm.com/fr-fr/api/getCardArts?cardname=Lightning%20Bolt"
[
{
"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": ""
}
]getDeckByPath
Le même deck que getDeckByID, trouvé par le chemin du lien, pour qui a le lien et pas l'id.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
deck_path | string | requis | Se met dans l'URL, pas dans la query string. C'est la partie après /decks/ dans le lien : mkh-sidar. |
currency | string | BRL | Trois lettres. |
curl "https://cardsrealm.com/fr-fr/api/getDeckByPath/mkh-sidar"
getRecentDecks
Les decks publiés le plus récemment, du plus récent au plus ancien.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
page | int | 1 | Numéro de page. |
limit | int | 50 | Decks par page. Le plafond est 500 ; au-delà, l'appel renvoie une erreur. |
game_id | int | 1 | Comme dans cardinfo. |
curl "https://cardsrealm.com/fr-fr/api/getRecentDecks?page=1&limit=2"
[
{
"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
Une decklist complète. La liste des cartes se trouve sous la clé cards, avec quantité, board (main ou side) et prix par carte.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
deck_id | int | 0 | L'identifiant numérique du deck. |
currency | string | BRL | Trois lettres. |
curl "https://cardsrealm.com/fr-fr/api/getDeckByID?deck_id=374859¤cy=USD"
{
"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
}
]
}getDeckResults
Les performances d'un archétype : bilan global, plus un détail by_meta de ses résultats face à chaque autre archétype.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
deck_name | string | vide | Nom de l'archétype, 40 caractères au maximum. |
week | int | 4 | Nombre de semaines en arrière. Le plafond est 52. |
format | string | Standard | 20 caractères au maximum. |
game_id | int | 1 | Comme dans cardinfo. |
curl "https://cardsrealm.com/fr-fr/api/getDeckResults?deck_name=Grixis%20Affinity&format=Pauper&week=8"
getPlayerResults
Le bilan d'un joueur, avec un détail by_meta de ses résultats avec chaque archétype.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
player_name | string | vide | 40 caractères au maximum. |
week | int | 52 | Nombre de semaines en arrière. |
player_platform | string | cardsrealm_nickname | Le nom sur lequel vous cherchez. L'un de cardsrealm_nickname, mtgo, arena, riot ou display. Toute autre valeur renvoie une erreur. |
curl "https://cardsrealm.com/fr-fr/api/getPlayerResults?player_name=Carrubs&player_platform=mtgo"
getPastTournaments
Les tournois déjà disputés, du plus récent au plus ancien.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
page | int | 1 | Numéro de page. |
format | string | vide | 20 caractères au maximum. Vide signifie tous les formats. |
game_id | int | 1 | Comme dans cardinfo. |
curl "https://cardsrealm.com/fr-fr/api/getPastTournaments?format=Pauper&page=1"
[
{
"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
Un tournoi complet : l'événement, ses rondes dans round_info et le classement final dans standings. Un id inexistant renvoie une liste vide, pas une erreur.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
tournament_id | int | 1 | L'identifiant numérique du tournoi. |
curl "https://cardsrealm.com/fr-fr/api/getTournamentInfo?tournament_id=810845"
getUserTournaments
Les tournois organisés par un compte.
| Paramètre | Type | Modèle | Remarques |
|---|---|---|---|
nickname | string | Cards Realm | 30 caractères au maximum. |
curl "https://cardsrealm.com/fr-fr/api/getUserTournaments?nickname=leon-diniz"
Erreurs et assistance
| Code | Signification |
|---|---|
200 | Succès. Le corps est toujours du JSON. |
400 | L'appel a été refusé : un nom trop long, un nombre qui n'en est pas un, une valeur hors de la liste acceptée, ou un corps illisible. |
500 | Quelque chose a cassé de notre côté. Cela vaut la peine de nous le signaler. |
Un appel refusé répond 400 avec un objet. invalid_fields nomme les paramètres à regarder, et il est absent quand le problème ne vient pas d'un champ précis.
{
"error": "La semaine doit être un nombre",
"invalid_fields": ["week"]
}Des questions, ou un champ dont vous avez besoin et qui manque ici ? Écrivez-nous sur le Discord. Discord