curl --request POST \
--url https://api.gominerva.com/idv/v1/workflows \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"steps": [
{
"step_id": "<string>",
"required": true,
"title": "<string>",
"config": {
"accepted_id_types": [],
"custom_id_types": [
{
"id_type": "<string>",
"label": "<string>",
"description": "<string>"
}
],
"sides": "auto",
"questions": [
{
"question_id": "<string>",
"label": "<string>",
"required": true,
"options": [
{
"value": "<string>",
"label": "<string>"
}
]
}
],
"documents": [
{
"document_id": "<string>",
"label": "<string>",
"description": "<string>",
"accepted_content_types": [],
"required": true
}
]
}
}
],
"description": "<string>",
"theme_id": "<string>",
"is_default": true,
"retention_days": 60,
"assessment_prompt_instructions": "<string>",
"privacy_contact_email": "jsmith@example.com",
"profile_update_enabled": true,
"flag_settings": {},
"revision": 123,
"supported_features": [],
"biometrics_retention_days": 90,
"id_images_retention_days": 365,
"documents_retention_days": 1825,
"pii_retention_days": 2555
}
'import requests
url = "https://api.gominerva.com/idv/v1/workflows"
payload = {
"name": "<string>",
"steps": [
{
"step_id": "<string>",
"required": True,
"title": "<string>",
"config": {
"accepted_id_types": [],
"custom_id_types": [
{
"id_type": "<string>",
"label": "<string>",
"description": "<string>"
}
],
"sides": "auto",
"questions": [
{
"question_id": "<string>",
"label": "<string>",
"required": True,
"options": [
{
"value": "<string>",
"label": "<string>"
}
]
}
],
"documents": [
{
"document_id": "<string>",
"label": "<string>",
"description": "<string>",
"accepted_content_types": [],
"required": True
}
]
}
}
],
"description": "<string>",
"theme_id": "<string>",
"is_default": True,
"retention_days": 60,
"assessment_prompt_instructions": "<string>",
"privacy_contact_email": "jsmith@example.com",
"profile_update_enabled": True,
"flag_settings": {},
"revision": 123,
"supported_features": [],
"biometrics_retention_days": 90,
"id_images_retention_days": 365,
"documents_retention_days": 1825,
"pii_retention_days": 2555
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
steps: [
{
step_id: '<string>',
required: true,
title: '<string>',
config: {
accepted_id_types: [],
custom_id_types: [{id_type: '<string>', label: '<string>', description: '<string>'}],
sides: 'auto',
questions: [
{
question_id: '<string>',
label: '<string>',
required: true,
options: [{value: '<string>', label: '<string>'}]
}
],
documents: [
{
document_id: '<string>',
label: '<string>',
description: '<string>',
accepted_content_types: [],
required: true
}
]
}
}
],
description: '<string>',
theme_id: '<string>',
is_default: true,
retention_days: 60,
assessment_prompt_instructions: '<string>',
privacy_contact_email: 'jsmith@example.com',
profile_update_enabled: true,
flag_settings: {},
revision: 123,
supported_features: [],
biometrics_retention_days: 90,
id_images_retention_days: 365,
documents_retention_days: 1825,
pii_retention_days: 2555
})
};
fetch('https://api.gominerva.com/idv/v1/workflows', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gominerva.com/idv/v1/workflows",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'steps' => [
[
'step_id' => '<string>',
'required' => true,
'title' => '<string>',
'config' => [
'accepted_id_types' => [
],
'custom_id_types' => [
[
'id_type' => '<string>',
'label' => '<string>',
'description' => '<string>'
]
],
'sides' => 'auto',
'questions' => [
[
'question_id' => '<string>',
'label' => '<string>',
'required' => true,
'options' => [
[
'value' => '<string>',
'label' => '<string>'
]
]
]
],
'documents' => [
[
'document_id' => '<string>',
'label' => '<string>',
'description' => '<string>',
'accepted_content_types' => [
],
'required' => true
]
]
]
]
],
'description' => '<string>',
'theme_id' => '<string>',
'is_default' => true,
'retention_days' => 60,
'assessment_prompt_instructions' => '<string>',
'privacy_contact_email' => 'jsmith@example.com',
'profile_update_enabled' => true,
'flag_settings' => [
],
'revision' => 123,
'supported_features' => [
],
'biometrics_retention_days' => 90,
'id_images_retention_days' => 365,
'documents_retention_days' => 1825,
'pii_retention_days' => 2555
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gominerva.com/idv/v1/workflows"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"steps\": [\n {\n \"step_id\": \"<string>\",\n \"required\": true,\n \"title\": \"<string>\",\n \"config\": {\n \"accepted_id_types\": [],\n \"custom_id_types\": [\n {\n \"id_type\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"sides\": \"auto\",\n \"questions\": [\n {\n \"question_id\": \"<string>\",\n \"label\": \"<string>\",\n \"required\": true,\n \"options\": [\n {\n \"value\": \"<string>\",\n \"label\": \"<string>\"\n }\n ]\n }\n ],\n \"documents\": [\n {\n \"document_id\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\",\n \"accepted_content_types\": [],\n \"required\": true\n }\n ]\n }\n }\n ],\n \"description\": \"<string>\",\n \"theme_id\": \"<string>\",\n \"is_default\": true,\n \"retention_days\": 60,\n \"assessment_prompt_instructions\": \"<string>\",\n \"privacy_contact_email\": \"jsmith@example.com\",\n \"profile_update_enabled\": true,\n \"flag_settings\": {},\n \"revision\": 123,\n \"supported_features\": [],\n \"biometrics_retention_days\": 90,\n \"id_images_retention_days\": 365,\n \"documents_retention_days\": 1825,\n \"pii_retention_days\": 2555\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gominerva.com/idv/v1/workflows")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"steps\": [\n {\n \"step_id\": \"<string>\",\n \"required\": true,\n \"title\": \"<string>\",\n \"config\": {\n \"accepted_id_types\": [],\n \"custom_id_types\": [\n {\n \"id_type\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"sides\": \"auto\",\n \"questions\": [\n {\n \"question_id\": \"<string>\",\n \"label\": \"<string>\",\n \"required\": true,\n \"options\": [\n {\n \"value\": \"<string>\",\n \"label\": \"<string>\"\n }\n ]\n }\n ],\n \"documents\": [\n {\n \"document_id\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\",\n \"accepted_content_types\": [],\n \"required\": true\n }\n ]\n }\n }\n ],\n \"description\": \"<string>\",\n \"theme_id\": \"<string>\",\n \"is_default\": true,\n \"retention_days\": 60,\n \"assessment_prompt_instructions\": \"<string>\",\n \"privacy_contact_email\": \"jsmith@example.com\",\n \"profile_update_enabled\": true,\n \"flag_settings\": {},\n \"revision\": 123,\n \"supported_features\": [],\n \"biometrics_retention_days\": 90,\n \"id_images_retention_days\": 365,\n \"documents_retention_days\": 1825,\n \"pii_retention_days\": 2555\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gominerva.com/idv/v1/workflows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"steps\": [\n {\n \"step_id\": \"<string>\",\n \"required\": true,\n \"title\": \"<string>\",\n \"config\": {\n \"accepted_id_types\": [],\n \"custom_id_types\": [\n {\n \"id_type\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"sides\": \"auto\",\n \"questions\": [\n {\n \"question_id\": \"<string>\",\n \"label\": \"<string>\",\n \"required\": true,\n \"options\": [\n {\n \"value\": \"<string>\",\n \"label\": \"<string>\"\n }\n ]\n }\n ],\n \"documents\": [\n {\n \"document_id\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\",\n \"accepted_content_types\": [],\n \"required\": true\n }\n ]\n }\n }\n ],\n \"description\": \"<string>\",\n \"theme_id\": \"<string>\",\n \"is_default\": true,\n \"retention_days\": 60,\n \"assessment_prompt_instructions\": \"<string>\",\n \"privacy_contact_email\": \"jsmith@example.com\",\n \"profile_update_enabled\": true,\n \"flag_settings\": {},\n \"revision\": 123,\n \"supported_features\": [],\n \"biometrics_retention_days\": 90,\n \"id_images_retention_days\": 365,\n \"documents_retention_days\": 1825,\n \"pii_retention_days\": 2555\n}"
response = http.request(request)
puts response.read_body{
"data": {
"workflow_id": "<string>",
"tenant_id": "<string>",
"workspace_id": "<string>",
"name": "<string>",
"profile_kind": "individual",
"steps": [
{
"step_id": "<string>",
"type": "liveness",
"required": true,
"title": "<string>",
"config": {
"accepted_id_types": [
"driver_license"
],
"custom_id_types": [
{
"id_type": "<string>",
"label": "<string>",
"sides": "one_sided",
"description": "<string>"
}
],
"sides": "auto",
"questions": [
{
"question_id": "<string>",
"label": "<string>",
"type": "text",
"required": true,
"required_when": {
"question_id": "<string>",
"equals": true
},
"visible_when": {
"question_id": "<string>",
"equals": true
},
"options": [
{
"value": "<string>",
"label": "<string>"
}
]
}
],
"documents": [
{
"document_id": "<string>",
"label": "<string>",
"description": "<string>",
"accepted_content_types": [
"application/pdf"
],
"required": true
}
]
}
}
],
"status": "draft",
"theme_id": "<string>",
"is_default": true,
"retention_days": 60,
"biometrics_retention_days": 90,
"id_images_retention_days": 365,
"documents_retention_days": 1825,
"pii_retention_days": 2555,
"assessment_prompt_instructions": "<string>",
"privacy_contact_email": "jsmith@example.com",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"revision": 2,
"description": "<string>",
"profile_update_enabled": true,
"flag_settings": {}
}
}{
"error": {
"code": "idv_session_not_found",
"message": "<string>"
}
}{
"error": {
"code": "idv_session_not_found",
"message": "<string>"
}
}{
"error": {
"code": "idv_session_not_found",
"message": "<string>"
}
}Create a workflow
Steps are validated with the same validator as create-session inline steps. theme_id must reference a non-archived theme in the caller’s scope (400 idv_theme_not_found / idv_theme_archived); null/absent = use the workspace default theme. status defaults to draft; “active” creates-and-activates (“archived” is rejected). is_default: true runs the atomic per-scope default swap after insert.
curl --request POST \
--url https://api.gominerva.com/idv/v1/workflows \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"steps": [
{
"step_id": "<string>",
"required": true,
"title": "<string>",
"config": {
"accepted_id_types": [],
"custom_id_types": [
{
"id_type": "<string>",
"label": "<string>",
"description": "<string>"
}
],
"sides": "auto",
"questions": [
{
"question_id": "<string>",
"label": "<string>",
"required": true,
"options": [
{
"value": "<string>",
"label": "<string>"
}
]
}
],
"documents": [
{
"document_id": "<string>",
"label": "<string>",
"description": "<string>",
"accepted_content_types": [],
"required": true
}
]
}
}
],
"description": "<string>",
"theme_id": "<string>",
"is_default": true,
"retention_days": 60,
"assessment_prompt_instructions": "<string>",
"privacy_contact_email": "jsmith@example.com",
"profile_update_enabled": true,
"flag_settings": {},
"revision": 123,
"supported_features": [],
"biometrics_retention_days": 90,
"id_images_retention_days": 365,
"documents_retention_days": 1825,
"pii_retention_days": 2555
}
'import requests
url = "https://api.gominerva.com/idv/v1/workflows"
payload = {
"name": "<string>",
"steps": [
{
"step_id": "<string>",
"required": True,
"title": "<string>",
"config": {
"accepted_id_types": [],
"custom_id_types": [
{
"id_type": "<string>",
"label": "<string>",
"description": "<string>"
}
],
"sides": "auto",
"questions": [
{
"question_id": "<string>",
"label": "<string>",
"required": True,
"options": [
{
"value": "<string>",
"label": "<string>"
}
]
}
],
"documents": [
{
"document_id": "<string>",
"label": "<string>",
"description": "<string>",
"accepted_content_types": [],
"required": True
}
]
}
}
],
"description": "<string>",
"theme_id": "<string>",
"is_default": True,
"retention_days": 60,
"assessment_prompt_instructions": "<string>",
"privacy_contact_email": "jsmith@example.com",
"profile_update_enabled": True,
"flag_settings": {},
"revision": 123,
"supported_features": [],
"biometrics_retention_days": 90,
"id_images_retention_days": 365,
"documents_retention_days": 1825,
"pii_retention_days": 2555
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
steps: [
{
step_id: '<string>',
required: true,
title: '<string>',
config: {
accepted_id_types: [],
custom_id_types: [{id_type: '<string>', label: '<string>', description: '<string>'}],
sides: 'auto',
questions: [
{
question_id: '<string>',
label: '<string>',
required: true,
options: [{value: '<string>', label: '<string>'}]
}
],
documents: [
{
document_id: '<string>',
label: '<string>',
description: '<string>',
accepted_content_types: [],
required: true
}
]
}
}
],
description: '<string>',
theme_id: '<string>',
is_default: true,
retention_days: 60,
assessment_prompt_instructions: '<string>',
privacy_contact_email: 'jsmith@example.com',
profile_update_enabled: true,
flag_settings: {},
revision: 123,
supported_features: [],
biometrics_retention_days: 90,
id_images_retention_days: 365,
documents_retention_days: 1825,
pii_retention_days: 2555
})
};
fetch('https://api.gominerva.com/idv/v1/workflows', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gominerva.com/idv/v1/workflows",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'steps' => [
[
'step_id' => '<string>',
'required' => true,
'title' => '<string>',
'config' => [
'accepted_id_types' => [
],
'custom_id_types' => [
[
'id_type' => '<string>',
'label' => '<string>',
'description' => '<string>'
]
],
'sides' => 'auto',
'questions' => [
[
'question_id' => '<string>',
'label' => '<string>',
'required' => true,
'options' => [
[
'value' => '<string>',
'label' => '<string>'
]
]
]
],
'documents' => [
[
'document_id' => '<string>',
'label' => '<string>',
'description' => '<string>',
'accepted_content_types' => [
],
'required' => true
]
]
]
]
],
'description' => '<string>',
'theme_id' => '<string>',
'is_default' => true,
'retention_days' => 60,
'assessment_prompt_instructions' => '<string>',
'privacy_contact_email' => 'jsmith@example.com',
'profile_update_enabled' => true,
'flag_settings' => [
],
'revision' => 123,
'supported_features' => [
],
'biometrics_retention_days' => 90,
'id_images_retention_days' => 365,
'documents_retention_days' => 1825,
'pii_retention_days' => 2555
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gominerva.com/idv/v1/workflows"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"steps\": [\n {\n \"step_id\": \"<string>\",\n \"required\": true,\n \"title\": \"<string>\",\n \"config\": {\n \"accepted_id_types\": [],\n \"custom_id_types\": [\n {\n \"id_type\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"sides\": \"auto\",\n \"questions\": [\n {\n \"question_id\": \"<string>\",\n \"label\": \"<string>\",\n \"required\": true,\n \"options\": [\n {\n \"value\": \"<string>\",\n \"label\": \"<string>\"\n }\n ]\n }\n ],\n \"documents\": [\n {\n \"document_id\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\",\n \"accepted_content_types\": [],\n \"required\": true\n }\n ]\n }\n }\n ],\n \"description\": \"<string>\",\n \"theme_id\": \"<string>\",\n \"is_default\": true,\n \"retention_days\": 60,\n \"assessment_prompt_instructions\": \"<string>\",\n \"privacy_contact_email\": \"jsmith@example.com\",\n \"profile_update_enabled\": true,\n \"flag_settings\": {},\n \"revision\": 123,\n \"supported_features\": [],\n \"biometrics_retention_days\": 90,\n \"id_images_retention_days\": 365,\n \"documents_retention_days\": 1825,\n \"pii_retention_days\": 2555\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gominerva.com/idv/v1/workflows")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"steps\": [\n {\n \"step_id\": \"<string>\",\n \"required\": true,\n \"title\": \"<string>\",\n \"config\": {\n \"accepted_id_types\": [],\n \"custom_id_types\": [\n {\n \"id_type\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"sides\": \"auto\",\n \"questions\": [\n {\n \"question_id\": \"<string>\",\n \"label\": \"<string>\",\n \"required\": true,\n \"options\": [\n {\n \"value\": \"<string>\",\n \"label\": \"<string>\"\n }\n ]\n }\n ],\n \"documents\": [\n {\n \"document_id\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\",\n \"accepted_content_types\": [],\n \"required\": true\n }\n ]\n }\n }\n ],\n \"description\": \"<string>\",\n \"theme_id\": \"<string>\",\n \"is_default\": true,\n \"retention_days\": 60,\n \"assessment_prompt_instructions\": \"<string>\",\n \"privacy_contact_email\": \"jsmith@example.com\",\n \"profile_update_enabled\": true,\n \"flag_settings\": {},\n \"revision\": 123,\n \"supported_features\": [],\n \"biometrics_retention_days\": 90,\n \"id_images_retention_days\": 365,\n \"documents_retention_days\": 1825,\n \"pii_retention_days\": 2555\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gominerva.com/idv/v1/workflows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"steps\": [\n {\n \"step_id\": \"<string>\",\n \"required\": true,\n \"title\": \"<string>\",\n \"config\": {\n \"accepted_id_types\": [],\n \"custom_id_types\": [\n {\n \"id_type\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\"\n }\n ],\n \"sides\": \"auto\",\n \"questions\": [\n {\n \"question_id\": \"<string>\",\n \"label\": \"<string>\",\n \"required\": true,\n \"options\": [\n {\n \"value\": \"<string>\",\n \"label\": \"<string>\"\n }\n ]\n }\n ],\n \"documents\": [\n {\n \"document_id\": \"<string>\",\n \"label\": \"<string>\",\n \"description\": \"<string>\",\n \"accepted_content_types\": [],\n \"required\": true\n }\n ]\n }\n }\n ],\n \"description\": \"<string>\",\n \"theme_id\": \"<string>\",\n \"is_default\": true,\n \"retention_days\": 60,\n \"assessment_prompt_instructions\": \"<string>\",\n \"privacy_contact_email\": \"jsmith@example.com\",\n \"profile_update_enabled\": true,\n \"flag_settings\": {},\n \"revision\": 123,\n \"supported_features\": [],\n \"biometrics_retention_days\": 90,\n \"id_images_retention_days\": 365,\n \"documents_retention_days\": 1825,\n \"pii_retention_days\": 2555\n}"
response = http.request(request)
puts response.read_body{
"data": {
"workflow_id": "<string>",
"tenant_id": "<string>",
"workspace_id": "<string>",
"name": "<string>",
"profile_kind": "individual",
"steps": [
{
"step_id": "<string>",
"type": "liveness",
"required": true,
"title": "<string>",
"config": {
"accepted_id_types": [
"driver_license"
],
"custom_id_types": [
{
"id_type": "<string>",
"label": "<string>",
"sides": "one_sided",
"description": "<string>"
}
],
"sides": "auto",
"questions": [
{
"question_id": "<string>",
"label": "<string>",
"type": "text",
"required": true,
"required_when": {
"question_id": "<string>",
"equals": true
},
"visible_when": {
"question_id": "<string>",
"equals": true
},
"options": [
{
"value": "<string>",
"label": "<string>"
}
]
}
],
"documents": [
{
"document_id": "<string>",
"label": "<string>",
"description": "<string>",
"accepted_content_types": [
"application/pdf"
],
"required": true
}
]
}
}
],
"status": "draft",
"theme_id": "<string>",
"is_default": true,
"retention_days": 60,
"biometrics_retention_days": 90,
"id_images_retention_days": 365,
"documents_retention_days": 1825,
"pii_retention_days": 2555,
"assessment_prompt_instructions": "<string>",
"privacy_contact_email": "jsmith@example.com",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"revision": 2,
"description": "<string>",
"profile_update_enabled": true,
"flag_settings": {}
}
}{
"error": {
"code": "idv_session_not_found",
"message": "<string>"
}
}{
"error": {
"code": "idv_session_not_found",
"message": "<string>"
}
}{
"error": {
"code": "idv_session_not_found",
"message": "<string>"
}
}Authorizations
Authorization: Api-Key <application_api_key> (legacy X-Api-Key also accepted).
Body
1 - 1201 - 10 elementsShow child attributes
Show child attributes
500Profile-kind scope (KYB). Absent -> both. A scoped workflow only mints sessions for a matching profile (400 idv_workflow_profile_kind_mismatch otherwise).
individual, organization, both Must reference a non-archived theme in the caller's scope (400 idv_theme_not_found / idv_theme_archived otherwise). null/absent = use the workspace default theme.
^idvt_[0-9a-f]{24}$Create only: draft (default) or active; archived is rejected. PUT rejects it (use /activate and /archive).
draft, active Create only (PUT rejects it; use POST .../default).
DEPRECATED single-horizon alias for pii_retention_days. Supplying only this field is understood as asking for all four components at this value: the control it belonged to was documented as governing both sensitive fields and capture artifacts, so fanning it out cannot retain less than the caller intended. This is a FULL REPLACE: a component omitted from the request is NOT preserved from the stored workflow. It resolves to retention_days if that is supplied, and to its own default otherwise, so an editor must send all four explicitly to avoid resetting a component it did not mean to change. Omitting every retention field is not the legacy 60: each component takes its own default (biometrics 90, id images 365, documents 1825, PII 2555). Values outside 30..365 are rejected.
30 <= x <= 365Additional workflow-admin instructions for the review agent. Use for stricter or wider flagging behavior before deterministic controls exist; empty/omitted means no extra guidance.
4000Required before the workflow can be activated or created as active.
254Automatic profile-write opt-in (default false).
Sparse per-code review overrides. A code ABSENT from the map is ENABLED (default-true). Keys are validated against the known configurable fraud-flag taxonomy: an unknown key -> 400 idv_flag_code_unknown. Deterministic service-enforced policy codes such as id_type_not_allowed cannot be disabled and return idv_flag_code_not_configurable.
Show child attributes
Show child attributes
Replace only: the CAS expectation (or use If-Match).
Request-only editor capability assertions. Required when creating or replacing a workflow that contains a listed conditional question feature, and when replacing a workflow that already contains one. retention_schedules_v1 asserts the client renders and preserves all four per-component retention schedules; it is required on REPLACE when the stored schedule is not representable by the deprecated retention_days alias (i.e. not uniform and inside its 30..365 clamp) AND the write changes it. Create is never gated. This prevents older full-replace editors from silently removing rules they do not understand or shortening a schedule they cannot render.
16conditional_question_requirements_v1, conditional_question_visibility_v1, retention_schedules_v1 Retention of liveness captures AND the cross-session biometric templates derived from them, in days. Copied onto sessions at create, so later workflow edits affect only future sessions. Capped at three years by the most permissive biometric regimes; Quebec's one-year ceiling is the tightest.
30 <= x <= 1095Retention of identity-document captures (id_front / id_back) in days.
30 <= x <= 2555Retention of consumer-uploaded supporting documents in days.
30 <= x <= 2555Retention of the sensitive fields on a session (subject reference, questionnaire answers, capture and invite credentials, OCR fields, profile-mismatch details) in days. This is what the deprecated retention_days field has always governed.
30 <= x <= 2555Response
Created
Tenant/workspace-scoped, versioned workflow object. (Distinct from the legacy Workflow PRESET enum above.) The cycle-2 inline branding block is REMOVED; presentation lives on Theme objects referenced by theme_id.
Show child attributes
Show child attributes