Cards Realm API
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.
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.
curl "https://cardsrealm.com/en-us/api/getRecentDecks?game_id=1&limit=2"
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 senden | Content-Type |
|---|---|
| Query-String (GET oder POST) | — |
| Einfaches Formular | application/x-www-form-urlencoded |
| Multipart-Formular | multipart/form-data |
| JSON | application/json |
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}'{
"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."
}cardinfo
Alles, was die Seite über eine Karte weiß, per Name gesucht: Text, Manakosten, Seltenheit, Editionen und aktuelle Preise.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
cardname | string | Path to exile | Höchstens 50 Zeichen. |
currency | string | Währung der Locale | Drei Buchstaben. |
game_id | int | Spiel der Domain | 1 = Magic, 2 = Yu-Gi-Oh, 3 = Pokémon, 4 = Runeterra. |
language_code | string | Sprache des Pfades | Sprache des zurückgegebenen Kartennamens und -textes. |
curl "https://cardsrealm.com/de-ch/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
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.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
cards | string | erforderlich | Englische Kartennamen, getrennt durch |. Bis zu 250 Namen, jeder höchstens 100 Zeichen lang. Ohne diesen Parameter antwortet der Aufruf mit 400. |
game_id | int | Spiel der Domain | Wie bei cardinfo. |
language_code | string | Sprache des Pfades | Sprache des zurückgegebenen Kartennamens und Bildes. |
curl "https://cardsrealm.com/de-ch/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
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.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
cards | string | erforderlich | Englische Kartennamen, getrennt durch |. Bis zu 250 Namen, jeder höchstens 100 Zeichen lang. Ohne diesen Parameter antwortet der Aufruf mit 400. |
game_id | int | Spiel der Domain | Wie bei cardinfo. |
language_code | string | Sprache des Pfades | Sprache des zurückgegebenen Kartennamens und -textes. |
curl "https://cardsrealm.com/de-ch/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
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.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
cardname | string | erforderlich | Kartenname, auf Englisch oder in der Sprache von language_code. Bis zu 100 Zeichen. Ohne ihn antwortet der Aufruf mit 400. |
game_id | int | Spiel der Domain | Wie bei cardinfo. |
language_code | string | Sprache des Pfades | Sprache des zurückgegebenen Kartennamens und Bildes. |
curl "https://cardsrealm.com/de-ch/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
Dasselbe Deck wie bei getDeckByID, gefunden über den Pfad im Deck-Link — für alle, die den Link haben und nicht die id.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
deck_path | string | erforderlich | Steht in der URL, nicht im Query-String. Es ist der Teil nach /decks/ im Link: mkh-sidar. |
currency | string | BRL | Drei Buchstaben. |
curl "https://cardsrealm.com/de-ch/api/getDeckByPath/mkh-sidar"
getRecentDecks
Die zuletzt veröffentlichten Decks, neueste zuerst.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
page | int | 1 | Seitenzahl. |
limit | int | 50 | Decks pro Seite. Die Obergrenze ist 500; darüber liefert der Aufruf einen Fehler. |
game_id | int | 1 | Wie bei cardinfo. |
curl "https://cardsrealm.com/de-ch/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
Eine vollständige Deckliste. Die Kartenliste steht unter dem Schlüssel cards, mit Anzahl, Board (main oder side) und Preis pro Karte.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
deck_id | int | 0 | Die numerische id des Decks. |
currency | string | BRL | Drei Buchstaben. |
curl "https://cardsrealm.com/de-ch/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
Wie sich ein Archetyp schlägt: Gesamtbilanz plus eine by_meta-Aufschlüsselung der Ergebnisse gegen jeden anderen Archetyp.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
deck_name | string | leer | Name des Archetyps, höchstens 40 Zeichen. |
week | int | 4 | Wie viele Wochen zurück. Die Obergrenze ist 52. |
format | string | Standard | Höchstens 20 Zeichen. |
game_id | int | 1 | Wie bei cardinfo. |
curl "https://cardsrealm.com/de-ch/api/getDeckResults?deck_name=Grixis%20Affinity&format=Pauper&week=8"
getPlayerResults
Die Bilanz eines Spielers, mit einer by_meta-Aufschlüsselung nach Archetyp.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
player_name | string | leer | Höchstens 40 Zeichen. |
week | int | 52 | Wie viele Wochen zurück. |
player_platform | string | cardsrealm_nickname | Nach welchem Namen du suchst. Einer von cardsrealm_nickname, mtgo, arena, riot oder display. Alles andere liefert einen Fehler. |
curl "https://cardsrealm.com/de-ch/api/getPlayerResults?player_name=Carrubs&player_platform=mtgo"
getPastTournaments
Bereits ausgetragene Turniere, neueste zuerst.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
page | int | 1 | Seitenzahl. |
format | string | leer | Höchstens 20 Zeichen. Leer bedeutet alle Formate. |
game_id | int | 1 | Wie bei cardinfo. |
curl "https://cardsrealm.com/de-ch/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
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.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
tournament_id | int | 1 | Die numerische id des Turniers. |
curl "https://cardsrealm.com/de-ch/api/getTournamentInfo?tournament_id=810845"
getUserTournaments
Die von einem Konto veranstalteten Turniere.
| Parameter | Art | Muster | Notizen |
|---|---|---|---|
nickname | string | Cards Realm | Höchstens 30 Zeichen. |
curl "https://cardsrealm.com/de-ch/api/getUserTournaments?nickname=leon-diniz"
Fehler und Support
| Code | Bedeutung |
|---|---|
200 | Erfolg. Der Body ist immer JSON. |
400 | Der 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. |
500 | Auf 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.
{
"error": "Die Woche muss eine Zahl sein",
"invalid_fields": ["week"]
}Fragen, oder ein Feld, das du brauchst und das hier fehlt? Sprich uns auf Discord an. Discord