curl -X GET 'https://verification.didit.me/v3/questionnaires/11111111-2222-3333-4444-555555555555/' \
-H 'x-api-key: YOUR_API_KEY'import requests
resp = requests.get(
f"https://verification.didit.me/v3/questionnaires/{questionnaire_uuid}/",
headers={"x-api-key": "YOUR_API_KEY"},
timeout=10,
)
resp.raise_for_status()
questionnaire = resp.json()
print(questionnaire["title"], questionnaire["status"])const res = await fetch(`https://verification.didit.me/v3/questionnaires/${questionnaireUuid}/`, {
headers: { 'x-api-key': 'YOUR_API_KEY' },
});
if (!res.ok) throw new Error(`Didit ${res.status}`);
const questionnaire = await res.json();
console.log(questionnaire.title, questionnaire.status);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/questionnaires/{questionnaire_uuid}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/questionnaires/{questionnaire_uuid}/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://verification.didit.me/v3/questionnaires/{questionnaire_uuid}/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/questionnaires/{questionnaire_uuid}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"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": [
{
"title": {},
"description": {},
"items": [
{
"uuid": "11111111-2222-3333-4444-666666666666",
"value": "occupation",
"element_type": "SHORT_TEXT",
"is_required": true,
"title": {
"en": "What is your occupation?"
}
}
]
}
],
"questionnaire_group_id": "11111111-2222-3333-4444-555555555555",
"version": 1,
"status": "published",
"published_at": "2026-04-23T10:00:00Z",
"is_editable": false
}{
"detail": "You do not have permission to perform this action."
}{
"detail": "Not found."
}Get Questionnaire
Fetch full questionnaire detail for one version by questionnaire_uuid: title, languages, canonical graph, derived sections, and version metadata.
curl -X GET 'https://verification.didit.me/v3/questionnaires/11111111-2222-3333-4444-555555555555/' \
-H 'x-api-key: YOUR_API_KEY'import requests
resp = requests.get(
f"https://verification.didit.me/v3/questionnaires/{questionnaire_uuid}/",
headers={"x-api-key": "YOUR_API_KEY"},
timeout=10,
)
resp.raise_for_status()
questionnaire = resp.json()
print(questionnaire["title"], questionnaire["status"])const res = await fetch(`https://verification.didit.me/v3/questionnaires/${questionnaireUuid}/`, {
headers: { 'x-api-key': 'YOUR_API_KEY' },
});
if (!res.ok) throw new Error(`Didit ${res.status}`);
const questionnaire = await res.json();
console.log(questionnaire.title, questionnaire.status);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/questionnaires/{questionnaire_uuid}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/questionnaires/{questionnaire_uuid}/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://verification.didit.me/v3/questionnaires/{questionnaire_uuid}/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/questionnaires/{questionnaire_uuid}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"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": [
{
"title": {},
"description": {},
"items": [
{
"uuid": "11111111-2222-3333-4444-666666666666",
"value": "occupation",
"element_type": "SHORT_TEXT",
"is_required": true,
"title": {
"en": "What is your occupation?"
}
}
]
}
],
"questionnaire_group_id": "11111111-2222-3333-4444-555555555555",
"version": 1,
"status": "published",
"published_at": "2026-04-23T10:00:00Z",
"is_editable": false
}{
"detail": "You do not have permission to perform this action."
}{
"detail": "Not found."
}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
Per-version UUID of the questionnaire (the uuid value returned by the list endpoint, also returned as questionnaire_id on detail endpoints).
Response
Full questionnaire detail including the canonical graph, the derived sections view, version metadata, and is_editable.
Full questionnaire detail returned from GET, POST (create) and PATCH (update) endpoints.
Unique identifier of the questionnaire. Use this id when referencing the questionnaire from a workflow or in subsequent update/delete requests.
Graph structure with start_node and nodes map.
Questionnaire content grouped into sections (derived from the graph).
Stable identifier that groups all versions of the same questionnaire.
draft, published True when the questionnaire can still be edited in place (draft versions).