内部API仕様(身元確認コールバック)
このドキュメントでは、外部システム連携用の内部APIの仕様を説明します。 主に身元確認関連のコールバックAPIを含みます。
概要
内部APIは、外部の身元確認サービスからのコールバックを受け付けるためのAPIです。 審査結果の通知や検証済みクレーム(verified_claims)の登録などに使用されます。
これらのAPIは、Control Plane APIで登録されたテンプレートに基づいて動的にルーティングされ ます。
共通仕様
認証
コールバックAPIの認証方式はテンプレートで定義されます:
- OAuth2:
auth_type: "oauth2"- クライアントクレデンシャルフロー - HMAC SHA256:
auth_type: "hmac_sha256"- リクエスト署名検証 - なし:
auth_type: "none"- 認証なし(推奨されません)
リクエスト形式
- Content-Type:
application/json - 文字エンコーディング: UTF-8
申込み特定
コールバックAPIでは、テンプレートの common.callback_application_id_param に指定されたパラメータ名を使用して申込みを特定します。
{
"common": {
"external_service": "external-kyc-service",
"callback_application_id_param": "application_id"
}
}
上記の設定の場合、リクエストボディに application_id パラメータが必要です。
エラーレスポンス
共通エラー形式
{
"error": "error_code",
"error_description": "エラーの詳細説明"
}
HTTPステータスコード
| HTTPステータス | 説明 | 発生条件 |
|---|---|---|
200 | 成功 | コールバック処理が正常に完了した |
400 | クライアントエラー | リクエストパラメータが不正、検証エラー |
401 | 認証エラー | 認証情報が無効 |
404 | リソース不明 | 指定された申込みが存在しない |
409 | 競合エラー | 申込みの状態が競合している |
500 | サーバーエ ラー | サーバー内部エラー |
エラーコード
認証エラー(401)
{
"error": "unauthorized",
"error_description": "Invalid authentication credentials"
}
発生条件:
- OAuth2トークンが無効
- HMAC署名が一致しない
- 認証ヘッダーが欠落
申込み不明(404)
{
"error": "not_found",
"error_description": "Application not found"
}
発生条件:
- 指定された申込みIDが存在しない
- 申込みが既に削除されている
検証エラー(400)
{
"error": "invalid_request",
"error_description": "Request validation failed",
"errors": [
{
"field": "status",
"message": "must be one of: approved, rejected"
}
]
}
発生条件:
- リクエストボディの形式が不正
- 必須パラメータが欠落
- パラメータの値が制約に違反
競合エラー(409)
{
"error": "conflict",
"error_description": "Application status conflict",
"current_status": "approved"
}
発生条件:
- 申込みが既に承認済み
- 申込みがキャンセル済み
- ステータス遷移が不正
サーバーエラー(500)
{
"error": "server_error",
"error_description": "An internal server error occurred"
}
発生条件:
- データベース接続エラー
- 予期しない内部エラー
API エンドポイント
身元確認コールバック(プロセス指定なし)
エンドポイント
POST /{tenant-id}/internal/v1/identity-verification/callback/{verification-type}/{process}
パスパラメータ
| パラメータ | 説明 | 例 |
|---|---|---|
tenant-id | テナントID(UUID) | 67e7eae6-62b0-4500-9eff-87459f63fc66 |
verification-type | 申込み種別(テンプレートのtype) | investment-account-opening |
process | プロセス名(テンプレートのprocessesキー) | callback-result |
認証
テンプレートで定義された認証方式に従います。
OAuth2の例:
Authorization: Bearer {access_token}
HMAC SHA256の例:
X-Signature: sha256=<base64-encoded-hmac-signature>
X-Timestamp: 1640000000
リクエストボディ例
{
"application_id": "ext-12345",
"status": "approved",
"verified_data": {
"family_name": "山田",
"given_name": "太郎",
"date_of_birth": "1990-01-01",
"address": {
"country": "JP",
"postal_code": "100-0001",
"region": "東京都",
"locality": "千代田区"
}
},
"document": {
"type": "drivers_license",
"number": "XXXX-XXXX-XXXX",
"issue_date": "2020-01-15",
"expiry_date": "2030-01-15"
}
}
成功レスポンス(200 OK)
{
"status": "success",
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"verification_type": "investment-account-opening",
"current_status": "approved"
}
エラーレスポンス(400 Bad Request)
{
"error": "invalid_request",
"error_description": "Request validation failed",
"errors": [
{
"field": "verified_data.date_of_birth",
"message": "date format must be YYYY-MM-DD"
}
]
}