> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oneclickdz.com/llms.txt
> Use this file to discover all available pages before exploring further.

# قائمة عمليات الشحن المحمول

> الحصول على قائمة مرقّمة بمعاملات شحن الهاتف المحمول

<div dir="rtl">
  ## نظرة عامة

  يُرجع قائمة مرقّمة بجميع عمليات شحن الهاتف المحمول، مرتبةً من الأحدث إلى الأقدم.

  ## معلمات الاستعلام

  <ParamField query="page" type="integer" default={1}>
    رقم الصفحة (الحد الأدنى: 1)
  </ParamField>

  <ParamField query="pageSize" type="integer" default={20}>
    عدد العناصر في الصفحة (الحد الأدنى: 1، الحد الأقصى: 100)
  </ParamField>

  ## الاستجابة

  <ResponseField name="success" type="boolean" required>
    يشير إلى نجاح الطلب
  </ResponseField>

  <ResponseField name="data" type="object" required>
    <Expandable title="properties">
      <ResponseField name="items" type="array" required>
        مصفوفة من كائنات الشحن

        <Expandable title="Topup object">
          <ResponseField name="_id" type="string">
            معرّف الشحن الداخلي
          </ResponseField>

          <ResponseField name="ref" type="string">
            مرجعك الداخلي (إذا أُوفِّر عند الإرسال)
          </ResponseField>

          <ResponseField name="status" type="string">
            الحالة الحالية للشحن: `PENDING`، `SUCCESS`، `FAILED`، `UNKNOWN_ERROR`
          </ResponseField>

          <ResponseField name="MSSIDN" type="string">
            رقم الهاتف الذي تم شحنه
          </ResponseField>

          <ResponseField name="operator" type="string">
            مشغّل الشبكة: `Mobilis`، `Djezzy`، أو `Ooredoo`
          </ResponseField>

          <ResponseField name="planCode" type="string">
            رمز الخطة المستخدمة
          </ResponseField>

          <ResponseField name="planName" type="string">
            الاسم المقروء للخطة
          </ResponseField>

          <ResponseField name="amount" type="number">
            مبلغ الشحن بالدينار الجزائري
          </ResponseField>

          <ResponseField name="cost" type="number">
            التكلفة الفعلية من رصيدك
          </ResponseField>

          <ResponseField name="createdAt" type="string">
            طابع زمني للإنشاء (ISO 8601)
          </ResponseField>

          <ResponseField name="updatedAt" type="string">
            طابع زمني لآخر تحديث للحالة (ISO 8601)
          </ResponseField>
        </Expandable>
      </ResponseField>

      <ResponseField name="pagination" type="object" required>
        <Expandable title="properties">
          <ResponseField name="page" type="integer">
            رقم الصفحة الحالية
          </ResponseField>

          <ResponseField name="pageSize" type="integer">
            عدد العناصر في الصفحة
          </ResponseField>

          <ResponseField name="totalPages" type="integer">
            العدد الإجمالي للصفحات
          </ResponseField>

          <ResponseField name="totalResults" type="integer">
            العدد الإجمالي للشحنات
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Expandable>
  </ResponseField>

  <ResponseField name="meta" type="object" required>
    <Expandable title="properties">
      <ResponseField name="timestamp" type="string">
        طابع زمني للاستجابة بتنسيق ISO 8601
      </ResponseField>
    </Expandable>
  </ResponseField>

  ## الأمثلة

  <CodeGroup>
    ```bash cURL theme={null}
    curl https://api.oneclickdz.com/v3/mobile/topups?page=1&pageSize=20 \
      -H "X-Access-Token: YOUR_API_KEY"
    ```

    ```javascript Node.js theme={null}
    const response = await fetch(
      "https://api.oneclickdz.com/v3/mobile/topups?page=1&pageSize=20",
      {
        headers: { "X-Access-Token": "YOUR_API_KEY" },
      }
    );
    const { data } = await response.json();
    const topups = data.items;
    const pagination = data.pagination;
    ```

    ```python Python theme={null}
    import requests

    response = requests.get(
        'https://api.oneclickdz.com/v3/mobile/topups',
        headers={'X-Access-Token': 'YOUR_API_KEY'},
        params={'page': 1, 'pageSize': 20}
    )
    data = response.json()['data']
    topups = data['items']
    pagination = data['pagination']
    ```

    ```php PHP theme={null}
    <?php
    $ch = curl_init('https://api.oneclickdz.com/v3/mobile/topups?page=1&pageSize=20');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-Access-Token: YOUR_API_KEY']);
    $data = json_decode(curl_exec($ch), true);
    $topups = $data['data']['items'];
    ?>
    ```
  </CodeGroup>

  ### مثال على الاستجابة

  ```json theme={null}
  {
    "success": true,
    "data": {
      "items": [
        {
          "_id": "6901616fe9e88196b4eb64b0",
          "ref": "order-001",
          "status": "SUCCESS",
          "MSSIDN": "0776543210",
          "operator": "Djezzy",
          "planCode": "PREPAID_DJEZZY",
          "planName": "📱 PREPAID | عادي",
          "amount": 500,
          "cost": 496.25,
          "createdAt": "2025-10-29T00:35:59.454Z",
          "updatedAt": "2025-10-29T00:36:05.123Z"
        },
        {
          "_id": "68fe2cdd51bc170608683e3a",
          "ref": "order-002",
          "status": "SUCCESS",
          "MSSIDN": "0554926570",
          "operator": "Ooredoo",
          "planCode": "MIX1000_OOREDOO",
          "planName": "📱🌐 AUTO | MIX 1000",
          "amount": 1000,
          "cost": 990,
          "createdAt": "2025-10-26T14:14:53.074Z",
          "updatedAt": "2025-10-26T14:15:02.891Z"
        }
      ],
      "pagination": {
        "page": 1,
        "pageSize": 20,
        "totalPages": 15,
        "totalResults": 293
      }
    },
    "meta": {
      "timestamp": "2025-10-29T00:35:58.710Z"
    }
  }
  ```

  ## حالات الاستخدام

  <CardGroup cols={2}>
    <Card title="سجل الطلبات" icon="clock">
      اعرض سجل الشحن للمستخدمين في تطبيقك
    </Card>

    <Card title="متابعة الطلبات المعلّقة" icon="hourglass-half">
      ابحث عن الشحنات ذات الحالة `PENDING` أو `UNKNOWN_ERROR` لمتابعتها
    </Card>

    <Card title="التقارير" icon="chart-bar">
      أنشئ تقارير المبيعات والتشغيل
    </Card>

    <Card title="التدقيق" icon="clipboard-check">
      راجع جميع العمليات لأغراض المحاسبة
    </Card>
  </CardGroup>

  ## متابعة الطلبات المعلّقة

  ```javascript theme={null}
  async function followUpPendingTopUps() {
    const response = await fetch(
      "https://api.oneclickdz.com/v3/mobile/topups?page=1&pageSize=100",
      {
        headers: { "X-Access-Token": API_KEY },
      }
    );

    const { data } = await response.json();
    const pendingTopUps = data.items.filter(
      (t) => t.status === "PENDING" || t.status === "UNKNOWN_ERROR"
    );

    for (const topup of pendingTopUps) {
      const checkResponse = await fetch(
        `https://api.oneclickdz.com/v3/mobile/topup/${topup._id}`,
        {
          headers: { "X-Access-Token": API_KEY },
        }
      );

      const checkData = await checkResponse.json();
      await updateLocalOrderStatus(topup._id, checkData.data.status);
    }
  }
  ```

  ## أمثلة على التصفية

  ### حسب النطاق الزمني

  <CodeGroup>
    ```bash cURL theme={null}
    curl "https://api.oneclickdz.com/v3/mobile/list?from=2025-10-01T00:00:00Z&to=2025-10-31T23:59:59Z" \
      -H "X-Access-Token: YOUR_API_KEY"
    ```

    ```javascript Node.js theme={null}
    const from = "2025-10-01T00:00:00Z";
    const to = "2025-10-31T23:59:59Z";

    const response = await fetch(
      `https://api.oneclickdz.com/v3/mobile/list?from=${from}&to=${to}`,
      { headers: { "X-Access-Token": "YOUR_API_KEY" } }
    );
    ```

    ```python Python theme={null}
    response = requests.get(
        'https://api.oneclickdz.com/v3/mobile/list',
        headers={'X-Access-Token': 'YOUR_API_KEY'},
        params={
            'from': '2025-10-01T00:00:00Z',
            'to': '2025-10-31T23:59:59Z',
            'page': 1,
            'pageSize': 50
        }
    )
    ```
  </CodeGroup>

  ### التصفية من جهة العميل

  ```javascript theme={null}
  const { items } = data;

  // Filter by status
  const fulfilled = items.filter((t) => t.status === "FULFILLED");
  const refunded = items.filter((t) => t.status === "REFUNDED");

  // Filter by operator
  const djezzy = items.filter((t) => t.plan_code.includes("DJEZZY"));

  // Filter by amount range
  const large = items.filter((t) => t.topup_amount >= 1000);

  // Calculate totals
  const totalAmount = items.reduce((sum, t) => sum + t.topup_amount, 0);
  const totalCost = items.reduce((sum, t) => sum + t.balance_amount, 0);
  const profit = totalAmount - totalCost;
  ```

  ## أفضل الممارسات

  <AccordionGroup>
    <Accordion title="الترقيم الكفء">
      * استخدم أحجام صفحات معقولة (20-50 عنصرًا)
      * خزّن النتائج مؤقتاً عند الإمكان
      * نفّذ "تحميل المزيد" أو التمرير اللانهائي
      * استخدم `pagination.totalPages` لتحديد ما إذا كانت هناك صفحات إضافية
    </Accordion>

    <Accordion title="التصفية بالتاريخ">
      * وفّر دائماً كلاً من `from` و`to`
      * استخدم تنسيق ISO 8601 الصحيح
      * ضع في اعتبارك المنطقة الزمنية للمستخدم عند التصفية
      * حدّد نطاقات تاريخ معقولة للأداء الأمثل
    </Accordion>

    <Accordion title="الأداء">
      * خزّن بيانات القائمة مؤقتاً لفترات قصيرة
      * استخدم مرشحات التاريخ للحدّ من مجموعات النتائج
      * تجنّب جلب جميع الصفحات دفعة واحدة
      * أنشئ فهرساً باستخدام created\_at في قاعدة بياناتك المحلية
    </Accordion>

    <Accordion title="العرض للمستخدمين">
      * اعرض الحالة مع أيقونات/ألوان
      * نسّق الطوابع الزمنية بالمنطقة الزمنية المحلية
      * اعرض شعارات المشغّلين
      * اربط بصفحات الحالة التفصيلية
      * اعرض سبب الاسترداد للشحنات الفاشلة
    </Accordion>
  </AccordionGroup>

  ## Endpoints ذات الصلة

  <CardGroup cols={3}>
    <Card title="إرسال الشحن" icon="paper-plane" href="/ar/api-reference/mobile/send-topup">
      إرسال شحن هاتف محمول
    </Card>

    <Card title="التحقق من الحالة بالمرجع" icon="magnifying-glass" href="/ar/api-reference/mobile/check-by-ref">
      البحث بالمرجع الداخلي
    </Card>

    <Card title="قائمة الخطط" icon="list" href="/ar/api-reference/mobile/list-plans">
      عرض الخطط المتاحة
    </Card>
  </CardGroup>
</div>
