v1

واجهة برمجية سريعة وآمنة
لاستبدال أكواد الألعاب

استبدل أكواد PUBG Mobile و Free Fire، وتفقّد اللاعبين، واجلب معلومات الأكواد من متجرك أو تطبيقك بطلب HTTP واحد. كل الردود بصيغة JSON.

https://api.devtechnobots.com/api/v1
JSONردود موحّدة وواضحة
2 ألعابPUBG Mobile و Free Fire
24hحد يومي يتجدد تلقائياً
JPGرابط صورة لكل استبدال PUBG

بداية سريعة

احصل على مفتاحكمن بوت تيليغرام: Reseller API ثم مفتاحي.
أرسل طلبكأرسل المفتاح مع الطلب بإحدى الطرق الثلاث الموضحة أدناه.
اقرأ الحقل successfulإن كان true فالعملية نجحت، وإلا فاقرأ error_code للتعامل البرمجي و error للعرض.

المصادقة

استخدم مفتاح API الخاص بك مع كل طلب. المفاتيح تبدأ بـ rk_. إن تسرّب مفتاحك فولّد مفتاحاً جديداً من البوت وسيتوقف القديم فوراً.

Query
?api_token=YOUR_TOKEN&player_id=123
JSON Body
POST {"api_token": "YOUR_TOKEN",
      "player_id": "123"}
ترويسة (Header)
Authorization: Bearer YOUR_TOKEN
X-API-Key: YOUR_TOKEN
كل نقاط النهاية تقبل GET و POST. مع POST يمكن إرسال الحقول كـ JSON أو كـ form.

الحدود والخطط

لكل خطة حد يومي يتجدد كل 24 ساعة. لا يُحتسب من الحد إلا الطلب الناجح؛ الطلبات الفاشلة (كود خاطئ، لاعب غير موجود، أعطال مؤقتة) مجانية.

🎁 5 طلبات مجانية تُمنح تلقائياً عند تفعيل الـAPI لحسابك لأول مرة لتجربة الخدمة (ترويسة X-Free-Trial: true). يتجدد الحد اليومي كل 24 ساعة، أو عند ساعة ثابتة يحدّدها لك الأدمن (مثلاً 00:00) — موعد التجديد القادم في الترويسة X-RateLimit-Reset.

العمليةما يُحتسب عند النجاح
استبدال مباشر1
تفقد لاعب0.5
معلومات كود0.5
حالة الحساب0

كل رد يحمل ترويسات تساعدك على تتبع استهلاكك:

X-RateLimit-Limit: 500
X-RateLimit-Remaining: 487.5
X-RateLimit-Reset: 2026-02-01T10:00:00Z
عند انتهاء الاشتراك يتوقف المفتاح مؤقتاً (ACCOUNT_EXPIRED) ولا يُحذف، ويعود للعمل فور التجديد من البوت.
POSTGET/check-playerيُحتسب 0.5 عند النجاح

تفقد لاعب — PUBG Mobile

يتحقق من وجود اللاعب ويعيد اسمه داخل اللعبة.

الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
player_idنص (أرقام)نعمآيدي اللاعب داخل اللعبة
curl -X POST "https://api.devtechnobots.com/api/v1/check-player?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"player_id": "51709255708"}'
curl "https://api.devtechnobots.com/api/v1/check-player?api_token=YOUR_TOKEN&player_id=51709255708"
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/check-player",
    params={"api_token": "YOUR_TOKEN"},
    json={"player_id": "51709255708"},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/check-player?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({"player_id": "51709255708"}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "player_id": "51709255708",
  "name": "PlayerName"
}
رد فاشل HTTP 404
{
  "successful": false,
  "player_id": "51709255708",
  "error_code": "CHARACTER_NOT_FOUND",
  "error": "اللاعب غير موجود، تأكد من صحة الآيدي"
}
POSTGET/redeem/directيُحتسب 1 عند النجاح

استبدال مباشر — PUBG Mobile

يستبدل الكود على آيدي اللاعب. عند النجاح يعيد أيضاً رابط صورة الإيصال في الحقل image_url.

