البداية

واجهة برمجية JSON للقراءة فقط تعمل على البيانات نفسها التي يعمل بها الموقع: البطاقات والمجموعات والبطولات ونتائج اللاعبين.

بدون مفتاح واجهة برمجية. كل نقطة وصول عامة ولا تحتاج إلى مصادقة ولا رمز ولا تسجيل.

GET أو POST، ويمكن أن تمر المعاملات في سلسلة الاستعلام أو في الجسم. انظر «إرسال المعاملات» بالأسفل.

الرابط الأساسي
https://cardsrealm.com/ar-sa/api/

جزء اللغة يشكّل جزءًا من المسار ويحدد لغة أسماء البطاقات وبقية النص المترجم. تصلح أي لغة يخدمها الموقع.

اختيار اللعبة. طريقتان بالنتيجة نفسها: استدعاء النطاق الفرعي الخاص باللعبة، أو تمرير المعامل game_id. وبدونهما تحصل على لعبة النطاق الذي استدعيته.

مثال على الطلب
curl "https://cardsrealm.com/en-us/api/getRecentDecks?game_id=1&limit=2"
الأسعار أعداد صحيحة بالسنت. قيمة price تساوي 77 مع currency_prefix بالرمز $ تعني 0.77. اقسم على 100 قبل العرض.
الاستخدام العادل. لا يوجد حد صارم للطلبات مطبَّق اليوم، لذا كن معقولًا: خزّن مؤقتًا ما تستطيع، وفضّل طلبًا واحدًا مقسّمًا على صفحات بدل طلبات صغيرة كثيرة. الإفراط هو ما يحوّل واجهة مفتوحة إلى مغلقة.

إرسال المعاملات

تستجيب كل نقطة نهاية لـ GET و POST، وتقرأ المعاملات من أي من هذه الصيغ، أيها أسهل عليك. الاستجابة واحدة.

طريقة الإرسالContent-Type
سلسلة الاستعلام (GET أو POST)
نموذج بسيطapplication/x-www-form-urlencoded
نموذج متعدد الأجزاءmultipart/form-data
JSONapplication/json
نفس الطلب بثلاث طرق
curl "https://cardsrealm.com/ar-sa/api/getRecentDecks?game_id=1&limit=2"

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

curl -X POST "https://cardsrealm.com/ar-sa/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 ودع الأداة تولّدها بنفسها."
}
الاستدعاء من المتصفح مسموح. يمكن لصفحة على نطاقك أن تستدعيها مباشرة من المتصفح. لا تُقرأ أي ملفات تعريف ارتباط أو بيانات اعتماد.

cardinfo

GET/ar-sa/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/ar-sa/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"
}

getRecentDecks

GET/ar-sa/api/getRecentDecks

أحدث المجموعات المنشورة، الأحدث أولًا.

المعاملالنوعنمطملحوظات
pageint1رقم الصفحة.
limitint50عدد المجموعات في الصفحة. الحد الأقصى 500؛ وما فوقه يعيد الطلب خطأً.
game_idint1مثل cardinfo.
مثال على الطلب
curl "https://cardsrealm.com/ar-sa/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/ar-sa/api/getDeckByID

قائمة مجموعة كاملة. تأتي قائمة البطاقات ضمن المفتاح cards، مع الكمية وboard (main أو side) وسعر كل بطاقة.

المعاملالنوعنمطملحوظات
deck_idint0المعرّف الرقمي للمجموعة.
currencystringBRLثلاثة أحرف.
مثال على الطلب
curl "https://cardsrealm.com/ar-sa/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/ar-sa/api/getDeckResults

أداء نمط اللعب: السجل العام، مع تفصيل by_meta لنتائجه أمام كل نمط آخر.

المعاملالنوعنمطملحوظات
deck_namestringفارغاسم نمط اللعب، بحد أقصى 40 حرفًا.
weekint4كم أسبوعًا إلى الوراء. الحد الأقصى 52.
formatstringStandardبحد أقصى 20 حرفًا.
game_idint1مثل cardinfo.
مثال على الطلب
curl "https://cardsrealm.com/ar-sa/api/getDeckResults?deck_name=Grixis%20Affinity&format=Pauper&week=8"

getPlayerResults

GET/ar-sa/api/getPlayerResults

سجل اللاعب، مع تفصيل by_meta لأدائه مع كل نمط لعب.

المعاملالنوعنمطملحوظات
player_namestringفارغبحد أقصى 40 حرفًا.
weekint52كم أسبوعًا إلى الوراء.
player_platformstringcardsrealm_nicknameبأي اسم تبحث. واحد من cardsrealm_nickname أو mtgo أو arena أو riot أو display. وأي قيمة أخرى تعيد خطأ.
مثال على الطلب
curl "https://cardsrealm.com/ar-sa/api/getPlayerResults?player_name=Carrubs&player_platform=mtgo"

getPastTournaments

GET/ar-sa/api/getPastTournaments

البطولات التي أُقيمت بالفعل، الأحدث أولًا.

المعاملالنوعنمطملحوظات
pageint1رقم الصفحة.
formatstringفارغبحد أقصى 20 حرفًا. الفراغ يعني كل الصيغ.
game_idint1مثل cardinfo.
مثال على الطلب
curl "https://cardsrealm.com/ar-sa/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/ar-sa/api/getTournamentInfo

بطولة كاملة: الحدث، وجولاته ضمن round_info، والجدول النهائي ضمن standings. المعرّف غير الموجود يعيد قائمة فارغة لا خطأ.

المعاملالنوعنمطملحوظات
tournament_idint1المعرّف الرقمي للبطولة.
مثال على الطلب
curl "https://cardsrealm.com/ar-sa/api/getTournamentInfo?tournament_id=810845"

getUserTournaments

GET/ar-sa/api/getUserTournaments

البطولات التي نظّمها حساب واحد.

المعاملالنوعنمطملحوظات
nicknamestringCards Realmبحد أقصى 30 حرفًا.
مثال على الطلب
curl "https://cardsrealm.com/ar-sa/api/getUserTournaments?nickname=leon-diniz"

الأخطاء والدعم

شفرةمعنى
200نجاح. جسم الاستجابة دائمًا JSON.
400تم رفض الطلب: اسم طويل جدًا، أو رقم ليس رقمًا، أو قيمة خارج القائمة المقبولة، أو جسم تعذّرت قراءته.
500حدث خلل من جانبنا. يستحق أن تخبرنا به.

الطلب المرفوض يردّ بـ 400 مع كائن. يذكر invalid_fields المعاملات التي تستحق النظر، ويغيب حين لا تكون المشكلة في حقل بعينه.

الاستجابة
{
  "error": "يجب أن يكون الأسبوع رقمًا",
  "invalid_fields": ["week"]
}
تغيّر هذا في 8 سبتمبر 2026. كان الطلب المرفوض يردّ بـ 404 ونصّ مجرّد. الرسالة نفسها؛ أما الرمز والغلاف فلا. سجل التغيير

لديك سؤال، أو تحتاج حقلًا غير موجود هنا؟ تحدث إلينا على Discord. Discord