curl -X POST 'https://verification.didit.me/v3/questionnaires/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"title": "Customer Onboarding",
"default_language": "en",
"languages": ["en"],
"form_elements": [
{
"id": "occupation",
"element_type": "short_text",
"label": {"en": "What is your occupation?"},
"is_required": true
}
]
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.questionnaires.create(
title="Customer Onboarding",
description="Additional information needed for verification",
languages=["en"],
default_language="en",
is_active=True,
form_elements=[{
"id": "occupation",
"element_type": "short_text",
"label": {"en": "What is your occupation?"},
"placeholder": {"en": "Software engineer"},
"is_required": True,
}, {
"id": "source_of_funds",
"element_type": "multiple_choice",
"label": {"en": "Source of funds"},
"is_required": True,
"options": [{
"value": "employment",
"label": {"en": "Employment"},
}, {
"value": "business",
"label": {"en": "Business"},
}, {
"value": "investments",
"label": {"en": "Investments"},
}, {
"value": "other",
"label": {"en": "Other"},
}],
}],
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.questionnaires.create({
title: "Customer Onboarding",
description: "Additional information needed for verification",
languages: ["en"],
default_language: "en",
is_active: true,
form_elements: [{
id: "occupation",
element_type: "short_text",
label: { en: "What is your occupation?" },
placeholder: { en: "Software engineer" },
is_required: true,
}, {
id: "source_of_funds",
element_type: "multiple_choice",
label: { en: "Source of funds" },
is_required: true,
options: [{
value: "employment",
label: { en: "Employment" },
}, {
value: "business",
label: { en: "Business" },
}, {
value: "investments",
label: { en: "Investments" },
}, {
value: "other",
label: { en: "Other" },
}],
}],
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Questionnaires.Create(ctx, didit.SimpleQuestionnaireRequest{
Title: "Customer Onboarding",
Description: didit.String("Additional information needed for verification"),
Languages: []string{"en"},
DefaultLanguage: didit.String("en"),
IsActive: didit.Bool(true),
FormElements: []didit.SimpleQuestionnaireElement{{
ID: didit.String("occupation"),
ElementType: "short_text",
Label: map[string]string{"en": "What is your occupation?"},
Placeholder: didit.Some(map[string]string{"en": "Software engineer"}),
IsRequired: didit.Bool(true),
}, {
ID: didit.String("source_of_funds"),
ElementType: "multiple_choice",
Label: map[string]string{"en": "Source of funds"},
IsRequired: didit.Bool(true),
Options: didit.Some([]didit.SimpleQuestionnaireElementOptions{{
Value: didit.String("employment"),
Label: map[string]string{"en": "Employment"},
}, {
Value: didit.String("business"),
Label: map[string]string{"en": "Business"},
}, {
Value: didit.String("investments"),
Label: map[string]string{"en": "Investments"},
}, {
Value: didit.String("other"),
Label: map[string]string{"en": "Other"},
}}),
}},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import java.util.Map;
import me.didit.Didit;
import me.didit.types.SimpleQuestionnaireElement;
import me.didit.types.SimpleQuestionnaireRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.questionnaires().create(SimpleQuestionnaireRequest.builder()
.title("Customer Onboarding")
.description("Additional information needed for verification")
.languages(List.of("en"))
.defaultLanguage("en")
.isActive(true)
.formElements(List.of(
SimpleQuestionnaireElement.builder()
.id("occupation")
.elementType(SimpleQuestionnaireElement.ElementType.of("short_text"))
.label(Map.of("en", "What is your occupation?"))
.placeholder(Map.of("en", "Software engineer"))
.isRequired(true)
.build(),
SimpleQuestionnaireElement.builder()
.id("source_of_funds")
.elementType(SimpleQuestionnaireElement.ElementType.of("multiple_choice"))
.label(Map.of("en", "Source of funds"))
.isRequired(true)
.options(List.of(
SimpleQuestionnaireElement.Options.builder()
.value("employment")
.label(Map.of("en", "Employment"))
.build(),
SimpleQuestionnaireElement.Options.builder()
.value("business")
.label(Map.of("en", "Business"))
.build(),
SimpleQuestionnaireElement.Options.builder()
.value("investments")
.label(Map.of("en", "Investments"))
.build(),
SimpleQuestionnaireElement.Options.builder()
.value("other")
.label(Map.of("en", "Other"))
.build()))
.build()))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->questionnaires->create([
'title' => 'Customer Onboarding',
'description' => 'Additional information needed for verification',
'languages' => ['en'],
'default_language' => 'en',
'is_active' => true,
'form_elements' => [[
'id' => 'occupation',
'element_type' => 'short_text',
'label' => ['en' => 'What is your occupation?'],
'placeholder' => ['en' => 'Software engineer'],
'is_required' => true,
], [
'id' => 'source_of_funds',
'element_type' => 'multiple_choice',
'label' => ['en' => 'Source of funds'],
'is_required' => true,
'options' => [[
'value' => 'employment',
'label' => ['en' => 'Employment'],
], [
'value' => 'business',
'label' => ['en' => 'Business'],
], [
'value' => 'investments',
'label' => ['en' => 'Investments'],
], [
'value' => 'other',
'label' => ['en' => 'Other'],
]],
]],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.questionnaires.create(
title: "Customer Onboarding",
description: "Additional information needed for verification",
languages: ["en"],
default_language: "en",
is_active: true,
form_elements: [{
id: "occupation",
element_type: "short_text",
label: { en: "What is your occupation?" },
placeholder: { en: "Software engineer" },
is_required: true,
}, {
id: "source_of_funds",
element_type: "multiple_choice",
label: { en: "Source of funds" },
is_required: true,
options: [{
value: "employment",
label: { en: "Employment" },
}, {
value: "business",
label: { en: "Business" },
}, {
value: "investments",
label: { en: "Investments" },
}, {
value: "other",
label: { en: "Other" },
}],
}]
)
puts result.to_husing System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Questionnaires.CreateAsync(new SimpleQuestionnaireRequest
{
Title = "Customer Onboarding",
Description = "Additional information needed for verification",
Languages = new string[] { "en" },
DefaultLanguage = "en",
IsActive = true,
FormElements = new SimpleQuestionnaireElement[]
{
new()
{
Id = "occupation",
ElementType = "short_text",
Label = new Dictionary<string, string> { ["en"] = "What is your occupation?" },
Placeholder = new Dictionary<string, string> { ["en"] = "Software engineer" },
IsRequired = true,
},
new()
{
Id = "source_of_funds",
ElementType = "multiple_choice",
Label = new Dictionary<string, string> { ["en"] = "Source of funds" },
IsRequired = true,
Options = new SimpleQuestionnaireElementOptions[]
{
new()
{
Value = "employment",
Label = new Dictionary<string, string> { ["en"] = "Employment" },
},
new()
{
Value = "business",
Label = new Dictionary<string, string> { ["en"] = "Business" },
},
new()
{
Value = "investments",
Label = new Dictionary<string, string> { ["en"] = "Investments" },
},
new()
{
Value = "other",
Label = new Dictionary<string, string> { ["en"] = "Other" },
},
},
},
},
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"questionnaire_id": "11111111-2222-3333-4444-555555555555",
"title": "Customer Onboarding",
"description": "Additional information needed for verification",
"languages": [
"en"
],
"default_language": "en",
"is_active": true,
"is_simple_questionnaire": true,
"graph": {
"start_node": "occupation",
"nodes": {
"occupation": {
"element_type": "SHORT_TEXT",
"is_required": true,
"title": {
"en": "What is your occupation?"
},
"next": "source_of_funds"
},
"source_of_funds": {
"element_type": "MULTIPLE_CHOICE",
"is_required": true,
"title": {
"en": "Source of funds"
},
"choices": [
{
"value": "employment",
"label": {
"en": "Employment"
}
},
{
"value": "business",
"label": {
"en": "Business"
}
}
],
"next": null
}
}
},
"sections": [],
"questionnaire_group_id": "11111111-2222-3333-4444-555555555555",
"version": 1,
"status": "published",
"published_at": "2026-04-23T10:00:00Z",
"is_editable": false
}質問票作成API:カスタムKYCフォーム
Didit の質問票作成APIで、順序付きの質問と選択肢、48+言語の翻訳を備えたカスタムKYC・コンプライアンス質問票をプログラムで作成できます。料金は呼び出しごとの従量課金です。
curl -X POST 'https://verification.didit.me/v3/questionnaires/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"title": "Customer Onboarding",
"default_language": "en",
"languages": ["en"],
"form_elements": [
{
"id": "occupation",
"element_type": "short_text",
"label": {"en": "What is your occupation?"},
"is_required": true
}
]
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.questionnaires.create(
title="Customer Onboarding",
description="Additional information needed for verification",
languages=["en"],
default_language="en",
is_active=True,
form_elements=[{
"id": "occupation",
"element_type": "short_text",
"label": {"en": "What is your occupation?"},
"placeholder": {"en": "Software engineer"},
"is_required": True,
}, {
"id": "source_of_funds",
"element_type": "multiple_choice",
"label": {"en": "Source of funds"},
"is_required": True,
"options": [{
"value": "employment",
"label": {"en": "Employment"},
}, {
"value": "business",
"label": {"en": "Business"},
}, {
"value": "investments",
"label": {"en": "Investments"},
}, {
"value": "other",
"label": {"en": "Other"},
}],
}],
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.questionnaires.create({
title: "Customer Onboarding",
description: "Additional information needed for verification",
languages: ["en"],
default_language: "en",
is_active: true,
form_elements: [{
id: "occupation",
element_type: "short_text",
label: { en: "What is your occupation?" },
placeholder: { en: "Software engineer" },
is_required: true,
}, {
id: "source_of_funds",
element_type: "multiple_choice",
label: { en: "Source of funds" },
is_required: true,
options: [{
value: "employment",
label: { en: "Employment" },
}, {
value: "business",
label: { en: "Business" },
}, {
value: "investments",
label: { en: "Investments" },
}, {
value: "other",
label: { en: "Other" },
}],
}],
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Questionnaires.Create(ctx, didit.SimpleQuestionnaireRequest{
Title: "Customer Onboarding",
Description: didit.String("Additional information needed for verification"),
Languages: []string{"en"},
DefaultLanguage: didit.String("en"),
IsActive: didit.Bool(true),
FormElements: []didit.SimpleQuestionnaireElement{{
ID: didit.String("occupation"),
ElementType: "short_text",
Label: map[string]string{"en": "What is your occupation?"},
Placeholder: didit.Some(map[string]string{"en": "Software engineer"}),
IsRequired: didit.Bool(true),
}, {
ID: didit.String("source_of_funds"),
ElementType: "multiple_choice",
Label: map[string]string{"en": "Source of funds"},
IsRequired: didit.Bool(true),
Options: didit.Some([]didit.SimpleQuestionnaireElementOptions{{
Value: didit.String("employment"),
Label: map[string]string{"en": "Employment"},
}, {
Value: didit.String("business"),
Label: map[string]string{"en": "Business"},
}, {
Value: didit.String("investments"),
Label: map[string]string{"en": "Investments"},
}, {
Value: didit.String("other"),
Label: map[string]string{"en": "Other"},
}}),
}},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import java.util.Map;
import me.didit.Didit;
import me.didit.types.SimpleQuestionnaireElement;
import me.didit.types.SimpleQuestionnaireRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.questionnaires().create(SimpleQuestionnaireRequest.builder()
.title("Customer Onboarding")
.description("Additional information needed for verification")
.languages(List.of("en"))
.defaultLanguage("en")
.isActive(true)
.formElements(List.of(
SimpleQuestionnaireElement.builder()
.id("occupation")
.elementType(SimpleQuestionnaireElement.ElementType.of("short_text"))
.label(Map.of("en", "What is your occupation?"))
.placeholder(Map.of("en", "Software engineer"))
.isRequired(true)
.build(),
SimpleQuestionnaireElement.builder()
.id("source_of_funds")
.elementType(SimpleQuestionnaireElement.ElementType.of("multiple_choice"))
.label(Map.of("en", "Source of funds"))
.isRequired(true)
.options(List.of(
SimpleQuestionnaireElement.Options.builder()
.value("employment")
.label(Map.of("en", "Employment"))
.build(),
SimpleQuestionnaireElement.Options.builder()
.value("business")
.label(Map.of("en", "Business"))
.build(),
SimpleQuestionnaireElement.Options.builder()
.value("investments")
.label(Map.of("en", "Investments"))
.build(),
SimpleQuestionnaireElement.Options.builder()
.value("other")
.label(Map.of("en", "Other"))
.build()))
.build()))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->questionnaires->create([
'title' => 'Customer Onboarding',
'description' => 'Additional information needed for verification',
'languages' => ['en'],
'default_language' => 'en',
'is_active' => true,
'form_elements' => [[
'id' => 'occupation',
'element_type' => 'short_text',
'label' => ['en' => 'What is your occupation?'],
'placeholder' => ['en' => 'Software engineer'],
'is_required' => true,
], [
'id' => 'source_of_funds',
'element_type' => 'multiple_choice',
'label' => ['en' => 'Source of funds'],
'is_required' => true,
'options' => [[
'value' => 'employment',
'label' => ['en' => 'Employment'],
], [
'value' => 'business',
'label' => ['en' => 'Business'],
], [
'value' => 'investments',
'label' => ['en' => 'Investments'],
], [
'value' => 'other',
'label' => ['en' => 'Other'],
]],
]],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.questionnaires.create(
title: "Customer Onboarding",
description: "Additional information needed for verification",
languages: ["en"],
default_language: "en",
is_active: true,
form_elements: [{
id: "occupation",
element_type: "short_text",
label: { en: "What is your occupation?" },
placeholder: { en: "Software engineer" },
is_required: true,
}, {
id: "source_of_funds",
element_type: "multiple_choice",
label: { en: "Source of funds" },
is_required: true,
options: [{
value: "employment",
label: { en: "Employment" },
}, {
value: "business",
label: { en: "Business" },
}, {
value: "investments",
label: { en: "Investments" },
}, {
value: "other",
label: { en: "Other" },
}],
}]
)
puts result.to_husing System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Questionnaires.CreateAsync(new SimpleQuestionnaireRequest
{
Title = "Customer Onboarding",
Description = "Additional information needed for verification",
Languages = new string[] { "en" },
DefaultLanguage = "en",
IsActive = true,
FormElements = new SimpleQuestionnaireElement[]
{
new()
{
Id = "occupation",
ElementType = "short_text",
Label = new Dictionary<string, string> { ["en"] = "What is your occupation?" },
Placeholder = new Dictionary<string, string> { ["en"] = "Software engineer" },
IsRequired = true,
},
new()
{
Id = "source_of_funds",
ElementType = "multiple_choice",
Label = new Dictionary<string, string> { ["en"] = "Source of funds" },
IsRequired = true,
Options = new SimpleQuestionnaireElementOptions[]
{
new()
{
Value = "employment",
Label = new Dictionary<string, string> { ["en"] = "Employment" },
},
new()
{
Value = "business",
Label = new Dictionary<string, string> { ["en"] = "Business" },
},
new()
{
Value = "investments",
Label = new Dictionary<string, string> { ["en"] = "Investments" },
},
new()
{
Value = "other",
Label = new Dictionary<string, string> { ["en"] = "Other" },
},
},
},
},
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"questionnaire_id": "11111111-2222-3333-4444-555555555555",
"title": "Customer Onboarding",
"description": "Additional information needed for verification",
"languages": [
"en"
],
"default_language": "en",
"is_active": true,
"is_simple_questionnaire": true,
"graph": {
"start_node": "occupation",
"nodes": {
"occupation": {
"element_type": "SHORT_TEXT",
"is_required": true,
"title": {
"en": "What is your occupation?"
},
"next": "source_of_funds"
},
"source_of_funds": {
"element_type": "MULTIPLE_CHOICE",
"is_required": true,
"title": {
"en": "Source of funds"
},
"choices": [
{
"value": "employment",
"label": {
"en": "Employment"
}
},
{
"value": "business",
"label": {
"en": "Business"
}
}
],
"next": null
}
}
},
"sections": [],
"questionnaire_group_id": "11111111-2222-3333-4444-555555555555",
"version": 1,
"status": "published",
"published_at": "2026-04-23T10:00:00Z",
"is_editable": false
}form_elements配列を送信してください。内部のアンケートグラフはDiditが自動で構築します。
APIがサポートするのは、分岐のないシンプルなアンケートのみです。graph、branches、next、または条件付きルールは送信しないでください。
必須フィールド
titleはアンケートの内部名です。languagesにはenを含める必要があります。form_elementsには少なくとも1つの質問を含める必要があります。- 各フォーム要素には
element_typeと翻訳済みのlabelが必要です。
descriptionを追加することもできます。これはseparatorを除くすべての要素タイプで受け付けられ、アンケートレポートでは項目のdescriptionとして返されます。
要素タイプ
short_text、multiple_choice、email、file_upload、date_pickerなどの小文字の値を使用してください。SHORT_TEXTのような大文字のenum値も受け付けられます。
dropdown、single_choice、multiple_choiceにはoptionsを追加してください。選択肢のvalueを省略した場合は、Diditがラベルから値を生成します。
{
"title": "Customer Onboarding",
"languages": ["en"],
"default_language": "en",
"form_elements": [
{
"id": "occupation",
"element_type": "short_text",
"label": { "en": "What is your occupation?" },
"is_required": true
},
{
"id": "source_of_funds",
"element_type": "multiple_choice",
"label": { "en": "Source of funds" },
"is_required": true,
"options": [
{ "value": "employment", "label": { "en": "Employment" } },
{ "value": "business", "label": { "en": "Business" } },
{ "value": "investments", "label": { "en": "Investments" } }
]
}
]
}
フィールドの検証
short_text、long_text、numberの要素には、任意でvalidationオブジェクトを追加して、ユーザーの回答の形式を制限できます。これは、納税者番号、国民ID、カード番号など、形式が厳格に決まっている識別子に便利です。検証はユーザーがフィールドに入力している間に実行されます(検証に通るまでユーザーは先に進めません)。また、送信時にはAPIによって再度検証されます。
| フィールド | 適用対象 | 説明 |
|---|---|---|
pattern | short_text、long_text | 値全体に完全一致する正規表現です。移植性のあるECMA-262のサブセットを使用してください。値全体が照合されるため、^/$アンカーは追加しないでください。 |
min_length | short_text、long_text | 最小文字数です。 |
max_length | short_text、long_text | 最大文字数です。 |
min | number | 数値の最小値です。 |
max | number | 数値の最大値です。 |
error_message | 上記すべて | 値が検証に通らなかったときに表示される翻訳済みメッセージです。省略した場合は汎用メッセージが表示されます。 |
{
"title": "Customer Onboarding",
"languages": ["en"],
"default_language": "en",
"form_elements": [
{
"id": "tax_id",
"element_type": "short_text",
"label": { "en": "Tax ID" },
"is_required": true,
"validation": {
"pattern": "[A-Z]{2}[0-9]{9}",
"min_length": 11,
"max_length": 11,
"error_message": { "en": "Enter a valid Tax ID (2 letters followed by 9 digits)." }
}
}
]
}
questionnaire_idが含まれます。アンケートをワークフローに追加する際にquestionnaire_uuidとして使用するため、この値を保存してください。承認
お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権(なし、読み取り、書き込み)、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください: https://docs.didit.me/console/api-keys
ボディ
シンプルな直線型アンケートを作成します。APIはform_elementsを内部のアンケートグラフに変換します。
アンケートの内部名。
すべてのラベルに含まれる言語。enを含める必要があります。
["en"]
ユーザーに表示する正確な順序で並べた質問。分岐や条件付きフィールドはサポートされていません。
1Show child attributes
Show child attributes
デフォルト言語。languagesに含まれている必要があります。
"en"
このフィールドを省略すると、ワークフローですぐに使える公開済みのアンケートが作成されます。
draft, published レスポンス
アンケートが作成されました。レスポンスにはquestionnaire_idが含まれます。ワークフローや今後の更新・削除の呼び出しからこのアンケートを参照できるよう、保存してください。
GET、POST(作成)、PATCH(更新)の各エンドポイントから返されるアンケートの完全な詳細。
アンケートの一意の識別子。ワークフローからアンケートを参照する場合や、以降の更新・削除リクエストでこのIDを使用します。
start_nodeとnodesマップを含むグラフ構造。
セクションごとにまとめられたアンケートの内容(グラフから導出)。
同じアンケートのすべてのバージョンをまとめる不変の識別子。
draft, published アンケートをその場で編集できる場合(ドラフトバージョン)はtrue。