Erste Schritte

Eine reine Lese-JSON-API auf denselben Daten, die die Website speisen: Karten, Decks, Turniere und Spielerergebnisse.

Kein API-Schlüssel. Jeder Endpunkt ist öffentlich und benötigt weder Authentifizierung noch Token noch Registrierung.

GET oder POST, und die Parameter können im Query-String oder im Body stehen. Siehe Parameter senden, weiter unten.

Basis-URL
https://cardsrealm.com/de-ch/api/

Das Sprachsegment ist Teil des Pfades und bestimmt die Sprache von Kartennamen und anderem übersetzten Text. Jede Locale, die die Seite bedient, funktioniert.

Das Spiel auswählen. Zwei Wege mit demselben Ergebnis: die Subdomain des Spiels aufrufen oder den Parameter game_id übergeben. Ohne beides bekommst du das Spiel der aufgerufenen Domain.

Beispielanfrage
curl "https://cardsrealm.com/en-us/api/getRecentDecks?game_id=1&limit=2"
Preise sind Ganzzahlen in Cent. Ein price von 77 mit currency_prefix $ bedeutet 0,77. Vor der Anzeige durch 100 teilen.
Faire Nutzung. Derzeit wird kein hartes Anfragelimit erzwungen, also bleib vernünftig: cache, was du kannst, und bevorzuge eine paginierte Anfrage gegenüber vielen kleinen. Missbrauch ist es, was aus einer offenen API eine geschlossene macht.

Parameter senden

Jeder Endpunkt antwortet auf GET und POST und liest seine Parameter aus dem Format, das Ihnen am leichtesten fällt. Die Antwort ist dieselbe.

Wie Sie es sendenContent-Type
Query-String (GET oder POST)—
Einfaches Formularapplication/x-www-form-urlencoded
Multipart-Formularmultipart/form-data
JSONapplication/json
Derselbe Aufruf, drei Wege
curl "https://cardsrealm.com/de-ch/api/getRecentDecks?game_id=1&limit=2"

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

curl -X POST "https://cardsrealm.com/de-ch/api/getRecentDecks" \
     -H "Content-Type: application/json" \
     -d '{"game_id": 1, "limit": 2}'
Zahlen dürfen Zahlen sein. In einem Formular kommt jeder Wert als Text an; in JSON dürfen Sie 1 statt "1" senden. Beides wird überall akzeptiert.
Setzen Sie den Content-Type-Header nicht von Hand in Postman, Insomnia oder einer HTTP-Bibliothek. Lassen Sie das Werkzeug ihn schreiben: bei multipart muss es die boundary enthalten, und ein Content-Type, der nicht zum Body passt, lässt jedes Feld leer ankommen. Dann ist die Antwort ein 400 über den Umschlag, nicht über Ihre Felder:
Antwort
{
  "error": "Die Felder im Body der Anfrage konnten nicht gelesen werden. Senden Sie sie als form-data, x-www-form-urlencoded oder JSON.",
  "hint": "Wenn Sie Postman oder Insomnia verwenden, löschen Sie den Content-Type-Header und lassen Sie ihn vom Werkzeug erzeugen."
}
Der Aufruf aus dem Browser ist erlaubt. Eine Seite auf Ihrer eigenen Domain kann sie direkt aus dem Browser aufrufen. Es werden keine Cookies oder Anmeldedaten gelesen.

cardinfo

GET/de-ch/api/cardinfo

Alles, was die Seite über eine Karte weiß, per Name gesucht: Text, Manakosten, Seltenheit, Editionen und aktuelle Preise.

