> ## 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: किसी उपयोगकर्ता के सभी सत्र

> Didit से vendor_data द्वारा चिह्नित उपयोगकर्ता के सभी रिपोर्ट योग्य सत्रों को एक PDF में डाउनलोड करें, ऑडिट, 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 लौटाता है जिसमें `vendor_data` से पहचाने गए [उपयोगकर्ता इकाई](https://docs.didit.me/hi/entities/users/overview.md) का पूरा सत्यापन इतिहास होता है।
यह वही दस्तावेज़ है जो Console में **User detail → Actions → Download PDF** से बनता है, ताकि अनुपालन टीमें हर उपयोगकर्ता के लिए एक-एक बार क्लिक करने के बजाय निर्यात को स्वचालित कर सकें।रिपोर्ट में शामिल है:- **एक कवर पेज** जिसमें प्रोफ़ाइल सारांश (नाम, जन्म तिथि, जारी करने वाले राज्य, स्वीकृत ईमेल और फ़ोन), हर सुविधा की नवीनतम स्थिति, सत्र काउंटर और शामिल सत्रों की सूची होती है।
- **हर शामिल सत्र के लिए एक पूरी सत्र रिपोर्ट**, कालानुक्रम में (सबसे पुराना पहले)। हर रिपोर्ट वही है जो [Generate PDF](https://docs.didit.me/hi/sessions-api/generate-pdf.md) उस सत्र के लिए अकेले लौटाता है।## पात्र सत्र और सीमाकेवल वे उपयोगकर्ता सत्यापन (KYC) सत्र शामिल किए जाते हैं जिनकी स्थिति `Approved`, `Declined`, `In Review` या `Kyc Expired` है। किसी भी अन्य स्थिति वाले सत्र (`Not Started`, `In Progress`, `Abandoned`, `Expired`, …) छोड़ दिए जाते हैं।रिपोर्ट में अधिकतम **20 सबसे हाल के** पात्र सत्र होते हैं। यदि किसी उपयोगकर्ता के इससे अधिक सत्र हों, तो सबसे नए 20 शामिल होते हैं और कवर पेज बताता है कि कितने पुराने सत्र छोड़े गए। जब आपको JSON में पूरी सूची चाहिए, तो `vendor_data` से फ़िल्टर करके [List sessions](https://docs.didit.me/hi/sessions-api/list-sessions.md) का उपयोग करें।## प्रतिक्रियाबॉडी स्वयं PDF है (`application/pdf`), JSON रैपर या डाउनलोड URL नहीं। `Content-Disposition` हेडर `attachment; filename=user_<didit_internal_id>.pdf` होता है, जहाँ `didit_internal_id` उपयोगकर्ता का स्थायी Didit पहचानकर्ता है।## व्हाइट लेबलजब आपके एप्लिकेशन पर व्हाइट-लेबल कस्टमाइज़ेशन सक्षम होता है, तो कवर और हर सत्र रिपोर्ट में Didit ब्रांडिंग के बजाय आपका लोगो और गोपनीयता नीति URL दिखते हैं, बिल्कुल प्रति-सत्र endpoint की तरह। इसे **Console → Customization** में कॉन्फ़िगर करें।## कैशिंग और विलंबताकुछ भी कैश नहीं होता: हर कॉल वर्तमान डेटा से रिपोर्ट फिर से बनाती है, इसलिए मैन्युअल समीक्षा के बाद माँगी गई रिपोर्ट समीक्षक के निर्णय को दर्शाती है। दो कॉल बाइट-स्तर पर अलग फ़ाइलें बना सकते हैं; जब आपको अपरिवर्तनीय प्रति चाहिए, तो डाउनलोड की गई फ़ाइल संग्रहीत करें।रेंडरिंग सिंक्रोनस होती है और शामिल हर सत्र की हर संग्रहीत छवि डाउनलोड करती है, इसलिए बहुत सारे मीडिया-भारी सत्र वाले उपयोगकर्ता के लिए दसियों सेकंड लग सकते हैं। एक उदार क्लाइंट रीड टाइमआउट (120 s अनुशंसित) रखें और बॉडी को डिस्क पर स्ट्रीम करें। जनरेशन सर्वर-साइड समय बजट पूरा होने पर रुक जाती है, न कि तब तक चलती रहती है जब तक आपका क्लाइंट हार न मान ले: यदि वह बजट पूरा होता है, तब भी रिपोर्ट सबसे हाल के सत्रों के साथ एक वैध PDF लौटाती है और कवर बताता है कि कितने छोड़े गए।## ट्रेलिंग स्लैशमानक रूट एक ट्रेलिंग स्लैश पर समाप्त होता है (`…/generate-pdf/`)। इसके बिना किया गया अनुरोध उसी प्रतिक्रिया के साथ सीधे उपलब्ध कराया जाता है: कोई `301` रीडायरेक्ट नहीं है, इसलिए किसी क्लाइंट को रीडायरेक्ट फ़ॉलो करने की ज़रूरत नहीं होती और `curl` को `-L` की आवश्यकता नहीं। नमूनों में दिखाए अनुसार स्लैश वाला URL उपयोग करें; यही वह रूप है जो OpenAPI स्पेक और आपके लॉग में दिखता है।## त्रुटियाँ| स्थिति | कब लागू होता है | `detail` |
| - | - | - |
| `401` | `x-api-key` हेडर नहीं है (और `Authorization: Bearer` टोकन भी नहीं है)। | `You must be authenticated with a valid access token to access this endpoint.` |
| `403` | API कुंजी अमान्य या रद्द है, या API कुंजी के बजाय Console उपयोगकर्ता टोकन भेजा गया है। | `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` | API कुंजी से संबद्ध एप्लिकेशन में इस `vendor_data` वाला कोई उपयोगकर्ता नहीं है, जिसमें किसी दूसरे एप्लिकेशन से जुड़े उपयोगकर्ता भी शामिल हैं। | `User not found.` |
| `429` | एक ही क्रेडेंशियल से प्रति मिनट 50 से अधिक PDF जनरेशन। यह बजट [Generate PDF](https://docs.didit.me/hi/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 कुंजी इस endpoint को कॉल कर सकती है। Didit API कुंजियाँ
**एप्लिकेशन-स्कोप्ड हैं, भूमिका-स्कोप्ड नहीं**: Console की [भूमिकाएँ और अनुमतियाँ](https://docs.didit.me/hi/console/roles-permissions.md)
(`read:users` और बाकी) तय करती हैं कि कोई *व्यक्ति* Console में क्या कर सकता है, और इनका मूल्यांकन Management API ट्रैफ़िक के लिए नहीं किया जाता। कोई कुंजी केवल अपने एप्लिकेशन के उपयोगकर्ताओं का निर्यात कर सकती है।## संबंधित- [Generate PDF](https://docs.didit.me/hi/sessions-api/generate-pdf.md): एक ही सत्र के लिए वही रिपोर्ट
- [User KYC history](https://docs.didit.me/hi/entities/users/kyc-history.md): JSON में किसी उपयोगकर्ता के सत्रों की सूची और जाँच
- [Export PDF & CSV](https://docs.didit.me/hi/console/export-pdf-csv.md): दोनों निर्यातों का Console पक्ष
- [Get user](https://docs.didit.me/hi/management-api/users/get.md): JSON में उपयोगकर्ता की प्रोफ़ाइल और सुविधा मानचित्र


## OpenAPI

````yaml hi/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/` उस सत्र के लिए लौटाता है।


        **पात्र सत्र।** केवल `Approved`, `Declined`, `In Review` या `Kyc
        Expired` स्थिति वाले उपयोगकर्ता सत्यापन (KYC) सत्र ही शामिल किए जाते
        हैं; किसी अन्य स्थिति वाले सत्र छोड़ दिए जाते हैं। यदि उपयोगकर्ता का
        इनमें से किसी एक स्थिति में कोई सत्र नहीं है, तो endpoint `403` लौटाता
        है — नीचे देखें।


        **सीमा।** रिपोर्ट अधिकतम **20 सबसे हाल के** रिपोर्ट करने योग्य सत्रों तक
        सीमित है। जब किसी उपयोगकर्ता के पास इससे अधिक सत्र होते हैं, तो सबसे नए
        20 सत्र शामिल किए जाते हैं और कवर पेज पर यह बताया जाता है कि कितने
        पुराने सत्र छोड़ दिए गए थे। JSON के रूप में पूरी सूची प्राप्त करने के
        लिए `GET /v3/sessions/?vendor_data=…` का उपयोग करें।


        **ब्रांडिंग।** यदि आपके एप्लिकेशन में व्हाइट लेबल कस्टमाइज़ेशन है, तो
        कवर और प्रत्येक सत्र रिपोर्ट आपके लोगो और गोपनीयता-नीति URL के साथ रेंडर
        की जाती है; अन्यथा उन पर Didit ब्रांडिंग होती है। रिपोर्ट अंग्रेज़ी में
        रेंडर की जाती हैं — कोई भाषा पैरामीटर नहीं है।


        **कोई कैशिंग नहीं।** प्रत्येक कॉल वर्तमान डेटा से PDF को फिर से रेंडर
        करती है, इसलिए मैन्युअल समीक्षा के बाद जनरेट की गई रिपोर्ट समीक्षक के
        निर्णय को दर्शाती है। एक ही उपयोगकर्ता के लिए दो कॉल बाइट-डिफ़रेंट
        फ़ाइलें उत्पन्न कर सकती हैं — यदि आपको एक अपरिवर्तनीय प्रतिलिपि की
        आवश्यकता है तो डाउनलोड की गई फ़ाइल को संग्रहीत करें।


        **विलंबता।** रेंडरिंग सिंक्रोनस है और प्रत्येक शामिल सत्र की प्रत्येक
        संग्रहीत छवि को डाउनलोड करती है, इसलिए कई मीडिया-भारी सत्रों वाले
        उपयोगकर्ता में कई दसियों सेकंड लग सकते हैं। एक उदार क्लाइंट रीड टाइमआउट
        (120 s अनुशंसित) का उपयोग करें और बॉडी को डिस्क पर स्ट्रीम करें। जेनरेशन
        तब तक चलने के बजाय सर्वर-साइड समय बजट पर रुक जाती है जब तक कि आपका
        क्लाइंट छोड़ न दे: यदि वह बजट पूरा हो जाता है, तो भी रिस्पॉन्स सबसे हाल
        के सत्रों वाली एक मान्य 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 रैपर नहीं है और कोई डाउनलोड-URL
            इनडायरेक्शन नहीं है। बॉडी `%PDF` मैजिक बाइट्स से शुरू होती है। इसे
            `.pdf` फ़ाइल में सहेजें या अपने कॉलर को स्ट्रीम करें।
          headers:
            Content-Disposition:
              description: >-
                `attachment; filename=user_{didit_internal_id}.pdf` — फ़ाइल का
                नाम उपयोगकर्ता के स्थिर Didit पहचानकर्ता (`GET
                /v3/users/{vendor_data}/` पर `didit_internal_id`) के नाम पर रखा
                गया है, न कि `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: >-
            कोई क्रेडेंशियल प्रदान नहीं किए गए। `x-api-key` हेडर (या
            `Authorization: Bearer` token) के बिना `/v3/users/*` पाथ पर आने वाले
            अनुरोधों को 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 कुंजी
            अमान्य या निरस्त है, या अनुरोध में एप्लिकेशन API कुंजी के स्थान पर
            कंसोल उपयोगकर्ता token है।

            - `"This user has no sessions in review, declined, approved or kyc
            expired to report."` — उपयोगकर्ता आपके एप्लिकेशन में मौजूद है लेकिन
            इसका कोई भी सत्र अभी रिपोर्ट करने योग्य स्थिति में नहीं है (उदाहरण
            के लिए प्रत्येक सत्र अभी भी `In Progress` है, या उपयोगकर्ता `POST
            /v3/users/create/` के माध्यम से बनाया गया था और उसने कभी सत्यापन
            नहीं किया है)। रिपोर्ट का अनुरोध करने से पहले `status.updated`
            webhook की प्रतीक्षा करें।
          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 कुंजी, या एक Console उपयोगकर्ता token
                  value:
                    detail: You do not have permission to perform this action.
                No reportable sessions:
                  summary: >-
                    उपयोगकर्ता मौजूद है लेकिन उसके पास कोई स्वीकृत / अस्वीकृत /
                    समीक्षाधीन / KYC की समय-सीमा समाप्त सत्र नहीं है
                  value:
                    detail: >-
                      This user has no sessions in review, declined, approved or
                      kyc expired to report.
        '404':
          description: >-
            API कुंजी के पीछे एप्लिकेशन में दिए गए `vendor_data` वाला कोई
            उपयोगकर्ता मौजूद नहीं है। अन्य एप्लिकेशन के उपयोगकर्ता इस कुंजी के
            लिए अदृश्य हैं और वही `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: >-
            रेट लिमिट पार हो गई। वैश्विक 600/मिनट GET सीमा के अतिरिक्त, PDF
            जनरेशन की **प्रति क्रेडेंशियल 50 अनुरोध प्रति मिनट** (API कुंजी,
            Bearer token, या अप्रमाणित होने पर स्रोत IP) की एक समर्पित सीमा है,
            जो इस endpoint और `GET /v3/session/{sessionId}/generate-pdf/` के बीच
            साझा की जाती है। `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 कुंजी, Business Console में Developers -> API keys
        से। प्राथमिक कुंजी के पास पूर्ण एक्सेस होता है। एक नामित कुंजी को स्कोप
        किया जा सकता है: प्रति संसाधन none, read या write, कुछ वर्कफ़्लो या
        स्वीकृत सत्रों तक सीमित, IP पतों की सूची तक सीमित, और समाप्ति तिथि तक
        सीमित। 401 का अर्थ है कि कुंजी गलत है, निरस्त कर दी गई है या उसकी
        समय-सीमा समाप्त हो गई है; 403 का अर्थ है कि कोई कुंजी नहीं भेजी गई थी,
        कुंजी के पास इस संसाधन या कार्रवाई का एक्सेस नहीं है, या अनुरोध उसकी IP
        सूची से बाहर के पते से आया था; सत्र रूट पर 404 का अर्थ है कि सत्र कुंजी
        के वर्कफ़्लो या स्थितियों से बाहर है। मीडिया एक्सेस के बिना एक कुंजी को
        छवि, वीडियो और PDF URL null के रूप में प्राप्त होते हैं, और सत्र write
        के बिना एक कुंजी को सत्र लिंक और token null के रूप में प्राप्त होते हैं।
        देखें https://docs.didit.me/console/api-keys।

````

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