from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.sessions.signatures.validate(
"11111111-2222-3333-4444-555555555555",
"feature_signature",
signature_id="0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.sessions.signatures.validate(
"11111111-2222-3333-4444-555555555555",
"feature_signature",
{
signature_id: "0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10",
},
);
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Sessions.Signatures.Validate(ctx, "11111111-2222-3333-4444-555555555555", "feature_signature", didit.SessionsSignaturesValidateParams{
SignatureID: didit.String("0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10"),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.SessionsSignaturesValidateParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.sessions().signatures().validate("11111111-2222-3333-4444-555555555555", "feature_signature", SessionsSignaturesValidateParams.builder()
.signatureId("0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->sessions->signatures->validate('11111111-2222-3333-4444-555555555555', 'feature_signature', [
'signature_id' => '0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.sessions.signatures.validate(
"11111111-2222-3333-4444-555555555555",
"feature_signature",
signature_id: "0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Sessions.Signatures.ValidateAsync("11111111-2222-3333-4444-555555555555", "feature_signature", new SessionsSignaturesValidateParams
{
SignatureId = "0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10",
});
Console.WriteLine(JsonSerializer.Serialize(result));curl --request POST \
--url https://verification.didit.me/v3/session/{sessionId}/signatures/{nodeId}/validate/ \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"signature_id": "0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10"
}
'{
"signatures": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"node_id": "<string>",
"status": "intro",
"verdict": "Not Finished",
"level": "simple",
"format": "pdf",
"profile": "<string>",
"signer": {
"name": "<string>",
"capacity": "self",
"company": "<string>",
"role": "<string>",
"roles": [
"<string>"
],
"identity_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"identity_used": {
"session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kyc_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"verified": true,
"expected_name": "<string>"
},
"certificate": {
"issuer": "<string>",
"issued_to": "<string>",
"serial": "<string>",
"valid_from": "2023-11-07T05:31:56Z",
"valid_until": "2023-11-07T05:31:56Z"
},
"confirmation": {
"channel": "email",
"destination": "<string>",
"confirmed_at": "2023-11-07T05:31:56Z",
"attempts": 123
},
"timestamp": {
"time": "2023-11-07T05:31:56Z",
"qualified": true,
"valid": true
},
"documents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"file_name": "<string>",
"pages": 123,
"size_bytes": 123,
"sha256_original": "<string>",
"sha256_signed": "<string>",
"status": "signed",
"opened_at": "2023-11-07T05:31:56Z",
"read_at": "2023-11-07T05:31:56Z",
"read_to_end": true,
"consented_at": "2023-11-07T05:31:56Z",
"consent": true,
"signed_file": "<string>",
"mode": "fields",
"source_format": "pdf",
"conversion": {
"from": "docx",
"file_name": "<string>",
"sha256": "<string>",
"size_bytes": 123,
"converter": "<string>"
},
"fields": [
{
"key": "<string>",
"type": "signature",
"role": "verified_person",
"label": "<string>",
"page": 123,
"x": 123,
"y": 123,
"width": 123,
"height": 123,
"required": true,
"value": "<unknown>",
"display_value": "<string>",
"value_source": "signer",
"filled_at": "2023-11-07T05:31:56Z",
"image_url": "<string>",
"value_unavailable_reason": "source_empty"
}
]
}
],
"adopted_signature": {
"method": "typed",
"font": "<string>",
"adopted_at": "2023-11-07T05:31:56Z"
},
"electronic_signature_consent_at": "2023-11-07T05:31:56Z",
"evidence_file": "<string>",
"warnings": [
{
"code": "SIGNATURE_DECLINED",
"node_id": "<string>"
}
],
"validation": {
"valid": true,
"reason": "<string>",
"checked_at": "2023-11-07T05:31:56Z",
"documents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"checked_at": "2023-11-07T05:31:56Z",
"valid": true,
"integrity": true,
"trusted": true,
"revoked": true,
"trusted_list": {
"status": "<string>",
"reason": "<string>"
},
"certificate": {
"issuer": "<string>",
"issued_to": "<string>",
"serial": "<string>",
"valid_from": "2023-11-07T05:31:56Z",
"valid_until": "2023-11-07T05:31:56Z"
},
"timestamp": {
"time": "2023-11-07T05:31:56Z",
"qualified": true,
"valid": true
}
}
]
},
"declined_at": "2023-11-07T05:31:56Z",
"declined_action": "DECLINE",
"signed_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z",
"email_sent_at": "2023-11-07T05:31:56Z",
"email_unavailable_reason": "<string>",
"ip_address": "<string>",
"place": "<string>",
"place_unavailable_reason": "not_collected"
}
]
}{
"code": "signature_document_changed",
"detail": "signature_document_changed"
}{
"detail": "You do not have permission to perform this action."
}{
"code": "signature_not_found",
"detail": "signature_not_found"
}{
"code": "signature_not_signed",
"detail": "signature_not_signed"
}署名検証API:署名済みPDFの再チェック
Diditの署名検証APIは、電子署名ステップの署名済み書類を再チェックし、ファイルの完全性、PAdES署名、証明書、失効情報、タイムスタンプを確認します。
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.sessions.signatures.validate(
"11111111-2222-3333-4444-555555555555",
"feature_signature",
signature_id="0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.sessions.signatures.validate(
"11111111-2222-3333-4444-555555555555",
"feature_signature",
{
signature_id: "0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10",
},
);
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Sessions.Signatures.Validate(ctx, "11111111-2222-3333-4444-555555555555", "feature_signature", didit.SessionsSignaturesValidateParams{
SignatureID: didit.String("0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10"),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.SessionsSignaturesValidateParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.sessions().signatures().validate("11111111-2222-3333-4444-555555555555", "feature_signature", SessionsSignaturesValidateParams.builder()
.signatureId("0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->sessions->signatures->validate('11111111-2222-3333-4444-555555555555', 'feature_signature', [
'signature_id' => '0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.sessions.signatures.validate(
"11111111-2222-3333-4444-555555555555",
"feature_signature",
signature_id: "0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Sessions.Signatures.ValidateAsync("11111111-2222-3333-4444-555555555555", "feature_signature", new SessionsSignaturesValidateParams
{
SignatureId = "0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10",
});
Console.WriteLine(JsonSerializer.Serialize(result));curl --request POST \
--url https://verification.didit.me/v3/session/{sessionId}/signatures/{nodeId}/validate/ \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"signature_id": "0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10"
}
'{
"signatures": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"node_id": "<string>",
"status": "intro",
"verdict": "Not Finished",
"level": "simple",
"format": "pdf",
"profile": "<string>",
"signer": {
"name": "<string>",
"capacity": "self",
"company": "<string>",
"role": "<string>",
"roles": [
"<string>"
],
"identity_session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"identity_used": {
"session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kyc_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"verified": true,
"expected_name": "<string>"
},
"certificate": {
"issuer": "<string>",
"issued_to": "<string>",
"serial": "<string>",
"valid_from": "2023-11-07T05:31:56Z",
"valid_until": "2023-11-07T05:31:56Z"
},
"confirmation": {
"channel": "email",
"destination": "<string>",
"confirmed_at": "2023-11-07T05:31:56Z",
"attempts": 123
},
"timestamp": {
"time": "2023-11-07T05:31:56Z",
"qualified": true,
"valid": true
},
"documents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"file_name": "<string>",
"pages": 123,
"size_bytes": 123,
"sha256_original": "<string>",
"sha256_signed": "<string>",
"status": "signed",
"opened_at": "2023-11-07T05:31:56Z",
"read_at": "2023-11-07T05:31:56Z",
"read_to_end": true,
"consented_at": "2023-11-07T05:31:56Z",
"consent": true,
"signed_file": "<string>",
"mode": "fields",
"source_format": "pdf",
"conversion": {
"from": "docx",
"file_name": "<string>",
"sha256": "<string>",
"size_bytes": 123,
"converter": "<string>"
},
"fields": [
{
"key": "<string>",
"type": "signature",
"role": "verified_person",
"label": "<string>",
"page": 123,
"x": 123,
"y": 123,
"width": 123,
"height": 123,
"required": true,
"value": "<unknown>",
"display_value": "<string>",
"value_source": "signer",
"filled_at": "2023-11-07T05:31:56Z",
"image_url": "<string>",
"value_unavailable_reason": "source_empty"
}
]
}
],
"adopted_signature": {
"method": "typed",
"font": "<string>",
"adopted_at": "2023-11-07T05:31:56Z"
},
"electronic_signature_consent_at": "2023-11-07T05:31:56Z",
"evidence_file": "<string>",
"warnings": [
{
"code": "SIGNATURE_DECLINED",
"node_id": "<string>"
}
],
"validation": {
"valid": true,
"reason": "<string>",
"checked_at": "2023-11-07T05:31:56Z",
"documents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"checked_at": "2023-11-07T05:31:56Z",
"valid": true,
"integrity": true,
"trusted": true,
"revoked": true,
"trusted_list": {
"status": "<string>",
"reason": "<string>"
},
"certificate": {
"issuer": "<string>",
"issued_to": "<string>",
"serial": "<string>",
"valid_from": "2023-11-07T05:31:56Z",
"valid_until": "2023-11-07T05:31:56Z"
},
"timestamp": {
"time": "2023-11-07T05:31:56Z",
"qualified": true,
"valid": true
}
}
]
},
"declined_at": "2023-11-07T05:31:56Z",
"declined_action": "DECLINE",
"signed_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z",
"email_sent_at": "2023-11-07T05:31:56Z",
"email_unavailable_reason": "<string>",
"ip_address": "<string>",
"place": "<string>",
"place_unavailable_reason": "not_collected"
}
]
}{
"code": "signature_document_changed",
"detail": "signature_document_changed"
}{
"detail": "You do not have permission to perform this action."
}{
"code": "signature_not_found",
"detail": "signature_not_found"
}{
"code": "signature_not_signed",
"detail": "signature_not_signed"
}validationに保存します。Diditは署名済みのPDFをすべて読み直し、そのSHA-256を確認します。高度電子署名(AES)の場合は、PAdES署名、証明書、失効情報、タイムスタンプも検証します。シンプル署名にはデジタル署名がないため、ファイルの完全性のみを確認します。再署名は一切行われません。コンソールでは、セッションのSignatureタブにあるValidate againボタンがこの操作に当たります。
curl -X POST 'https://verification.didit.me/v3/session/{session_id}/signatures/{node_id}/validate/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"signature_id": "{signature_id}"}'
signature_idを送信します。指定しない場合、Diditはステップのすべての署名者をチェックし、いずれかの署名者が未署名であれば409とsignature_not_signedを返します。保存されている署名済みPDFがsha256_signedと一致しなくなっている場合は、400とsignature_document_changedが返されます。
レスポンスは、チェックされた署名者を含む{ "signatures": [...] }です。全体の結果はvalidation.valid、各書類の結果はvalidation.documents[]で確認してください。すべてのフィールドについては署名を再検証するを参照してください。
関連情報
承認
お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権(なし、読み取り、書き込み)、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください: https://docs.didit.me/console/api-keys
パスパラメータ
ユーザー認証(KYC)または法人確認(KYB)のセッションです。
"11111111-2222-3333-4444-555555555555"
電子署名ステップ: signatures[]内の項目のnode_id。
"feature_signature"
ボディ
signatures[]内の署名者1人分の項目のid。
レスポンス
チェックされた署名者と、更新されたvalidation。
Show child attributes
Show child attributes