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

# سجل المستخدم بصيغة PDF عبر API: جميع جلسات المستخدم

> حمّل ملف PDF واحداً من Didit يجمع كل جلسات التحقق القابلة للإبلاغ لكل مستخدم حسب vendor_data، للتدقيق وتقارير SAR والتصدير الدوري.



موجه PDF لسجل المستخدم
        نسخ الموجّه إلى الحافظة



      
      

\<pre>

\`Goal: download one audit-ready PDF containing the full verification history of a Didit user.

Endpoint: GET https://verification.didit.me/v3/users/{vendor_data}/generate-pdf/
Auth header: x-api-key: YOUR_API_KEY

Path param:
\- vendor_data (string, REQUIRED) - your own identifier for the user, the same value you pass when creating sessions. Free-form string, NOT a UUID. URL-encode it; it cannot contain "/".

curl - save the PDF to disk:
curl --fail 'https://verification.didit.me/v3/users/user-abc-123/generate-pdf/' \
-H 'x-api-key: YOUR_API_KEY' \
\--output user-history.pdf

Response:
\- Body is binary (application/pdf). DO NOT parse as JSON.
\- Content-Disposition: attachment; filename=user_{didit_internal_id}.pdf
\- Content: a cover page (profile summary, feature status, session index) followed by the standard report of every included session, oldest first. Each session report is the same document GET /v3/session/{session_id}/generate-pdf/ returns.
\- Only sessions in "Approved", "Declined", "In Review" or "Kyc Expired" are included, capped at the 20 most recent. The cover states when older sessions were left out.
\- Identical to the Console export at User detail → Actions → Download PDF. White-label logo and privacy-policy URL apply when enabled.
\- Rendering is synchronous and takes a few seconds per session: use a read timeout of at least 120s and stream the body to disk.

Failure modes (envelope {"detail": "..."}):
\- 401 - no credentials supplied.
\- 403 - missing API key (a wrong, revoked or expired key gets 401), a Console user token instead of an API key, OR the user exists but has no session in a reportable status ("This user has no sessions in review, declined, approved or kyc expired to report.").
\- 404 - {"detail": "User not found."} - no user with that vendor_data in the application behind the API key. A key can never export a user of another application.
\- 429 - shares the PDF rate limit with the per-session endpoint (50 requests per minute per credential). Wait Retry-After seconds.

Trailing slash: the canonical route ends with "/". Call it as written above.

When to call:
\- Periodic compliance exports of a customer's whole KYC history.
\- SAR / regulator attachments that must cover every verification of one person.
\- Pulling a user's history into your own back office without a Console login.

Related: GET /v3/session/{session_id}/generate-pdf/ for a single session; GET /v3/sessions/?vendor_data=... for the JSON list of sessions.

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

الصق في

## نظرة عامةيعيد هذا المسار ملف PDF واحدًا يحتوي على سجل التحقق الكامل لـ [كيان المستخدم](https://docs.didit.me/ar/entities/users/overview.md)، ويُحدَّد المستخدم بالقيمة `vendor_data`.
وهو المستند نفسه الذي تنتجه Console عبر **User detail → Actions → Download PDF**، لذلك يمكن لفرق الامتثال أتمتة عمليات التصدير بدلًا من النقر مرة لكل مستخدم.يتضمن التقرير:- **صفحة غلاف** تحتوي على ملخص الملف الشخصي (الاسم وتاريخ الميلاد والولايات المُصدِرة والبريد الإلكتروني والهواتف المعتمدة)، وآخر حالة لكل ميزة، وعدادات الجلسات، وفهرسًا بالجلسات المضمّنة.
- **تقرير كامل لكل جلسة مضمّنة**، بترتيب زمني من الأقدم إلى الأحدث. وكل تقرير منها هو نفسه التقرير الذي يعيده [Generate PDF](https://docs.didit.me/ar/sessions-api/generate-pdf.md) لتلك الجلسة وحدها.## الجلسات المؤهلة والحد الأقصىتُضمَّن فقط جلسات التحقق من المستخدمين (KYC) التي تكون في حالة `Approved` أو `Declined` أو `In Review` أو `Kyc Expired`. أما الجلسات في أي حالة أخرى، مثل `Not Started` أو `In Progress` أو `Abandoned` أو `Expired` وغيرها، فيتم تجاهلها.يقتصر التقرير على **آخر 20** جلسة قابلة للإدراج. وإذا كان للمستخدم أكثر من ذلك، تُضمَّن أحدث 20 جلسة، ويذكر صفحة الغلاف عدد الجلسات الأقدم التي استُبعدت. استخدم [List sessions](https://docs.didit.me/ar/sessions-api/list-sessions.md) مع تصفية حسب `vendor_data` عندما تحتاج إلى القائمة الكاملة بصيغة JSON.## الاستجابةيكون متن الاستجابة ملف PDF نفسه (`application/pdf`)، وليس غلافًا بصيغة JSON ولا رابط تنزيل. ترويسة `Content-Disposition` تكون `attachment; filename=user_<didit_internal_id>.pdf`، حيث يمثل `didit_internal_id` معرّف Didit الثابت للمستخدم.## العلامة البيضاءعند تفعيل تخصيص العلامة البيضاء في تطبيقك، يحمل الغلاف وكل تقرير جلسة شعارك ورابط سياسة الخصوصية الخاص بك بدلًا من علامة Didit التجارية، تمامًا كما في endpoint الخاصة بالجلسة الواحدة. اضبط ذلك من **Console → Customization**.## التخزين المؤقت وزمن الاستجابةلا يُخزَّن أي شيء مؤقتًا: كل استدعاء يعيد إنشاء التقرير من البيانات الحالية، لذلك يعكس التقرير المطلوب بعد مراجعة يدوية قرار المراجِع. وقد ينتج استدعاءان ملفين مختلفين بايتًا ببايت، لذا احفظ الملف المُنزَّل إذا احتجت إلى نسخة ثابتة لا تتغير.يتم الإنشاء بشكل متزامن، ويُنزِّل كل صورة مخزّنة لكل جلسة مضمّنة، لذلك قد يستغرق إنشاء تقرير مستخدم لديه جلسات كثيرة ذات وسائط كثيفة عشرات الثواني. استخدم مهلة قراءة طويلة من جهة العميل (يُوصى بـ 120 ثانية) وقم ببث المتن إلى القرص. يتوقف الإنشاء عند ميزانية زمنية من جهة الخادم بدلًا من الاستمرار حتى ينفد صبر عميلك: وإذا بلغت هذه الميزانية، يظل التقرير يعيد ملف PDF صالحًا يحتوي على أحدث الجلسات، ويذكر الغلاف عدد الجلسات التي استُبعدت.## الشرطة المائلة في نهاية المساريحتوي المسار القياسي على شرطة مائلة في نهايته (`…/generate-pdf/`). يُخدَم الطلب الذي لا يتضمنها مباشرة بالاستجابة نفسها: لا توجد إعادة توجيه `301`، فلا يحتاج أي عميل إلى تتبع عمليات إعادة التوجيه، ولا يحتاج `curl` إلى `-L`. استخدم المسار المنتهي بالشرطة المائلة كما في الأمثلة، فهو الشكل الذي تُظهره مواصفات OpenAPI وسجلاتك.## الأخطاء| الحالة | متى | `detail` |
| - | - | - |
| `401` | لا توجد ترويسة `x-api-key` (ولا رمز `Authorization: Bearer`). | `You must be authenticated with a valid access token to access this endpoint.` |
| `403` | مفتاح API غير صالح أو ملغى، أو رمز مستخدم من Console بدلًا من مفتاح API. | `You do not have permission to perform this action.` |
| `403` | المستخدم موجود، لكن لا توجد أي جلسة من جلساته في حالة قابلة للإدراج. | `This user has no sessions in review, declined, approved or kyc expired to report.` |
| `404` | لا يوجد مستخدم بهذا `vendor_data` في التطبيق المرتبط بمفتاح API، بما في ذلك المستخدمون الذين ينتمون إلى تطبيق آخر. | `User not found.` |
| `429` | أكثر من 50 عملية إنشاء PDF في الدقيقة من بيانات الاعتماد نفسها. تُشارَك الحصة مع [Generate PDF](https://docs.didit.me/ar/sessions-api/generate-pdf.md). انتظر عدد الثواني المحدد في `Retry-After`. | `Session PDF generation rate limit exceeded. You can make up to 50 requests per minute.` |## الأمثلة> [tab] curl
>
> ```bash theme={null}
> curl --fail 'https://verification.didit.me/v3/users/user-abc-123/generate-pdf/' \
>   -H 'x-api-key: YOUR_API_KEY' \
>   --output user-history.pdf
> ```> [tab] Python
>
> ```python theme={null}
> import requests
>
> response = requests.get(
>     "https://verification.didit.me/v3/users/user-abc-123/generate-pdf/",
>     headers={"x-api-key": "YOUR_API_KEY"},
>     stream=True,
>     timeout=120,
> )
> response.raise_for_status()
> with open("user-history.pdf", "wb") as fh:
>     for chunk in response.iter_content(chunk_size=8192):
>         fh.write(chunk)
> ```> [tab] JavaScript
>
> ```javascript theme={null}
> import { writeFile } from 'node:fs/promises';
>
> const vendorData = encodeURIComponent('user-abc-123');
> const response = await fetch(
>   `https://verification.didit.me/v3/users/${vendorData}/generate-pdf/`,
>   { headers: { 'x-api-key': process.env.DIDIT_API_KEY } },
> );
> if (!response.ok) throw new Error(`PDF generation failed: HTTP ${response.status}`);
> await writeFile('user-history.pdf', Buffer.from(await response.arrayBuffer()));
> ```## الصلاحياتيمكن لأي مفتاح API نشط للتطبيق استدعاء نقطة النهاية هذه. مفاتيح API في Didit **محصورة بالتطبيق، وليست محصورة بالأدوار**: فالأدوار والأذونات في Console ([Roles and permissions](https://docs.didit.me/ar/console/roles-permissions.md))، مثل `read:users` وغيرها، هي التي تحدد ما يمكن للشخص فعله في Console، ولا تُطبَّق على حركة مرور Management API. ولا يمكن للمفتاح تصدير إلا مستخدمي تطبيقه.## ذات صلة- [Generate PDF](https://docs.didit.me/ar/sessions-api/generate-pdf.md): التقرير نفسه لجلسة واحدة
- [User KYC history](https://docs.didit.me/ar/entities/users/kyc-history.md): عرض جلسات المستخدم وفحصها بصيغة JSON
- [Export PDF & CSV](https://docs.didit.me/ar/console/export-pdf-csv.md): الجانب الخاص بالتصدير في Console لكلا النوعين
- [Get user](https://docs.didit.me/ar/management-api/users/get.md): الملف الشخصي للمستخدم وخريطة الميزات بصيغة JSON


## OpenAPI

````yaml ar/openapi-25.json GET /v3/users/{vendor_data}/generate-pdf/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API التحقق من الهوية. قم بالمصادقة باستخدام الرأس x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/users/{vendor_data}/generate-pdf/:
    get:
      tags:
        - Users
      summary: تنزيل تقرير PDF لسجل المستخدم الكامل
      description: >-
        توليد وتنزيل ملف PDF واحد جاهز للامتثال يحتوي على سجل التحقق الكامل
        للمستخدم المحدد بواسطة `vendor_data`. وهو نفس المستند الذي تُنشئه
        Console من **User detail → Actions → Download PDF**، وبذلك لم تعد عمليات
        تصدير الامتثال الدورية تتطلب نقر شخص في Console.


        **محتويات التقرير.** صفحة غلاف تتضمن ملخص الملف التعريفي (الاسم، وتاريخ
        الميلاد، والدول المصدرة، وعناوين البريد الإلكتروني وأرقام الهواتف
        المقبولة)، وأحدث حالة لكل ميزة، وعدادات الجلسات وفهرسًا للجلسات المضمنة
        — متبوعة بالتقرير القياسي لكل جلسة مضمنة، بترتيب زمني (الأقدم أولاً).
        يمثل كل تقرير جلسة نفس المستند الذي يُرجعه `GET
        /v3/session/{sessionId}/generate-pdf/` لتلك الجلسة.


        **الجلسات المؤهلة.** يتم تضمين جلسات التحقق من المستخدمين (KYC) التي
        تكون في حالة `Approved` أو `Declined` أو `In Review` أو `Kyc Expired`
        فقط؛ ويتم تخطي الجلسات في أي حالة أخرى. إذا لم يكن لدى المستخدم أي جلسة
        في إحدى هذه الحالات، يُرجع الـ endpoint الرمز `403` — راجع أدناه.


        **الحد الأقصى.** يقتصر التقرير على **أحدث 20** جلسة مؤهلة للتقرير.
        وعندما يكون لدى المستخدم أكثر من ذلك، يتم تضمين أحدث 20 جلسة وتوضح صفحة
        الغلاف عدد الجلسات الأقدم التي تم استبعادها. استخدم `GET
        /v3/sessions/?vendor_data=…` للحصول على القائمة الكاملة بتنسيق JSON.


        **العلامة التجارية.** إذا كان تطبيقك يتضمن تخصيص العلامة البيضاء، فسيتم
        إنشاء الغلاف وتقرير كل جلسة بشعارك ورابط سياسة الخصوصية الخاصة بك؛ وإلا
        فإنها ستحمل العلامة التجارية لـ Didit. يتم إنشاء التقارير باللغة
        الإنجليزية — ولا يوجد معامل للغة.


        **عدم التخزين المؤقت.** يُعيد كل استدعاء توليد ملف PDF استنادًا إلى
        البيانات الحالية، لذلك يعكس التقرير الذي تم إنشاؤه بعد مراجعة يدوية قرار
        المراجِع. يمكن أن ينتج عن استدعاءين لنفس المستخدم ملفان يختلفان في
        البايتات — احفظ الملف الذي تم تنزيله في الأرشيف إذا كنت بحاجة إلى نسخة
        غير قابلة للتغيير.


        **زمن الاستجابة.** عملية التوليد متزامنة وتقوم بتنزيل كل صورة مخزنة لكل
        جلسة مضمنة، لذا قد يستغرق الأمر عشرات الثواني للمستخدم الذي لديه العديد
        من الجلسات الكثيفة بالوسائط. استخدم مهلة قراءة سخية للعميل (يُوصى بـ 120
        ثانية) وقم بتدفق المحتوى مباشرة إلى القرص. يتوقف التوليد عند حد زمني
        محدد من جانب الخادم بدلاً من الاستمرار حتى تنتهي مهلة العميل: وإذا تم
        الوصول إلى هذا الحد، تظل الاستجابة ملف PDF صالحًا يحتوي على أحدث
        الجلسات، وتوضح صفحة الغلاف عدد الجلسات التي تم إغفالها.


        **النطاق.** يتم تحديد المستخدم داخل التطبيق الذي يمتلك مفتاح API. لا
        يمكن لمفتاح تصدير مستخدم لتطبيق آخر على الإطلاق — فمثل هذا المستخدم غير
        موجود بالنسبة له ويُرجع الـ endpoint الرمز `404`.


        **الشرطة المائلة اللاحقة.** ينتهي المسار القياسي بشرطة مائلة لاحقة
        (`…/generate-pdf/`). وتتم معالجة الطلب الذي لا يحتوي عليها مباشرة بنفس
        الاستجابة — ولا توجد إعادة توجيه `301`، لذلك لا يحتاج أي عميل إلى تتبع
        عمليات إعادة التوجيه ولا يحتاج `curl` إلى الخيار `-L`. استخدم عنوان URL
        الذي يحتوي على الشرطة المائلة كما هو موضح في الأمثلة.
      operationId: get_user_generate_pdf
      parameters:
        - name: vendor_data
          in: path
          required: true
          schema:
            type: string
          description: >-
            معرّفك الفريد للمستخدم — سلسلة نصية حرة (وليست UUID). هذه هي نفس
            القيمة التي مررتها كـ `vendor_data` عند إنشاء جلسات المستخدم، وتتم
            مطابقتها تماماً كما أُرسلت. قم بترميزها وفق ترميز URL؛ فالقيمة التي
            تحتوي على `/` لا يمكن الوصول إليها عبر هذا المسار.
          example: user-abc-123
      responses:
        '200':
          description: >-
            مستند PDF المُصيَّر، يتم إرجاعه مباشرة كملف ثنائي `application/pdf`
            — لا يوجد غلاف JSON ولا إعادة توجيه عبر رابط تنزيل. يبدأ جسم
            الاستجابة ببايتات `%PDF` السحرية. احفظه في ملف بصيغة `.pdf` أو مرره
            مباشرة كبث إلى المتصل بك.
          headers:
            Content-Disposition:
              description: >-
                `attachment; filename=user_{didit_internal_id}.pdf` — تمت تسمية
                الملف وفقًا لمعرّف Didit الثابت للمستخدم (`didit_internal_id` في
                `GET /v3/users/{vendor_data}/`)، وليس وفقًا لـ `vendor_data`.
              schema:
                type: string
                example: >-
                  attachment;
                  filename=user_f4e5e1f2-94a9-4f86-8c16-2b7d9b4db418.pdf
            Content-Length:
              description: الحجم الإجمالي لملف PDF بالبايت؛ لا يتم تقسيم المحتوى إلى أجزاء.
              schema:
                type: integer
                example: 148213
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '401':
          description: >-
            لم يتم توفير بيانات اعتماد. الطلبات المرسلة إلى مسارات `/v3/users/*`
            بدون رأس `x-api-key` (أو رمز `Authorization: Bearer`) يتم رفضها
            بواسطة برمجية المصادقة الوسيطة قبل وصولها إلى الـ API.
          content:
            application/json:
              examples:
                Missing credentials:
                  value:
                    detail: >-
                      You must be authenticated with a valid access token to
                      access this endpoint.
        '403':
          description: >-
            فشل في التفويض أو الأهلية. يمكنك التمييز بينهما من خلال نص `detail`:


            - `"You do not have permission to perform this action."` — مفتاح API
            غير صالح أو ملغى، أو أن الطلب يحمل token مستخدم لوحة التحكم بدلاً من
            مفتاح API للتطبيق.

            - `"This user has no sessions in review, declined, approved or kyc
            expired to report."` — المستخدم موجود في تطبيقك ولكن لا توجد أي من
            جلساته في حالة يمكن إعداد تقرير عنها بعد (على سبيل المثال، لا تزال
            كل جلسة في حالة `In Progress`، أو تم إنشاء المستخدم عبر `POST
            /v3/users/create/` ولم يقم بالتحقق مطلقاً). انتظر حدث webhook من نوع
            `status.updated` قبل طلب التقرير.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: >-
                      This user has no sessions in review, declined, approved or
                      kyc expired to report.
              examples:
                Invalid credentials:
                  summary: مفتاح API ملغى أو غير صالح، أو token لمستخدم Console
                  value:
                    detail: You do not have permission to perform this action.
                No reportable sessions:
                  summary: >-
                    المستخدم موجود ولكن ليس لديه جلسة مقبولة (Approved) / مرفوضة
                    (Declined) / قيد المراجعة (In Review) / منتهية الصلاحية لـ
                    KYC (Kyc Expired)
                  value:
                    detail: >-
                      This user has no sessions in review, declined, approved or
                      kyc expired to report.
        '404':
          description: >-
            لا يوجد مستخدم بقيمة `vendor_data` المقدمة في التطبيق المرتبط بمفتاح
            API. مستخدمو التطبيقات الأخرى غير مرئيين لهذا المفتاح ويُرجعون الرمز
            `404` نفسه.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: User not found.
              examples:
                Unknown user:
                  summary: vendor_data لا يطابق أي مستخدم لهذا التطبيق
                  value:
                    detail: User not found.
        '429':
          description: >-
            تم تجاوز حد المعدل. يمتلك إنشاء ملفات PDF حداً مخصصاً قدره **50
            طلباً في الدقيقة لكل بيانات اعتماد** (مفتاح API أو Bearer token أو
            عنوان IP المصدر في حال عدم المصادقة)، مشتركاً بين هذا الـ endpoint
            و`GET /v3/session/{sessionId}/generate-pdf/`، بالإضافة إلى حد GET
            العام البالغ 600/دقيقة. انتظر عدد الثواني المحدد في `Retry-After`
            (الموضح أيضاً في رؤوس `X-RateLimit-*`)، ثم أعد المحاولة. لا يتم
            تخزين التقارير مؤقتاً على جانب الخادم، لذا قم بتنزيل كل تقرير مرة
            واحدة واحفظ الملف بدلاً من إعادة جلبه.
          headers:
            Retry-After:
              description: عدد الثواني التي يجب انتظارها قبل إعادة محاولة إرسال الطلب.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: >-
                الحد الأقصى لعدد عمليات إنشاء PDF المسموح بها في النافذة الحالية
                (50).
              schema:
                type: integer
                example: 50
            X-RateLimit-Remaining:
              description: الطلبات المتبقية في النافذة الحالية.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: >-
                طابع Unix الزمني (بالثواني) الذي تتم عنده إعادة تعيين النافذة
                الحالية.
              schema:
                type: integer
                example: 1750000000
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: تفسير سهل القراءة لتجاوز حد المعدل.
                    example: >-
                      Session PDF generation rate limit exceeded. You can make
                      up to 50 requests per minute.
              examples:
                Throttled:
                  summary: >-
                    أكثر من 50 عملية إنشاء لملفات PDF في دقيقة واحدة من نفس
                    بيانات الاعتماد
                  value:
                    detail: >-
                      Session PDF generation rate limit exceeded. You can make
                      up to 50 requests per minute.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --fail \
              'https://verification.didit.me/v3/users/user-abc-123/generate-pdf/' \
              -H 'x-api-key: YOUR_API_KEY' \
              --output user-history.pdf
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            content = client.users.generate_pdf(
                "user-abc-123",
            )
            with open("download.pdf", "wb") as file:
                file.write(content)
        - lang: javascript
          label: Node.js
          source: >-
            import { writeFile } from "node:fs/promises";

            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const content = await didit.users.generatePdf("user-abc-123");

            await writeFile("download.pdf", Buffer.from(await
            content.arrayBuffer()));
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Users.GeneratePDF(ctx, \"user-abc-123\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: |-
            import java.nio.file.Path;
            import me.didit.Didit;

            // Reads DIDIT_API_KEY.
            Didit client = new Didit();

            client.users().generatePdf("user-abc-123")
                    .writeTo(Path.of("download.pdf"));
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $content = $didit->users->generatePdf('user-abc-123');
            $content->saveTo('download.pdf');
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            content = didit.users.generate_pdf("user-abc-123")
            File.binwrite("download.pdf", content)
        - lang: csharp
          label: .NET
          source: |-
            using System;
            using Didit;

            // Reads DIDIT_API_KEY.
            using var client = new DiditClient();

            var content = await client.Users.GeneratePdfAsync("user-abc-123");
            await content.SaveToAsync("download.pdf");
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        مفتاح API الخاص بتطبيقك، من Developers -> API keys في Business Console.
        يمتلك المفتاح الأساسي وصولاً كاملاً. يمكن تحديد نطاق المفتاح المسمى: لا
        شيء، أو قراءة، أو كتابة لكل مورد، ومحدوداً ببعض مسارات العمل أو بالجلسات
        المقبولة، وبقائمة من عناوين IP، وبتاريخ انتهاء الصلاحية. يشير 401 إلى أن
        المفتاح غير صحيح أو ملغى أو منتهي الصلاحية؛ ويشير 403 إلى أنه لم يتم
        إرسال أي مفتاح، أو أن المفتاح ليس لديه حق الوصول إلى هذا المورد أو
        الإجراء، أو أن الطلب جاء من عنوان خارج قائمة عناوين IP الخاصة به؛ ويشير
        404 في مسار جلسة إلى أن الجلسة خارج مسارات العمل أو الحالات الخاصة
        بالمفتاح. يتلقى المفتاح الذي لا يمتلك حق الوصول إلى الوسائط عناوين URL
        للصور ومقاطع الفيديو وملفات PDF كـ null، ويتلقى المفتاح الذي لا يمتلك
        إذن كتابة للجلسات روابط الجلسة وtoken كـ null. راجع
        https://docs.didit.me/console/api-keys.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.