> ## 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.

# Lister les Recharges Mobiles

> Obtenir une liste paginée des transactions de recharge mobile

## Vue d'Ensemble

Retourne une liste paginée de toutes les transactions de recharge mobile de votre compte avec filtrage optionnel par date.

## Paramètres de Requête

<ParamField query="page" type="integer" default={1}>
  Numéro de page (minimum : 1)
</ParamField>

<ParamField query="pageSize" type="integer" default={20}>
  Éléments par page (minimum : 1, maximum : 100)
</ParamField>

<ParamField query="from" type="string">
  Filtre de date de début (ISO 8601 : `2025-10-01T00:00:00Z`)
</ParamField>

<ParamField query="to" type="string">
  Filtre de date de fin (ISO 8601 : `2025-10-31T23:59:59Z`)
</ParamField>

<Note>
  Les paramètres `from` et `to` doivent être fournis ensemble lors du filtrage par date.
</Note>

## Réponse

<ResponseField name="success" type="boolean" required>
  Indique si la requête a réussi
</ResponseField>

<ResponseField name="data" type="object" required>
  <Expandable title="properties">
    <ResponseField name="items" type="array" required>
      Tableau d'objets de recharge avec tous les détails, y compris le statut et les montants
    </ResponseField>

    <ResponseField name="pagination" type="object" required>
      <Expandable title="properties">
        <ResponseField name="page" type="integer">
          Numéro de page actuel
        </ResponseField>

        <ResponseField name="pageSize" type="integer">
          Nombre d'éléments par page
        </ResponseField>

        <ResponseField name="totalPages" type="integer">
          Nombre total de pages
        </ResponseField>

        <ResponseField name="totalResults" type="integer">
          Nombre total de recharges
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta" type="object" required>
  <Expandable title="properties">
    <ResponseField name="timestamp" type="string">
      Horodatage de la réponse au format ISO 8601
    </ResponseField>
  </Expandable>
</ResponseField>

## Exemples

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.oneclickdz.com/v3/mobile/list?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/list?page=1&pageSize=20",
    { headers: { "X-Access-Token": "YOUR_API_KEY" } }
  );
  const { data } = await response.json();
  console.log(data.items, data.pagination);
  ```

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

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

### Exemple de Réponse

```json theme={null}
{
  "success": true,
  "data": {
    "items": [
      {
        "ref": "API-+213665983439-test-1761698196315-suggest",
        "status": "REFUNDED",
        "plan_code": "PREPAID_DJEZZY",
        "MSSIDN": "0600000002",
        "topup_amount": 500,
        "balance_amount": 0,
        "created_at": "2025-10-29T00:36:36.385Z",
        "_id": "69016194e9e88196b4eb64ce",
        "refund_message": "هذا رقم الهاتف لا يقبل العرض المرسل، الرجاء إرسال أحد العروض التالية",
        "suggested_offers": [
          {
            "typename": "📋 FACTURE | فاتورة",
            "plan_code": "FACTURE_DJEZZY",
            "amount": 500
          }
        ]
      },
      {
        "ref": "API-+213665983439-test-1761698159224-success",
        "status": "FULFILLED",
        "plan_code": "PREPAID_DJEZZY",
        "MSSIDN": "0778037340",
        "topup_amount": 500,
        "balance_amount": 0,
        "created_at": "2025-10-29T00:35:59.378Z",
        "_id": "6901616fe9e88196b4eb64b0"
      }
    ],
    "pagination": {
      "page": 1,
      "pageSize": 5,
      "totalPages": 72,
      "totalResults": 358
    }
  },
  "meta": {
    "timestamp": "2025-10-29T00:36:47.159Z"
  }
}
```

## Cas d'Utilisation

<CardGroup cols={2}>
  <Card title="Historique des Transactions" icon="clock-rotate-left">
    Affichez l'historique des recharges aux utilisateurs
  </Card>

  <Card title="Rapports et Analytiques" icon="chart-line">
    Générez des rapports de ventes et des statistiques
  </Card>

  <Card title="Réconciliation" icon="scale-balanced">
    Vérifiez les transactions et les variations de solde
  </Card>

  <Card title="Support Client" icon="headset">
    Recherchez les transactions des utilisateurs pour le support
  </Card>
</CardGroup>

## Exemples de Filtrage

### Par Plage de Dates

<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>

### Filtrage Côté Client

```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;
```

## Bonnes Pratiques

<AccordionGroup>
  <Accordion title="Pagination Efficace">
    * Utilisez des tailles de page raisonnables (20 à 50 éléments)
    * Mettez les résultats en cache si possible
    * Implémentez "Charger Plus" ou le défilement infini
    * Utilisez `pagination.totalPages` pour déterminer s'il y a d'autres pages
  </Accordion>

  {" "}

  <Accordion title="Filtrage par Date">
    * Fournissez toujours les paramètres `from` et `to` ensemble - Utilisez le format ISO 8601 correct - Tenez compte du fuseau horaire de l'utilisateur lors du filtrage - Définissez des plages de dates raisonnables pour les performances
  </Accordion>

  {" "}

  <Accordion title="Performance">
    * Mettez en cache les données de liste pendant de courtes périodes - Utilisez des filtres de date pour limiter les ensembles de résultats -
      Évitez de récupérer toutes les pages à la fois - Indexez par created\_at dans votre base de données locale
  </Accordion>

  <Accordion title="Affichage aux Utilisateurs">
    * Affichez le statut avec des icônes/couleurs
    * Formatez les horodatages dans le fuseau horaire local
    * Affichez les logos des opérateurs
    * Liez vers des pages de statut détaillées
    * Affichez la raison du remboursement pour les recharges échouées
  </Accordion>
</AccordionGroup>

## Endpoints Associés

<CardGroup cols={3}>
  <Card title="Envoyer une Recharge" icon="paper-plane" href="/fr/api-reference/mobile/send-topup">
    Créer une nouvelle recharge
  </Card>

  <Card title="Vérifier le Statut" icon="magnifying-glass" href="/fr/api-reference/mobile/check-by-ref">
    Suivre une recharge spécifique
  </Card>

  <Card title="Lister les Forfaits" icon="list" href="/fr/api-reference/mobile/list-plans">
    Voir les forfaits disponibles
  </Card>
</CardGroup>
