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

# التحقق من صحة رمز الوصول

> التحقق من صحة مفتاح API الخاص بك والحصول على معلومات الحساب

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

  يتيح لك endpoint التحقق من الصحة التأكد من أن مفتاح API الخاص بك صالح واسترداد المعلومات المتعلقة بالحساب المرتبط وصلاحيات المفتاح.

  <Info>
    يُعدّ هذا endpoint مفيدًا للتحقق من صلاحية مفتاح API عند بدء تشغيل التطبيق
    أو بعد تدوير المفتاح.
  </Info>

  ## الاستجابة

  <ResponseField name="success" type="boolean" required>
    `true` إذا نجح التحقق
  </ResponseField>

  <ResponseField name="data" type="object" required>
    <Expandable title="properties">
      <ResponseField name="username" type="string">
        اسم المستخدم المرتبط بمفتاح API
      </ResponseField>

      <ResponseField name="apiKey" type="object">
        تفاصيل مفتاح API

        <Expandable title="properties">
          <ResponseField name="key" type="string">
            مفتاح API الخاص بك
          </ResponseField>

          <ResponseField name="isEnabled" type="boolean">
            ما إذا كان المفتاح نشطًا حاليًا
          </ResponseField>

          <ResponseField name="type" type="string">
            نوع المفتاح: `"SANDBOX"` أو `"PRODUCTION"`
          </ResponseField>

          <ResponseField name="allowedips" type="array">
            مصفوفة عناوين IP المسموح بها،
            مصفوفة فارغة `[]` تعني السماح لجميع عناوين IP.
          </ResponseField>

          <ResponseField name="scope" type="string">
            مستوى الوصول: `"READ-WRITE"` أو `"READ-ONLY"`
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Expandable>
  </ResponseField>

  ## مثال على الطلب

  <CodeGroup>
    ```bash cURL theme={null}
    curl --request GET \
      --url https://api.oneclickdz.com/v3/validate \
      --header 'X-Access-Token: YOUR_API_KEY'
    ```

    ```javascript Node.js theme={null}
    const response = await fetch("https://api.oneclickdz.com/v3/validate", {
      headers: {
        "X-Access-Token": process.env.ONECLICKDZ_API_KEY,
      },
    });

    const data = await response.json();

    if (data.success) {
      console.log("✓ API key is valid");
      console.log("Account:", data.data.username);
      console.log("Type:", data.data.apiKey.type);
    } else {
      console.error("✗ API key validation failed");
    }
    ```

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

    response = requests.get(
        'https://api.oneclickdz.com/v3/validate',
        headers={'X-Access-Token': os.getenv('ONECLICKDZ_API_KEY')}
    )

    data = response.json()

    if data['success']:
        print('✓ API key is valid')
        print(f"Account: {data['data']['username']}")
        print(f"Type: {data['data']['apiKey']['type']}")
    else:
        print('✗ API key validation failed')
    ```

    ```php PHP theme={null}
    <?php
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, 'https://api.oneclickdz.com/v3/validate');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'X-Access-Token: ' . getenv('ONECLICKDZ_API_KEY')
    ]);

    $response = curl_exec($ch);
    curl_close($ch);

    $data = json_decode($response, true);

    if ($data['success']) {
        echo "✓ API key is valid\n";
        echo "Account: " . $data['data']['username'] . "\n";
        echo "Type: " . $data['data']['apiKey']['type'] . "\n";
    } else {
        echo "✗ API key validation failed\n";
    }
    ?>
    ```
  </CodeGroup>

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

  ```json theme={null}
  {
    "success": true,
    "data": {
      "username": "+213665983439",
      "apiKey": {
        "key": "ea27b376-9f5c-4b09-883f-1b96cd7b541c",
        "isEnabled": true,
        "type": "SANDBOX",
        "allowedips": [],
        "scope": "READ-WRITE"
      }
    }
  }
  ```

  ## استجابات الخطأ

  <AccordionGroup>
    <Accordion title="400 - رمز الوصول مفقود">
      ```json theme={null}
      {
        "success": false,
        "error": {
          "code": "MISSING_ACCESS_TOKEN",
          "message": "Access token is required"
        },
        "requestId": "req_abc123"
      }
      ```
    </Accordion>

    <Accordion title="401 - رمز الوصول غير صالح">
      ```json theme={null}
      {
        "success": false,
        "error": {
          "code": "INVALID_ACCESS_TOKEN",
          "message": "The provided access token is invalid",
          "details": {
            "attemptsLeft": 3
          }
        },
        "requestId": "req_abc123"
      }
      ```

      <Warning>
        بعد 5 محاولات فاشلة، سيُحظر عنوان IP الخاص بك مؤقتًا لمدة 15 دقيقة.
      </Warning>
    </Accordion>

    <Accordion title="403 - IP محظور">
      ```json theme={null}
      {
        "success": false,
        "error": {
          "code": "IP_BLOCKED",
          "message": "Your IP has been temporarily blocked due to too many invalid attempts"
        },
        "requestId": "req_abc123"
      }
      ```
    </Accordion>
  </AccordionGroup>

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

  <CardGroup cols={2}>
    <Card title="التحقق عند بدء التشغيل" icon="rocket">
      تحقق من مفتاح API عند تهيئة التطبيق
    </Card>

    {" "}

    <Card title="فحوصات الصحة" icon="heart-pulse">
      أدرجه في روتينات فحص صحة التطبيق
    </Card>

    {" "}

    <Card title="التحقق من البيئة" icon="check-circle">
      تأكد من استخدام المفتاح الصحيح (sandbox مقابل الإنتاج)
    </Card>

    <Card title="التحقق من الصلاحيات" icon="shield-check">
      تحقق من نطاق المفتاح وصلاحياته قبل العمليات
    </Card>
  </CardGroup>

  ## مثال على التكامل

  ```javascript theme={null}
  class OneClickDzClient {
    constructor(apiKey) {
      this.apiKey = apiKey;
      this.baseUrl = "https://api.oneclickdz.com";
      this.validated = false;
    }

    async validate() {
      const response = await fetch(`${this.baseUrl}/v3/validate`, {
        headers: { "X-Access-Token": this.apiKey },
      });

      const data = await response.json();

      if (!data.success) {
        throw new Error(`API key validation failed: ${data.error.message}`);
      }

      this.username = data.data.username;
      this.keyType = data.data.apiKey.type;
      this.scope = data.data.apiKey.scope;
      this.validated = true;

      console.log(`✓ Authenticated as ${this.username} (${this.keyType})`);

      return data.data;
    }

    async request(endpoint, options = {}) {
      if (!this.validated) {
        await this.validate();
      }

      if (
        options.method &&
        options.method !== "GET" &&
        this.scope === "READ-ONLY"
      ) {
        throw new Error("This operation requires READ-WRITE access");
      }

      return fetch(`${this.baseUrl}${endpoint}`, {
        ...options,
        headers: {
          ...options.headers,
          "X-Access-Token": this.apiKey,
        },
      });
    }
  }

  // Usage
  const client = new OneClickDzClient(process.env.ONECLICKDZ_API_KEY);
  await client.validate();
  ```

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

  <AccordionGroup>
    <Accordion title="التحقق عند بدء التشغيل" icon="play">
      تحقق دائمًا من مفتاح API عند بدء تشغيل التطبيق

      ```javascript theme={null}
      // During app initialization
      async function initializeApp() {
        try {
          await client.validate();
          console.log('✓ API client initialized');
        } catch (error) {
          console.error('✗ Failed to initialize API client:', error);
          process.exit(1);
        }
      }
      ```
    </Accordion>

    <Accordion title="تخزين نتيجة التحقق مؤقتًا" icon="database">
      لا تتحقق في كل طلب - خزّن النتيجة مؤقتًا

      ```javascript theme={null}
      let validationCache = {
        validated: false,
        timestamp: 0,
        data: null
      };

      async function getValidatedClient() {
        const now = Date.now();
        const cacheExpiry = 5 * 60 * 1000; // 5 minutes
        
        if (validationCache.validated && (now - validationCache.timestamp) < cacheExpiry) {
          return validationCache.data;
        }
        
        const response = await fetch('https://api.oneclickdz.com/v3/validate', {
          headers: { 'X-Access-Token': API_KEY }
        });
        
        const data = await response.json();
        
        if (data.success) {
          validationCache = {
            validated: true,
            timestamp: now,
            data: data.data
          };
        }
        
        return data.data;
      }
      ```
    </Accordion>

    <Accordion title="التحقق من البيئة" icon="flask">
      تحقق من أنك تستخدم البيئة الصحيحة

      ```javascript theme={null}
      const data = await validateApiKey();

      const isProduction = process.env.NODE_ENV === 'production';
      const keyType = data.apiKey.type;

      if (isProduction && keyType === 'SANDBOX') {
        throw new Error('⚠️ Using SANDBOX key in production environment!');
      }

      if (!isProduction && keyType === 'PRODUCTION') {
        console.warn('⚠️ Using PRODUCTION key in development environment!');
      }
      ```
    </Accordion>

    <Accordion title="المعالجة بلطف" icon="shield-check">
      نفّذ معالجة الأخطاء بشكل صحيح

      ```javascript theme={null}
      async function validateWithRetry(maxRetries = 3) {
        for (let i = 0; i < maxRetries; i++) {
          try {
            const response = await fetch('https://api.oneclickdz.com/v3/validate', {
              headers: { 'X-Access-Token': API_KEY }
            });
            
            const data = await response.json();
            
            if (data.success) {
              return data.data;
            }
            
            if (data.error.code === 'INVALID_ACCESS_TOKEN') {
              throw new Error('Invalid API key - check your configuration');
            }
            
            if (data.error.code === 'IP_BLOCKED') {
              throw new Error('IP blocked - too many failed attempts');
            }
            
          } catch (error) {
            if (i === maxRetries - 1) throw error;
            await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));
          }
        }
      }
      ```
    </Accordion>
  </AccordionGroup>

  ## Endpoints ذات الصلة

  <CardGroup cols={2}>
    <Card title="فحص الصحة" icon="heart-pulse" href="/ar/api-reference/core/health-check">
      التحقق من حالة خدمة API
    </Card>

    <Card title="الحصول على الرصيد" icon="wallet" href="/ar/api-reference/account/get-balance">
      التحقق من رصيد حسابك
    </Card>
  </CardGroup>
</div>
