Начало работы

JSON-API только для чтения по тем же данным, на которых работает сайт: карты, колоды, турниры и результаты игроков.

Без API-ключа. Все эндпоинты публичные: ни аутентификации, ни токена, ни регистрации.

GET или POST, а параметры могут идти в строке запроса или в теле. См. «Отправка параметров» ниже.

Базовый URL
https://cardsrealm.com/ru-ru/api/

Языковой сегмент — часть пути; он задаёт язык названий карт и остального переведённого текста. Подходит любая локаль, которую обслуживает сайт.

Выбор игры. Два способа с одинаковым результатом: обратиться к поддомену самой игры или передать параметр game_id. Без того и другого вы получите игру того домена, к которому обратились.

Пример запроса
curl "https://cardsrealm.com/en-us/api/getRecentDecks?game_id=1&limit=2"
Цены — целые числа в центах. Значение price 77 с currency_prefix $ означает 0,77. Делите на 100 перед показом.
Разумное использование. Сейчас жёсткий лимит запросов не применяется, поэтому будьте разумны: кэшируйте что можете и предпочитайте один постраничный запрос множеству мелких. Именно злоупотребление превращает открытый API в закрытый.

Отправка параметров

Каждый эндпоинт отвечает и на GET, и на POST и читает параметры из любого из этих форматов — какой вам удобнее. Ответ одинаковый.

Как отправитьContent-Type
Строка запроса (GET или POST)—
Простая формаapplication/x-www-form-urlencoded
Multipart-формаmultipart/form-data
JSONapplication/json
Один вызов, три способа
curl "https://cardsrealm.com/ru-ru/api/getRecentDecks?game_id=1&limit=2"

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

curl -X POST "https://cardsrealm.com/ru-ru/api/getRecentDecks" \
     -H "Content-Type: application/json" \
     -d '{"game_id": 1, "limit": 2}'
Числа могут быть числами. В форме любое значение приходит текстом; в JSON можно отправить 1 вместо "1". Оба варианта принимаются везде.
Не задавайте заголовок Content-Type вручную в Postman, Insomnia или HTTP-библиотеке. Пусть его напишет сам инструмент: для multipart он должен включить boundary, а Content-Type, не соответствующий телу, приводит к тому, что все поля приходят пустыми. Тогда ответ — это 400 про конверт, а не про ваши поля:
Ответ
{
  "error": "Не удалось прочитать поля в теле запроса. Отправьте их как form-data, x-www-form-urlencoded или JSON.",
  "hint": "Если вы используете Postman или Insomnia, удалите заголовок Content-Type и дайте инструменту создать его самому."
}
Вызов из браузера разрешён. Страница на вашем собственном домене может вызвать её прямо из браузера. Никакие cookie и учётные данные не читаются.

cardinfo

GET/ru-ru/api/cardinfo

Всё, что сайт знает о карте, найденной по названию: текст, мана-стоимость, редкость, издания и текущие цены.

ПараметрТипШаблонПримечания
cardnamestringPath to exileДо 50 символов.
currencystringвалюта локалиТри буквы.
game_idintигра домена1 = Magic, 2 = Yu-Gi-Oh, 3 = Pokémon, 4 = Runeterra.
language_codestringязык путиЯзык возвращаемого названия и текста карты.
Пример запроса
curl "https://cardsrealm.com/ru-ru/api/cardinfo?cardname=Lightning%20Bolt&currency=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

GET/ru-ru/api/getCardsInfo

Название, изображение, обратная сторона и тип сразу многих карт за один запрос. То же, что даёт cardinfo, но без цен и изданий — для всего списка колоды.

ПараметрТипШаблонПримечания
cardsstringнеобходимыйАнглийские названия карт, разделённые |. До 250 названий, каждое не длиннее 100 символов. Без него запрос отвечает 400.
game_idintигра доменаТо же, что в cardinfo.
language_codestringязык путиЯзык возвращаемого названия карты и изображения.
Пример запроса
curl "https://cardsrealm.com/ru-ru/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

GET/ru-ru/api/getCardsRelated

Карты, которые тянет за собой список карт: создаваемые ими фишки, эмблема, вызываемая карта. Для тех, у кого на руках деклист и кому нужно знать, какие фишки требуются этой колоде, — одним запросом на всю колоду.

ПараметрТипШаблонПримечания
cardsstringнеобходимыйАнглийские названия карт, разделённые |. До 250 названий, каждое не длиннее 100 символов. Без него запрос отвечает 400.
game_idintигра доменаТо же, что в cardinfo.
language_codestringязык путиЯзык возвращаемого названия и текста карты.
Пример запроса
curl "https://cardsrealm.com/ru-ru/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"
  }
]
related_to перечисляет карты из вашего списка, которые выводят её в игру, через " | ". Фишка, которую создают две карты колоды, возвращается один раз — с обоими названиями.
Токен приходит в издании той карты, которая его создаёт, и image_of_card — это издание: одно и то же имя токена может вернуться несколько раз, с разным артом, когда разные карты вашего списка создают разные его издания. Карта, переизданная в нескольких сетах, приходит в самом последнем издании.

getCardArts

GET/ru-ru/api/getCardArts

