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

# إنشاء رمز API

> POST /console/token/

ينشئ مفتاح Management API جديدًا. تقع نقطة النهاية هذه على مضيف Scanova API **العادي** (‏`qcg-api.scanova.io`) وتُصادَق بنفس الطريقة التي تُصادَق بها أي طلب آخر من لوحة التحكم بعد تسجيل الدخول — رمز وصول OAuth، **لا** مفتاح Management API.

<Note>
  هذا هو استدعاء Management API الوحيد الذي تقوم به من سياق موثوق باستخدام تسجيل دخولك الخاص، وليس من التكامل الذي سيستخدم المفتاح الناتج. راجع [النظرة العامة](/ar/api-reference/management-api/overview) للاطلاع على البنية الكاملة ذات المضيفين.
</Note>

## الطلب

```
POST https://qcg-api.scanova.io/console/token/
Authorization: Bearer <your_oauth_access_token>
Content-Type: application/json
```

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

<ParamField body="name" type="string" required>
  تسمية مقروءة للبشر للمفتاح، مثل `"Zapier — production"`. تظهر في قائمة المفاتيح بلوحة التحكم لتتمكن من تمييز المفاتيح عن بعضها.
</ParamField>

<ParamField body="environment" type="string" default="sandbox">
  واحد من `sandbox`، `live`، `zapier`، `mcp`. دائم طوال عمر المفتاح — يحدد حصة الخطة التي تُفحص مع كل طلب يقوم به المفتاح إلى مضيف البيانات، وبالنسبة لمفاتيح `zapier`/`mcp`، ترويسة `User-Agent` التي يجب على العميل المستدعي إرسالها. راجع [حصة الخطة](/ar/api-reference/management-api/overview#plan-quota) للاطلاع على التخطيط الكامل.
</ParamField>

<ParamField body="expiry" type="integer" default="-1">
  واحد من `-1` (لا ينتهي أبدًا)، `30`، `90`، أو `365` — عدد الأيام بعد الإنشاء التي يتوقف بعدها المفتاح عن العمل. لا توجد طريقة لتمديد تاريخ انتهاء مفتاح موجود؛ أنشئ مفتاحًا جديدًا بدلًا من ذلك.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://qcg-api.scanova.io/console/token/" \
    -H "Authorization: Bearer <your_oauth_access_token>" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Zapier — production",
      "environment": "zapier",
      "expiry": 365
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 201 Created theme={null}
  {
    "name": "Zapier — production",
    "key": "401f7ac837da42b97f613d789819ff93537bee6a",
    "environment": "zapier",
    "expiry": 365,
    "created_by": {
      "id": 1042,
      "full_name": "Jordan Lee",
      "email": "jordan@example.com"
    },
    "created": "2026-08-16T09:12:33.512000Z",
    "expiry_date": "2027-08-16T09:12:33.512000Z",
    "expired": false,
    "usage_count": 0
  }
  ```
</ResponseExample>

### حقول الاستجابة

<ResponseField name="key" type="string">
  مفتاح Management API الخام. **هذه هي الاستجابة الوحيدة التي تعيد قيمة المفتاح الكاملة على الإطلاق** — لا توجد نقطة نهاية لإظهاره/استرجاعه لاحقًا، لذا خزّنه فورًا.
</ResponseField>

<ResponseField name="expiry_date" type="string | null">
  طابع الانتهاء المطلق، محسوبًا من `created` + عدد أيام `expiry`، أو `null` عندما تكون `expiry` هي `-1` (لا ينتهي أبدًا).
</ResponseField>

<ResponseField name="expired" type="boolean">
  ما إذا كان المفتاح قد تجاوز بالفعل `expiry_date` الخاص به. المفاتيح المنتهية تفشل في المصادقة على مضيف البيانات لكن لا تُحذف تلقائيًا — أزلها صراحة عبر [`DELETE /console/token/{key}/`](/ar/api-reference/management-api/tokens/remove) إذا أردت إزالتها من القائمة.
</ResponseField>

<ResponseField name="usage_count" type="integer">
  عدد الطلبات مدى الحياة التي تم إجراؤها بهذا المفتاح تحديدًا، عبر تاريخه بالكامل. هذا يختلف عن الأرقام الإجمالية على مستوى البيئة (environment) التي تعيدها [نقاط نهاية الاستخدام](/ar/api-reference/management-api/tokens/usage-stats) أدناه، والتي تجمع عبر كل مفتاح يشارك تلك البيئة.
</ResponseField>

## سرد الرموز الموجودة

نفس مسار `console/token/` يقبل أيضًا `GET` (بلا نص طلب) لسرد كل مفتاح في الحساب، مُعيدًا نفس شكل استجابة الإنشاء لكل واحد. يمكنك التصفية حسب البيئة: `GET /console/token/?environment=live`.

<Note>
  كل من إنشاء الرموز وسردها يعيد فحص حصة الخطة باستخدام `environment` الخاصة بالطلب — حقل الجسم عند الإنشاء، ومعلمة الاستعلام عند السرد، بالقيمة الافتراضية `sandbox` إذا حُذفت. إذا كانت حصص sandbox وlive مختلفتين في خطتك، مرّر `?environment=live` صراحة عند سرد مفاتيح بيئة live، لأن الافتراضي يفحص حصة sandbox بخلاف ذلك.
</Note>

## ذات صلة

* [نظرة عامة على Management API](/ar/api-reference/management-api/overview) — البنية ذات المضيفين وتخطيط الحصص لكل `environment` الذي يغذّيه حقل `environment` الخاص بنقطة النهاية هذه.
* [إزالة رمز API](/ar/api-reference/management-api/tokens/remove) — ألغِ مفتاحًا أُنشئ هنا.
* [إحصاءات الاستخدام](/ar/api-reference/management-api/tokens/usage-stats) — أعداد الطلبات الإجمالية للمفاتيح التي تشارك بيئة واحدة.
* [سرد / إنشاء رموز QR](/ar/api-reference/management-api/qr/list) — أول نقطة نهاية بيانات تستدعيها معظم عمليات التكامل بمفتاح أُنشئ هنا.


## OpenAPI

````yaml api-reference/openapi/management-api.json POST /console/token/
openapi: 3.1.0
info:
  title: Scanova Management API (v2)
  description: >-
    The complete Scanova Management API — every endpoint available at
    management.scanova.io (QR codes, folders, tags, leads, forms, analytics,
    plans, shared users & roles), plus the token-creation and usage-stats
    endpoints used to authenticate against it. Every path and request/response
    shape below was verified live against a real API key and the actual running
    backend (Phase 7, 2026-08-16) — not guessed from reading urls.py alone.
  version: 2.0.0
servers:
  - url: https://management.scanova.io
    description: Management API — QR/folder/tag/lead/form/analytics/plans endpoints
security:
  - apiKeyAuth: []
paths:
  /console/token/:
    post:
      summary: Create an API token
      operationId: createApiToken
      responses:
        '201':
          description: Token created
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Send your Management API key as the raw value of the Authorization
        header — no "Bearer " or "Token " prefix, and no other characters.
        Example: `Authorization: 401f7ac837da42b97f613d789819ff93537bee6a`. A
        header containing more than one space-separated part is rejected
        outright. Requests also require the request's Host header to be the
        management API host (e.g. management.scanova.io) — the same key sent to
        the regular API host will not authenticate.

````