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.

Jede Anfrage ist ein GET. Alle Parameter stehen im Query-String.

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.

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"
}

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.
404Der Aufruf wurde abgelehnt. Der Body ist ein JSON-String, der sagt, was falsch war: ein zu langer Name, eine Zahl, die keine ist, oder ein Wert außerhalb der zulässigen Liste.

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