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>"API PDF Riwayat Pengguna: Semua Sesi Pengguna
Unduh satu PDF yang memuat semua sesi verifikasi pengguna yang dapat dilaporkan, dikelompokkan per vendor_data, untuk audit, SAR, dan ekspor kepatuhan berkala.
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>"Ringkasan
Mengembalikan satu PDF berisi riwayat verifikasi lengkap dari entitas Pengguna, berdasarkanvendor_data.
Dokumen ini sama dengan yang dihasilkan Console melalui User detail → Actions → Download PDF, sehingga tim kepatuhan dapat mengotomatisasi ekspor alih-alih mengklik satu per satu untuk setiap pengguna.
Laporan berisi:
- Halaman sampul dengan ringkasan profil (nama, tanggal lahir, negara bagian penerbit, email dan nomor telepon yang disetujui), status terbaru dari setiap fitur, penghitung sesi, dan indeks sesi yang disertakan.
- Satu laporan sesi lengkap untuk setiap sesi yang disertakan, diurutkan secara kronologis (yang tertua lebih dulu). Setiap laporan sama dengan yang dikembalikan Generate PDF untuk sesi tersebut secara terpisah.
Sesi yang memenuhi syarat dan batasnya
Hanya sesi Verifikasi Pengguna (KYC) dengan statusApproved, Declined, In Review atau Kyc Expired yang disertakan. Sesi dengan status lain (Not Started, In Progress, Abandoned, Expired, …) dilewati.
Laporan dibatasi pada 20 sesi terbaru yang memenuhi syarat. Jika pengguna memiliki lebih banyak sesi, 20 sesi terbaru akan disertakan dan halaman sampul menyatakan berapa banyak sesi lama yang tidak disertakan. Gunakan List sessions dengan filter vendor_data jika Anda memerlukan daftar lengkap dalam format JSON.
Respons
Isi respons adalah PDF itu sendiri (application/pdf), bukan pembungkus JSON atau URL unduhan. Header Content-Disposition berbunyi attachment; filename=user_<didit_internal_id>.pdf, dengan didit_internal_id adalah pengidentifikasi Didit yang stabil milik pengguna.
White Label
Jika kustomisasi White Label diaktifkan pada aplikasi Anda, halaman sampul dan setiap laporan sesi memuat logo dan URL kebijakan privasi Anda, bukan branding Didit, persis seperti endpoint per sesi. Atur di Console → Customization.Cache dan latensi
Tidak ada yang di-cache: setiap panggilan merender ulang laporan dari data terkini, sehingga laporan yang diminta setelah tinjauan manual mencerminkan keputusan peninjau. Dua panggilan dapat menghasilkan file dengan byte yang berbeda; arsipkan file yang diunduh jika Anda memerlukan salinan yang tidak berubah. Perenderan bersifat sinkron dan mengunduh setiap gambar yang tersimpan dari setiap sesi yang disertakan, sehingga pembuatan laporan untuk pengguna dengan banyak sesi yang berisi banyak media dapat memerlukan waktu puluhan detik. Gunakan batas waktu baca klien yang longgar (disarankan 120 detik) dan alirkan isi respons ke disk. Pembuatan dihentikan pada batas waktu sisi server, bukan berjalan terus sampai klien Anda menyerah: jika batas itu tercapai, laporan tetap mengembalikan PDF yang valid dengan sesi-sesi terbaru, dan halaman sampul menyatakan berapa sesi yang dihilangkan.Garis miring di akhir
Rute kanonik diakhiri dengan garis miring (…/generate-pdf/). Permintaan tanpa garis miring dilayani langsung dengan respons yang sama: tidak ada redirect 301, sehingga tidak ada klien yang harus mengikuti redirect dan curl tidak memerlukan -L. Gunakan URL dengan garis miring seperti pada contoh; itulah bentuk yang ditampilkan dalam spesifikasi OpenAPI dan log Anda.
Error
| Status | Kapan | detail |
|---|---|---|
401 | Tidak ada header x-api-key (dan tidak ada token Authorization: Bearer). | You must be authenticated with a valid access token to access this endpoint. |
403 | Kunci API tidak valid atau sudah dicabut, atau token pengguna Console digunakan sebagai pengganti kunci API. | You do not have permission to perform this action. |
403 | Pengguna ada, tetapi tidak ada sesinya yang berada dalam status yang dapat dilaporkan. | This user has no sessions in review, declined, approved or kyc expired to report. |
404 | Tidak ada pengguna dengan vendor_data ini di aplikasi yang terkait dengan kunci API, termasuk pengguna yang milik aplikasi lain. | User not found. |
429 | Lebih dari 50 pembuatan PDF per menit dari kredensial yang sama. Kuota ini dibagi dengan Generate PDF. Tunggu selama Retry-After detik. | Session PDF generation rate limit exceeded. You can make up to 50 requests per minute. |
Contoh
- 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()));
Izin
Setiap kunci API aktif dari aplikasi dapat memanggil endpoint ini. Kunci API Didit terbatas pada aplikasi, bukan pada peran: peran dan izin Console (read:users dan lainnya) menentukan apa yang dapat dilakukan seseorang di Console, dan tidak dievaluasi untuk trafik Management API. Sebuah kunci hanya dapat mengekspor pengguna dari aplikasinya sendiri.
Terkait
- Generate PDF: laporan yang sama untuk satu sesi
- Riwayat KYC pengguna: mencantumkan dan memeriksa sesi pengguna dalam format JSON
- Ekspor PDF & CSV: sisi Console dari kedua ekspor
- Ambil pengguna: profil pengguna dan peta fitur dalam format JSON
Otorisasi
Kunci API aplikasi Anda, dari Developers -> API keys di Business Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat https://docs.didit.me/console/api-keys.
Parameter Path
Pengidentifikasi unik Anda untuk pengguna — string bentuk bebas (BUKAN UUID). Ini adalah nilai yang sama dengan yang Anda teruskan sebagai vendor_data saat membuat sesi pengguna, dicocokkan persis seperti yang dikirim. Lakukan URL encoding pada nilai tersebut; nilai yang mengandung / tidak dapat dituju oleh rute ini.
Respons
Dokumen PDF hasil render, dikembalikan langsung sebagai biner application/pdf — tidak ada pembungkus JSON dan tidak ada pengalihan URL unduhan. Isi dimulai dengan magic bytes %PDF. Simpan ke file .pdf atau alirkan langsung ke pemanggil Anda.
The response is of type file.