curl -X POST 'https://verification.didit.me/v3/passive-liveness/' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'user_image=@./selfie.jpg' \
-F 'face_liveness_score_decline_threshold=30' \
-F 'save_api_request=true' \
-F 'vendor_data=user-123'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.passive_liveness.check(
user_image=open("user_image.jpg", "rb"),
face_liveness_score_decline_threshold=30.0,
rotate_image=False,
save_api_request=True,
vendor_data="user-123",
metadata={"flow": "withdrawal"},
)
print(result)import Didit, { fileFromPath } from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.passiveLiveness.check({
user_image: await fileFromPath("user_image.jpg"),
face_liveness_score_decline_threshold: 30.0,
rotate_image: false,
save_api_request: true,
vendor_data: "user-123",
metadata: { flow: "withdrawal" },
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.PassiveLiveness.Check(ctx, didit.PassiveLivenessCheckParams{
UserImage: didit.FileFromPath("user_image.jpg"),
FaceLivenessScoreDeclineThreshold: didit.Float(30.0),
RotateImage: didit.Bool(false),
SaveAPIRequest: didit.Bool(true),
VendorData: didit.String("user-123"),
Metadata: didit.Some(map[string]any{"flow": "withdrawal"}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.nio.file.Path;
import java.util.Map;
import me.didit.Didit;
import me.didit.types.PassiveLivenessCheckParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.passiveLiveness().check(PassiveLivenessCheckParams.builder()
.userImage(Path.of("user_image.jpg"))
.faceLivenessScoreDeclineThreshold(30.0)
.rotateImage(false)
.saveApiRequest(true)
.vendorData("user-123")
.metadata(Map.of("flow", "withdrawal"))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
use Didit\File;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->passiveLiveness->check([
'user_image' => File::fromPath('user_image.jpg'),
'face_liveness_score_decline_threshold' => 30.0,
'rotate_image' => false,
'save_api_request' => true,
'vendor_data' => 'user-123',
'metadata' => ['flow' => 'withdrawal'],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.passive_liveness.check(
user_image: Pathname("user_image.jpg"),
face_liveness_score_decline_threshold: 30.0,
rotate_image: false,
save_api_request: true,
vendor_data: "user-123",
metadata: { flow: "withdrawal" }
)
puts result.to_husing System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.PassiveLiveness.CheckAsync(new PassiveLivenessCheckParams
{
UserImage = FileUpload.FromPath("user_image.jpg"),
FaceLivenessScoreDeclineThreshold = 30.0,
RotateImage = false,
SaveApiRequest = true,
VendorData = "user-123",
Metadata = new Dictionary<string, object> { ["flow"] = "withdrawal" },
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
"liveness": {
"status": "Approved",
"method": "PASSIVE",
"score": 95,
"user_image": {
"entities": [
{
"bbox": [
661,
728,
1688,
2188
],
"confidence": 0.732973,
"age": 26.91,
"gender": "male",
"race": null
}
],
"best_angle": 0
},
"warnings": [],
"face_quality": 84.21,
"face_luminance": 50.33
},
"vendor_data": "user-123",
"metadata": null,
"created_at": "2026-06-12T01:04:42.763237+00:00"
}パッシブライブネス検知API:ディープフェイク検出
DiditのパッシブライブネスAPIは、1枚の画像からマスク、印刷物、リプレイ、ディープフェイクを検知します。完全パッシブで推論は2秒未満、従量課金制で月額最低料金はありません。
curl -X POST 'https://verification.didit.me/v3/passive-liveness/' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'user_image=@./selfie.jpg' \
-F 'face_liveness_score_decline_threshold=30' \
-F 'save_api_request=true' \
-F 'vendor_data=user-123'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.passive_liveness.check(
user_image=open("user_image.jpg", "rb"),
face_liveness_score_decline_threshold=30.0,
rotate_image=False,
save_api_request=True,
vendor_data="user-123",
metadata={"flow": "withdrawal"},
)
print(result)import Didit, { fileFromPath } from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.passiveLiveness.check({
user_image: await fileFromPath("user_image.jpg"),
face_liveness_score_decline_threshold: 30.0,
rotate_image: false,
save_api_request: true,
vendor_data: "user-123",
metadata: { flow: "withdrawal" },
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.PassiveLiveness.Check(ctx, didit.PassiveLivenessCheckParams{
UserImage: didit.FileFromPath("user_image.jpg"),
FaceLivenessScoreDeclineThreshold: didit.Float(30.0),
RotateImage: didit.Bool(false),
SaveAPIRequest: didit.Bool(true),
VendorData: didit.String("user-123"),
Metadata: didit.Some(map[string]any{"flow": "withdrawal"}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.nio.file.Path;
import java.util.Map;
import me.didit.Didit;
import me.didit.types.PassiveLivenessCheckParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.passiveLiveness().check(PassiveLivenessCheckParams.builder()
.userImage(Path.of("user_image.jpg"))
.faceLivenessScoreDeclineThreshold(30.0)
.rotateImage(false)
.saveApiRequest(true)
.vendorData("user-123")
.metadata(Map.of("flow", "withdrawal"))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
use Didit\File;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->passiveLiveness->check([
'user_image' => File::fromPath('user_image.jpg'),
'face_liveness_score_decline_threshold' => 30.0,
'rotate_image' => false,
'save_api_request' => true,
'vendor_data' => 'user-123',
'metadata' => ['flow' => 'withdrawal'],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.passive_liveness.check(
user_image: Pathname("user_image.jpg"),
face_liveness_score_decline_threshold: 30.0,
rotate_image: false,
save_api_request: true,
vendor_data: "user-123",
metadata: { flow: "withdrawal" }
)
puts result.to_husing System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.PassiveLiveness.CheckAsync(new PassiveLivenessCheckParams
{
UserImage = FileUpload.FromPath("user_image.jpg"),
FaceLivenessScoreDeclineThreshold = 30.0,
RotateImage = false,
SaveApiRequest = true,
VendorData = "user-123",
Metadata = new Dictionary<string, object> { ["flow"] = "withdrawal" },
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
"liveness": {
"status": "Approved",
"method": "PASSIVE",
"score": 95,
"user_image": {
"entities": [
{
"bbox": [
661,
728,
1688,
2188
],
"confidence": 0.732973,
"age": 26.91,
"gender": "male",
"race": null
}
],
"best_angle": 0
},
"warnings": [],
"face_quality": 84.21,
"face_luminance": 50.33
},
"vendor_data": "user-123",
"metadata": null,
"created_at": "2026-06-12T01:04:42.763237+00:00"
}承認
お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権(なし、読み取り、書き込み)、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください: https://docs.didit.me/console/api-keys
ボディ
正面を向いた顔画像(セルフィーなど)。使用可能な拡張子: tiff、jpg、jpeg、png、webp。最大アップロードサイズ: 5 MB(これを超えるファイルは400で拒否されます)。画像は処理前に自動的に約0.5 MBに圧縮されるため、解像度を非常に高くしても精度は向上しません。画像には被写体を1人だけ含めてください。複数の顔が含まれる場合は最も大きい顔が評価され、MULTIPLE_FACES_DETECTED警告が追加されます。
ライブネススコアのしきい値(0–100)。算出されたスコアがこの値以下の場合、LOW_LIVENESS_SCORE警告が出され、statusがDeclinedに設定されます。デフォルトは30です。より厳格ななりすまし対策にするには値を上げてください。0–100の範囲外の値は400を返します。
0 <= x <= 10030
trueの場合、入力を90度ずつ回転させて試し、最も良好に顔を検出できる向きを使用します。EXIFの向き情報がない場合に便利です。レイテンシが増加します。
false
true(デフォルト)の場合、呼び出しをAPIタイプのセッションとして保存し、顔画像を保存し、status.updatedWebhookを送信し、検出された顔を顔検索インデックスに登録します。falseの場合、呼び出しは1回限りで、何も保存されず、顔も登録されません。ブロックリストと重複のスクリーニングは、どちらの場合も実行されます。
true
任意の不透明な識別子(ユーザーID、メールアドレス、UUIDなど)です。保存されたセッションに格納され、そのまま返されます。また、同じvendor_dataを持つ過去のセッションを重複顔チェックから除外するためにも使用されるため、同じユーザーを再検証してもDUPLICATED_FACEは発生しません。
"user-123"
セッションとともに保存され(save_api_request=trueの場合)、そのまま返される任意のJSONオブジェクトです。マルチパートリクエストでは、JSONエンコードされた文字列フィールドとして送信してください。オブジェクトとして解析されます。
{ "flow": "withdrawal" }
レスポンス
パッシブライブネスが完了しました。liveness.scoreは、画像に生身の人物が写っていることに対するモデルの0〜100の信頼度です。error重大度の警告が発生しない限り、statusはApprovedです。なりすましの顔やブロックリストに登録された顔でも200が返るため、HTTPコードだけでなくliveness.statusとliveness.warningsを確認してください。save_api_request=trueの場合、request_idは保存されたセッションIDです。
save_api_request=trueの場合は保存されたセッションID(GET /v3/session/{sessionId}/decision/で使用可能)、それ以外の場合は一時的な相関UUIDです。
Show child attributes
Show child attributes
送信したvendor_dataのエコー、またはnull。
送信したmetadataオブジェクトのエコー、またはnull。
レスポンスが生成された日時を示すISO 8601タイムスタンプ(UTC)。例: 2026-06-12T01:04:42.763237+00:00。