صورة الإيصال: image_url رابط مباشر لصورة JPG جاهز للعرض أو الإرسال لعميلك. قد يكون null في حال تعذّر إنتاج الصورة، ولا يؤثر ذلك على نجاح الاستبدال.
الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
player_idنص (أرقام)نعمآيدي اللاعب داخل اللعبة
codeنصنعمكود الشحن
curl -X POST "https://api.devtechnobots.com/api/v1/redeem/direct?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"player_id": "51709255708", "code": "XXXX-XXXX-XXXX"}'
curl "https://api.devtechnobots.com/api/v1/redeem/direct?api_token=YOUR_TOKEN&player_id=51709255708&code=XXXX-XXXX-XXXX"
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/redeem/direct",
    params={"api_token": "YOUR_TOKEN"},
    json={"player_id": "51709255708", "code": "XXXX-XXXX-XXXX"},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/redeem/direct?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({"player_id": "51709255708", "code": "XXXX-XXXX-XXXX"}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "player_id": "51709255708",
  "code": "XXXX-****",
  "name": "PlayerName",
  "product_name": "60 UC",
  "took_ms": 1840,
  "image_url": "https://i.ibb.co/xxxxxxx/receipt.jpg"
}
رد فاشل HTTP 409
{
  "successful": false,
  "player_id": "51709255708",
  "code": "XXXX-****",
  "error_code": "CODE_USED",
  "error": "الكود مستخدم مسبقاً"
}
POSTGET/code-infoيُحتسب 0.5 عند النجاح

معلومات كود — PUBG Mobile

يخبرك إن كان الكود مستخدماً أم غير مستخدم، ويعيد دائماً تاريخ انتهاء صلاحيته. إن كان مستخدماً يعيد أيضاً اللاعب ووقت الاستبدال مع رابط صورة.

ثلاث حالات: مستخدم (used: true مع التفاصيل)، غير مستخدم (used: false ويبقى expires_at موجوداً)، وغير موجود (CODE_NOT_FOUND). متاحة لـ PUBG Mobile فقط.
رد ناجح — كود غير مستخدم HTTP 200
{
  "successful": true,
  "used": false,
  "code": "XXXX-****",
  "player_id": null,
  "name": null,
  "amount": 60,
  "product_name": "60 UC",
  "channel_name": "MTCGAME CO., LIMITED",
  "created_at": null,
  "expires_at": "2027-10-06T15:59:59Z",
  "image_url": null
}
الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
codeنصنعمكود الشحن
curl -X POST "https://api.devtechnobots.com/api/v1/code-info?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code": "XXXX-XXXX-XXXX"}'
curl "https://api.devtechnobots.com/api/v1/code-info?api_token=YOUR_TOKEN&code=XXXX-XXXX-XXXX"
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/code-info",
    params={"api_token": "YOUR_TOKEN"},
    json={"code": "XXXX-XXXX-XXXX"},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/code-info?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({"code": "XXXX-XXXX-XXXX"}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "used": true,
  "code": "XXXX-****",
  "player_id": "5398786977",
  "name": "PlayerName",
  "amount": 660,
  "product_name": "660 UC",
  "channel_name": "Mintroute DMCC",
  "created_at": "2024-09-24T15:08:42Z",
  "expires_at": "2025-09-18T15:59:59Z",
  "image_url": "https://i.ibb.co/xxxxxxx/receipt.jpg"
}
رد فاشل HTTP 404
{
  "successful": false,
  "code": "XXXX-****",
  "error_code": "CODE_NOT_FOUND",
  "error": "الكود غير موجود أو خاطئ"
}
POSTGET/ff/check-playerيُحتسب 0.5 عند النجاح

تفقد لاعب — Free Fire

نفس صيغة PUBG تماماً، يتغير المسار فقط.

الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
player_idنص (أرقام)نعمآيدي اللاعب داخل اللعبة
curl -X POST "https://api.devtechnobots.com/api/v1/ff/check-player?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"player_id": "123456789"}'
curl "https://api.devtechnobots.com/api/v1/ff/check-player?api_token=YOUR_TOKEN&player_id=123456789"
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/ff/check-player",
    params={"api_token": "YOUR_TOKEN"},
    json={"player_id": "123456789"},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/ff/check-player?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({"player_id": "123456789"}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "player_id": "123456789",
  "name": "PlayerName"
}
رد فاشل HTTP 404
{
  "successful": false,
  "player_id": "123456789",
  "error_code": "CHARACTER_NOT_FOUND",
  "error": "اللاعب غير موجود، تأكد من صحة الآيدي"
}
POSTGET/ff/redeem/directيُحتسب 1 عند النجاح

استبدال مباشر — Free Fire

نفس صيغة PUBG، بدون حقل image_url (الإيصال لـ PUBG فقط).

الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
player_idنص (أرقام)نعمآيدي اللاعب داخل اللعبة
codeنصنعمكود الشحن
curl -X POST "https://api.devtechnobots.com/api/v1/ff/redeem/direct?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"player_id": "123456789", "code": "XXXX-XXXX-XXXX"}'
curl "https://api.devtechnobots.com/api/v1/ff/redeem/direct?api_token=YOUR_TOKEN&player_id=123456789&code=XXXX-XXXX-XXXX"
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/ff/redeem/direct",
    params={"api_token": "YOUR_TOKEN"},
    json={"player_id": "123456789", "code": "XXXX-XXXX-XXXX"},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/ff/redeem/direct?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({"player_id": "123456789", "code": "XXXX-XXXX-XXXX"}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "player_id": "123456789",
  "code": "XXXX-****",
  "name": "PlayerName",
  "product_name": "110 Diamonds",
  "took_ms": 2210
}
رد فاشل HTTP 422
{
  "successful": false,
  "player_id": "123456789",
  "code": "XXXX-****",
  "error_code": "INVALID_CODE",
  "error": "الكود غير صالح أو منتهي الصلاحية"
}

المخزون عبر الـ API

تدير مخزون أكوادك الخاص (نفس مخزون البوت) وتستبدل منه بدون إرسال الكود في كل طلب. المخزون مشفّر ومعزول عن بقية المستخدمين.

رموز الفئات

PUBG Mobile
categoryالفئة (UC)
160
2325
3660
41800
53850
68100
Free Fire
categoryالفئة (جواهر)
1110
2230
3581
41188
52400

نظاما الاستبدال من المخزون

تختار النظام من البوت: Reseller API ← 📦 إدارة المخزون (سويتش تشغيل/إيقاف). الرد يحمل دائماً الحقل mode.

النظامmodeالسلوك
🔁 تلقائي (الافتراضي)auto_retryإن فشل كود يُسجَّل في failed_codes ويجرّب الكود التالي حتى ينجح الاستبدال، ثم يعيد فاتورة طبيعية.
☝️ محاولة واحدةsingle_attemptيجرّب كوداً واحداً فقط. إن فشل بسبب الكود يعيد successful: false مع error_code وreason (سبب فشل الكود) وfailed_code، ويُعلَّم الكود فاشلاً.
أمان: نقبل نصاً فقط (أرقام وحروف إنجليزية وشرطة، 4–64 خانة لكل كود) ونرفض رفع الملفات وأي رموز أخرى. إدخال/سحب الأكواد مجاني ولا يُحتسب من حدّك اليومي؛ الاستبدال من المخزون يُحتسب 1 عند النجاح فقط، ولا يُحتسب إن لم ينجح.

الأكواد التي لا يستطيع الـAPI أن يجرّبها (لاعب غير موجود، عطل مؤقت) لا تُحرق وتبقى متاحة.

POSTGET/stock/redeemيُحتسب 1 عند النجاح

استبدال من المخزون — PUBG

يستبدل من مخزونك حسب النظام المختار في البوت (mode).

ترسل رمز الفئة وآيدي اللاعب فقط، والـAPI يسحب كوداً من مخزونك ويستبدله. صورة الإيصال: الحقل image_url رابط مباشر لصورة الإيصال جاهز للعرض أو الإرسال لعميلك (قد يكون null إن تعذّر إنتاجها دون أن يؤثر ذلك على نجاح الاستبدال).
نظام تلقائي — نجح بعد تخطّي كود فاشل HTTP 200
{
  "successful": true,
  "game": "pubg",
  "category": 1,
  "category_value": "60",
  "player_id": "51709255708",
  "mode": "auto_retry",
  "code": "XXXX-XXXX-XXXX",
  "name": "PlayerName",
  "product_name": "60 UC",
  "amount": 60,
  "took_ms": 3120,
  "failed_codes": [
    {
      "code": "BAD1-0001",
      "error_code": "CODE_USED",
      "reason": "الكود مستخدم مسبقاً"
    }
  ],
  "image_url": "https://i.ibb.co/xxxxxxx/receipt.jpg"
}
نظام المحاولة الواحدة — فشل الكود HTTP 422
{
  "successful": false,
  "game": "pubg",
  "category": 1,
  "category_value": "60",
  "player_id": "51709255708",
  "mode": "single_attempt",
  "failed_code": "BAD1-0001",
  "reason": "الكود مستخدم مسبقاً",
  "error_code": "CODE_USED",
  "error": "الكود مستخدم مسبقاً"
}
المخزون فارغ HTTP 409
{
  "successful": false,
  "game": "pubg",
  "category": 1,
  "player_id": "51709255708",
  "mode": "auto_retry",
  "error_code": "STOCK_EMPTY",
  "error": "لا يوجد مخزون متاح في هذه الفئة",
  "failed_codes": [
    {
      "code": "BAD1-0001",
      "error_code": "CODE_USED",
      "reason": "الكود مستخدم مسبقاً"
    }
  ]
}
الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
categoryرقمنعمرمز الفئة (1، 2، 3…) حسب الجدول أعلاه
player_idنص (أرقام)نعمآيدي اللاعب داخل اللعبة
curl -X POST "https://api.devtechnobots.com/api/v1/stock/redeem?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"category": 1, "player_id": "51709255708"}'
curl "https://api.devtechnobots.com/api/v1/stock/redeem?api_token=YOUR_TOKEN&category=1&player_id=51709255708"
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/stock/redeem",
    params={"api_token": "YOUR_TOKEN"},
    json={"category": 1, "player_id": "51709255708"},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/stock/redeem?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({"category": 1, "player_id": "51709255708"}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "game": "pubg",
  "category": 1,
  "category_value": "60",
  "player_id": "51709255708",
  "mode": "auto_retry",
  "code": "XXXX-XXXX-XXXX",
  "name": "PlayerName",
  "product_name": "60 UC",
  "amount": 60,
  "took_ms": 3120,
  "failed_codes": [
    {
      "code": "BAD1-0001",
      "error_code": "CODE_USED",
      "reason": "الكود مستخدم مسبقاً"
    }
  ],
  "image_url": "https://i.ibb.co/xxxxxxx/receipt.jpg"
}
رد فاشل HTTP 409
{
  "successful": false,
  "game": "pubg",
  "category": 1,
  "category_value": "60",
  "player_id": "51709255708",
  "mode": "single_attempt",
  "failed_code": "BAD1-0001",
  "reason": "الكود مستخدم مسبقاً",
  "error_code": "CODE_USED",
  "error": "الكود مستخدم مسبقاً"
}
POSTGET/ff/stock/redeemيُحتسب 1 عند النجاح

