Getting started

A read-only JSON API over the same data that powers the site: cards, decks, tournaments and player results.

No API key. Every endpoint is public and needs no authentication, no token and no sign-up.

Every request is a GET. Every parameter travels in the query string.

Base URL
https://cardsrealm.com/en-zw/api/

The language segment is part of the path and decides the language of card names and other translated text. Any locale the site serves works.

Choosing the game. Two ways, and they do the same thing: call the game's own subdomain, or pass the game_id parameter. Without either, you get the game of the domain you called.

Example request
curl "https://cardsrealm.com/en-us/api/getRecentDecks?game_id=1&limit=2"
Prices are integers in cents. A price of 77 with a currency_prefix of $ means 0.77. Divide by 100 before showing it.
Fair use. There is no hard rate limit enforced today, so please be reasonable: cache what you can, and prefer one paged request over many small ones. Abuse is what turns an open API into a closed one.

cardinfo

GET/en-zw/api/cardinfo

Everything the site knows about one card, found by name: text, mana cost, rarity, printings and current prices.

ParameterTypeDefaultNotes
cardnamestringPath to exileUp to 50 characters.
currencystringcurrency of the localeThree letters.
game_idintgame of the domain1 = Magic, 2 = Yu-Gi-Oh, 3 = Pokémon, 4 = Runeterra.
language_codestringlanguage of the pathLanguage of the returned card name and text.
Example request
curl "https://cardsrealm.com/en-zw/api/cardinfo?cardname=Lightning%20Bolt&currency=USD"
Example response
{
  "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/en-zw/api/getRecentDecks

The most recently published decks, newest first.

ParameterTypeDefaultNotes
pageint1Page number.
limitint50Decks per page. 500 is the ceiling; above it the call returns an error.
game_idint1Same as in cardinfo.
Example request
curl "https://cardsrealm.com/en-zw/api/getRecentDecks?page=1&limit=2"
Example response
[
  {
    "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/en-zw/api/getDeckByID

One decklist in full. The card list comes under the cards key, with quantity, board (main or side) and price per card.

ParameterTypeDefaultNotes
deck_idint0The numeric id of the deck.
currencystringBRLThree letters.
Example request
curl "https://cardsrealm.com/en-zw/api/getDeckByID?deck_id=374859&currency=USD"
Example response
{
  "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
    }
  ]
}
A deck id that does not exist answers 200 with an almost empty object, not an error. Check that deck_title is there before using the rest.

getDeckResults

GET/en-zw/api/getDeckResults

How an archetype has been performing: overall record, plus a by_meta breakdown of its results against each other archetype.

ParameterTypeDefaultNotes
deck_namestringemptyArchetype name, up to 40 characters.
weekint4How many weeks back. 52 is the ceiling.
formatstringStandardUp to 20 characters.
game_idint1Same as in cardinfo.
Example request
curl "https://cardsrealm.com/en-zw/api/getDeckResults?deck_name=Grixis%20Affinity&format=Pauper&week=8"

getPlayerResults

GET/en-zw/api/getPlayerResults

A player's record, with a by_meta breakdown of how they did with each archetype.

ParameterTypeDefaultNotes
player_namestringemptyUp to 40 characters.
weekint52How many weeks back.
player_platformstringcardsrealm_nicknameWhich name you are searching by. One of cardsrealm_nickname, mtgo, arena, riot or display. Anything else returns an error.
Example request
curl "https://cardsrealm.com/en-zw/api/getPlayerResults?player_name=Carrubs&player_platform=mtgo"

getPastTournaments

GET/en-zw/api/getPastTournaments

Tournaments that already happened, most recent first.

ParameterTypeDefaultNotes
pageint1Page number.
formatstringemptyUp to 20 characters. Empty means every format.
game_idint1Same as in cardinfo.
Example request
curl "https://cardsrealm.com/en-zw/api/getPastTournaments?format=Pauper&page=1"
Example response
[
  {
    "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/en-zw/api/getTournamentInfo

One tournament in full: the event, its rounds under round_info, and the final table under standings. An id that does not exist returns an empty list, not an error.

ParameterTypeDefaultNotes
tournament_idint1The numeric id of the tournament.
Example request
curl "https://cardsrealm.com/en-zw/api/getTournamentInfo?tournament_id=810845"

getUserTournaments

GET/en-zw/api/getUserTournaments

The tournaments organised by one account.

ParameterTypeDefaultNotes
nicknamestringCards RealmUp to 30 characters.
Example request
curl "https://cardsrealm.com/en-zw/api/getUserTournaments?nickname=leon-diniz"

Errors and support

CodeMeaning
200Success. The body is always JSON.
404The call was rejected. The body is a JSON string saying what was wrong: a name that is too long, a number that is not a number, or a value outside the accepted list.

Questions, or a field you need that is not here? Talk to us on the Discord. Discord