curl --fail \
'https://verification.didit.me/v3/users/user-abc-123/generate-pdf/' \
-H 'x-api-key: YOUR_API_KEY' \
--output user-history.pdffrom 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)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()));ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
resp, err := client.Users.GeneratePDF(ctx, "user-abc-123")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
file, err := os.Create("download.pdf")
if err != nil {
log.Fatal(err)
}
defer file.Close()
if _, err := io.Copy(file, resp.Body); err != nil {
log.Fatal(err)
}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"));<?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');require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
content = didit.users.generate_pdf("user-abc-123")
File.binwrite("download.pdf", content)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");"<string>"उपयोगकर्ता इतिहास PDF API: किसी उपयोगकर्ता के सभी सत्र
Didit से vendor_data द्वारा चिह्नित उपयोगकर्ता के सभी रिपोर्ट योग्य सत्रों को एक PDF में डाउनलोड करें, ऑडिट, SAR और आवधिक अनुपालन एक्सपोर्ट के लिए।
curl --fail \
'https://verification.didit.me/v3/users/user-abc-123/generate-pdf/' \
-H 'x-api-key: YOUR_API_KEY' \
--output user-history.pdffrom 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)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()));ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
resp, err := client.Users.GeneratePDF(ctx, "user-abc-123")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
file, err := os.Create("download.pdf")
if err != nil {
log.Fatal(err)
}
defer file.Close()
if _, err := io.Copy(file, resp.Body); err != nil {
log.Fatal(err)
}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"));<?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');require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
content = didit.users.generate_pdf("user-abc-123")
File.binwrite("download.pdf", content)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");"<string>"अवलोकन
यह एक PDF लौटाता है जिसमेंvendor_data से पहचाने गए उपयोगकर्ता इकाई का पूरा सत्यापन इतिहास होता है।
यह वही दस्तावेज़ है जो Console में User detail → Actions → Download PDF से बनता है, ताकि अनुपालन टीमें हर उपयोगकर्ता के लिए एक-एक बार क्लिक करने के बजाय निर्यात को स्वचालित कर सकें।
रिपोर्ट में शामिल है:
- एक कवर पेज जिसमें प्रोफ़ाइल सारांश (नाम, जन्म तिथि, जारी करने वाले राज्य, स्वीकृत ईमेल और फ़ोन), हर सुविधा की नवीनतम स्थिति, सत्र काउंटर और शामिल सत्रों की सूची होती है।
- हर शामिल सत्र के लिए एक पूरी सत्र रिपोर्ट, कालानुक्रम में (सबसे पुराना पहले)। हर रिपोर्ट वही है जो Generate PDF उस सत्र के लिए अकेले लौटाता है।
पात्र सत्र और सीमा
केवल वे उपयोगकर्ता सत्यापन (KYC) सत्र शामिल किए जाते हैं जिनकी स्थितिApproved, Declined, In Review या Kyc Expired है। किसी भी अन्य स्थिति वाले सत्र (Not Started, In Progress, Abandoned, Expired, …) छोड़ दिए जाते हैं।
रिपोर्ट में अधिकतम 20 सबसे हाल के पात्र सत्र होते हैं। यदि किसी उपयोगकर्ता के इससे अधिक सत्र हों, तो सबसे नए 20 शामिल होते हैं और कवर पेज बताता है कि कितने पुराने सत्र छोड़े गए। जब आपको JSON में पूरी सूची चाहिए, तो vendor_data से फ़िल्टर करके List sessions का उपयोग करें।
प्रतिक्रिया
बॉडी स्वयं 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 के साथ साझा है। Retry-After सेकंड प्रतीक्षा करें। | Session PDF generation rate limit exceeded. You can make up to 50 requests per minute. |
उदाहरण
- curl
- Python
- JavaScript
curl --fail 'https://verification.didit.me/v3/users/user-abc-123/generate-pdf/' \
-H 'x-api-key: YOUR_API_KEY' \
--output user-history.pdf
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)
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 की भूमिकाएँ और अनुमतियाँ (read:users और बाकी) तय करती हैं कि कोई व्यक्ति Console में क्या कर सकता है, और इनका मूल्यांकन Management API ट्रैफ़िक के लिए नहीं किया जाता। कोई कुंजी केवल अपने एप्लिकेशन के उपयोगकर्ताओं का निर्यात कर सकती है।
संबंधित
- Generate PDF: एक ही सत्र के लिए वही रिपोर्ट
- User KYC history: JSON में किसी उपयोगकर्ता के सत्रों की सूची और जाँच
- Export PDF & CSV: दोनों निर्यातों का Console पक्ष
- Get user: JSON में उपयोगकर्ता की प्रोफ़ाइल और सुविधा मानचित्र
प्राधिकरण
आपकी एप्लिकेशन की 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।
पथ पैरामीटर
उपयोगकर्ता के लिए आपका विशिष्ट पहचानकर्ता — एक मुक्त-रूप स्ट्रिंग (UUID नहीं)। यह वही मान है जिसे आपने उपयोगकर्ता के सत्र बनाते समय vendor_data के रूप में पास किया था, ठीक वैसे ही मिलान किया गया जैसा भेजा गया था। इसे URL-एन्कोड करें; / युक्त मान को इस रूट द्वारा संबोधित नहीं किया जा सकता।
प्रतिक्रिया
रेंडर किया गया PDF दस्तावेज़, सीधे बाइनरी application/pdf के रूप में लौटाया गया — कोई JSON रैपर नहीं है और कोई डाउनलोड-URL इनडायरेक्शन नहीं है। बॉडी %PDF मैजिक बाइट्स से शुरू होती है। इसे .pdf फ़ाइल में सहेजें या अपने कॉलर को स्ट्रीम करें।
The response is of type file.