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>"Benutzerhistorie PDF-API: alle Sitzungen eines Benutzers
Laden Sie mit Didit einen PDF-Bericht aller Sitzungen eines Benutzers herunter, zugeordnet über vendor_data, für Audits und SARs.
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>"Übersicht
Gibt ein einziges PDF mit dem vollständigen Verifizierungsverlauf einer User-Entität zurück, identifiziert übervendor_data.
Es ist dasselbe Dokument, das die Console über User detail → Actions → Download PDF erzeugt, sodass Compliance-Teams Exporte automatisieren können, statt pro Benutzer einmal zu klicken.
Der Bericht enthält:
- Ein Deckblatt mit der Profilübersicht (Name, Geburtsdatum, Ausstellungsstaaten, genehmigte E-Mail-Adressen und Telefonnummern), dem aktuellen Status jeder Funktion, den Sitzungszählern und einem Verzeichnis der enthaltenen Sitzungen.
- Ein vollständiger Sitzungsbericht pro enthaltener Sitzung, in chronologischer Reihenfolge (älteste zuerst). Jeder davon ist derselbe Bericht, den PDF generieren für diese Sitzung allein zurückgibt.
Berechtigte Sitzungen und Obergrenze
Nur Benutzerverifizierungs-Sitzungen (KYC) mit dem StatusApproved, Declined, In Review oder Kyc Expired sind enthalten. Sitzungen mit einem anderen Status (Not Started, In Progress, Abandoned, Expired, …) werden übersprungen.
Der Bericht ist auf die 20 neuesten berichtsfähigen Sitzungen begrenzt. Hat ein Benutzer mehr, werden die neuesten 20 aufgenommen, und das Deckblatt gibt an, wie viele ältere Sitzungen weggelassen wurden. Verwenden Sie Sitzungen auflisten mit dem Filter vendor_data, wenn Sie die vollständige Liste als JSON benötigen.
Antwort
Der Body ist das PDF selbst (application/pdf), kein JSON-Wrapper und keine Download-URL. Der Header Content-Disposition lautet attachment; filename=user_<didit_internal_id>.pdf, wobei didit_internal_id die stabile Didit-Kennung des Benutzers ist.
White-Label
Wenn White-Label-Anpassung für Ihre Anwendung aktiviert ist, tragen das Deckblatt und jeder Sitzungsbericht Ihr Logo und Ihre URL der Datenschutzrichtlinie statt Didit-Branding, genau wie beim Endpoint pro Sitzung. Konfigurieren Sie dies unter Console → Customization.Caching und Latenz
Es wird nichts gecacht: Jeder Aufruf rendert den Bericht aus den aktuellen Daten neu, sodass ein Bericht, der nach einer manuellen Prüfung angefordert wird, die Entscheidung des Prüfers widerspiegelt. Zwei Aufrufe können byteweise unterschiedliche Dateien erzeugen. Archivieren Sie die heruntergeladene Datei, wenn Sie eine unveränderliche Kopie benötigen. Das Rendering ist synchron und lädt jedes gespeicherte Bild jeder enthaltenen Sitzung herunter, daher kann ein Benutzer mit vielen medienintensiven Sitzungen mehrere Dutzend Sekunden benötigen. Verwenden Sie ein großzügiges Read-Timeout auf dem Client (empfohlen: 120 s) und streamen Sie den Body auf die Festplatte. Die Generierung bricht bei einem serverseitigen Zeitbudget ab, statt so lange weiterzulaufen, bis Ihr Client aufgibt. Wird dieses Budget erreicht, gibt der Bericht trotzdem ein gültiges PDF mit den neuesten Sitzungen zurück, und das Deckblatt gibt an, wie viele ausgelassen wurden.Abschließender Schrägstrich
Die kanonische Route endet mit einem abschließenden Schrägstrich (…/generate-pdf/). Eine Anfrage ohne diesen wird direkt mit derselben Antwort bedient: Es gibt keine 301-Weiterleitung, sodass kein Client Weiterleitungen folgen muss und curl kein -L braucht. Verwenden Sie die URL mit Schrägstrich wie in den Beispielen, denn sie ist die Form, die die OpenAPI-Spezifikation und Ihre Logs zeigen.
Fehler
| Status | Wann | detail |
|---|---|---|
401 | Kein x-api-key-Header (und kein Authorization: Bearer-Token). | You must be authenticated with a valid access token to access this endpoint. |
403 | Ungültiger oder widerrufener API-Schlüssel oder ein Console-Benutzer-Token statt eines API-Schlüssels. | You do not have permission to perform this action. |
403 | Der Benutzer existiert, aber keine seiner Sitzungen hat einen meldbaren Status. | This user has no sessions in review, declined, approved or kyc expired to report. |
404 | Kein Benutzer mit dieser vendor_data in der Anwendung hinter dem API-Schlüssel, einschließlich Benutzern, die zu einer anderen Anwendung gehören. | User not found. |
429 | Mehr als 50 PDF-Generierungen pro Minute mit denselben Zugangsdaten. Das Kontingent wird mit PDF generieren geteilt. Warten Sie Retry-After Sekunden. | Session PDF generation rate limit exceeded. You can make up to 50 requests per minute. |
Beispiele
- 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()));
Berechtigungen
Jeder aktive API-Schlüssel der Anwendung kann diesen Endpoint aufrufen. API-Schlüssel von Didit sind anwendungsbezogen, nicht rollenbezogen: Die Rollen und Berechtigungen der Console (read:users und die übrigen) bestimmen, was eine Person in der Console tun darf, und werden für
Management-API-Anfragen nicht ausgewertet. Ein Schlüssel kann nur Benutzer seiner eigenen Anwendung exportieren.
Verwandte Seiten
- PDF generieren – derselbe Bericht für eine einzelne Sitzung
- KYC-Verlauf des Benutzers – Auflisten und Prüfen der Sitzungen eines Benutzers als JSON
- PDF und CSV exportieren – die Console-Seite beider Exporte
- Benutzer abrufen – Profil und Funktionsübersicht des Benutzers als JSON
Autorisierungen
Der API-Schlüssel Ihrer Anwendung, aus Entwickler -> API-Schlüssel in der Business Console. Der Primärschlüssel hat Vollzugriff. Ein benannter Schlüssel kann im Geltungsbereich eingeschränkt werden: keine, Lese- oder Schreibberechtigung pro Ressource, beschränkt auf bestimmte Workflows oder genehmigte Sitzungen, auf eine Liste von IP-Adressen und auf ein Ablaufdatum. 401 bedeutet, dass der Schlüssel falsch, widerrufen oder abgelaufen ist; 403 bedeutet, dass kein Schlüssel gesendet wurde, der Schlüssel keinen Zugriff auf diese Ressource oder Aktion hat oder die Anfrage von einer Adresse außerhalb seiner IP-Liste stammte; 404 bei einer Sitzungsroute bedeutet, dass die Sitzung außerhalb der Workflows oder Status des Schlüssels liegt. Ein Schlüssel ohne Medienzugriff erhält Bild-, Video- und PDF-URLs als null, und ein Schlüssel ohne Schreibberechtigung für Sitzungen erhält Sitzungslinks und Token als null. Siehe https://docs.didit.me/console/api-keys.
Pfadparameter
Ihre eindeutige Kennung für den Benutzer — ein Freitext-String (KEINE UUID). Dies ist derselbe Wert, den Sie beim Erstellen der Sitzungen des Benutzers als vendor_data übergeben haben, exakt wie übermittelt abgeglichen. Kodieren Sie ihn URL-konform; ein Wert, der / enthält, kann über diese Route nicht adressiert werden.
Antwort
Das gerenderte PDF-Dokument, direkt als binäres application/pdf zurückgegeben — es gibt keinen JSON-Wrapper und keine Download-URL-Umleitung. Der Body beginnt mit den Magic Bytes %PDF. Speichern Sie es in einer .pdf-Datei oder leiten Sie es per Stream an Ihren Aufrufer weiter.
The response is of type file.