Python
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 可重新检查电子签名步骤中已签署文件的完整性、PAdES 签名、证书、吊销数据和时间戳。
POST
/
v3
/
session
/
{sessionId}
/
signatures
/
{nodeId}
/
validate
/
Python
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 签名、证书、吊销数据和时间戳。简单签名没有数字签名,因此仅检查文件的完整性。不会重新签名。在控制台中,这对应会话的签名标签页中的重新验证按钮。
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 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
路径参数
用户验证(KYC)或企业验证(KYB)会话。
示例:
"11111111-2222-3333-4444-555555555555"
电子签名步骤:signatures[] 中项目的 node_id。
示例:
"feature_signature"
请求体
application/json
signatures[] 中某个签署人条目的 id。
响应
已核验的签署人,包含其更新后的 validation。
Show child attributes
Show child attributes
最后修改于 2026年11月7日