استبدال من المخزون — Free Fire

يستبدل من مخزونك حسب النظام المختار في البوت (mode).

ترسل رمز الفئة وآيدي اللاعب فقط، والـAPI يسحب كوداً من مخزونك ويستبدله. لا توجد صورة إيصال للعبة Free Fire.
نظام تلقائي — نجح بعد تخطّي كود فاشل HTTP 200
{
  "successful": true,
  "game": "ff",
  "category": 1,
  "category_value": "110",
  "player_id": "51709255708",
  "mode": "auto_retry",
  "code": "XXXX-XXXX-XXXX",
  "name": "PlayerName",
  "product_name": "110 Diamonds",
  "amount": 60,
  "took_ms": 3120,
  "failed_codes": [
    {
      "code": "BAD1-0001",
      "error_code": "CODE_USED",
      "reason": "الكود مستخدم مسبقاً"
    }
  ]
}
نظام المحاولة الواحدة — فشل الكود HTTP 422
{
  "successful": false,
  "game": "ff",
  "category": 1,
  "category_value": "110",
  "player_id": "51709255708",
  "mode": "single_attempt",
  "failed_code": "BAD1-0001",
  "reason": "الكود مستخدم مسبقاً",
  "error_code": "CODE_USED",
  "error": "الكود مستخدم مسبقاً"
}
المخزون فارغ HTTP 409
{
  "successful": false,
  "game": "ff",
  "category": 1,
  "player_id": "51709255708",
  "mode": "auto_retry",
  "error_code": "STOCK_EMPTY",
  "error": "لا يوجد مخزون متاح في هذه الفئة",
  "failed_codes": [
    {
      "code": "BAD1-0001",
      "error_code": "CODE_USED",
      "reason": "الكود مستخدم مسبقاً"
    }
  ]
}
الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
categoryرقمنعمرمز الفئة (1، 2، 3…) حسب الجدول أعلاه
player_idنص (أرقام)نعمآيدي اللاعب داخل اللعبة
curl -X POST "https://api.devtechnobots.com/api/v1/ff/stock/redeem?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"category": 1, "player_id": "51709255708"}'
curl "https://api.devtechnobots.com/api/v1/ff/stock/redeem?api_token=YOUR_TOKEN&category=1&player_id=51709255708"
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/ff/stock/redeem",
    params={"api_token": "YOUR_TOKEN"},
    json={"category": 1, "player_id": "51709255708"},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/ff/stock/redeem?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({"category": 1, "player_id": "51709255708"}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "game": "ff",
  "category": 1,
  "category_value": "110",
  "player_id": "51709255708",
  "mode": "auto_retry",
  "code": "XXXX-XXXX-XXXX",
  "name": "PlayerName",
  "product_name": "110 Diamonds",
  "amount": 60,
  "took_ms": 3120,
  "failed_codes": [
    {
      "code": "BAD1-0001",
      "error_code": "CODE_USED",
      "reason": "الكود مستخدم مسبقاً"
    }
  ]
}
رد فاشل HTTP 409
{
  "successful": false,
  "game": "ff",
  "category": 1,
  "category_value": "110",
  "player_id": "51709255708",
  "mode": "single_attempt",
  "failed_code": "BAD1-0001",
  "reason": "الكود مستخدم مسبقاً",
  "error_code": "CODE_USED",
  "error": "الكود مستخدم مسبقاً"
}
POST/stock/addمجاني

