from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.sessions.create_kyb_party_draft(
"33333333-4444-5555-6666-777777777777",
entity_type="person",
first_name="Ana",
last_name="Lopez",
roles=["ubo", "director"],
date_of_birth="1984-06-12",
email="ana.lopez@example.com",
ownership_percent=60.0,
nationality="MEX",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.sessions.createKybPartyDraft("33333333-4444-5555-6666-777777777777", {
entity_type: "person",
first_name: "Ana",
last_name: "Lopez",
roles: ["ubo", "director"],
date_of_birth: "1984-06-12",
email: "ana.lopez@example.com",
ownership_percent: 60.0,
nationality: "MEX",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Sessions.CreateKYBPartyDraft(ctx, "33333333-4444-5555-6666-777777777777", didit.SessionsCreateKYBPartyDraftParams{
EntityType: "person",
FirstName: didit.String("Ana"),
LastName: didit.String("Lopez"),
Roles: didit.Some([]didit.SessionsCreateKYBPartyDraftParamsRoles{"ubo", "director"}),
DateOfBirth: didit.String("1984-06-12"),
Email: didit.String("ana.lopez@example.com"),
OwnershipPercent: didit.Float(60.0),
Nationality: "MEX",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.time.LocalDate;
import java.util.List;
import me.didit.Didit;
import me.didit.types.SessionsCreateKybPartyDraftParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.sessions().createKybPartyDraft("33333333-4444-5555-6666-777777777777", SessionsCreateKybPartyDraftParams.builder()
.entityType(SessionsCreateKybPartyDraftParams.EntityType.of("person"))
.firstName("Ana")
.lastName("Lopez")
.roles(List.of(SessionsCreateKybPartyDraftParams.Roles.of("ubo"), SessionsCreateKybPartyDraftParams.Roles.of("director")))
.dateOfBirth(LocalDate.parse("1984-06-12"))
.email("ana.lopez@example.com")
.ownershipPercent(60.0)
.nationality("MEX")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->sessions->createKybPartyDraft('33333333-4444-5555-6666-777777777777', [
'entity_type' => 'person',
'first_name' => 'Ana',
'last_name' => 'Lopez',
'roles' => ['ubo', 'director'],
'date_of_birth' => '1984-06-12',
'email' => 'ana.lopez@example.com',
'ownership_percent' => 60.0,
'nationality' => 'MEX',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.sessions.create_kyb_party_draft(
"33333333-4444-5555-6666-777777777777",
entity_type: "person",
first_name: "Ana",
last_name: "Lopez",
roles: ["ubo", "director"],
date_of_birth: "1984-06-12",
email: "ana.lopez@example.com",
ownership_percent: 60.0,
nationality: "MEX"
)
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.CreateKybPartyDraftAsync("33333333-4444-5555-6666-777777777777", new SessionsCreateKybPartyDraftParams
{
EntityType = "person",
FirstName = "Ana",
LastName = "Lopez",
Roles = new SessionsCreateKybPartyDraftParamsRoles[] { "ubo", "director" },
DateOfBirth = "1984-06-12",
Email = "ana.lopez@example.com",
OwnershipPercent = 60.0,
Nationality = "MEX",
});
Console.WriteLine(JsonSerializer.Serialize(result));curl --request POST \
--url https://verification.didit.me/v3/session/{sessionId}/kyb/parties/drafts/ \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"entity_type": "person",
"first_name": "Ana",
"last_name": "Lopez",
"roles": [
"ubo",
"director"
],
"ownership_percent": 60,
"nationality": "MEX",
"email": "ana.lopez@example.com",
"date_of_birth": "1984-06-12"
}
'{
"draft_id": "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
"created_at": "2026-10-31T10:00:00Z",
"updated_at": "2026-10-31T10:00:00Z",
"party": {
"entity_type": "person",
"first_name": "Ana",
"last_name": "Lopez",
"roles": [
"ubo",
"director"
],
"ownership_percent": 60,
"nationality": "MEX",
"email": "ana.lopez@example.com",
"date_of_birth": "1984-06-12"
}
}Create KYB Party Draft API
Add a person or company to the key people list of a KYB session without declaring it yet.
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.sessions.create_kyb_party_draft(
"33333333-4444-5555-6666-777777777777",
entity_type="person",
first_name="Ana",
last_name="Lopez",
roles=["ubo", "director"],
date_of_birth="1984-06-12",
email="ana.lopez@example.com",
ownership_percent=60.0,
nationality="MEX",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.sessions.createKybPartyDraft("33333333-4444-5555-6666-777777777777", {
entity_type: "person",
first_name: "Ana",
last_name: "Lopez",
roles: ["ubo", "director"],
date_of_birth: "1984-06-12",
email: "ana.lopez@example.com",
ownership_percent: 60.0,
nationality: "MEX",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Sessions.CreateKYBPartyDraft(ctx, "33333333-4444-5555-6666-777777777777", didit.SessionsCreateKYBPartyDraftParams{
EntityType: "person",
FirstName: didit.String("Ana"),
LastName: didit.String("Lopez"),
Roles: didit.Some([]didit.SessionsCreateKYBPartyDraftParamsRoles{"ubo", "director"}),
DateOfBirth: didit.String("1984-06-12"),
Email: didit.String("ana.lopez@example.com"),
OwnershipPercent: didit.Float(60.0),
Nationality: "MEX",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.time.LocalDate;
import java.util.List;
import me.didit.Didit;
import me.didit.types.SessionsCreateKybPartyDraftParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.sessions().createKybPartyDraft("33333333-4444-5555-6666-777777777777", SessionsCreateKybPartyDraftParams.builder()
.entityType(SessionsCreateKybPartyDraftParams.EntityType.of("person"))
.firstName("Ana")
.lastName("Lopez")
.roles(List.of(SessionsCreateKybPartyDraftParams.Roles.of("ubo"), SessionsCreateKybPartyDraftParams.Roles.of("director")))
.dateOfBirth(LocalDate.parse("1984-06-12"))
.email("ana.lopez@example.com")
.ownershipPercent(60.0)
.nationality("MEX")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->sessions->createKybPartyDraft('33333333-4444-5555-6666-777777777777', [
'entity_type' => 'person',
'first_name' => 'Ana',
'last_name' => 'Lopez',
'roles' => ['ubo', 'director'],
'date_of_birth' => '1984-06-12',
'email' => 'ana.lopez@example.com',
'ownership_percent' => 60.0,
'nationality' => 'MEX',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.sessions.create_kyb_party_draft(
"33333333-4444-5555-6666-777777777777",
entity_type: "person",
first_name: "Ana",
last_name: "Lopez",
roles: ["ubo", "director"],
date_of_birth: "1984-06-12",
email: "ana.lopez@example.com",
ownership_percent: 60.0,
nationality: "MEX"
)
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.CreateKybPartyDraftAsync("33333333-4444-5555-6666-777777777777", new SessionsCreateKybPartyDraftParams
{
EntityType = "person",
FirstName = "Ana",
LastName = "Lopez",
Roles = new SessionsCreateKybPartyDraftParamsRoles[] { "ubo", "director" },
DateOfBirth = "1984-06-12",
Email = "ana.lopez@example.com",
OwnershipPercent = 60.0,
Nationality = "MEX",
});
Console.WriteLine(JsonSerializer.Serialize(result));curl --request POST \
--url https://verification.didit.me/v3/session/{sessionId}/kyb/parties/drafts/ \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"entity_type": "person",
"first_name": "Ana",
"last_name": "Lopez",
"roles": [
"ubo",
"director"
],
"ownership_percent": 60,
"nationality": "MEX",
"email": "ana.lopez@example.com",
"date_of_birth": "1984-06-12"
}
'{
"draft_id": "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
"created_at": "2026-10-31T10:00:00Z",
"updated_at": "2026-10-31T10:00:00Z",
"party": {
"entity_type": "person",
"first_name": "Ana",
"last_name": "Lopez",
"roles": [
"ubo",
"director"
],
"ownership_percent": 60,
"nationality": "MEX",
"email": "ana.lopez@example.com",
"date_of_birth": "1984-06-12"
}
}Authorizations
Your application's API key, from Developers -> API keys in the Business Console. The primary key has full access. A named key can be scoped: none, read or write per resource, limited to some workflows or to approved sessions, to a list of IP addresses, and to an expiry date. 401 means the key is missing, wrong, revoked or expired; 403 means the key has no access to this resource or action, or the request came from an address outside its IP list; 404 on a session route means the session is outside the key's workflows or statuses. A key without media access receives image, video and PDF URLs as null, and a key without sessions write receives session links and tokens as null. See https://docs.didit.me/console/api-keys.
Path Parameters
UUID of the Business Verification (KYB) session. It must belong to the application of the API key.
"33333333-4444-5555-6666-777777777777"
Query Parameters
Workflow node of the KYB step. Only needed when the workflow has more than one KYB node; by default Didit uses the session's own node.
Body
Whether the party is an individual or a company.
person, company Nationality of a person, or country of incorporation of a company. Required for every party.
100Full name of a person. Send it, or first_name and last_name.
255128128Role the party holds. Interchangeable with roles; when both are sent they are merged.
director, non_executive_director, secretary, chairman, ubo, shareholder, representative, founder, legal_advisor, authorized_signatory, trustee, beneficiary, settlor, protector, company_officer, investor, other Every role the party holds. A person needs at least one role (here or in role).
director, non_executive_director, secretary, chairman, ubo, shareholder, representative, founder, legal_advisor, authorized_signatory, trustee, beneficiary, settlor, protector, company_officer, investor, other Job title of a person.
128Name of a company party. Required when entity_type is company.
255Registration number of a company party.
100Where the verification link is sent. Required when the party has to complete verification, which depends on the role settings and ownership thresholds of the workflow.
Share of the company the party owns.
32Workflow-defined extra fields.
Ask to skip this party's verification. Honoured only when the party's role allows skipping in the workflow's Key People settings.