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");ユーザー履歴PDF API:ユーザーの全セッション
Diditのユーザー履歴PDF APIでは、vendor_dataで特定したユーザーのレポート対象となる全認証セッションを1つの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");概要
vendor_dataをキーとして、ユーザーエンティティの検証履歴全体を1つのPDFにまとめて返します。
ConsoleのUser detail → Actions → Download PDFで生成されるものと同じ書類です。コンプライアンスチームはユーザーごとにクリックする代わりに、エクスポートを自動化できます。
レポートには次の内容が含まれます。
- 表紙:プロフィールの概要(氏名、生年月日、発行州、承認済みのメールアドレスと電話番号)、各機能の最新ステータス、セッション数、収録セッションの索引。
- 収録セッションごとの完全なセッションレポート:時系列順(古い順)に並びます。各レポートは、そのセッション単体に対してPDFを生成が返すレポートと同じです。
対象となるセッションと上限
収録されるのは、ステータスがApproved、Declined、In Review、Kyc Expiredのユーザー認証(KYC)セッションのみです。その他のステータス(Not Started、In Progress、Abandoned、Expiredなど)のセッションは除外されます。
レポートに含められるのは、レポート対象セッションのうち新しい順に20件までです。ユーザーにそれ以上のセッションがある場合は最新の20件が収録され、除外された古いセッションの件数が表紙に記載されます。完全な一覧をJSONで取得する必要がある場合は、vendor_dataでフィルターしたセッション一覧の取得を使用してください。
レスポンス
本文はPDFそのもの(application/pdf)であり、JSONのラッパーやダウンロードURLではありません。Content-Dispositionヘッダーはattachment; filename=user_<didit_internal_id>.pdfで、didit_internal_idはユーザーごとに固定のDidit識別子です。
ホワイトラベル
アプリケーションでホワイトラベルのカスタマイズが有効になっている場合、表紙と各セッションレポートには、Diditのブランディングの代わりに貴社のロゴとプライバシーポリシーのURLが表示されます。これはセッション単位のエンドポイントとまったく同じです。設定はConsole → Customizationで行います。キャッシュとレイテンシ
キャッシュは一切行われません。呼び出しのたびに現在のデータからレポートが再生成されるため、手動レビューの後にリクエストしたレポートにはレビュアーの判定が反映されます。2回の呼び出しでバイト単位で異なるファイルが生成されることがあるため、変更不可のコピーが必要な場合はダウンロードしたファイルをアーカイブしてください。 生成は同期的に行われ、収録される各セッションに保存されたすべての画像をダウンロードするため、メディアの多いセッションを多数持つユーザーでは数十秒かかることがあります。クライアントの読み取りタイムアウトには十分な余裕を持たせ(120秒を推奨)、レスポンス本文はストリーミングでディスクに書き込んでください。生成はクライアント側のタイムアウトまで実行され続けるのではなく、サーバー側の時間予算に達した時点で停止します。その予算に達した場合でも、レポートは最新のセッションを含む有効な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 | ユーザーは存在するが、レポート対象のステータスにあるセッションが1件もない。 | This user has no sessions in review, declined, approved or kyc expired to report. |
404 | APIキーに紐づくアプリケーションに、このvendor_dataを持つユーザーが存在しない(別のアプリケーションに属するユーザーを含む)。 | User not found. |
429 | 同じ認証情報から1分あたり50回を超えるPDF生成が行われた。この上限は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キーであれば、どれでもこのエンドポイントを呼び出せます。DiditのAPIキーは 役割単位ではなくアプリケーション単位です。Consoleの役割と権限 (read:usersなど)は人がConsoleで行える操作を決めるものであり、Management APIのトラフィックに対しては
評価されません。キーがエクスポートできるのは、そのキーに紐づくアプリケーションのユーザーのみです。
関連情報
- PDFを生成:単一セッションを対象とした同じレポート
- ユーザーのKYC履歴:ユーザーのセッションをJSONで一覧・確認する
- PDFとCSVのエクスポート:両方のエクスポートをConsoleで行う方法
- ユーザーの取得:ユーザーのプロフィールと機能マップをJSONで取得する
承認
お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権(なし、読み取り、書き込み)、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンが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.