إدخال أكواد للمخزون — PUBG Mobile

يضيف أكواداً إلى فئة في مخزونك ويعيد تقريراً: كم نجح، كم فشل، وأي كود فشل وسببه.

صيغتان للأكواد: نص بفواصل أو أسطر "AAAA-0001,BBBB-0002" أو مصفوفة JSON تحت بعض. أسباب الفشل: INVALID_FORMAT صيغة غلط، ALREADY_EXISTS موجود مسبقاً، DUPLICATE_IN_REQUEST مكرر في نفس الطلب، STOCK_LIMIT تجاوز 50000 كود.
إدخال بمصفوفة JSON (مثال) HTTP 200
{
  "category": 1,
  "codes": [
    "AAAA-0001",
    "BBBB-0002",
    "CCCC-0003"
  ]
}
الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
categoryرقمنعمرمز الفئة (1، 2، 3…) حسب الجدول أعلاه
codesنص أو مصفوفةنعمالأكواد: نص تفصل بينها فواصل أو أسطر أو مسافات، أو مصفوفة JSON. أرقام وحروف إنجليزية وشرطة فقط، حتى 1000 كود في الطلب
curl -X POST "https://api.devtechnobots.com/api/v1/stock/add?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"category": 1, "codes": "AAAA-0001,BBBB-0002\nCCCC-0003"}'
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/stock/add",
    params={"api_token": "YOUR_TOKEN"},
    json={"category": 1, "codes": "AAAA-0001,BBBB-0002\nCCCC-0003"},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/stock/add?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({"category": 1, "codes": "AAAA-0001,BBBB-0002\nCCCC-0003"}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "game": "pubg",
  "category": 1,
  "category_value": "60",
  "total": 4,
  "succeeded": 2,
  "failed": 2,
  "partial": true,
  "failed_codes": [
    {
      "code": "AAAA-0001",
      "reason": "ALREADY_EXISTS",
      "reason_ar": "موجود مسبقاً في مخزونك"
    },
    {
      "code": "bad!code",
      "reason": "INVALID_FORMAT",
      "reason_ar": "صيغة الكود غير صحيحة (أرقام وحروف وشرطة فقط، 4-64 خانة)"
    }
  ]
}
رد فاشل HTTP 422
{
  "successful": false,
  "game": "pubg",
  "category": 1,
  "total": 1,
  "succeeded": 0,
  "failed": 1,
  "failed_codes": [
    {
      "code": "bad!code",
      "reason": "INVALID_FORMAT",
      "reason_ar": "صيغة الكود غير صحيحة"
    }
  ],
  "error_code": "NO_CODES_PROCESSED",
  "error": "لم تُعالَج أي أكواد بنجاح"
}
POST/stock/withdrawمجاني

سحب أكواد من المخزون — PUBG Mobile

يسحب أكواداً محددة من فئة معيّنة (تُحذف من مخزونك) ويعيد تقريراً بالنجاح والفشل وأسبابه.

السحب يحذف الأكواد من مخزونك. أسباب الفشل: NOT_AVAILABLE غير موجود/غير متوفر بهذه الفئة، ALREADY_USED مستبدل مسبقاً، INVALID_FORMAT صيغة غلط، IN_USE قيد الاستخدام لحظياً.
سحب بالعدد: أرسل count بدل codes لسحب أول N كوداً متاحاً وإرجاعها في codes.
سحب بالعدد: {"category": 1, "count": 3} HTTP 200
{
  "successful": true,
  "game": "pubg",
  "category": 1,
  "requested": 3,
  "succeeded": 3,
  "failed": 0,
  "codes": [
    "AAAA-0001",
    "BBBB-0002",
    "CCCC-0003"
  ],
  "failed_codes": []
}
الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
categoryرقمنعمرمز الفئة (1، 2، 3…) حسب الجدول أعلاه
codesنص أو مصفوفةلاالأكواد المراد سحبها (أو استخدم count)
countرقملاعدد الأكواد المراد سحبها تلقائياً (بدل codes)
curl -X POST "https://api.devtechnobots.com/api/v1/stock/withdraw?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"category": 1, "codes": "AAAA-0001,BBBB-0002,ZZZZ-9999"}'
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/stock/withdraw",
    params={"api_token": "YOUR_TOKEN"},
    json={"category": 1, "codes": "AAAA-0001,BBBB-0002,ZZZZ-9999"},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/stock/withdraw?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({"category": 1, "codes": "AAAA-0001,BBBB-0002,ZZZZ-9999"}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "game": "pubg",
  "category": 1,
  "category_value": "60",
  "total": 3,
  "succeeded": 2,
  "failed": 1,
  "withdrawn_count": 2,
  "partial": true,
  "failed_codes": [
    {
      "code": "ZZZZ-9999",
      "reason": "NOT_AVAILABLE",
      "reason_ar": "غير متوفر في هذه الفئة من مخزونك"
    }
  ]
}
رد فاشل HTTP 422
{
  "successful": false,
  "game": "pubg",
  "category": 1,
  "total": 1,
  "succeeded": 0,
  "failed": 1,
  "failed_codes": [
    {
      "code": "ZZZZ-9999",
      "reason": "NOT_AVAILABLE",
      "reason_ar": "غير متوفر في هذه الفئة من مخزونك"
    }
  ],
  "error_code": "NO_CODES_PROCESSED",
  "error": "لم تُعالَج أي أكواد بنجاح"
}
POST/ff/stock/addمجاني

إدخال أكواد للمخزون — Free Fire

يضيف أكواداً إلى فئة في مخزونك ويعيد تقريراً: كم نجح، كم فشل، وأي كود فشل وسببه.

صيغتان للأكواد: نص بفواصل أو أسطر "AAAA-0001,BBBB-0002" أو مصفوفة JSON تحت بعض. أسباب الفشل: INVALID_FORMAT صيغة غلط، ALREADY_EXISTS موجود مسبقاً، DUPLICATE_IN_REQUEST مكرر في نفس الطلب، STOCK_LIMIT تجاوز 50000 كود.
إدخال بمصفوفة JSON (مثال) HTTP 200
{
  "category": 1,
  "codes": [
    "AAAA-0001",
    "BBBB-0002",
    "CCCC-0003"
  ]
}
الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
categoryرقمنعمرمز الفئة (1، 2، 3…) حسب الجدول أعلاه
codesنص أو مصفوفةنعمالأكواد: نص تفصل بينها فواصل أو أسطر أو مسافات، أو مصفوفة JSON. أرقام وحروف إنجليزية وشرطة فقط، حتى 1000 كود في الطلب
curl -X POST "https://api.devtechnobots.com/api/v1/ff/stock/add?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"category": 1, "codes": "AAAA-0001,BBBB-0002\nCCCC-0003"}'
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/ff/stock/add",
    params={"api_token": "YOUR_TOKEN"},
    json={"category": 1, "codes": "AAAA-0001,BBBB-0002\nCCCC-0003"},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/ff/stock/add?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({"category": 1, "codes": "AAAA-0001,BBBB-0002\nCCCC-0003"}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "game": "ff",
  "category": 1,
  "category_value": "110",
  "total": 4,
  "succeeded": 2,
  "failed": 2,
  "partial": true,
  "failed_codes": [
    {
      "code": "AAAA-0001",
      "reason": "ALREADY_EXISTS",
      "reason_ar": "موجود مسبقاً في مخزونك"
    },
    {
      "code": "bad!code",
      "reason": "INVALID_FORMAT",
      "reason_ar": "صيغة الكود غير صحيحة (أرقام وحروف وشرطة فقط، 4-64 خانة)"
    }
  ]
}
رد فاشل HTTP 422
{
  "successful": false,
  "game": "ff",
  "category": 1,
  "total": 1,
  "succeeded": 0,
  "failed": 1,
  "failed_codes": [
    {
      "code": "bad!code",
      "reason": "INVALID_FORMAT",
      "reason_ar": "صيغة الكود غير صحيحة"
    }
  ],
  "error_code": "NO_CODES_PROCESSED",
  "error": "لم تُعالَج أي أكواد بنجاح"
}
POST/ff/stock/withdrawمجاني

سحب أكواد من المخزون — Free Fire

يسحب أكواداً محددة من فئة معيّنة (تُحذف من مخزونك) ويعيد تقريراً بالنجاح والفشل وأسبابه.

