مرجع الخادم
خادم API
نسخ الصفحة
الـ API الذي يجريه خادم تطبيقك الخاص باستخدام مفتاحه السري. تحقق من الجلسات، وقائمة المنتجات، والتأكيد، والتسليم والرد على الرسوم، ودفع المكافآت من حوضك، وإرسال الإشعارات، والتحقق من الإعلانات وقائمة الجداول العامة.
#المبادئ الأساسية
| العنوان الأساسي | https://api.lialabs.org/api/apps/v1 |
| التحقق من الهوية | Authorization: Bearer <your key>, مفتاح الاختبار الخاص بك (lia_test_…) أو مفتاح مباشر (lia_live_…) |
| الأجسام | JSON، مع Content-Type: application/json |
| المبالغ | في $LIA، كأرقام، إلى 6 منزلة عشرية |
| الأوقات | ملي ثانية منذ 1970 (UTC) |
استدعِها من خادمك فقط. مفتاحك سرّي: لا تضعه في صفحتك.
curl https://api.lialabs.org/api/apps/v1/pool \
-H "Authorization: Bearer $LIA_KEY"مساعد صغير يستخدم في الأمثلة التالية:
const LIA = "https://api.lialabs.org/api/apps/v1";
export async function lia(method, path, body) {
const res = await fetch(LIA + path, {
method,
headers: { Authorization: `Bearer ${process.env.LIA_KEY}`, "Content-Type": "application/json" },
body: body === undefined ? undefined : JSON.stringify(body),
});
const data = await res.json();
if (!res.ok) throw Object.assign(new Error(data.error), { status: res.status, data });
return data;
}#المفاتيح والوضعيات
مفتاح يرى فقط تطبيقه الخاص، ويستخدم فقط وضعه الخاص: المفتاح التجريبي يرى جلسات تجريبية، ورسوم، وأعوام، وإعلانات؛ والمفتاح الحي يرى تلك الحقيقية. شيء من الوضع الآخر هو not_found (أو valid: false. راجع اختبار وحقيقي.
#الأخطاء
تُجيب الأخطاء بحالة 4xx وجسم يحتوي على error الكود، أحيانًا مع المزيد من الحقول:
{ "error": "pool_empty", "pool": 3.5 }| الحالة | الكود | متى |
|---|---|---|
| 401 | bad_key | لا مفتاح، مفتاح بشكل خاطئ، مفتاح غير معروف، مفتاح نشط بينما تطبيقك ليس'لأنها تعيش، أو تطبيقك متوقف.'موقفه. |
كل نقطة نهاية تُعرض محتواها الخاص. كل كود موجود في أكواد الأخطاء.
#الجلسات
#POST/session/verify
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/session/verify' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"session": "lias_example_session"
}'يحقق من رمز جلسة من Lia.init() أو Lia.session(), ويُخبرك بمن يملكه.
POST /api/apps/v1/session/verify
Authorization: Bearer lia_live_…
Content-Type: application/json
{ "session": "lias_eyJhcHAiOi…" }| حقل | النوع | |
|---|---|---|
session | سلسلة | العملة من الصفحة. |
الإجابات 200 بأي حال من الأحوال:
{ "valid": true, "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "mode": "live", "exp": 1761998400000 }{ "valid": false }رمز صالح عندما قام Lia بتوقيعه، إنه'لتطبيقك ولمفتاحك'الوضع، ولا يوجد'انتهت (15 دقائق بعد إنشائها).
#المنتجات
#GET/products
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request GET 'https://api.lialabs.org/api/apps/v1/products' \
--header "Authorization: Bearer $LIA_KEY"ما تبيعه تطبيقك، بأسعار Lia'السجلات. فقط المنتجات النشطة، الأرخص أولًا.
{
"products": [
{ "id": "extra-lives", "name": "3 extra lives", "price": 5, "active": true },
{ "id": "gold-pack", "name": "Gold pack", "price": 25, "active": true }
]
}#الرسوم
الرسوم هي دفعة واحدة على Lia'ورقة الدفع الخاصة به. راجع المدفوعات.
كائن الرسوم:
| حقل | النوع | |
|---|---|---|
id | سلسلة | يُحب ch_9b1f…. |
playerId | سلسلة | من دفع. |
productId | سلسلة | ما دفعوه من أجله. |
amount | عدد | ما دفعوه، بـ $LIA. |
status | سلسلة | paid, delivered أو refunded. |
mode | سلسلة | test أو live. |
createdAt | عدد | عندما تم الدفع. |
deliveredAt | عدد أو null | عندما قمت بتوصيله. |
refundedAt | عدد أو null | عندما تم الاسترداد. |
#GET/charges/:id
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request GET 'https://api.lialabs.org/api/apps/v1/charges/id_example' \
--header "Authorization: Bearer $LIA_KEY"هل هذه الرسوم حقيقية ودفعها من قبل من؟ تحقق دائمًا من هنا قبل التسليم: لا تأخذ الصفحة'أو ويب هوك'كلمة لها.
{
"charge": {
"id": "ch_9b1f4c2e7a0d5b8f3e6a1c4d",
"playerId": "p_3f9c0a6d1b2e4f5a6b7c",
"productId": "extra-lives",
"amount": 5,
"status": "paid",
"mode": "live",
"createdAt": 1761998400000,
"deliveredAt": null,
"refundedAt": null
}
}| الحالة | الكود | متى |
|---|---|---|
| 404 | not_found | لا تكلفة لهذا التطبيق في مفتاحك'الوضع. |
#POST/charges/:id/deliver
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/charges/id_example/deliver' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Idempotency-Key: example-request-1'يُشير إلى دفع تم تسليمه، مرة واحدة بعد أن'لقد قدموا للشخص ما اشتراه. آمن للتكرار: توصيل الشحنة المُرسلة لا يغير شيئًا ويُجيب نفس الشيء. لا وجود لجسم.
{ "charge": { "id": "ch_9b1f…", "status": "delivered", "deliveredAt": 1761998405000, "…": "…" } }| الحالة | الكود | متى |
|---|---|---|
| 404 | not_found | لا تكلفة في مفتاحك'الوضع. |
| 409 | refunded | تم استردادها، لذلك'لإيصال ما اشتروه. يعمل على تكلفة مدفوعة أو تكلفة تم تسليمها. آمن للتكرار: إرجاع تكلفة تم إرجاعها يجيب بها ويُدفع شيء إضافي. لا يوجد أحد. charge كذلك. |
#POST/charges/:id/refund
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/charges/id_example/refund' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Idempotency-Key: example-request-1'يعيد إرسال $LIA إلى الشخص، عندما يمكنك ذلك'لإيصالها بعد.
{ "charge": { "id": "ch_9b1f…", "status": "refunded", "refundedAt": 1761998410000, "…": "…" } }السعر الكامل يعود إلى الشخص'رصيده، في الوضع الحي، من Lia'جزءه ونسبة مشاركتك. أ charge.refunded يتم إرسال الويب هوك.
| الحالة | الكود | متى |
|---|---|---|
| 404 | not_found | لا تكلفة في مفتاحك'الوضع. |
#المكافآت
انظر خزائن المكافآت.
#POST/rewards
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/rewards' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"playerId": "player_example",
"amount": 1,
"key": "reward-example-1",
"reason": "Level completed"
}'يدفع لاعبًا من تطبيقك'مصدر المكافآت، مرة لكل مفتاح.
POST /api/apps/v1/rewards
Authorization: Bearer lia_live_…
Content-Type: application/json
{
"playerId": "p_3f9c0a6d1b2e4f5a6b7c",
"amount": 25,
"key": "tournament-2026-11-01:p_3f9c0a6d1b2e4f5a6b7c",
"reason": "Weekly tournament, 1st place"
}| حقل | النوع | |
|---|---|---|
playerId | سلسلة | اللاعب الذي يجب دفعه. |
amount | عدد | في $LIA، أكثر من 0 وأقل من 10,000, إلى 6 منزلة عشرية. |
key | سلسلة | أنت، من 1 إلى 128 من الحروف والأرقام، _, ., : و -. مفتاح يدفع مرة واحدة فقط. بدونه، فإن Idempotency-Key يتم استخدام الرأسية. |
reason | سلسلة | خياري، حتى 80 حرفًا (يتم قطع الأطول). يُعرض في اللاعب'س النشاط تحت تطبيقك'اسمها. |
مدفوع:
{ "status": "paid", "amount": 25, "pool": 975 }نفس المفتاح يدفع شيئًا ولا يجيب بمال المفتاح الأول:
{ "status": "duplicate", "amount": 25, "pool": 975 }pool هو ما'الذي تتركه في حوضك بعد ذلك. في الوضع التجريبي، المكافأة وهمية: لا يوجد حوض.'لديه مستخدم وحدة الحد اليوم لا'ت التطبيق.
| الحالة | الكود | متى |
|---|---|---|
| 400 | bad_amount | amount لا'ت عددًا أكبر من 0 وصولًا إلى 10,000. |
| 400 | bad_key_field | key مفقود أو ليس في الشكل الصحيح. |
| 404 | unknown_player | لا لاعب في تطبيقك. |
| 409 | pool_empty | الخزانة ليست'للاحتفاظ بها أو نقلها: ادفع رهاناتك بمنتجك الخاص. amount. الجسم يحتوي على pool, ما'الذي تتركه. |
| 429 | daily_limit | هذا سيجعل اللاعب يتجاوز تطبيقك'الحد اليومي لكل لاعب (في $LIA، لكل يوم UTC). الجسم لديه dailyCapPerPlayer. |
A reward.paid يتم إرسال الويب هوك لكل مكافأة تم دفعها (وليس للنسخ المكررة).
#GET/pool
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request GET 'https://api.lialabs.org/api/apps/v1/pool' \
--header "Authorization: Bearer $LIA_KEY"ماذا'الذي تتركه في حوض المكافأة، والأقصى الذي يمكن للاعب واحد الحصول عليه في اليوم.
{ "balance": 975, "dailyCapPerPlayer": 50, "mode": "live" }dailyCapPerPlayer هو 0 عندما'لا يوجد حد يومي. balance هو المجموعة الحية، وكذلك عندما تطلب بملفات تعريف الارتباط الخاصة بك.
#الإشعارات
انظر الإشعارات.
#POST/notifications
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/notifications' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"playerId": "player_example",
"text": "Ready for another round?",
"startParam": "round_2"
}'يُرسل إشعارًا للاعب الذي وافق عليه. يظهر تحت تطبيقك'اسمها ويفتح تطبيقك بـ startParam.
POST /api/apps/v1/notifications
Authorization: Bearer lia_live_…
Content-Type: application/json
{ "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "text": "It's your move against @amara.", "startParam": "match-8k2d" }| حقل | النوع | |
|---|---|---|
playerId | سلسلة | من يجب إبلاغه. |
text | سلسلة | 1 إلى 180 حرفًا. المسافات والسطور الفارغة تصبح مسافات واحدة. لا روابط، أو أرقام هواتف، أو كلمات تُستخدم في الاحتيال. |
startParam | سلسلة | خياري. 1 إلى 64 من الحروف والأرقام، _ و -. صفحة التطبيق تقرأه من Lia.startParam. |
تم الإرسال:
{ "sent": true, "pushed": true }pushed هو false عندما وصل إلى Lia'جرسه ولكن ليس الهاتف (لديه Lia'يتم إيقاف الطرد).
| الحالة | الكود | متى |
|---|---|---|
| 400 | bad_text | فارغ، طويل جداً، أو غير مسموح. عندما يكون'ما يقوله النص، problem هو link, phone أو scam. |
| 400 | bad_start_param | startParam لا'لإعاقة الألعاب |
| 403 | notifications_off | قد لا يرسل تطبيقك إشعارات (عدد أيامه اليومي هو 0). |
| 403 | not_allowed | هذا اللاعب لم يكن'ت السماح لتطبيقك'إشعاراتها، أو تم إيقافها. |
| 404 | unknown_player | لا لاعب بهذا المعرف، أو ليس مفتاحك'الوضع يصل (مفتاح الاختبار فقط يصل إلى مختبراتك). |
| 429 | rate_limited | تم الوصول إلى حد. بالنسبة لتطبيقك'الحدود الخاصة بهم تملك retryAt, عندما يمكنك المحاولة مرة أخرى. |
#إعلانات
انظر إعلانات.
#POST/ads/verify
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/ads/verify' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"adId": "ad_example"
}'هل كان هذا الإعلان مُشاهدًا حقًا، ومن قبل من؟ تحقق قبل منح أي شيء مقابل فيديو مكافأة.
POST /api/apps/v1/ads/verify
Authorization: Bearer lia_live_…
Content-Type: application/json
{ "adId": "ad_8e1c4b0f2a9d47c6b3e15a07" }{ "adId": "ad_8e1c4b0f2a9d47c6b3e15a07", "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "format": "rewarded", "watched": true, "watchedAt": 1761998400000 }| حقل | النوع | |
|---|---|---|
adId | سلسلة | الرقم التعريفي من Lia.showAd(). |
playerId | سلسلة | اللاعب الذي تم عرضه عليه. تحقق منه'الشخص الذي يسأل. |
format | سلسلة أو فارغ | "rewarded", "rewardedInterstitial", "interstitial", "banner" أو "native" (الصفر للإعلانات من قبل SDK 1.7). فقط "rewarded" و "rewardedInterstitial" تستحق مكافأة. |
watched | منطقية | تم مشاهدته بالكامل (أو، بالنسبة للإعلانات الإعلانية أو الشريط العلوي أو الإعلانات المدمجة، تم عرضها). |
watchedAt | عدد أو null | عندما |
اسأل باستخدام مفتاح وضع الإعلان الذي تم عرضه: إعلان في وضع الاختبار (يكون دائمًا أحد Google'إعلانات الاختبار، لا تُحسب في الأرباح) هي not_found للمشاهدة
Lia لم تتمكن'لا تُعلّم إعلانًا كمستخدم عند التحقق منه، لذلك ادفع كل adId مرة واحدة (استخدم ad:<adId> كما هو مفتاح المكافأة).
| الحالة | الكود | متى |
|---|---|---|
| 404 | not_found | لا إعلان بهذا المعرف لتطبيقاتك في مفتاحك'الوضع. |
#الغرفة المشتركة
الجداول العامة التي يمكن لأي شخص على Lia العثور عليها. Lia يحتفظ فقط بالقائمة: خادمك يشغل الجدول. انظر الجداول العامة.
كائن الجدول:
| حقل | النوع | |
|---|---|---|
id | سلسلة | جداولك'معرّفها. |
game | سلسلة | تطبيقك'معرّفها. |
host | كائن | { name }: المضيف'س Lia اسم المستخدم. |
seats, taken | عدد | عدد المقاعد الإجمالي، والمقاعد المُستخدمة. |
title | سلسلة أو فارغ | مُصنف مثل كل ما يقرأه الناس على Lia. |
stake, pot | عدد | في LIA، لعرضها. |
createdAt, expiresAt | عدد |
#POST/lobby/tables
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/lobby/tables' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"tableId": "table_example",
"hostPlayerId": "player_example",
"seats": 2,
"taken": 1,
"title": "A friendly game",
"stake": 1,
"pot": 1,
"expiresIn": 1800
}'يُسجل جدولًا يخص'في انتظار اللاعبين، أو تحديث قائمة العرض (يحتفظ بمكانته في القائمة). قم بإدراجها مرة أخرى عندما تتغير مقاعدها.
{ "tableId": "t8k2d", "hostPlayerId": "p_3f9c0a6d1b2e4f5a6b7c", "seats": 2, "taken": 1, "title": "Quick game", "stake": 5, "expiresIn": 900 }| حقل | النوع | |
|---|---|---|
tableId | سلسلة | أنت، من 1 إلى 57 من الحروف والأرقام، _ و - أو قصيرة بما يكفي لتناسب startParam lobby-<id>). |
hostPlayerId | سلسلة | اللاعب المضيف. |
seats | عدد | خياري. 2 إلى 10, 2 افتراضيًا. |
taken | عدد | خياري. المقاعد ممتلئة، المضيف'مُضمنة: 1 إلى seats, 1 بشكل افتراضي. |
title | سلسلة | خياري، حتى 40 حرفًا. |
stake, pot | عدد | خياري. في LIA، 0 إلى 10,000, تُعرض في القائمة فقط. Lia لا يمكن'للاحتفاظ بالمبلغ. لديه |
expiresIn | عدد | خياري. ثوانٍ التي تستغرقها القائمة، 60 إلى 3600, 1800 افتراضيًا. |
{ "listed": true, "tableId": "t8k2d", "seats": 2, "taken": 1, "expiresAt": 1761999300000 }متى taken يصل seats, يتم أخذ الجدول من القائمة بدلاً من ذلك، والجواب هو { "listed": false }.
| الحالة | الكود | متى |
|---|---|---|
| 400 | bad_table_id, bad_seats, bad_taken, bad_title, bad_amount, bad_expires_in | حقل لا'لإضاءتها على والانطفاء: أظهر واحدة حيث يمكن أن تبقى لفترة. لا تُحسب أي منهما ضمن الإعلانات الشاشة الكاملة |
| 404 | unknown_player | لا مضيف في تطبيقك. |
| 429 | too_many_tables | المضيف لديه بالفعل جداول مفتوحة 3 في تطبيقك. الجسم لديه max. |
#GET/lobby/tables
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request GET 'https://api.lialabs.org/api/apps/v1/lobby/tables' \
--header "Authorization: Bearer $LIA_KEY"تطبيقك'جداول مفتوحة في مفتاحك'الوضع، الأحدث أولاً، حتى 200: كل مضيف'، مع تجاهل الكتل (التي'لكل لاعب'رأيه الخاص).
{ "tables": [{ "id": "t8k2d", "game": "your-app", "host": { "name": "amara" }, "seats": 2, "taken": 1, "title": "Quick game", "stake": 5, "pot": 0, "createdAt": 1761998400000, "expiresAt": 1761999300000 }] }#POST/lobby/tables/:id/sit
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/lobby/tables/id_example/sit' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"playerId": "player_example"
}'يضع لاعبًا في طاولة مُدرجة، قبل أن يسمح لك الخادم بالدخول. Lia يرفض الأشخاص الذين حظرهم المضيف أو الذين حظر المضيف.
{ "playerId": "p_8a1e0c4d2b7f9e3a5c6d" }{ "seated": true, "taken": 2, "seats": 2, "full": true }| الحالة | الكود | متى |
|---|---|---|
| 404 | unknown_player | لا لاعب في تطبيقك. |
| 404 | not_found | الجدول لا'لقد تم الإدراج. |
| 409 | full | كل مقعد مُحجز. |
| 409 | own_table | اللاعب هو المضيف. |
#DELETE/lobby/tables/:id
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request DELETE 'https://api.lialabs.org/api/apps/v1/lobby/tables/id_example' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Idempotency-Key: example-request-1'يأخذ الجدول من القائمة، عندما تبدأ اللعبة أو تغلق. آمن للتكرار.
{ "removed": true }removed هو false عندما لم يكن'لأنها تعيش، أو أي مفتاح أثناءها
#إعادة المحاولة
إرسال Idempotency-Key الرأسية مع كل POST, والنفس المفتاح مرة أخرى في كل محاولة إعادة لطلب معين. إذًا، لن يقوم بإعادة أي شيء مرتين، وسينتهي بنفس طريقة الطلب الأول.
POST /api/apps/v1/notifications
Authorization: Bearer lia_live_…
Content-Type: application/json
Idempotency-Key: 6f1c2a9e-0b7d-4c35-9e1a-2d8f4b7c3a10
{ "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "text": "It's your move." }- أي مفتاح تحبه, 1 إلى 128 من الحروف والأرقام,
_,-,.و:. رسوم UUID لكل عملية هي صحيحة. - يتم تشغيل الطلب الأول. إذا نجحت (2xx)، يتم الاحتفاظ بإجابتها لمدة 24 ساعات، ويتم إعادة المحاولة بنفس المفتاح والجسم نفسه، وتحصل على نفس الإجابة مرة أخرى، مع الرأس
Idempotent-Replayed: true. - الرفض لا يحتفظ بشيء (أو 4xx أو 5xx)، لذا يمكنك إصلاح السبب والمحاولة مرة أخرى بنفس المفتاح.
- نفس المفتاح مع جسم مختلف هو
422 idempotency_key_reused. - نفس المفتاح بينما المفتاح الأول لا يزال يعمل هو
409 idempotency_key_in_useمعRetry-After: 1. إعادة المحاولة، وتحصل على الأول'س الإجابة. - المفاتيح هي تطبيقك'مملكتها, ويبقى كل مفتاح منفصلًا. المفتاح نفسه على نقطة نهاية أخرى هو مفتاح مختلف.
بدون الرأس، فإن معظم نقاط نهاية الوظائف ما زالت آمنة للإعادة: القراءة لا تغير شيئًا، وتسليم المكافآت وإعادة الصرف آمنة للإعادة، والمكافآت تُدفع مرة واحدة لكل key. الإشعارات هي الاستثناء: بدون العنوان، يتم إرسال الإشعار مرة أخرى عند المحاولة مرة أخرى.
تم الترجمة تلقائيًا. الإنجليزية هي مصدر الحقيقة. اقرأ باللغة الإنجليزية