curl -X GET 'https://verification.didit.me/v3/session/22222222-3333-4444-5555-666666666666/webhook/66666666-7777-8888-9999-000000000001' \
-H 'x-api-key: YOUR_API_KEY'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.sessions.webhooks.retrieve(
"22222222-3333-4444-5555-666666666666",
"66666666-7777-8888-9999-000000000001",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.sessions.webhooks.retrieve(
"22222222-3333-4444-5555-666666666666",
"66666666-7777-8888-9999-000000000001",
);
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Sessions.Webhooks.Retrieve(ctx, "22222222-3333-4444-5555-666666666666", "66666666-7777-8888-9999-000000000001")
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().webhooks().retrieve("22222222-3333-4444-5555-666666666666", "66666666-7777-8888-9999-000000000001");
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->sessions->webhooks->retrieve('22222222-3333-4444-5555-666666666666', '66666666-7777-8888-9999-000000000001');
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.sessions.webhooks.retrieve(
"22222222-3333-4444-5555-666666666666",
"66666666-7777-8888-9999-000000000001"
)
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.Webhooks.RetrieveAsync("22222222-3333-4444-5555-666666666666", "66666666-7777-8888-9999-000000000001");
Console.WriteLine(JsonSerializer.Serialize(result));{
"uuid": "66666666-7777-8888-9999-000000000001",
"session_id": "22222222-3333-4444-5555-666666666666",
"request_url": "https://yourapp.com/webhooks/didit",
"response_status": 503,
"status": "In Progress",
"webhook_type": "status.updated",
"request_header": "{\"Content-Type\": \"application/json\", \"X-Signature\": \"a5e02a03404e1337a0198e6be15d34abbd053c658a0e51e5d0e78554213ef29b\", \"X-Signature-V2\": \"927e7cb770c94ce745939bff73f04aa200015f3bc64795ba46c2aaf78a6cedc5\", \"X-Signature-Simple\": \"e37b0d4c716c72bb5ae7127b9cc455d28ab4686e9e22312b4ec2327409a73302\", \"X-Timestamp\": \"1792056078\", \"User-Agent\": \"DiditWebhook/2.0 +https://didit.me\"}",
"request_body": "{\"application_id\":\"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\"created_at\":1792056057,\"environment\":\"live\",\"event_id\":\"33333333-4444-5555-6666-777777777777\",\"sandbox_scenario\":null,\"session_id\":\"22222222-3333-4444-5555-666666666666\",\"status\":\"In Progress\",\"timestamp\":1792056078,\"vendor_data\":\"user-123\",\"webhook_type\":\"status.updated\",\"workflow_id\":\"44444444-5555-6666-7777-888888888888\",\"workflow_version\":3}",
"created_at": "2026-10-15T09:21:18.412345Z"
}Получение webhook-доставки сессии через API
Получите одну webhook-доставку сессии в Didit: URL, HTTP-ответ вашего endpoint и точные заголовки подписи и JSON-тело, которые отправил Didit.
curl -X GET 'https://verification.didit.me/v3/session/22222222-3333-4444-5555-666666666666/webhook/66666666-7777-8888-9999-000000000001' \
-H 'x-api-key: YOUR_API_KEY'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.sessions.webhooks.retrieve(
"22222222-3333-4444-5555-666666666666",
"66666666-7777-8888-9999-000000000001",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.sessions.webhooks.retrieve(
"22222222-3333-4444-5555-666666666666",
"66666666-7777-8888-9999-000000000001",
);
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Sessions.Webhooks.Retrieve(ctx, "22222222-3333-4444-5555-666666666666", "66666666-7777-8888-9999-000000000001")
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().webhooks().retrieve("22222222-3333-4444-5555-666666666666", "66666666-7777-8888-9999-000000000001");
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->sessions->webhooks->retrieve('22222222-3333-4444-5555-666666666666', '66666666-7777-8888-9999-000000000001');
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.sessions.webhooks.retrieve(
"22222222-3333-4444-5555-666666666666",
"66666666-7777-8888-9999-000000000001"
)
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.Webhooks.RetrieveAsync("22222222-3333-4444-5555-666666666666", "66666666-7777-8888-9999-000000000001");
Console.WriteLine(JsonSerializer.Serialize(result));{
"uuid": "66666666-7777-8888-9999-000000000001",
"session_id": "22222222-3333-4444-5555-666666666666",
"request_url": "https://yourapp.com/webhooks/didit",
"response_status": 503,
"status": "In Progress",
"webhook_type": "status.updated",
"request_header": "{\"Content-Type\": \"application/json\", \"X-Signature\": \"a5e02a03404e1337a0198e6be15d34abbd053c658a0e51e5d0e78554213ef29b\", \"X-Signature-V2\": \"927e7cb770c94ce745939bff73f04aa200015f3bc64795ba46c2aaf78a6cedc5\", \"X-Signature-Simple\": \"e37b0d4c716c72bb5ae7127b9cc455d28ab4686e9e22312b4ec2327409a73302\", \"X-Timestamp\": \"1792056078\", \"User-Agent\": \"DiditWebhook/2.0 +https://didit.me\"}",
"request_body": "{\"application_id\":\"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\",\"created_at\":1792056057,\"environment\":\"live\",\"event_id\":\"33333333-4444-5555-6666-777777777777\",\"sandbox_scenario\":null,\"session_id\":\"22222222-3333-4444-5555-666666666666\",\"status\":\"In Progress\",\"timestamp\":1792056078,\"vendor_data\":\"user-123\",\"webhook_type\":\"status.updated\",\"workflow_id\":\"44444444-5555-6666-7777-888888888888\",\"workflow_version\":3}",
"created_at": "2026-10-15T09:21:18.412345Z"
}request_body описан в разделе Webhook, а заголовки описаны в разделе проверка подписи. Чтобы отправить доставку повторно, используйте Повторная отправка доставки webhook для сессии.Авторизации
API-ключ вашего приложения из раздела «Разработчикам» -> «API-ключи» в Business Console. Основной ключ имеет полный доступ. Именованный ключ может иметь ограниченную область действия: без доступа, чтение или запись для каждого ресурса, ограничение определенными сценариями или одобренными сессиями, списком IP-адресов и сроком действия. 401 означает, что ключ неверен, отозван или его срок действия истек; 403 означает, что ключ не был передан, у ключа нет доступа к этому ресурсу или действию, либо запрос поступил с адреса вне его списка IP-адресов; 404 на маршруте сессии означает, что сессия не входит в сценарии или статусы ключа. Ключ без доступа к медиа получает URL изображений, видео и PDF как null, а ключ без прав на запись сессий получает ссылки на сессии и токены как null. См. https://docs.didit.me/console/api-keys.
Параметры пути
UUID сессии верификации, пользователя (KYC) или компании (KYB): session_id, возвращённый POST /v3/session/. Сервер сопоставляет его для обоих типов сессий.
Должен быть корректным UUID. Маршрут сопоставляется только с корректно сформированными UUID, поэтому некорректное значение отклоняется маршрутизатором URL ещё до выполнения кода приложения, и в ответ возвращается HTML-страница 404, а не конверт JSON {"detail": ...}, показанный ниже.
UUID доставки: uuid записи, возвращаемой методом GET /v3/session/{sessionId}/webhooks/. Он должен принадлежать сессии, указанной в пути.
Ответ
Доставка вместе с заголовками и телом её запроса.
Одна попытка доставки webhook, зафиксированная для сессии верификации, с точными заголовками и телом запроса, отправленными Didit.
ID доставки. Используйте его в качестве {webhook_uuid}, чтобы получить или повторно отправить эту доставку.
Сессия, к которой относится доставка (сессия в пути URL).
URL, на который была отправлена доставка.
HTTP-статус, возвращённый вашим endpoint. null, пока доставка находится в очереди и попытка ещё не совершена. Если HTTP-ответ не был получен, Didit фиксирует собственный статус: 504, если ваш endpoint не ответил в течение 5 секунд, 503 при ошибке подключения, 400, если URL был отклонён как небезопасный (например, приватный или внутренний адрес), и 404 при любой другой ошибке запроса. Статус 400 или выше считается неудачной доставкой.
Статус сессии на момент генерации события, например In Progress, Approved или Declined.
Поддерживаемое имя события webhook. Используйте именно эти строки в subscribed_events; неподдерживаемые значения отклоняются.
status.updated, data.updated, user.status.updated, user.data.updated, business.status.updated, business.data.updated, activity.created, transaction.created, transaction.status.updated, travel_rule.status.updated, workflow.compliance_changed, transaction_rule_suggestions.created, auth.signup, auth.login, auth.login_failed, auth.password_reset_requested, auth.password_reset_completed, auth.mfa_changed, auth.new_device, auth.account_locked, investigator.report.ready, investigator.decision.automated, investigator.decision.overridden, investigator.decision.contested, investigator.question.raised, investigator.automation.paused, investigator.rfi.answered, investigator.rfi.overdue, investigator.drift.detected, investigator.sla.breached, investigator.qa.failed, investigator.external.report.ready JSON-текст (строка) заголовков запроса, отправленных Didit: Content-Type, X-Signature, X-Signature-V2, X-Signature-Simple, X-Timestamp и User-Agent. Разберите его с помощью JSON-парсера. Он содержит подписи и никогда не содержит секрет подписи.
JSON-текст (строка) точного payload, отправленного Didit, с отсортированными ключами, включая event_id и timestamp. Разберите его с помощью JSON-парсера; см. Формат payload. Для ключа с ограниченной областью действия без media: read URL-адреса медиафайлов внутри него имеют значение null; без sessions: write токены сессий и ссылки на размещённую страницу верификации имеют значение null. После такого изменения тела подписи больше ему не соответствуют. Didit не сохраняет тело ответа, возвращённое вашим endpoint.
Когда была создана доставка.