السحب يحذف الأكواد من مخزونك. أسباب الفشل: NOT_AVAILABLE غير موجود/غير متوفر بهذه الفئة، ALREADY_USED مستبدل مسبقاً، INVALID_FORMAT صيغة غلط، IN_USE قيد الاستخدام لحظياً.
سحب بالعدد: أرسل count بدل codes لسحب أول N كوداً متاحاً وإرجاعها في codes.
سحب بالعدد: {"category": 1, "count": 3} HTTP 200
{
  "successful": true,
  "game": "ff",
  "category": 1,
  "requested": 3,
  "succeeded": 3,
  "failed": 0,
  "codes": [
    "AAAA-0001",
    "BBBB-0002",
    "CCCC-0003"
  ],
  "failed_codes": []
}
الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
categoryرقمنعمرمز الفئة (1، 2، 3…) حسب الجدول أعلاه
codesنص أو مصفوفةلاالأكواد المراد سحبها (أو استخدم count)
countرقملاعدد الأكواد المراد سحبها تلقائياً (بدل codes)
curl -X POST "https://api.devtechnobots.com/api/v1/ff/stock/withdraw?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"category": 1, "codes": "AAAA-0001,BBBB-0002,ZZZZ-9999"}'
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/ff/stock/withdraw",
    params={"api_token": "YOUR_TOKEN"},
    json={"category": 1, "codes": "AAAA-0001,BBBB-0002,ZZZZ-9999"},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/ff/stock/withdraw?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({"category": 1, "codes": "AAAA-0001,BBBB-0002,ZZZZ-9999"}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "game": "ff",
  "category": 1,
  "category_value": "110",
  "total": 3,
  "succeeded": 2,
  "failed": 1,
  "withdrawn_count": 2,
  "partial": true,
  "failed_codes": [
    {
      "code": "ZZZZ-9999",
      "reason": "NOT_AVAILABLE",
      "reason_ar": "غير متوفر في هذه الفئة من مخزونك"
    }
  ]
}
رد فاشل HTTP 422
{
  "successful": false,
  "game": "ff",
  "category": 1,
  "total": 1,
  "succeeded": 0,
  "failed": 1,
  "failed_codes": [
    {
      "code": "ZZZZ-9999",
      "reason": "NOT_AVAILABLE",
      "reason_ar": "غير متوفر في هذه الفئة من مخزونك"
    }
  ],
  "error_code": "NO_CODES_PROCESSED",
  "error": "لم تُعالَج أي أكواد بنجاح"
}
POSTGET/stock/categoriesمجاني

الفئات وأرصدة المخزون

يعيد رموز الفئات وعدد الأكواد (متاح/مستبدل/فاشل) للعبتين، والنظام الحالي mode.

الحقلالنوعمطلوبالوصف
api_tokenنصنعممفتاحك (يمكن إرساله بالـ Query أو بالـ JSON أو بالترويسة)
curl -X POST "https://api.devtechnobots.com/api/v1/stock/categories?api_token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
curl "https://api.devtechnobots.com/api/v1/stock/categories?api_token=YOUR_TOKEN&"
import requests

r = requests.post(
    "https://api.devtechnobots.com/api/v1/stock/categories",
    params={"api_token": "YOUR_TOKEN"},
    json={},
    timeout=40,
)
print(r.json())
const res = await fetch("https://api.devtechnobots.com/api/v1/stock/categories?api_token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({}),
});
console.log(await res.json());
رد ناجح HTTP 200
{
  "successful": true,
  "mode": "auto_retry",
  "pubg": [
    {
      "category": 1,
      "value": "60",
      "available": 12,
      "used": 30,
      "failed": 2
    }
  ],
  "ff": [
    {
      "category": 1,
      "value": "110",
      "available": 5,
      "used": 8,
      "failed": 0
    }
  ]
}
رد فاشل HTTP 401
{
  "successful": false,
  "error_code": "INVALID_TOKEN",
  "error": "مفتاح API غير صحيح أو ملغى"
}

حالة الحساب

GETPOST/accountمجاني

يعرض خطتك واستهلاكك الحالي وموعد التجديد، ولا يستهلك من حدّك اليومي.

curl "https://api.devtechnobots.com/api/v1/account?api_token=YOUR_TOKEN"
رد ناجح
{
  "successful": true,
  "status": "active",
  "plan": "Pro",
  "daily_limit": 500,
  "used_today": 12.5,
  "remaining_today": 487.5,
  "resets_at": "2026-02-01T10:00:00Z",
  "expires_at": "2026-02-28T10:00:00Z"
}

رموز الأخطاء

الرد الناجح دائماً HTTP 200، وأي خطأ يعيد HTTP مختلفاً (4xx للأخطاء منك أو من الكود، 5xx لمشاكل مؤقتة). كل رد فاشل يحمل error_code ثابت (للبرمجة) و error بالعربية (للعرض)، وأحياناً detail بالسبب الأصلي من المزوّد عندما يكون غير مصنَّف.

المصادقة والحساب

