curl -X POST \
https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/features/overrides/9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3/cancel/ \
-H 'x-api-key: YOUR_API_KEY'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.sessions.cancel_feature_override(
"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.sessions.cancelFeatureOverride(
"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3",
);
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Sessions.CancelFeatureOverride(ctx, "3fa85f64-5717-4562-b3fc-2c963f66afa6", "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3")
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.sessions().cancelFeatureOverride("3fa85f64-5717-4562-b3fc-2c963f66afa6", "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3");
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->sessions->cancelFeatureOverride('3fa85f64-5717-4562-b3fc-2c963f66afa6', '9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3');
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.sessions.cancel_feature_override(
"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3"
)
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.CancelFeatureOverrideAsync("3fa85f64-5717-4562-b3fc-2c963f66afa6", "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3");
Console.WriteLine(JsonSerializer.Serialize(result));{
"id": "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3",
"node_id": "feature_liveness_1",
"feature_type": "",
"feature_model": "Face",
"previous_status": "Declined",
"new_status": "Approved",
"state": "cancelled",
"forced": false,
"reason": "Liveness retried with a reviewer present.",
"requested_by": {
"email": "reviewer@example.com",
"name": "Alex Reviewer",
"type": "CONSOLE_USER"
},
"requested_at": "2026-10-13T09:15:00Z",
"applied_at": null,
"cancelled_at": "2026-10-13T09:20:00Z",
"cancel_reason": "cancelled_by_reviewer"
}取消功能覆盖 API:撤销待生效的步骤覆盖
取消仍在等待用户完成流程的步骤状态覆盖,使其不再生效,步骤保持原有状态。Didit 支持此操作。
curl -X POST \
https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/features/overrides/9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3/cancel/ \
-H 'x-api-key: YOUR_API_KEY'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.sessions.cancel_feature_override(
"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.sessions.cancelFeatureOverride(
"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3",
);
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Sessions.CancelFeatureOverride(ctx, "3fa85f64-5717-4562-b3fc-2c963f66afa6", "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3")
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.sessions().cancelFeatureOverride("3fa85f64-5717-4562-b3fc-2c963f66afa6", "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3");
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->sessions->cancelFeatureOverride('3fa85f64-5717-4562-b3fc-2c963f66afa6', '9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3');
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.sessions.cancel_feature_override(
"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3"
)
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.CancelFeatureOverrideAsync("3fa85f64-5717-4562-b3fc-2c963f66afa6", "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3");
Console.WriteLine(JsonSerializer.Serialize(result));{
"id": "9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3",
"node_id": "feature_liveness_1",
"feature_type": "",
"feature_model": "Face",
"previous_status": "Declined",
"new_status": "Approved",
"state": "cancelled",
"forced": false,
"reason": "Liveness retried with a reviewer present.",
"requested_by": {
"email": "reviewer@example.com",
"name": "Alex Reviewer",
"type": "CONSOLE_USER"
},
"requested_at": "2026-10-13T09:15:00Z",
"applied_at": null,
"cancelled_at": "2026-10-13T09:20:00Z",
"cancel_reason": "cancelled_by_reviewer"
}defer_until_flow_finishes: true 覆盖某个步骤,该覆盖会等待,并在流程结束后生效。如果你不再希望它生效,请在此处取消。
检查保持当前状态。
取消操作会以 FEATURE_OVERRIDE_CANCELLED 记录在会话活动中,且不会发送 Webhook。
响应为该覆盖,其中 state: cancelled,cancel_reason: cancelled_by_reviewer。
查找覆盖 ID
使用 更新功能状态 返回的override 对象中的 id,或使用 列出功能覆盖 列出会话的覆盖,然后选择 state 为 pending_until_flow_finishes 的那一项。
取消失败时
已生效或已取消的覆盖会返回409,错误代码为 feature_override_not_pending。如需在覆盖生效后修改检查,请改为发送新的 更新功能状态 请求。
相关内容
授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
路径参数
验证会话的 UUID。支持用户(KYC)和企业(KYB)会话 ID。
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
要取消的覆盖项 id。
"9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3"
响应
覆盖已取消,且永不生效。
通过 PATCH /v3/session/{sessionId}/features/{nodeId}/update-status/ 对某项检查(功能)状态进行的一次覆盖:它更改了什么、是否已应用或仍在等待用户完成流程、发起者以及原因。
覆盖项的标识符。将其传递给取消 endpoint。
"7c9e6679-7425-40de-944b-e07fc1f90ae7"
请求指定的工作流节点(对于没有节点的步骤为 default)。
"feature_ocr_1"
请求传递的 feature_type;若未传递,则为空字符串。
""
被覆盖的核验类型,例如 KYC、Face、AML 或 GeolocationCheck。
"KYC"
请求覆盖时该检查的状态。
Not Finished, Approved, Declined, In Review, Resub Requested "In Review"
覆盖所设置的状态。
Approved, Declined, In Review "Approved"
applied:检查已获得新状态。pending_until_flow_finishes:覆盖设置处于等待状态,并在该人员完成流程时应用。cancelled:已等待且从未应用(参见 cancel_reason)。
applied, pending_until_flow_finishes, cancelled "applied"
当该人员仍在流程中且覆写立即生效时为 true。
false
随请求发送的 comment,或为 null。
"Document manually verified by compliance."
请求覆盖的人员;若未知则为 null。
Show child attributes
Show child attributes
请求覆盖的时间。
"2026-10-13T09:15:00Z"
检查变为新状态的时间,等待中或一旦取消则为 null。
"2026-10-13T09:15:00Z"
等待中的覆盖被取消的时间,或为 null。
null
处于等待状态的覆盖为何从未生效,或为 null。cancelled_by_reviewer:已通过取消 endpoint 取消。replaced:同一项检查上更新的覆盖替换了它。check_changed:用户在完成流程之前重新进行了检查。session_closed:会话在用户完成之前离开了流程(已放弃、已过期或在流程中做出决策)。
cancelled_by_reviewer, replaced, check_changed, session_closed, null null