OG Accounts
SA
ر.س
إنشاء حساب
REST API · v2

واجهة API للموزعين

اطلب وتابع رصيدك واستلم طلباتك من لوحتك أو بوتك أو أي سكربت. نقطة اتصال واحدة، وأربعة أوامر، وردود بصيغة JSON.

POSThttps://ogsub.net/api/v2

البداية

  1. سجّل الدخول وافتح «مفاتيح API» وأنشئ مفتاحاً. يظهر المفتاح مرة واحدة فقط، فانسخه إلى خادمك فوراً.
  2. يمكنك قصر المفتاح على عناوين IP الخاصة بخادمك (حتى 20 عنواناً)، وأي طلب من عنوان آخر يُرفض.
  3. أرسل طلبات POST إلى نقطة الاتصال ومعها key وaction. يمكن تفعيل 5 مفاتيح كحد أقصى، وإلغاء أي منها في أي وقت.

صيغة الطلب

  • جسم الطلب: حقول نموذج (application/x-www-form-urlencoded) أو JSON مع Content-Type: application/json.
  • أرسل المفتاح داخل جسم الطلب وليس في الرابط. لا حاجة إلى cookies أو رمز CSRF.
  • الردود بصيغة JSON وباللغة الإنجليزية. المبالغ نصوص برقمين عشريين بالجنيه المصري (EGP) أياً كانت العملة المعروضة في الموقع.
  • الطلبات تُدفع من رصيد محفظتك، فاشحن رصيدك من الموقع قبل الطلب.

متوافقة مع عملاء Perfect Panel API v2 بنفس أسماء المعاملات (key وaction وservice وlink وquantity وorder وorders). الفروق: كل طلب وحدة واحدة (quantity = 1)، وrate هو سعر الطلب الواحد وليس لكل 1000، ولا يوجد refill أو cancel.

قائمة الخدمات

POSTaction=services

كل ما هو معروض للبيع بسعره الحالي. اجلبها قبل الطلب لأن الأسعار والتوفر يتغيران. فقط key وaction.

مثال

curl -X POST https://ogsub.net/api/v2 \
  -d key=ogk_your_api_key \
  -d action=services
الرد200 OK
[
    {
        "service": 12,
        "name": "ChatGPT Plus 1 Month",
        "type": "Default",
        "category": "ChatGPT",
        "rate": "350.00",
        "min": 1,
        "max": 1,
        "input": "email",
        "available": true,
        "refill": false,
        "cancel": false
    }
]

حقول الرد

الحقلالوصف
serviceرقم الخدمة الذي ترسله مع add.
nameاسم الخدمة (بالإنجليزية).
categoryالبراند أو القسم (بالإنجليزية).
rateسعر الطلب الواحد بالجنيه.
min maxدائماً 1: كل طلب وحدة واحدة.
inputما يجب إرساله في link عند الطلب: none أو email أو text.
availableتكون false أثناء إيقاف الخدمة مؤقتاً أو نفادها.
type refill cancelقيم ثابتة (Default وfalse وfalse) للتوافق مع Perfect Panel.

الرصيد

POSTaction=balance

رصيد محفظتك الحالي. فقط key وaction.

مثال

curl -X POST https://ogsub.net/api/v2 \
  -d key=ogk_your_api_key \
  -d action=balance
الرد200 OK
{
    "balance": "1250.00",
    "currency": "EGP"
}

حقول الرد

الحقلالوصف
balanceالرصيد بالجنيه.
currencyدائماً EGP.

إنشاء طلب

POSTaction=add

ينشئ طلباً واحداً ويخصم سعره من رصيدك فوراً.

المعاملات

المعاملإلزاميالوصف
serviceنعمرقم الخدمة من services.
linkحسب الخدمةما تحتاجه الخدمة حسب input: مع email أرسل بريد الحساب المطلوب تفعيله، ومع text البيانات المطلوبة (من 2 إلى 255 حرفاً)، ومع none لا ترسله.
quantityلالا ترسله أو أرسل 1.
Idempotency-Keyمستحسن رأس HTTPنص فريد لكل طلب حتى 64 حرفاً (مثل UUID). إرسال القيمة نفسها مرة أخرى يعيد الطلب نفسه بدلاً من إنشاء طلب ثانٍ وخصم ثانٍ.

مثال

curl -X POST https://ogsub.net/api/v2 \
  -H "Idempotency-Key: 3f9c2a7e-order-1042" \
  -d key=ogk_your_api_key \
  -d action=add \
  -d service=12 \
  --data-urlencode [email protected]
الرد200 OK
{
    "order": "OG4K7Q2XNM",
    "charge": "350.00",
    "currency": "EGP"
}

حقول الرد

الحقلالوصف
orderرقم الطلب. احتفظ به لمتابعة الحالة.
chargeالمبلغ المخصوم من رصيدك.
currencyدائماً EGP.

لا تُطبَّق الكوبونات على طلبات API.

حالة الطلب

POSTaction=status

طلب واحد عبر order أو حتى 100 طلب عبر orders. لا تظهر إلا طلباتك أنت.

المعاملات

المعاملإلزاميالوصف
orderنعمرقم طلب واحد.
ordersلاحتى 100 رقم طلب مفصولة بفواصل (بدلاً من order).

مثال

curl -X POST https://ogsub.net/api/v2 \
  -d key=ogk_your_api_key \
  -d action=status \
  -d order=OG4K7Q2XNM
الرد200 OK
{
    "status": "Completed",
    "charge": "350.00",
    "currency": "EGP",
    "created": "2026-10-24 18:05:11Z",
    "delivery": "Activated on [email protected]"
}

حقول الرد