error_codeHTTPالمعنىما العمل
INVALID_TOKEN401مفتاح API غير صحيح أو ملغىتأكد من المفتاح أو ولّد مفتاحاً جديداً من البوت
ACCOUNT_DISABLED403الحساب غير مفعّل، تواصل مع الإدارةتواصل مع الإدارة لتفعيل الـ API
ACCOUNT_EXPIRED403انتهى اشتراكك، جدّده من البوتجدّد الخطة من البوت (خطتي ← تمديد)
REQUESTS_LIMIT429وصلت حدّك اليومي من الطلبات، يتجدد كل 24 ساعةانتظر موعد التجديد (الترويسة X-RateLimit-Reset) أو رقِّ الخطة
SERVICE_UNAVAILABLE503الخدمة متوقفة مؤقتاًحاول لاحقاً

التحقق من الطلب

error_codeHTTPالمعنىما العمل
INVALID_REQUEST400طلب غير صالح: تحقق من الحقول المطلوبةأرسل الحقول المطلوبة بالصيغة الصحيحة
INVALID_PLAYER_ID400آيدي اللاعب يجب أن يكون أرقاماً فقطأرسل أرقاماً فقط

أخطاء الكود

error_codeHTTPالمعنىما العمل
INVALID_CODE422الكود غير صالح أو منتهي الصلاحيةتحقق من الكود. لا تعِد المحاولة بنفس الكود
CODE_USED409الكود مستخدم مسبقاًالكود محروق، لا تعد المحاولة
CODE_EXPIRED410انتهت صلاحية الكودالكود منتهي
CODE_NOT_FOUND404الكود غير موجود أو خاطئتأكد من كتابة الكود
CODE_REGION_MISMATCH422الكود غير مخصص لمنطقة هذا الحساباستخدم كوداً مناسباً لمنطقة الحساب

المخزون عبر API

error_codeHTTPالمعنىما العمل
INVALID_CATEGORY400رمز الفئة غير صحيحاستخدم رمز فئة صحيحاً (1..n) من الجدول
INVALID_CODES400حقل الأكواد غير صالح: أرسل نصاً (أرقام وحروف وشرطة فقط) أو مصفوفة JSONأرسل نصاً أو مصفوفة JSON بأرقام وحروف وشرطة فقط
STOCK_EMPTY409لا يوجد مخزون متاح في هذه الفئةأضف أكواداً لهذه الفئة عبر /stock/add
TOO_MANY_FAILURES409فشلت عدة أكواد متتالية فتوقّف النظام لحماية مخزونكراجع failed_codes ونظّف مخزونك
NO_CODES_PROCESSED422لم تُعالَج أي أكواد بنجاحراجع failed_codes لمعرفة سبب كل كود
PAYLOAD_TOO_LARGE413الطلب كبير جداًقسّم الأكواد على عدة طلبات

أخطاء اللاعب

error_codeHTTPالمعنىما العمل
CHARACTER_NOT_FOUND404اللاعب غير موجود، تأكد من صحة الآيديتأكد من آيدي اللاعب
PLAYER_BANNED403حساب اللاعب محظورلا يمكن الشحن لهذا الحساب

مشاكل مؤقتة (لا تُحتسب من حدّك)

error_codeHTTPالمعنىما العمل
RISK_CONTROL403رُفضت العملية بسبب إجراءات الحماية، حاول لاحقاًأعد المحاولة بعد قليل. الكود لم يُستهلك
LOGIN_FAILED502فشل تسجيل الدخول لدى المزوّد، حاول مرة أخرىأعد المحاولة بعد قليل. الكود لم يُستهلك
NO_CODES_AVAILABLE503لا توجد أكواد متاحة لدى المزوّد حالياًأعد المحاولة بعد قليل. الكود لم يُستهلك
NO_ACCOUNTS_AVAILABLE503الخدمة غير متاحة حالياًأعد المحاولة بعد قليل. الكود لم يُستهلك
INVALID_ACTIVATION_RESPONSE502رد غير صالح من المزوّد، أعد المحاولةأعد المحاولة بعد قليل. الكود لم يُستهلك
PROVIDER_AUTH502مشكلة في ربط المزوّد، تواصل مع الإدارةمشكلة عندنا، تواصل مع الإدارة
SERVER_BUSY503السيرفر مشغول حالياً، حاول بعد قليلأعد المحاولة بعد قليل. الكود لم يُستهلك
SERVER_DOWN503السيرفر غير متاح حالياًأعد المحاولة بعد قليل. الكود لم يُستهلك
TIMEOUT504انتهت مهلة الاتصال بالمزوّدأعد المحاولة بعد قليل. الكود لم يُستهلك
NETWORK_ERROR502خطأ في الاتصال بالشبكةأعد المحاولة بعد قليل. الكود لم يُستهلك
UNKNOWN_ERROR502خطأ غير معروف من المزوّدالسبب الحقيقي يظهر في الحقل detail