Все арты (издания) одной карты, начиная с самого нового: тот же список изданий, что показывает страница карты, но здесь поиск идёт по названию, а не по card_id. Рассчитано на тех, у кого на руках только список колоды, — например, на стол play.cardsrealm.com, где игрок меняет арт карты прямо во время партии.

ПараметрТипШаблонПримечания
cardnamestringнеобходимыйНазвание карты — на английском или на языке из language_code. До 100 символов. Без него запрос отвечает 400.
game_idintигра доменаТо же, что в cardinfo.
language_codestringязык путиЯзык возвращаемого названия карты и изображения.
Пример запроса
curl "https://cardsrealm.com/ru-ru/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": ""
  }
]
Ответ — список не более чем из 120 изданий, от самого нового к самому старому. У односторонней карты back_of_card пустое.

getDeckByPath

GET/ru-ru/api/getDeckByPath/<deck_path>

Та же колода, что и в getDeckByID, найденная по пути из ссылки — для тех, у кого есть ссылка, а не id.

ПараметрТипШаблонПримечания
deck_pathstringнеобходимыйУказывается в URL, а не в строке запроса. Это часть ссылки после /decks/: mkh-sidar.
currencystringBRLТри буквы.
Пример запроса
curl "https://cardsrealm.com/ru-ru/api/getDeckByPath/mkh-sidar"
Ответ такой же, как у getDeckByID, и 404, если колоды с таким путём нет.

getRecentDecks

GET/ru-ru/api/getRecentDecks

Самые недавно опубликованные колоды, начиная с новых.

ПараметрТипШаблонПримечания
pageint1Номер страницы.
limitint50Колод на страницу. Предел — 500; выше запрос возвращает ошибку.
game_idint1То же, что в cardinfo.
Пример запроса
curl "https://cardsrealm.com/ru-ru/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

GET/ru-ru/api/getDeckByID

Полный декстрок. Список карт находится в ключе cards: количество, board (main или side) и цена за карту.

ПараметрТипШаблонПримечания
deck_idint0Числовой id колоды.
currencystringBRLТри буквы.
Пример запроса
curl "https://cardsrealm.com/ru-ru/api/getDeckByID?deck_id=374859&currency=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
    }
  ]
}
Несуществующий deck_id возвращает 200 и почти пустой объект, а не ошибку. Проверьте наличие deck_title, прежде чем использовать остальное.

getDeckResults

GET/ru-ru/api/getDeckResults

Как выступает архетип: общая статистика и разбивка by_meta по результатам против каждого другого архетипа.

ПараметрТипШаблонПримечания
deck_namestringпустоНазвание архетипа, до 40 символов.
weekint4На сколько недель назад. Предел — 52.
formatstringStandardДо 20 символов.
game_idint1То же, что в cardinfo.
Пример запроса
curl "https://cardsrealm.com/ru-ru/api/getDeckResults?deck_name=Grixis%20Affinity&format=Pauper&week=8"

getPlayerResults

GET/ru-ru/api/getPlayerResults

Статистика игрока с разбивкой by_meta по каждому архетипу.

ПараметрТипШаблонПримечания
player_namestringпустоДо 40 символов.
weekint52На сколько недель назад.
player_platformstringcardsrealm_nicknameПо какому имени вы ищете. Одно из cardsrealm_nickname, mtgo, arena, riot или display. Любое другое значение вернёт ошибку.
Пример запроса
curl "https://cardsrealm.com/ru-ru/api/getPlayerResults?player_name=Carrubs&player_platform=mtgo"

getPastTournaments

GET/ru-ru/api/getPastTournaments

Уже прошедшие турниры, начиная с недавних.

ПараметрТипШаблонПримечания
pageint1Номер страницы.
formatstringпустоДо 20 символов. Пусто — значит все форматы.
game_idint1То же, что в cardinfo.
Пример запроса
curl "https://cardsrealm.com/ru-ru/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

GET/ru-ru/api/getTournamentInfo

Турнир целиком: событие, его раунды в round_info и итоговая таблица в standings. Несуществующий id возвращает пустой список, а не ошибку.

ПараметрТипШаблонПримечания
tournament_idint1Числовой id турнира.
Пример запроса
curl "https://cardsrealm.com/ru-ru/api/getTournamentInfo?tournament_id=810845"

getUserTournaments

GET/ru-ru/api/getUserTournaments

Турниры, организованные одним аккаунтом.

ПараметрТипШаблонПримечания
nicknamestringCards RealmДо 30 символов.
Пример запроса
curl "https://cardsrealm.com/ru-ru/api/getUserTournaments?nickname=leon-diniz"

Ошибки и поддержка

КодЗначение
200Успех. Тело ответа всегда JSON.
400Вызов отклонён: слишком длинное имя, число, которое не число, значение вне допустимого списка или нечитаемое тело запроса.
500Что-то сломалось на нашей стороне. Стоит нам сообщить.

Отклонённый вызов отвечает 400 и объектом. invalid_fields называет параметры, которые стоит проверить, и отсутствует, когда проблема не в конкретном поле.

Ответ
{
  "error": "Неделя должна быть числом",
  "invalid_fields": ["week"]
}
Это изменилось 8 сентября 2026 года. Раньше отклонённый вызов отвечал 404 и голой строкой. Сообщение то же; статус и конверт — нет. Журнал изменений

Вопросы или нужное поле, которого здесь нет? Напишите нам в Discord. Discord