ParameterArtMusterNotizen
cardnamestringPath to exileHöchstens 50 Zeichen.
currencystringWährung der LocaleDrei Buchstaben.
game_idintSpiel der Domain1 = Magic, 2 = Yu-Gi-Oh, 3 = Pokémon, 4 = Runeterra.
language_codestringSprache des PfadesSprache des zurückgegebenen Kartennamens und -textes.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/cardinfo?cardname=Lightning%20Bolt&currency=USD"
Beispielantwort
{
  "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/de-ch/api/getCardsInfo

Name, Bild, Rückseite und Typ vieler Karten in einem Aufruf. Das, was cardinfo liefert, ohne Preise und Auflagen, für eine ganze Deckliste auf einmal.

ParameterArtMusterNotizen
cardsstringerforderlichEnglische Kartennamen, getrennt durch |. Bis zu 250 Namen, jeder höchstens 100 Zeichen lang. Ohne diesen Parameter antwortet der Aufruf mit 400.
game_idintSpiel der DomainWie bei cardinfo.
language_codestringSprache des PfadesSprache des zurückgegebenen Kartennamens und Bildes.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/getCardsInfo?cards=Lightning%20Bolt%7CSol%20Ring"
Beispielantwort
[
  {
    "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"
  }
]
Ein Name, den die Seite nicht kennt, kommt einfach nicht zurück: vergleiche, was du geschickt hast, mit dem, was du bekommen hast.

getCardsRelated

GET/de-ch/api/getCardsRelated

Die Karten, die eine Kartenliste mitbringt: die Spielsteine, die sie erzeugen, das Emblem, die Karte, die sie herbeirufen. Gedacht für alle, die eine Deckliste vor sich haben und wissen müssen, welche Spielsteine dieses Deck verlangt – in einem einzigen Aufruf für das ganze Deck.

ParameterArtMusterNotizen
cardsstringerforderlichEnglische Kartennamen, getrennt durch |. Bis zu 250 Namen, jeder höchstens 100 Zeichen lang. Ohne diesen Parameter antwortet der Aufruf mit 400.
game_idintSpiel der DomainWie bei cardinfo.
language_codestringSprache des PfadesSprache des zurückgegebenen Kartennamens und -textes.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/getCardsRelated?cards=Young%20Pyromancer%7CLingering%20Souls"
Beispielantwort
[
  {
    "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 nennt die Karten aus deiner Liste, die sie ins Spiel bringen, getrennt durch " | ". Ein Spielstein, den zwei Karten des Decks erzeugen, kommt nur einmal zurück, mit beiden Namen.
Der Token kommt in der Druckversion der Karte, die ihn erzeugt, und image_of_card ist diese Druckversion: Derselbe Token-Name kann mehrmals mit unterschiedlichem Artwork zurückkommen, wenn verschiedene Karten Ihrer Liste unterschiedliche Druckversionen davon erzeugen. Eine in mehreren Editionen nachgedruckte Karte bringt die neueste Druckversion mit.

getCardArts

GET/de-ch/api/getCardArts

Alle Artworks (Drucke) einer Karte, das neueste zuerst: dieselbe Editionsliste, die die Kartenseite anzeigt, hier jedoch über den Namen statt über card_id gesucht. Gedacht für alle, die nur eine Decklist zur Hand haben, etwa der Tisch auf play.cardsrealm.com, wo der Spieler das Artwork einer Karte mitten in der Partie wechselt.

ParameterArtMusterNotizen
cardnamestringerforderlichKartenname, auf Englisch oder in der Sprache von language_code. Bis zu 100 Zeichen. Ohne ihn antwortet der Aufruf mit 400.
game_idintSpiel der DomainWie bei cardinfo.
language_codestringSprache des PfadesSprache des zurückgegebenen Kartennamens und Bildes.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/getCardArts?cardname=Lightning%20Bolt"
Beispielantwort
[
  {
    "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": ""
  }
]
Die Antwort ist eine Liste von höchstens 120 Drucken, vom neuesten zum ältesten. Bei einer einseitigen Karte ist back_of_card leer.

getDeckByPath

GET/de-ch/api/getDeckByPath/<deck_path>

Dasselbe Deck wie bei getDeckByID, gefunden über den Pfad im Deck-Link — für alle, die den Link haben und nicht die id.

ParameterArtMusterNotizen
deck_pathstringerforderlichSteht in der URL, nicht im Query-String. Es ist der Teil nach /decks/ im Link: mkh-sidar.
currencystringBRLDrei Buchstaben.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/getDeckByPath/mkh-sidar"
Die Antwort ist dieselbe wie bei getDeckByID, und 404, wenn kein Deck diesen Pfad hat.

getRecentDecks

GET/de-ch/api/getRecentDecks

Die zuletzt veröffentlichten Decks, neueste zuerst.

ParameterArtMusterNotizen
pageint1Seitenzahl.
limitint50Decks pro Seite. Die Obergrenze ist 500; darüber liefert der Aufruf einen Fehler.
game_idint1Wie bei cardinfo.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/getRecentDecks?page=1&limit=2"
Beispielantwort
[
  {
    "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/de-ch/api/getDeckByID

Eine vollständige Deckliste. Die Kartenliste steht unter dem Schlüssel cards, mit Anzahl, Board (main oder side) und Preis pro Karte.

ParameterArtMusterNotizen
deck_idint0Die numerische id des Decks.
currencystringBRLDrei Buchstaben.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/getDeckByID?deck_id=374859&currency=USD"
Beispielantwort
{
  "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
    }
  ]
}
Eine nicht existierende deck_id antwortet mit 200 und einem fast leeren Objekt, nicht mit einem Fehler. Prüfe, ob deck_title vorhanden ist, bevor du den Rest verwendest.

getDeckResults

GET/de-ch/api/getDeckResults

Wie sich ein Archetyp schlägt: Gesamtbilanz plus eine by_meta-Aufschlüsselung der Ergebnisse gegen jeden anderen Archetyp.

ParameterArtMusterNotizen
deck_namestringleerName des Archetyps, höchstens 40 Zeichen.
weekint4Wie viele Wochen zurück. Die Obergrenze ist 52.
formatstringStandardHöchstens 20 Zeichen.
game_idint1Wie bei cardinfo.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/getDeckResults?deck_name=Grixis%20Affinity&format=Pauper&week=8"

getPlayerResults

GET/de-ch/api/getPlayerResults

Die Bilanz eines Spielers, mit einer by_meta-Aufschlüsselung nach Archetyp.

ParameterArtMusterNotizen
player_namestringleerHöchstens 40 Zeichen.
weekint52Wie viele Wochen zurück.
player_platformstringcardsrealm_nicknameNach welchem Namen du suchst. Einer von cardsrealm_nickname, mtgo, arena, riot oder display. Alles andere liefert einen Fehler.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/getPlayerResults?player_name=Carrubs&player_platform=mtgo"

getPastTournaments

GET/de-ch/api/getPastTournaments

Bereits ausgetragene Turniere, neueste zuerst.

ParameterArtMusterNotizen
pageint1Seitenzahl.
formatstringleerHöchstens 20 Zeichen. Leer bedeutet alle Formate.
game_idint1Wie bei cardinfo.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/getPastTournaments?format=Pauper&page=1"
Beispielantwort
[
  {
    "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/de-ch/api/getTournamentInfo

Ein vollständiges Turnier: das Event, seine Runden unter round_info und die Endtabelle unter standings. Eine nicht existierende id liefert eine leere Liste, keinen Fehler.

ParameterArtMusterNotizen
tournament_idint1Die numerische id des Turniers.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/getTournamentInfo?tournament_id=810845"

getUserTournaments

GET/de-ch/api/getUserTournaments

Die von einem Konto veranstalteten Turniere.

ParameterArtMusterNotizen
nicknamestringCards RealmHöchstens 30 Zeichen.
Beispielanfrage
curl "https://cardsrealm.com/de-ch/api/getUserTournaments?nickname=leon-diniz"

Fehler und Support

CodeBedeutung
200Erfolg. Der Body ist immer JSON.
400Der Aufruf wurde abgelehnt: ein zu langer Name, eine Zahl, die keine ist, ein Wert außerhalb der erlaubten Liste, oder ein Body, der nicht gelesen werden konnte.
500Auf unserer Seite ist etwas kaputtgegangen. Sagen Sie uns Bescheid.

Ein abgelehnter Aufruf antwortet mit 400 und einem Objekt. invalid_fields nennt die Parameter, die es zu prüfen lohnt, und fehlt, wenn das Problem kein bestimmtes Feld ist.

Antwort
{
  "error": "Die Woche muss eine Zahl sein",
  "invalid_fields": ["week"]
}
Das hat sich am 8. September 2026 geändert. Ein abgelehnter Aufruf antwortete früher mit 404 und einem nackten String. Die Meldung ist dieselbe; Status und Umschlag sind es nicht. Änderungsprotokoll

Fragen, oder ein Feld, das du brauchst und das hier fehlt? Sprich uns auf Discord an. Discord