curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/analytics/?start_date=2026-10-01&end_date=2026-10-15' \
-H 'x-api-key: YOUR_API_KEY'from didit import Didit
# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
# and DIDIT_APPLICATION_ID.
client = Didit()
result = client.analytics.retrieve()
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
// and DIDIT_APPLICATION_ID.
const didit = new Didit();
const result = await didit.analytics.retrieve();
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
// and DIDIT_APPLICATION_ID.
client := didit.NewClient()
result, err := client.Analytics.Retrieve(ctx, didit.AnalyticsRetrieveParams{})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
// and DIDIT_APPLICATION_ID.
Didit client = new Didit();
var result = client.analytics().retrieve();
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
// and DIDIT_APPLICATION_ID.
$didit = new DiditClient();
$result = $didit->analytics->retrieve();
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
# and DIDIT_APPLICATION_ID.
didit = Didit::Client.new
result = didit.analytics.retrieve
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
// and DIDIT_APPLICATION_ID.
using var client = new DiditClient();
var result = await client.Analytics.RetrieveAsync();
Console.WriteLine(JsonSerializer.Serialize(result));{
"grouping_mode": "day",
"data_points": [
{
"rounded_date": "2026-10-14",
"total": 12,
"approved": 8,
"declined": 1,
"canceled": 1,
"pending": 2,
"in_review": 1,
"expired": 1,
"abandoned": 0,
"in_progress": 1,
"not_started": 0,
"manually_approved": 1,
"manually_declined": 0
},
{
"rounded_date": "2026-10-15",
"total": 10,
"approved": 6,
"declined": 2,
"canceled": 0,
"pending": 2,
"in_review": 2,
"expired": 0,
"abandoned": 0,
"in_progress": 0,
"not_started": 0,
"manually_approved": 0,
"manually_declined": 1
}
],
"request_breakdown": {
"total_approved": 14,
"total_in_review": 3,
"total_declined": 3,
"total_canceled": 1,
"total_pending": 4,
"total_expired": 1,
"total_abandoned": 0,
"total_in_progress": 1,
"total_not_started": 0,
"total_manually_approved": 1,
"total_manually_declined": 1
},
"conversion_rate": 70,
"location_stats": {
"countries": [
{
"session_count": 15,
"country": "Spain",
"country_code": "ES"
},
{
"session_count": 7,
"country": "Portugal",
"country_code": "PT"
}
],
"ip_countries": [
{
"session_count": 15,
"country": "Spain",
"country_code": "ES"
},
{
"session_count": 7,
"country": "Portugal",
"country_code": "PT"
}
],
"id_countries": [
{
"country": "Spain",
"country_code": "ES",
"session_count": 14
},
{
"country": "Portugal",
"country_code": "PT",
"session_count": 6
}
],
"conversion_by_country": [
{
"country": "Spain",
"country_code": "ES",
"finished": 13,
"approved": 10
},
{
"country": "Portugal",
"country_code": "PT",
"finished": 6,
"approved": 4
}
],
"cities": [
{
"session_count": 9,
"location": "Madrid, Spain",
"latitude": 40.4168,
"longitude": -3.7038
}
]
},
"demographic_stats": {
"age_distribution": {
"under_18": 0,
"18_24": 5,
"25_34": 8,
"35_44": 4,
"45_64": 2,
"65_plus": 1
},
"gender_distribution": {
"M": 11,
"F": 9
}
},
"device_details": {
"device_models": [
{
"device": "Apple",
"count": 12
},
{
"device": "Android",
"count": 10
}
],
"browsers": [
{
"browser": "Safari",
"count": 12
},
{
"browser": "Chrome",
"count": 10
}
],
"operating_systems": [
{
"os": "iOS",
"count": 12
},
{
"os": "Android",
"count": 10
}
]
},
"workflow_funnel_stats": {
"33333333-4444-5555-6666-777777777777": {
"total": 22,
"steps": {
"OCR": {
"reached": 21
},
"LIVENESS": {
"reached": 19
},
"FACE_MATCH": {
"reached": 19
},
"AML": {
"reached": 18
}
}
}
},
"verification_time_stats": {
"overall_avg_seconds": 64,
"overall_count": 18,
"per_feature": {
"OCR": {
"avg_seconds": 41.2,
"total_seconds": 741.6,
"count": 18
},
"LIVENESS": {
"avg_seconds": 22.8,
"total_seconds": 410.4,
"count": 18
}
},
"per_sub_step": {
"OCR": {
"front_id_photo": {
"avg_seconds": 18.3,
"total_seconds": 329.4,
"count": 18
}
}
}
},
"resubmission_stats": {
"first_pass": 17,
"second": 2,
"third_plus": 1,
"abandoned": 0
},
"warning_stats": {
"ID_VERIFICATION": {
"total": 21,
"risks": {
"DOCUMENT_EXPIRED": {
"error": 1,
"warning": 0,
"information": 0
}
}
},
"LIVENESS": {
"total": 19,
"risks": {
"LOW_LIVENESS_SCORE": {
"error": 0,
"warning": 2,
"information": 0
}
}
}
},
"original_status_stats": {
"approved": 13,
"in_review": 5,
"declined": 2
},
"demographic_time_series": [
{
"date": "2026-10-14",
"age_distribution": {
"under_18": 0,
"18_24": 3,
"25_34": 4,
"35_44": 2,
"45_64": 1,
"65_plus": 0
},
"gender_distribution": {
"M": 6,
"F": 4
}
},
{
"date": "2026-10-15",
"age_distribution": {
"under_18": 0,
"18_24": 2,
"25_34": 4,
"35_44": 2,
"45_64": 1,
"65_plus": 1
},
"gender_distribution": {
"M": 5,
"F": 5
}
}
],
"device_time_series": [
{
"date": "2026-10-14",
"devices": {
"Apple": 7,
"Android": 5
},
"browsers": {
"Safari": 7,
"Chrome": 5
},
"operating_systems": {
"iOS": 7,
"Android": 5
}
},
{
"date": "2026-10-15",
"devices": {
"Apple": 5,
"Android": 5
},
"browsers": {
"Safari": 5,
"Chrome": 5
},
"operating_systems": {
"iOS": 5,
"Android": 5
}
}
],
"verification_time_time_series": [
{
"date": "2026-10-14",
"overall_avg": 66.1,
"per_feature": {
"OCR": 42,
"LIVENESS": 24.1
}
},
{
"date": "2026-10-15",
"overall_avg": 61.5,
"per_feature": {
"OCR": 40.2,
"LIVENESS": 21.3
}
}
],
"resubmission_time_series": [
{
"date": "2026-10-14",
"first_pass": 9,
"second": 1,
"third_plus": 0,
"abandoned": 0
},
{
"date": "2026-10-15",
"first_pass": 8,
"second": 1,
"third_plus": 1,
"abandoned": 0
}
],
"original_status_time_series": [
{
"date": "2026-10-14",
"approved": 7,
"in_review": 3,
"declined": 1
},
{
"date": "2026-10-15",
"approved": 6,
"in_review": 2,
"declined": 1
}
],
"previous_data_points": [
{
"rounded_date": "2026-10-12",
"total": 9,
"approved": 6,
"declined": 1,
"canceled": 1,
"pending": 1
},
{
"rounded_date": "2026-10-13",
"total": 11,
"approved": 7,
"declined": 2,
"canceled": 0,
"pending": 2
}
],
"previous_request_breakdown": {
"total_approved": 13,
"total_in_review": 2,
"total_declined": 3,
"total_canceled": 1,
"total_pending": 3
}
}Didit 应用分析 API:查询验证数据指标
通过 Didit 按日期范围读取应用的验证分析数据,包括 KYC 会话总数、转化率、漏斗,以及 KYB 和交易监控仪表板组件数据。
curl -X GET 'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/analytics/?start_date=2026-10-01&end_date=2026-10-15' \
-H 'x-api-key: YOUR_API_KEY'from didit import Didit
# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
# and DIDIT_APPLICATION_ID.
client = Didit()
result = client.analytics.retrieve()
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
// and DIDIT_APPLICATION_ID.
const didit = new Didit();
const result = await didit.analytics.retrieve();
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
// and DIDIT_APPLICATION_ID.
client := didit.NewClient()
result, err := client.Analytics.Retrieve(ctx, didit.AnalyticsRetrieveParams{})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
// and DIDIT_APPLICATION_ID.
Didit client = new Didit();
var result = client.analytics().retrieve();
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
// and DIDIT_APPLICATION_ID.
$didit = new DiditClient();
$result = $didit->analytics->retrieve();
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
# and DIDIT_APPLICATION_ID.
didit = Didit::Client.new
result = didit.analytics.retrieve
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
// and DIDIT_APPLICATION_ID.
using var client = new DiditClient();
var result = await client.Analytics.RetrieveAsync();
Console.WriteLine(JsonSerializer.Serialize(result));{
"grouping_mode": "day",
"data_points": [
{
"rounded_date": "2026-10-14",
"total": 12,
"approved": 8,
"declined": 1,
"canceled": 1,
"pending": 2,
"in_review": 1,
"expired": 1,
"abandoned": 0,
"in_progress": 1,
"not_started": 0,
"manually_approved": 1,
"manually_declined": 0
},
{
"rounded_date": "2026-10-15",
"total": 10,
"approved": 6,
"declined": 2,
"canceled": 0,
"pending": 2,
"in_review": 2,
"expired": 0,
"abandoned": 0,
"in_progress": 0,
"not_started": 0,
"manually_approved": 0,
"manually_declined": 1
}
],
"request_breakdown": {
"total_approved": 14,
"total_in_review": 3,
"total_declined": 3,
"total_canceled": 1,
"total_pending": 4,
"total_expired": 1,
"total_abandoned": 0,
"total_in_progress": 1,
"total_not_started": 0,
"total_manually_approved": 1,
"total_manually_declined": 1
},
"conversion_rate": 70,
"location_stats": {
"countries": [
{
"session_count": 15,
"country": "Spain",
"country_code": "ES"
},
{
"session_count": 7,
"country": "Portugal",
"country_code": "PT"
}
],
"ip_countries": [
{
"session_count": 15,
"country": "Spain",
"country_code": "ES"
},
{
"session_count": 7,
"country": "Portugal",
"country_code": "PT"
}
],
"id_countries": [
{
"country": "Spain",
"country_code": "ES",
"session_count": 14
},
{
"country": "Portugal",
"country_code": "PT",
"session_count": 6
}
],
"conversion_by_country": [
{
"country": "Spain",
"country_code": "ES",
"finished": 13,
"approved": 10
},
{
"country": "Portugal",
"country_code": "PT",
"finished": 6,
"approved": 4
}
],
"cities": [
{
"session_count": 9,
"location": "Madrid, Spain",
"latitude": 40.4168,
"longitude": -3.7038
}
]
},
"demographic_stats": {
"age_distribution": {
"under_18": 0,
"18_24": 5,
"25_34": 8,
"35_44": 4,
"45_64": 2,
"65_plus": 1
},
"gender_distribution": {
"M": 11,
"F": 9
}
},
"device_details": {
"device_models": [
{
"device": "Apple",
"count": 12
},
{
"device": "Android",
"count": 10
}
],
"browsers": [
{
"browser": "Safari",
"count": 12
},
{
"browser": "Chrome",
"count": 10
}
],
"operating_systems": [
{
"os": "iOS",
"count": 12
},
{
"os": "Android",
"count": 10
}
]
},
"workflow_funnel_stats": {
"33333333-4444-5555-6666-777777777777": {
"total": 22,
"steps": {
"OCR": {
"reached": 21
},
"LIVENESS": {
"reached": 19
},
"FACE_MATCH": {
"reached": 19
},
"AML": {
"reached": 18
}
}
}
},
"verification_time_stats": {
"overall_avg_seconds": 64,
"overall_count": 18,
"per_feature": {
"OCR": {
"avg_seconds": 41.2,
"total_seconds": 741.6,
"count": 18
},
"LIVENESS": {
"avg_seconds": 22.8,
"total_seconds": 410.4,
"count": 18
}
},
"per_sub_step": {
"OCR": {
"front_id_photo": {
"avg_seconds": 18.3,
"total_seconds": 329.4,
"count": 18
}
}
}
},
"resubmission_stats": {
"first_pass": 17,
"second": 2,
"third_plus": 1,
"abandoned": 0
},
"warning_stats": {
"ID_VERIFICATION": {
"total": 21,
"risks": {
"DOCUMENT_EXPIRED": {
"error": 1,
"warning": 0,
"information": 0
}
}
},
"LIVENESS": {
"total": 19,
"risks": {
"LOW_LIVENESS_SCORE": {
"error": 0,
"warning": 2,
"information": 0
}
}
}
},
"original_status_stats": {
"approved": 13,
"in_review": 5,
"declined": 2
},
"demographic_time_series": [
{
"date": "2026-10-14",
"age_distribution": {
"under_18": 0,
"18_24": 3,
"25_34": 4,
"35_44": 2,
"45_64": 1,
"65_plus": 0
},
"gender_distribution": {
"M": 6,
"F": 4
}
},
{
"date": "2026-10-15",
"age_distribution": {
"under_18": 0,
"18_24": 2,
"25_34": 4,
"35_44": 2,
"45_64": 1,
"65_plus": 1
},
"gender_distribution": {
"M": 5,
"F": 5
}
}
],
"device_time_series": [
{
"date": "2026-10-14",
"devices": {
"Apple": 7,
"Android": 5
},
"browsers": {
"Safari": 7,
"Chrome": 5
},
"operating_systems": {
"iOS": 7,
"Android": 5
}
},
{
"date": "2026-10-15",
"devices": {
"Apple": 5,
"Android": 5
},
"browsers": {
"Safari": 5,
"Chrome": 5
},
"operating_systems": {
"iOS": 5,
"Android": 5
}
}
],
"verification_time_time_series": [
{
"date": "2026-10-14",
"overall_avg": 66.1,
"per_feature": {
"OCR": 42,
"LIVENESS": 24.1
}
},
{
"date": "2026-10-15",
"overall_avg": 61.5,
"per_feature": {
"OCR": 40.2,
"LIVENESS": 21.3
}
}
],
"resubmission_time_series": [
{
"date": "2026-10-14",
"first_pass": 9,
"second": 1,
"third_plus": 0,
"abandoned": 0
},
{
"date": "2026-10-15",
"first_pass": 8,
"second": 1,
"third_plus": 1,
"abandoned": 0
}
],
"original_status_time_series": [
{
"date": "2026-10-14",
"approved": 7,
"in_review": 3,
"declined": 1
},
{
"date": "2026-10-15",
"approved": 6,
"in_review": 2,
"declined": 1
}
],
"previous_data_points": [
{
"rounded_date": "2026-10-12",
"total": 9,
"approved": 6,
"declined": 1,
"canceled": 1,
"pending": 1
},
{
"rounded_date": "2026-10-13",
"total": 11,
"approved": 7,
"declined": 2,
"canceled": 0,
"pending": 2
}
],
"previous_request_breakdown": {
"total_approved": 13,
"total_in_review": 2,
"total_declined": 3,
"total_canceled": 1,
"total_pending": 3
}
}| 您的请求 | 您获得的结果 |
|---|---|
既不包含 scope,也不包含 widget_keys | 所选时间范围内的用户验证(KYC)汇总 |
包含 scope、widget_keys,或两者都包含 | 某一标签页的仪表板组件:kyc、kyb、transactions 或 home(三者可任意组合) |
kind 和 title,其余字段取决于组件的类型。先只发送一次 scope(不带 widget_keys),以读取 available_widget_keys,然后只请求所需的组件。
403,其他应用的密钥也是如此。详见 API 密钥。相关内容
授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
路径参数
组织 UUID。
应用 UUID。必须是该 API 密钥所属的应用:在任何其他应用上使用该密钥都会返回 403。
查询参数
范围的起始日期,格式为 YYYY-MM-DD,含当日(UTC)。须与 end_date 一同发送:若缺少任意一项,两者都将被忽略,且范围默认为今天之前的 30 天至今天。
"2026-10-01"
范围的最后一天,YYYY-MM-DD,含(UTC)。未来日期按今天计。范围不得超过 730 天。
"2026-10-15"
要返回微件的仪表板标签页(不区分大小写)。与 widget_keys 一同省略时,返回 KYC 摘要。仅发送 widget_keys 默认为 kyc。home 接受任何 KYC、KYB 或交易微件,并默认采用应用已保存的主页布局。
home, kyc, kyb, transactions 以逗号分隔的小组件键,按此顺序返回。该范围不接受的键将被丢弃;若未剩下任何有效键,则使用该范围的默认值。KYC:kyc_sessions_volume、kyc_warning_insights、kyc_id_locations、kyc_ip_locations、kyc_workflow_funnel、kyc_average_verification_time、kyc_conversion_rate、kyc_conversion_by_country、kyc_resubmission_insights、kyc_original_status_distribution、kyc_database_validation_coverage、kyc_database_validation_latency、kyc_demographics、kyc_device_details。KYB:kyb_sessions_volume、kyb_workflow_funnel、kyb_average_verification_time、kyb_ip_locations、kyb_business_country_distribution、kyb_warning_insights、kyb_conversion_rate、kyb_conversion_by_country、kyb_industry_breakdown、kyb_resubmission_insights、kyb_original_status_distribution、kyb_registry_coverage、kyb_registry_data_completeness、kyb_device_details。交易:tx_count_total、tx_count_daily、tx_volume_total_preferred_currency、tx_volume_daily_preferred_currency、tx_average_amount、tx_average_amount_daily、tx_transaction_category_breakdown、tx_action_type_breakdown、tx_status_volume_trend、tx_user_ip_or_country_distribution、tx_tag_breakdown、tx_top_rules_triggered、tx_team_member_performance、tx_score_histogram。
"tx_count_total,tx_count_daily"
以逗号分隔的工作流 ID 列表。将 KYC 摘要以及 KYC 和 KYB 小组件限制为这些工作流。非 UUID 的值将被忽略;若无有效值,则丢弃该过滤器。摘要还接受 workflow_id。
"33333333-4444-5555-6666-777777777777"
以逗号分隔的工作流版本号列表。仅与 workflow_ids 配合使用;非整数的值将被忽略。也接受 version 作为别名。
"3,4"
以逗号分隔的分支路径 ID。仅与 workflow_ids 配合使用,且仅适用于 KYC 数据。目前仅记录 default(合并所有路径)的数据,因此任何其他值都会返回空数据。branch_path_id 可作为别名接受。
"default"
仅限交易小部件:以逗号分隔的标签 UUID 或标签名称。
仅限交易小部件:以逗号分隔的交易类别。
"finance"
仅限交易小部件:以逗号分隔的操作类型(不区分大小写)。
"withdrawal"
响应
KYC 摘要,或者当发送了 scope 或 widget_keys 时请求的微件。
- Option 1
- Option 2
用户验证(KYC)摘要,在既未发送 scope 也未发送 widget_keys 时返回。
每天一个数据点,从该范围内第一个有会话的日期到 end_date。无论 grouping_mode 为何,始终按天计算。
Show child attributes
Show child attributes
该时间范围内的状态总计。上一周期的细分至少包含必填字段。
Show child attributes
Show child attributes
紧邻 start_date 之前相同长度时间段的每日积分。
Show child attributes
Show child attributes
该时间范围内的状态总计。上一周期的细分至少包含必填字段。
Show child attributes
Show child attributes
total_approved / (total_approved + total_declined + total_in_review) x 100,保留一位小数。没有已完成项时为 null。
Show child attributes
Show child attributes
Show child attributes
Show child attributes
各项的前五名,会话数最多的排在前面。
Show child attributes
Show child attributes
按工作流 ID 划分。total 为在该工作流上启动的会话数;steps 统计进入各个步骤的会话数(OCR、LIVENESS、FACE_MATCH、AML、POA、PHONE、EMAIL、NFC、DATABASE_VALIDATION、QUESTIONNAIRE、IP_ANALYSIS、AGE_ESTIMATION、KYB_REGISTRY、KYB_DOCUMENTS、KYB_KEY_PEOPLE)。进入步骤并不代表通过该步骤。
Show child attributes
Show child attributes
用户进行验证所花费的活跃时间,忽略闲置间隔。无数据时为空对象。
Show child attributes
Show child attributes
Show child attributes
Show child attributes
按功能键划分(ID_VERIFICATION、LIVENESS、FACEMATCH、AML、PROOF_OF_ADDRESS、PHONE、EMAIL、NFC、LOCATION、DATABASE_VALIDATION、QUESTIONNAIRE 以及 KYB 功能)。total 为进入该功能的会话数;risks 统计各警告代码和等级对应的会话数。
Show child attributes
Show child attributes
工作流的自动判定结果,在任何审核员更改之前。
Show child attributes
Show child attributes
*_time_series 列表的分组方式:最长 14 天按 day 分组,最长 90 天按 week 分组,超过则按 month 分组。从该范围内包含会话的第一天开始计算。
day, week, month Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes