curl -X POST 'https://verification.didit.me/v3/age-estimation/' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'user_image=@./selfie.jpg' \
-F 'age_estimation_decline_threshold=18' \
-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.age_estimation.estimate(
user_image=open("user_image.jpg", "rb"),
face_liveness_score_decline_threshold=30.0,
age_estimation_decline_threshold=18,
rotate_image=False,
save_api_request=True,
vendor_data="user-123",
metadata={"flow": "age-gate"},
)
print(result)import Didit, { fileFromPath } from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.ageEstimation.estimate({
user_image: await fileFromPath("user_image.jpg"),
face_liveness_score_decline_threshold: 30.0,
age_estimation_decline_threshold: 18,
rotate_image: false,
save_api_request: true,
vendor_data: "user-123",
metadata: { flow: "age-gate" },
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.AgeEstimation.Estimate(ctx, didit.AgeEstimationEstimateParams{
UserImage: didit.FileFromPath("user_image.jpg"),
FaceLivenessScoreDeclineThreshold: didit.Float(30.0),
AgeEstimationDeclineThreshold: didit.Int(18),
RotateImage: didit.Bool(false),
SaveAPIRequest: didit.Bool(true),
VendorData: didit.String("user-123"),
Metadata: didit.Some(map[string]any{"flow": "age-gate"}),
})
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.AgeEstimationEstimateParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.ageEstimation().estimate(AgeEstimationEstimateParams.builder()
.userImage(Path.of("user_image.jpg"))
.faceLivenessScoreDeclineThreshold(30.0)
.ageEstimationDeclineThreshold(18L)
.rotateImage(false)
.saveApiRequest(true)
.vendorData("user-123")
.metadata(Map.of("flow", "age-gate"))
.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->ageEstimation->estimate([
'user_image' => File::fromPath('user_image.jpg'),
'face_liveness_score_decline_threshold' => 30.0,
'age_estimation_decline_threshold' => 18,
'rotate_image' => false,
'save_api_request' => true,
'vendor_data' => 'user-123',
'metadata' => ['flow' => 'age-gate'],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.age_estimation.estimate(
user_image: Pathname("user_image.jpg"),
face_liveness_score_decline_threshold: 30.0,
age_estimation_decline_threshold: 18,
rotate_image: false,
save_api_request: true,
vendor_data: "user-123",
metadata: { flow: "age-gate" }
)
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.AgeEstimation.EstimateAsync(new AgeEstimationEstimateParams
{
UserImage = FileUpload.FromPath("user_image.jpg"),
FaceLivenessScoreDeclineThreshold = 30.0,
AgeEstimationDeclineThreshold = 18,
RotateImage = false,
SaveApiRequest = true,
VendorData = "user-123",
Metadata = new Dictionary<string, object> { ["flow"] = "age-gate" },
});
Console.WriteLine(JsonSerializer.Serialize(result));年齢推定APIリファレンス:セルフィーによる年齢確認
DiditのPOST /v3/age-estimation/は、パッシブライブネス検知を内蔵したAI年齢推定APIです。身分証は不要で、推論は2秒未満、料金は従量課金制です。
curl -X POST 'https://verification.didit.me/v3/age-estimation/' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'user_image=@./selfie.jpg' \
-F 'age_estimation_decline_threshold=18' \
-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.age_estimation.estimate(
user_image=open("user_image.jpg", "rb"),
face_liveness_score_decline_threshold=30.0,
age_estimation_decline_threshold=18,
rotate_image=False,
save_api_request=True,
vendor_data="user-123",
metadata={"flow": "age-gate"},
)
print(result)import Didit, { fileFromPath } from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.ageEstimation.estimate({
user_image: await fileFromPath("user_image.jpg"),
face_liveness_score_decline_threshold: 30.0,
age_estimation_decline_threshold: 18,
rotate_image: false,
save_api_request: true,
vendor_data: "user-123",
metadata: { flow: "age-gate" },
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.AgeEstimation.Estimate(ctx, didit.AgeEstimationEstimateParams{
UserImage: didit.FileFromPath("user_image.jpg"),
FaceLivenessScoreDeclineThreshold: didit.Float(30.0),
AgeEstimationDeclineThreshold: didit.Int(18),
RotateImage: didit.Bool(false),
SaveAPIRequest: didit.Bool(true),
VendorData: didit.String("user-123"),
Metadata: didit.Some(map[string]any{"flow": "age-gate"}),
})
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.AgeEstimationEstimateParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.ageEstimation().estimate(AgeEstimationEstimateParams.builder()
.userImage(Path.of("user_image.jpg"))
.faceLivenessScoreDeclineThreshold(30.0)
.ageEstimationDeclineThreshold(18L)
.rotateImage(false)
.saveApiRequest(true)
.vendorData("user-123")
.metadata(Map.of("flow", "age-gate"))
.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->ageEstimation->estimate([
'user_image' => File::fromPath('user_image.jpg'),
'face_liveness_score_decline_threshold' => 30.0,
'age_estimation_decline_threshold' => 18,
'rotate_image' => false,
'save_api_request' => true,
'vendor_data' => 'user-123',
'metadata' => ['flow' => 'age-gate'],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.age_estimation.estimate(
user_image: Pathname("user_image.jpg"),
face_liveness_score_decline_threshold: 30.0,
age_estimation_decline_threshold: 18,
rotate_image: false,
save_api_request: true,
vendor_data: "user-123",
metadata: { flow: "age-gate" }
)
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.AgeEstimation.EstimateAsync(new AgeEstimationEstimateParams
{
UserImage = FileUpload.FromPath("user_image.jpg"),
FaceLivenessScoreDeclineThreshold = 30.0,
AgeEstimationDeclineThreshold = 18,
RotateImage = false,
SaveApiRequest = true,
VendorData = "user-123",
Metadata = new Dictionary<string, object> { ["flow"] = "age-gate" },
});
Console.WriteLine(JsonSerializer.Serialize(result));承認
お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権(なし、読み取り、書き込み)、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください: https://docs.didit.me/console/api-keys
ボディ
分析する顔写真(例: セルフィー)。被写体の顔がはっきりと写り、十分に明るい正面向きの写真を1枚送信してください。使用可能な拡張子: tiff、jpg、jpeg、png、webp(PDFは不可)。最大アップロードサイズ: 5 MB(これを超えるファイルは400で拒否されます)。画像は処理前に自動的に約0.3 MBに圧縮されるため、解像度を非常に高くしても精度は向上しません。
ライブネスのしきい値(0–100)。ライブネスのscoreがこの値以下の場合、LOW_LIVENESS_SCORE警告が追加され、却下されます。より厳格ななりすまし対策にするには値を上げてください。0–100の範囲外の値は400を返します。
0 <= x <= 10030
許容される推定年齢の最小値(歳)。推定年齢がこの値を下回る場合はAGE_BELOW_MINIMUM警告が追加され、却下されます。0に設定すると年齢チェックが無効になります(その場合、呼び出しではライブネス検知と年齢推定のみが実行され、年齢に基づく判定は行われません)。
0 <= x <= 10018
trueの場合、入力画像を90度単位(0、90、180、270)で試し、最も良好に顔を検出できる向きを使用します。EXIFの向き情報がないモバイル撮影画像に便利です。レイテンシが増加するため、画像が正立していることを保証できない場合にのみ有効にしてください。
false
true(デフォルト)の場合、呼び出しはAPIタイプのセッションとして保存されます。このセッションはBusiness Consoleに表示され、返されたrequest_idを使ってGET /v3/session/{sessionId}/decision/で取得でき、status.updatedWebhookで通知され、検出された顔はアプリケーションの顔インデックスに追加されます。falseの場合、何も保存されず、request_idはレスポンスの照合専用の一時的なUUIDになります。
true
任意の不透明な文字列(社内のユーザーID、メールアドレス、UUIDなど)です。保存されたセッションに格納され、レスポンスでそのまま返されます。API呼び出しを自社の記録と関連付けたり、後でセッションを絞り込んだりするために使用します。
"user-123"
セッションとともに保存され(save_api_request=trueの場合)、レスポンスでそのまま返される任意のJSONオブジェクトです。マルチパートリクエストでは、JSONエンコードされた文字列フィールドとして送信してください(例: metadata={"flow":"age-gate"})。オブジェクトとして解析されます。
{ "flow": "age-gate" }
レスポンス
年齢推定とパッシブライブネスが完了しました。age_estimation.age_estimationは、検出された最も大きい顔についてモデルが予測した年齢(年)です(顔がない場合はnull)。age_estimation.scoreはパッシブライブネスのスコア(0–100)です。statusはwarningsが空の場合にのみApprovedになります。未成年またはなりすましの撮影でも200とstatus: "Declined"が返されるため、HTTPコードだけでなくボディを確認してください。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)。