الحقلالوصف
statusراجع جدول الحالات بالأسفل.
chargeالمبلغ المخصوم من رصيدك.
createdوقت إنشاء الطلب بتوقيت UTC (YYYY-MM-DD HH:MM:SSZ).
deliveryيظهر فقط مع Completed: ما تم تسليمه (غالباً بيانات دخول). تعامل معه كسرّ.

عدة طلبات مرة واحدة

مع orders يُعاد كل رقم مع نتيجته، والأرقام غير الموجودة تأخذ {"error": "Incorrect order ID"} دون أن يفشل الاستدعاء كله.

curl -X POST https://ogsub.net/api/v2 \
  -d key=ogk_your_api_key \
  -d action=status \
  -d orders=OG4K7Q2XNM,OG9P3D5WLA
الرد200 OK
{
    "OG4K7Q2XNM": {
        "status": "Completed",
        "charge": "350.00",
        "currency": "EGP",
        "created": "2026-10-24 18:05:11Z",
        "delivery": "Activated on [email protected]"
    },
    "OG9P3D5WLA": {
        "error": "Incorrect order ID"
    }
}

حالات الطلب

الحالةالمعنى
Pendingمدفوع وفي انتظار التنفيذ.
In progressجارٍ تجهيزه.
Completedتم التسليم، والتفاصيل في delivery.
Canceledلم يُسلَّم، وعاد المبلغ كاملاً إلى رصيدك.

الخدمات ذات التسليم التلقائي تكتمل عادةً خلال دقائق، والباقي ينفذه الفريق. تابع status للطلبات التي تنتظرها.

الأخطاء

عند الفشل يكون رمز HTTP خارج نطاق 2xx ومعه رسالة في error. افحص رمز الحالة أولاً.

رمز HTTPالمعنىأمثلة للرسائل
400الطلب ناقص أو غير صحيح.Unknown actionInvalid serviceQuantity must be 1Missing orderIncorrect order ID
401المفتاح غير مقبول.Invalid API keyIP address not allowed for this keyAccount disabled
403عنوان IP الخاص بك محظور من المتجر.
405الطلب ليس POST.
422لا يمكن تنفيذ الطلب الآن.Insufficient balance.This service is sold out for now.This service is temporarily unavailable.Enter a valid account email.Enter the required order details.Ordering is paused right now. Please check back soon.
429طلبات كثيرة. أبطئ وأعد المحاولة لاحقاً.Too many requests
500خطأ في الخادم. أعد المحاولة لاحقاً، وإن تكرر فأرسل قيمة ref إلى الدعم.Server error
الرد
HTTP/1.1 422 Unprocessable Entity

{
    "error": "Insufficient balance."
}

الحدود وإعادة المحاولة

  • 60 طلباً في الدقيقة لكل مفتاح و120 في الدقيقة لكل عنوان IP، وما زاد يُرد عليه بـ 429.
  • إذا انقطع الاتصال أو انتهت مهلة استدعاء add فأعد إرساله بنفس Idempotency-Key: ستحصل على الطلب الذي أُنشئ بالفعل دون خصم ثانٍ. وبدون هذا الرأس يُعد كل استدعاء طلباً جديداً.
  • تابع حتى 100 طلب في استدعاء status واحد بدلاً من استدعاء لكل طلب، وانتظر من 30 إلى 60 ثانية بين كل متابعة.

حماية المفتاح

  • المفتاح يصرف من رصيدك. استخدمه على خادمك فقط، وليس في تطبيق أو صفحة ويب أو مستودع عام.
  • اقصر المفتاح على عناوين IP الخاصة بخادمك متى أمكن.
  • إذا تسرّب فألغه من صفحة مفاتيح API وأنشئ غيره، والمفتاح القديم يتوقف فوراً.
  • delivery يحتوي ما اشتريته (غالباً بيانات دخول)، فاحفظه بعناية كلمة المرور.

مثال كامل لعميل API

يختار أول خدمة متاحة، ثم يطلبها، ثم ينتظر التسليم. نفس الخطوات متاحة بثلاث لغات، اختر لغتك من التبويبات.

<?php
const API = 'https://ogsub.net/api/v2';
const KEY = 'ogk_your_api_key'; // keep it on the server, e.g. in an environment variable

function og_api(array $params, array $headers = []): array
{
    $ch = curl_init(API);
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query(['key' => KEY] + $params),
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
    ]);
    $body = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
    $data = is_string($body) ? json_decode($body, true) : null;
    if ($code !== 200 || !is_array($data) || isset($data['error'])) {
        throw new RuntimeException('API ' . $code . ': ' . ($data['error'] ?? 'no answer'));
    }
    return $data;
}

// 1. Pick the first available service
$services = og_api(['action' => 'services']);
$service = current(array_filter($services, fn (array $s): bool => $s['available']));
if (!$service) {
    exit("Nothing available right now\n");
}
// "link" carries what the service's input asks for: nothing, the account email, or the details
$link = ['none' => '', 'email' => '[email protected]', 'text' => 'the details the service asks for'][$service['input']];

// 2. Order it. On a timeout, send the same Idempotency-Key again: never a second charge.
$idem = bin2hex(random_bytes(16));
$order = og_api(['action' => 'add', 'service' => $service['service'], 'link' => $link], ['Idempotency-Key: ' . $idem]);

// 3. Wait for the delivery
do {
    sleep(30);
    $status = og_api(['action' => 'status', 'order' => $order['order']]);
} while (in_array($status['status'], ['Pending', 'In progress'], true));

echo $status['status'] === 'Completed' ? $status['delivery'] : "Canceled: the charge is back in your balance\n";