Cards Realm API
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.
https://cardsrealm.com/en-tt/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.
curl "https://cardsrealm.com/en-us/api/getRecentDecks?game_id=1&limit=2"
cardinfo
Everything the site knows about one card, found by name: text, mana cost, rarity, printings and current prices.
| Parameter | Type | Default | Notes |
|---|---|---|---|
cardname | string | Path to exile | Up to 50 characters. |
currency | string | currency of the locale | Three letters. |
game_id | int | game of the domain | 1 = Magic, 2 = Yu-Gi-Oh, 3 = Pokémon, 4 = Runeterra. |
language_code | string | language of the path | Language of the returned card name and text. |
curl "https://cardsrealm.com/en-tt/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"
}getRecentDecks
The most recently published decks, newest first.
| Parameter | Type | Default | Notes |
|---|---|---|---|
page | int | 1 | Page number. |
limit | int | 50 | Decks per page. 500 is the ceiling; above it the call returns an error. |
game_id | int | 1 | Same as in cardinfo. |
curl "https://cardsrealm.com/en-tt/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
One decklist in full. The card list comes under the cards key, with quantity, board (main or side) and price per card.
| Parameter | Type | Default | Notes |
|---|---|---|---|
deck_id | int | 0 | The numeric id of the deck. |
currency | string | BRL | Three letters. |
curl "https://cardsrealm.com/en-tt/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
How an archetype has been performing: overall record, plus a by_meta breakdown of its results against each other archetype.
| Parameter | Type | Default | Notes |
|---|---|---|---|
deck_name | string | empty | Archetype name, up to 40 characters. |
week | int | 4 | How many weeks back. 52 is the ceiling. |
format | string | Standard | Up to 20 characters. |
game_id | int | 1 | Same as in cardinfo. |
curl "https://cardsrealm.com/en-tt/api/getDeckResults?deck_name=Grixis%20Affinity&format=Pauper&week=8"
getPlayerResults
A player's record, with a by_meta breakdown of how they did with each archetype.
| Parameter | Type | Default | Notes |
|---|---|---|---|
player_name | string | empty | Up to 40 characters. |
week | int | 52 | How many weeks back. |
player_platform | string | cardsrealm_nickname | Which name you are searching by. One of cardsrealm_nickname, mtgo, arena, riot or display. Anything else returns an error. |
curl "https://cardsrealm.com/en-tt/api/getPlayerResults?player_name=Carrubs&player_platform=mtgo"
getPastTournaments
Tournaments that already happened, most recent first.
| Parameter | Type | Default | Notes |
|---|---|---|---|
page | int | 1 | Page number. |
format | string | empty | Up to 20 characters. Empty means every format. |
game_id | int | 1 | Same as in cardinfo. |
curl "https://cardsrealm.com/en-tt/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
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.
| Parameter | Type | Default | Notes |
|---|---|---|---|
tournament_id | int | 1 | The numeric id of the tournament. |
curl "https://cardsrealm.com/en-tt/api/getTournamentInfo?tournament_id=810845"
getUserTournaments
The tournaments organised by one account.
| Parameter | Type | Default | Notes |
|---|---|---|---|
nickname | string | Cards Realm | Up to 30 characters. |
curl "https://cardsrealm.com/en-tt/api/getUserTournaments?nickname=leon-diniz"
Errors and support
| Code | Meaning |
|---|---|
200 | Success. The body is always JSON. |
404 | The 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