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");API PDF d'historique utilisateur : toutes les sessions
Didit : un PDF regroupant toutes les sessions de vérification d’un utilisateur, par vendor_data, pour audits, SAR et exports de conformité.
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");Vue d’ensemble
Renvoie un PDF unique contenant l’historique complet des vérifications d’une entité Utilisateur, identifiée parvendor_data.
Il s’agit du même document que celui produit par la Console via User detail → Actions → Download PDF, afin que les équipes conformité puissent automatiser les exports au lieu de cliquer une fois par utilisateur.
Le rapport contient :
- Une page de couverture avec le résumé du profil (nom, date de naissance, États de délivrance, e-mails et téléphones approuvés), le dernier statut de chaque fonctionnalité, les compteurs de sessions et un index des sessions incluses.
- Un rapport complet par session incluse, par ordre chronologique (la plus ancienne en premier). Chacun correspond au rapport que Générer un PDF renvoie pour cette session seule.
Sessions éligibles et plafond
Seules les sessions de vérification d’utilisateurs (KYC) dont le statut estApproved, Declined, In Review ou Kyc Expired sont incluses. Les sessions ayant un autre statut (Not Started, In Progress, Abandoned, Expired, …) sont ignorées.
Le rapport est limité aux 20 sessions exploitables les plus récentes. Lorsqu’un utilisateur en possède davantage, les 20 plus récentes sont incluses et la page de couverture indique le nombre de sessions plus anciennes omises. Utilisez Lister les sessions en filtrant par vendor_data lorsque vous avez besoin de la liste complète au format JSON.
Réponse
Le corps de la réponse est le PDF lui-même (application/pdf), et non un objet JSON ni une URL de téléchargement. L’en-tête Content-Disposition vaut attachment; filename=user_<didit_internal_id>.pdf, où didit_internal_id est l’identifiant Didit stable de l’utilisateur.
Marque blanche
Lorsque la personnalisation en marque blanche est activée sur votre application, la page de couverture et chaque rapport de session affichent votre logo et l’URL de votre politique de confidentialité à la place de la marque Didit, exactement comme l’endpoint par session. Configurez-la dans Console → Customization.Mise en cache et latence
Aucune mise en cache : chaque appel régénère le rapport à partir des données actuelles, de sorte qu’un rapport demandé après un examen manuel reflète la décision du réviseur. Deux appels peuvent produire des fichiers différant octet par octet ; archivez le fichier téléchargé lorsque vous avez besoin d’une copie immuable. Le rendu est synchrone et télécharge chaque image stockée de chaque session incluse ; un utilisateur ayant de nombreuses sessions riches en médias peut donc prendre plusieurs dizaines de secondes. Utilisez un délai de lecture client généreux (120 s recommandé) et diffusez le corps de la réponse directement sur le disque. La génération s’arrête à un budget de temps côté serveur plutôt que de continuer jusqu’à ce que votre client abandonne : si ce budget est atteint, le rapport renvoie tout de même un PDF valide avec les sessions les plus récentes, et la page de couverture indique le nombre de sessions omises.Barre oblique finale
La route canonique se termine par une barre oblique (…/generate-pdf/). Une requête sans barre oblique est traitée directement et renvoie la même réponse : il n’y a pas de redirection 301, donc aucun client n’a besoin de suivre les redirections et curl n’a pas besoin de -L. Utilisez l’URL avec barre oblique, comme dans les exemples ; c’est la forme que présentent la spécification OpenAPI et vos journaux.
Erreurs
| Statut | Quand | detail |
|---|---|---|
401 | Aucun en-tête x-api-key (et aucun jeton Authorization: Bearer). | You must be authenticated with a valid access token to access this endpoint. |
403 | Clé API invalide ou révoquée, ou jeton utilisateur de la Console utilisé à la place d’une clé API. | You do not have permission to perform this action. |
403 | L’utilisateur existe, mais aucune de ses sessions n’est dans un statut exploitable. | This user has no sessions in review, declined, approved or kyc expired to report. |
404 | Aucun utilisateur avec ce vendor_data dans l’application liée à la clé API, y compris les utilisateurs appartenant à une autre application. | User not found. |
429 | Plus de 50 générations de PDF par minute avec le même identifiant d’authentification. Ce quota est partagé avec Générer un PDF. Attendez le nombre de secondes indiqué dans Retry-After. | Session PDF generation rate limit exceeded. You can make up to 50 requests per minute. |
Exemples
- 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()));
Autorisations
Toute clé API active de l’application peut appeler cet endpoint. Les clés API Didit sont limitées à l’application, et non à un rôle : les rôles et autorisations de la Console (read:users et les autres) déterminent ce qu’une personne peut faire dans la Console, et ne sont pas évalués pour le trafic de l’API de gestion. Une clé ne peut exporter que les utilisateurs de sa propre application.
Voir aussi
- Générer un PDF : le même rapport pour une seule session
- Historique KYC de l’utilisateur : lister et inspecter les sessions d’un utilisateur au format JSON
- Export PDF et CSV : l’équivalent dans la Console pour les deux exports
- Obtenir un utilisateur : le profil de l’utilisateur et sa carte des fonctionnalités au format JSON
Autorisations
La clé API de votre application, issue de Développeurs -> Clés API dans la Business Console. La clé principale dispose d'un accès complet. Une clé nommée peut être restreinte : aucun, lecture ou écriture par ressource, limitée à certains workflows ou aux sessions approuvées, à une liste d'adresses IP et à une date d'expiration. 401 signifie que la clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a été envoyée, que la clé n'a pas accès à cette ressource ou action, ou que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur une route de session signifie que la session est hors des workflows ou des statuts de la clé. Une clé sans accès aux médias reçoit les URL d'images, de vidéos et de PDF à null, et une clé sans accès en écriture aux sessions reçoit les liens et tokens de session à null. Voir https://docs.didit.me/console/api-keys.
Paramètres de chemin
Votre identifiant unique pour l'utilisateur — chaîne libre (PAS un UUID). Il s'agit de la même valeur que vous avez transmise en tant que vendor_data lors de la création des sessions de l'utilisateur, mise en correspondance exactement telle qu'envoyée. Encodez-la au format URL ; une valeur contenant / ne peut pas être ciblée par cette route.
Réponse
Le document PDF généré, renvoyé directement au format binaire application/pdf — il n'y a pas d'encapsulation JSON ni d'indirection par URL de téléchargement. Le corps commence par les octets magiques %PDF. Enregistrez-le dans un fichier .pdf ou transmettez-le en flux continu à votre appelant.
The response is of type file.